Skip to content

Commit 5a37245

Browse files
committed
add cancel button on AnvilPrompt
1 parent 2a89c42 commit 5a37245

2 files changed

Lines changed: 82 additions & 47 deletions

File tree

src/main/java/com/cyr1en/commandprompter/config/PromptConfig.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ public record PromptConfig(
152152
"Enable-Title - Show the first line of the prompt",
153153
"(if with {br}) as title of Anvil GUI",
154154
"",
155+
"Enable-Cancel-Item - Show a cancel item on the ",
156+
"right slot input slot.",
157+
"",
155158
"Item - The Left item to place on the Anvil GUI",
156159
"",
157160
"Enchanted - Do you want the item enchanted?",
@@ -178,6 +181,10 @@ public record PromptConfig(
178181
@NodeDefault("")
179182
String promptMessage,
180183

184+
@ConfigNode
185+
@NodeName("AnvilGUI.Enable-Cancel-Item")
186+
@NodeDefault("false")
187+
boolean enableCancelItem,
181188

182189
@ConfigNode
183190
@NodeName("AnvilGUI.Item.Material")
@@ -220,6 +227,31 @@ public record PromptConfig(
220227
@NodeDefault("false")
221228
boolean resultItemAnvilEnchanted,
222229

230+
@ConfigNode
231+
@NodeName("AnvilGUI.CancelItem.Material")
232+
@NodeDefault("Barrier")
233+
String anvilCancelItem,
234+
235+
@ConfigNode
236+
@NodeName("AnvilGUI.CancelItem.HideTooltips")
237+
@NodeDefault("false")
238+
boolean cancelItemHideTooltips,
239+
240+
@ConfigNode
241+
@NodeName("AnvilGUI.CancelItem.Custom-Model-Data")
242+
@NodeDefault("0")
243+
int cancelItemCustomModelData,
244+
245+
@ConfigNode
246+
@NodeName("AnvilGUI.CancelItem.Enchanted")
247+
@NodeDefault("false")
248+
boolean cancelItemAnvilEnchanted,
249+
250+
@ConfigNode
251+
@NodeName("AnvilGUI.CancelItem.HoverText")
252+
@NodeDefault("&cClick to Cancel")
253+
String cancelItemHoverText,
254+
223255
// ============================== Text Prompt ==============================
224256
@ConfigNode
225257
@NodeName("TextPrompt.Clickable-Cancel")

src/main/java/com/cyr1en/commandprompter/prompt/prompts/AnvilPrompt.java

Lines changed: 50 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,20 @@
4747
public class AnvilPrompt extends AbstractPrompt {
4848

4949
public AnvilPrompt(CommandPrompter plugin, PromptContext context,
50-
String prompt, List<PromptParser.PromptArgument> args) {
50+
String prompt, List<PromptParser.PromptArgument> args) {
5151
super(plugin, context, prompt, args);
5252
}
5353

5454
@Override
5555
public void sendPrompt() {
5656
List<String> parts = Arrays.asList(getPrompt().split("\\{br}"));
57-
var item = makeItem(parts);
57+
var item = makeAnvilItem(parts);
5858
var resultItem = makeResultItem(parts);
59-
makeAnvil(parts, item, resultItem).open((Player) getContext().getSender());
59+
var cancelItem = makeCancelItem(parts);
60+
makeAnvil(parts, item, resultItem, cancelItem).open((Player) getContext().getSender());
6061
}
6162

62-
private AnvilGUI.Builder makeAnvil(List<String> parts, ItemStack item, ItemStack resultItem) {
63+
private AnvilGUI.Builder makeAnvil(List<String> parts, ItemStack item, ItemStack resultItem, ItemStack cancelItem) {
6364
var isComplete = new AtomicBoolean(false);
6465
var builder = getBuilder(isComplete);
6566
builder.onClose(p -> {
@@ -77,6 +78,9 @@ private AnvilGUI.Builder makeAnvil(List<String> parts, ItemStack item, ItemStack
7778
title = title.isEmpty() ? color(parts.get(0)) : color(title);
7879
builder.title(title);
7980
}
81+
82+
if (getPlugin().getPromptConfig().enableCancelItem())
83+
builder.itemRight(cancelItem);
8084
builder.itemLeft(item);
8185
builder.itemOutput(resultItem);
8286
builder.plugin(getPlugin());
@@ -87,6 +91,12 @@ private AnvilGUI.Builder makeAnvil(List<String> parts, ItemStack item, ItemStack
8791
private AnvilGUI.Builder getBuilder(AtomicBoolean isComplete) {
8892
var builder = new AnvilGUI.Builder();
8993
builder.onClick((slot, stateSnapshot) -> {
94+
var cancelEnabled = getPlugin().getPromptConfig().enableCancelItem();
95+
if (slot == AnvilGUI.Slot.INPUT_RIGHT && cancelEnabled) {
96+
getPromptManager().cancel(stateSnapshot.getPlayer());
97+
return Collections.singletonList(AnvilGUI.ResponseAction.close());
98+
}
99+
90100
if (slot != AnvilGUI.Slot.OUTPUT)
91101
return Collections.emptyList();
92102

@@ -109,66 +119,59 @@ private AnvilGUI.Builder getBuilder(AtomicBoolean isComplete) {
109119
return builder;
110120
}
111121

112-
private ItemStack makeItem(List<String> parts) {
113-
var item = new ItemStack(Util.getCheckedMaterial(getPlugin().getPromptConfig().anvilItem(), Material.PAPER));
122+
private ItemStack makeItem(String prefix, List<String> parts, String customTitle) {
123+
var config = getPlugin().getPromptConfig().rawConfig();
124+
var material = config.getString(prefix + ".Material", "PAPER");
125+
var enchanted = config.getBoolean(prefix + ".Enchanted", false);
126+
var customModelData = config.getInt(prefix + ".Custom-Model-Data", 0);
127+
var hideTooltips = config.getBoolean(prefix + ".HideTooltips", false);
128+
129+
var item = new ItemStack(Util.getCheckedMaterial(material, Material.PAPER));
114130
var meta = item.getItemMeta();
115131
getPlugin().getPluginLogger().debug("ItemMeta: " + meta);
116-
if (getPlugin().getPromptConfig().itemAnvilEnchanted()) {
132+
133+
if (enchanted) {
117134
Objects.requireNonNull(meta).addEnchant(Enchantment.LURE, 1, true);
118135
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
119136
}
137+
120138
Objects.requireNonNull(meta).addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
121-
meta.setDisplayName(parts.get(0));
139+
if (customTitle != null)
140+
meta.setDisplayName(customTitle);
141+
else {
142+
meta.setDisplayName(parts.get(0));
143+
144+
meta.setDisplayName(parts.get(0));
122145

123-
if (parts.size() > 1)
124-
meta.setLore(parts.subList(1, parts.size()).stream().map(this::color).toList());
146+
if (parts.size() > 1)
147+
meta.setLore(parts.subList(1, parts.size()).stream().map(this::color).toList());
125148

126-
// set custom model data
127-
var integerData = getPlugin().getPromptConfig().itemCustomModelData();
128-
if (integerData != 0)
129-
meta.setCustomModelData(integerData);
149+
if (customModelData != 0)
150+
meta.setCustomModelData(customModelData);
130151

131-
// set hide tool tips
132-
if (ServerUtil.isAtOrAbove("1.21.2")){
133-
boolean hiddenTooltips = getPlugin().getPromptConfig().itemHideTooltips();
134-
meta.setHideTooltip(hiddenTooltips);
152+
if (ServerUtil.isAtOrAbove("1.21.2")) {
153+
meta.setHideTooltip(hideTooltips);
154+
}
135155
}
136156

137157
item.setItemMeta(meta);
138158
return item;
139159
}
140160

141-
private ItemStack makeResultItem(List<String> parts) {
142-
var item = new ItemStack(Util.getCheckedMaterial(getPlugin().getPromptConfig().anvilResultItem(), Material.PAPER));
143-
var meta = item.getItemMeta();
144-
getPlugin().getPluginLogger().debug("ResultItemMeta: " + meta);
145-
146-
// set enchantment glow
147-
if (getPlugin().getPromptConfig().resultItemAnvilEnchanted()) {
148-
Objects.requireNonNull(meta).addEnchant(Enchantment.LURE, 1, true);
149-
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
150-
}
151-
152-
// hide attributes
153-
Objects.requireNonNull(meta).addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
154-
155-
meta.setDisplayName(parts.get(0));
156-
157-
if (parts.size() > 1)
158-
meta.setLore(parts.subList(1, parts.size()).stream().map(this::color).toList());
161+
private ItemStack makeItem(String prefix, List<String> parts) {
162+
return makeItem("AnvilGUI.Item", parts, null);
163+
}
159164

160-
// set custom model data
161-
var integerData = getPlugin().getPromptConfig().resultItemCustomModelData();
162-
if (integerData != 0)
163-
meta.setCustomModelData(integerData);
165+
private ItemStack makeAnvilItem(List<String> parts) {
166+
return makeItem("AnvilGUI.Item", parts);
167+
}
164168

165-
// set hide tool tips
166-
if (ServerUtil.isAtOrAbove("1.21.2")){
167-
boolean hiddenTooltips = getPlugin().getPromptConfig().resultItemHideTooltips();
168-
meta.setHideTooltip(hiddenTooltips);
169-
}
169+
private ItemStack makeResultItem(List<String> parts) {
170+
return makeItem("AnvilGUI.ResultItem", parts);
171+
}
170172

171-
item.setItemMeta(meta);
172-
return item;
173+
private ItemStack makeCancelItem(List<String> parts) {
174+
var cancelText = getPlugin().getPromptConfig().cancelItemHoverText();
175+
return makeItem("AnvilGUI.CancelItem", parts, Util.color(cancelText));
173176
}
174177
}

0 commit comments

Comments
 (0)