mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
Add select item gui & moved confirm gui.
This commit is contained in:
parent
6ea9494afd
commit
050c40bd2a
8 changed files with 208 additions and 62 deletions
|
|
@ -0,0 +1,42 @@
|
||||||
|
package xyz.alexcrea.cuanvil.gui.config.ask;
|
||||||
|
|
||||||
|
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||||
|
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
||||||
|
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
|
||||||
|
import com.github.stefvanschie.inventoryframework.pane.PatternPane;
|
||||||
|
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
|
||||||
|
import io.delilaheve.CustomAnvil;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
|
||||||
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
|
||||||
|
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
|
||||||
|
|
||||||
|
public abstract class AbstractAskGui extends ChestGui {
|
||||||
|
|
||||||
|
protected PatternPane pane;
|
||||||
|
AbstractAskGui(int rows, @NotNull String name,
|
||||||
|
Gui backOnCancel){
|
||||||
|
super(rows, name, CustomAnvil.instance);
|
||||||
|
|
||||||
|
Pattern pattern = getGuiPattern();
|
||||||
|
this.pane = new PatternPane(0, 0, pattern.getLength(), pattern.getHeight(), pattern);
|
||||||
|
addPane(this.pane);
|
||||||
|
|
||||||
|
this.pane.bindItem('0', GuiGlobalItems.backgroundItem());
|
||||||
|
this.pane.bindItem('B', new GuiItem(GuiSharedConstant.CANCEL_ITEM, GuiGlobalActions.openGuiAction(backOnCancel), CustomAnvil.instance));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to get the gui pattern.
|
||||||
|
* Reserved character are:
|
||||||
|
* <ul>
|
||||||
|
* <li><b>B</b>: "cancel" button.</li>
|
||||||
|
* <li><b>0</b>: default background item.</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @return The gui's pattern.
|
||||||
|
*/
|
||||||
|
protected abstract Pattern getGuiPattern();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
package xyz.alexcrea.cuanvil.gui.config;
|
package xyz.alexcrea.cuanvil.gui.config.ask;
|
||||||
|
|
||||||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||||
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
|
||||||
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
|
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
|
||||||
import com.github.stefvanschie.inventoryframework.pane.PatternPane;
|
|
||||||
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
|
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
|
||||||
import io.delilaheve.CustomAnvil;
|
import io.delilaheve.CustomAnvil;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
@ -12,50 +10,20 @@ import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
|
||||||
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
|
|
||||||
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
|
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class ConfirmActionGui extends ChestGui {
|
public class ConfirmActionGui extends AbstractAskGui {
|
||||||
|
|
||||||
private static final ItemStack CANCEL_ITEM;
|
|
||||||
private static final ItemStack CONFIRM_ITEM;
|
|
||||||
|
|
||||||
static {
|
|
||||||
CANCEL_ITEM = new ItemStack(Material.RED_TERRACOTTA);
|
|
||||||
ItemMeta meta = CANCEL_ITEM.getItemMeta();
|
|
||||||
meta.setDisplayName("\u00A7cCancel");
|
|
||||||
meta.setLore(Collections.singletonList("\u00A77Cancel current action and return to previous menu."));
|
|
||||||
CANCEL_ITEM.setItemMeta(meta);
|
|
||||||
|
|
||||||
CONFIRM_ITEM = new ItemStack(Material.GREEN_TERRACOTTA);
|
|
||||||
meta = CONFIRM_ITEM.getItemMeta();
|
|
||||||
meta.setDisplayName("\u00A7aConfirm");
|
|
||||||
meta.setLore(Arrays.asList("\u00A77Confirm current action.",
|
|
||||||
"\u00A74Cation: This action can't be canceled."));
|
|
||||||
CONFIRM_ITEM.setItemMeta(meta);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ConfirmActionGui(@NotNull String title, String actionDescription,
|
public ConfirmActionGui(@NotNull String title, String actionDescription,
|
||||||
Gui backOnCancel, Gui backOnConfirm, Supplier<Boolean> onConfirm) {
|
Gui backOnCancel, Gui backOnConfirm, Supplier<Boolean> onConfirm) {
|
||||||
super(3, title, CustomAnvil.instance);
|
super(3, title, backOnCancel);
|
||||||
|
|
||||||
Pattern pattern = new Pattern(
|
// Save item
|
||||||
GuiSharedConstant.EMPTY_GUI_FULL_LINE,
|
this.pane.bindItem('S', new GuiItem(GuiSharedConstant.CONFIRM_ITEM, event -> {
|
||||||
"00B0I0S00",
|
|
||||||
GuiSharedConstant.EMPTY_GUI_FULL_LINE
|
|
||||||
);
|
|
||||||
PatternPane pane = new PatternPane(0, 0, pattern.getLength(), pattern.getHeight(), pattern);
|
|
||||||
addPane(pane);
|
|
||||||
|
|
||||||
pane.bindItem('0', GuiGlobalItems.backgroundItem());
|
|
||||||
|
|
||||||
pane.bindItem('B', new GuiItem(CANCEL_ITEM, GuiGlobalActions.openGuiAction(backOnCancel), CustomAnvil.instance));
|
|
||||||
pane.bindItem('S', new GuiItem(CONFIRM_ITEM, event -> {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
HumanEntity player = event.getWhoClicked();
|
HumanEntity player = event.getWhoClicked();
|
||||||
|
|
||||||
|
|
@ -80,6 +48,7 @@ public class ConfirmActionGui extends ChestGui {
|
||||||
|
|
||||||
}, CustomAnvil.instance));
|
}, CustomAnvil.instance));
|
||||||
|
|
||||||
|
// Info item
|
||||||
ItemStack infoItem = new ItemStack(Material.PAPER);
|
ItemStack infoItem = new ItemStack(Material.PAPER);
|
||||||
ItemMeta infoMeta = infoItem.getItemMeta();
|
ItemMeta infoMeta = infoItem.getItemMeta();
|
||||||
|
|
||||||
|
|
@ -91,4 +60,13 @@ public class ConfirmActionGui extends ChestGui {
|
||||||
pane.bindItem('I', new GuiItem(infoItem, GuiGlobalActions.stayInPlace, CustomAnvil.instance));
|
pane.bindItem('I', new GuiItem(infoItem, GuiGlobalActions.stayInPlace, CustomAnvil.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Pattern getGuiPattern() {
|
||||||
|
return new Pattern(
|
||||||
|
GuiSharedConstant.EMPTY_GUI_FULL_LINE,
|
||||||
|
"00B0I0S00",
|
||||||
|
GuiSharedConstant.EMPTY_GUI_FULL_LINE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
package xyz.alexcrea.cuanvil.gui.config.ask;
|
||||||
|
|
||||||
|
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||||
|
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
|
||||||
|
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
|
||||||
|
import io.delilaheve.CustomAnvil;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
|
||||||
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
|
||||||
|
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class SelectItemTypeGui extends AbstractAskGui {
|
||||||
|
|
||||||
|
private ItemStack selectedItem;
|
||||||
|
public SelectItemTypeGui(@NotNull String title,
|
||||||
|
@NotNull String actionDescription,
|
||||||
|
@NotNull Gui backOnCancel,
|
||||||
|
@NotNull BiConsumer<ItemStack, HumanEntity> onSave,
|
||||||
|
boolean materialOnly) {
|
||||||
|
super(3, title, backOnCancel);
|
||||||
|
this.selectedItem = null;
|
||||||
|
|
||||||
|
// Save item
|
||||||
|
GuiItem confirmItem = new GuiItem(GuiSharedConstant.CONFIRM_ITEM, event -> {
|
||||||
|
event.setCancelled(true);
|
||||||
|
HumanEntity player = event.getWhoClicked();
|
||||||
|
|
||||||
|
if (!player.hasPermission(CustomAnvil.editConfigPermission)) {
|
||||||
|
player.closeInventory();
|
||||||
|
player.sendMessage(GuiGlobalActions.NO_EDIT_PERM);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
onSave.accept(this.selectedItem, player);
|
||||||
|
|
||||||
|
}, CustomAnvil.instance);
|
||||||
|
this.pane.bindItem('S', GuiGlobalItems.backgroundItem());
|
||||||
|
|
||||||
|
// Select item
|
||||||
|
ItemStack selectItem = setDisplayMeta(new ItemStack(Material.BARRIER), actionDescription);
|
||||||
|
|
||||||
|
AtomicReference<GuiItem> selectGuiItem = new AtomicReference<>();
|
||||||
|
selectGuiItem.set(new GuiItem(selectItem, event -> {
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
ItemStack cursor = event.getWhoClicked().getItemOnCursor();
|
||||||
|
if(cursor.getType().isAir()) return;
|
||||||
|
|
||||||
|
ItemStack finalItem;
|
||||||
|
if(materialOnly){
|
||||||
|
finalItem = setDisplayMeta(new ItemStack(cursor.getType()), actionDescription);
|
||||||
|
}else{
|
||||||
|
finalItem = cursor.clone();
|
||||||
|
}
|
||||||
|
this.selectedItem = finalItem.clone();
|
||||||
|
|
||||||
|
selectGuiItem.get().setItem(finalItem);
|
||||||
|
this.pane.bindItem('S', confirmItem);
|
||||||
|
|
||||||
|
update();
|
||||||
|
}, CustomAnvil.instance));
|
||||||
|
|
||||||
|
this.pane.bindItem('V', selectGuiItem.get());
|
||||||
|
|
||||||
|
// Temporary leave item
|
||||||
|
GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_TERRACOTTA, this);
|
||||||
|
|
||||||
|
this.pane.bindItem('s', temporaryLeave);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private ItemStack setDisplayMeta(ItemStack item, String actionDescription){
|
||||||
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
|
||||||
|
meta.setDisplayName("\u00A7ePlace an item here");
|
||||||
|
meta.setLore(Arrays.asList(actionDescription.split("\n")));
|
||||||
|
|
||||||
|
item.setItemMeta(meta);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Pattern getGuiPattern() {
|
||||||
|
return new Pattern(
|
||||||
|
GuiSharedConstant.EMPTY_GUI_FULL_LINE,
|
||||||
|
"0000V000s",
|
||||||
|
"B0000000S"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -11,7 +11,7 @@ import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.ConfirmActionGui;
|
import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.global.CustomRecipeConfigGui;
|
import xyz.alexcrea.cuanvil.gui.config.global.CustomRecipeConfigGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.settings.BoolSettingsGui;
|
import xyz.alexcrea.cuanvil.gui.config.settings.BoolSettingsGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
|
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup;
|
import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup;
|
||||||
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
|
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
|
||||||
import xyz.alexcrea.cuanvil.group.EnchantConflictManager;
|
import xyz.alexcrea.cuanvil.group.EnchantConflictManager;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.ConfirmActionGui;
|
|
||||||
import xyz.alexcrea.cuanvil.gui.config.SelectEnchantmentContainer;
|
import xyz.alexcrea.cuanvil.gui.config.SelectEnchantmentContainer;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer;
|
import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer;
|
||||||
|
import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.global.EnchantConflictGui;
|
import xyz.alexcrea.cuanvil.gui.config.global.EnchantConflictGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.settings.EnchantSelectSettingGui;
|
import xyz.alexcrea.cuanvil.gui.config.settings.EnchantSelectSettingGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui;
|
import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui;
|
||||||
|
|
|
||||||
|
|
@ -58,29 +58,8 @@ public class ItemSettingGui extends AbstractSettingGui {
|
||||||
public void prepareStaticItems(){
|
public void prepareStaticItems(){
|
||||||
prepareReturnToDefault();
|
prepareReturnToDefault();
|
||||||
|
|
||||||
ItemStack item = new ItemStack(Material.YELLOW_TERRACOTTA);
|
GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_TERRACOTTA, this);
|
||||||
ItemMeta meta = item.getItemMeta();
|
getPane().bindItem('s', temporaryLeave);
|
||||||
|
|
||||||
meta.setDisplayName("\u00A7eTemporary close this menu");
|
|
||||||
meta.setLore(Collections.singletonList("\u00A77Allow you to chose other item then return here."));
|
|
||||||
item.setItemMeta(meta);
|
|
||||||
GuiItem guiItem = new GuiItem(item, event -> {
|
|
||||||
event.setCancelled(true);
|
|
||||||
|
|
||||||
HumanEntity player = event.getWhoClicked();
|
|
||||||
|
|
||||||
CustomAnvil.Companion.getChatListener().setListenedCallback(player, (message) ->{
|
|
||||||
|
|
||||||
if(message == null) return;
|
|
||||||
show(player);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
player.sendMessage("\u00A7eWrite something in chat to return to the item config menu.");
|
|
||||||
player.closeInventory();
|
|
||||||
}, CustomAnvil.instance);
|
|
||||||
|
|
||||||
getPane().bindItem('s', guiItem);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
|
||||||
import com.github.stefvanschie.inventoryframework.pane.PatternPane;
|
import com.github.stefvanschie.inventoryframework.pane.PatternPane;
|
||||||
import io.delilaheve.CustomAnvil;
|
import io.delilaheve.CustomAnvil;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
@ -350,4 +351,29 @@ public class GuiGlobalItems {
|
||||||
return path.substring(indexOfDot + 1);
|
return path.substring(indexOfDot + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static GuiItem temporaryCloseGuiToSelectItem(Material itemMaterial, Gui openBack){
|
||||||
|
ItemStack item = new ItemStack(itemMaterial);
|
||||||
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
|
||||||
|
meta.setDisplayName("\u00A7eTemporary close this menu");
|
||||||
|
meta.setLore(Collections.singletonList("\u00A77Allow you to chose other item then return here."));
|
||||||
|
item.setItemMeta(meta);
|
||||||
|
|
||||||
|
return new GuiItem(item, event -> {
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
HumanEntity player = event.getWhoClicked();
|
||||||
|
|
||||||
|
CustomAnvil.Companion.getChatListener().setListenedCallback(player, (message) ->{
|
||||||
|
|
||||||
|
if(message == null) return;
|
||||||
|
openBack.show(player);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
player.sendMessage("\u00A7eWrite something in chat to return to the item config menu.");
|
||||||
|
player.closeInventory();
|
||||||
|
}, CustomAnvil.instance);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,12 @@ import com.github.stefvanschie.inventoryframework.pane.PatternPane;
|
||||||
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
|
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui;
|
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -50,4 +53,23 @@ public class GuiSharedConstant {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final ItemStack CANCEL_ITEM;
|
||||||
|
public static final ItemStack CONFIRM_ITEM;
|
||||||
|
|
||||||
|
static {
|
||||||
|
CANCEL_ITEM = new ItemStack(Material.RED_TERRACOTTA);
|
||||||
|
ItemMeta meta = CANCEL_ITEM.getItemMeta();
|
||||||
|
meta.setDisplayName("\u00A7cCancel");
|
||||||
|
meta.setLore(Collections.singletonList("\u00A77Cancel current action and return to previous menu."));
|
||||||
|
CANCEL_ITEM.setItemMeta(meta);
|
||||||
|
|
||||||
|
CONFIRM_ITEM = new ItemStack(Material.GREEN_TERRACOTTA);
|
||||||
|
meta = CONFIRM_ITEM.getItemMeta();
|
||||||
|
meta.setDisplayName("\u00A7aConfirm");
|
||||||
|
meta.setLore(Arrays.asList("\u00A77Confirm current action.",
|
||||||
|
"\u00A74Cation: This action can't be canceled."));
|
||||||
|
CONFIRM_ITEM.setItemMeta(meta);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue