4747public 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