a lot of progress inside the ui

This commit is contained in:
alexcrea 2026-08-17 01:38:14 +02:00
parent 0ffe7c70f9
commit e1d8dd07ad
Signed by: alexcrea
GPG key ID: E59DF23EE2A2266C
28 changed files with 386 additions and 152 deletions

View file

@ -112,6 +112,26 @@ object PlatformUtil {
return true return true
} }
return false
} /**
* Try to send paper component to the player
*
* @param component The used component
* @return true if sent, else otherwise
*/
/**
* Try to set component lore of an item
*
* @param components The used component lore
* @return true if sent, else otherwise
*/
fun ItemMeta.setPaperLore(components: List<Component>): Boolean {
if(isPaper) {
this.lore(components)
return true
}
return false return false
} }

View file

@ -10,13 +10,15 @@ 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.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.Message;
public abstract class AbstractAskGui extends ChestGui { public abstract class AbstractAskGui extends ChestGui {
protected PatternPane pane; protected PatternPane pane;
AbstractAskGui(int rows, @NotNull String name, AbstractAskGui(int rows,
@NotNull Message name, @NotNull String param,
Gui backOnCancel){ Gui backOnCancel){
super(rows, name, CustomAnvil.instance); super(rows, name.textHolder(param), CustomAnvil.instance);
Pattern pattern = getGuiPattern(); Pattern pattern = getGuiPattern();
this.pane = new PatternPane(0, 0, pattern.getLength(), pattern.getHeight(), pattern); this.pane = new PatternPane(0, 0, pattern.getLength(), pattern.getHeight(), pattern);

View file

@ -9,21 +9,26 @@ 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;
import org.jetbrains.annotations.Nullable;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.Message;
import xyz.alexcrea.cuanvil.lang.MsgUI; import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.ComponentUtil;
import xyz.alexcrea.cuanvil.util.MetricsUtil; import xyz.alexcrea.cuanvil.util.MetricsUtil;
import java.awt.*;
import java.util.Arrays; import java.util.Arrays;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
public class ConfirmActionGui extends AbstractAskGui { public class ConfirmActionGui extends AbstractAskGui {
public ConfirmActionGui(@NotNull String title, String actionDescription, public ConfirmActionGui(@NotNull Message title, @NotNull String titleParam,
@Nullable Message actionDescription, @NotNull String actionParam,
Gui backOnCancel, Gui backOnConfirm, Supplier<Boolean> onConfirm, Gui backOnCancel, Gui backOnConfirm, Supplier<Boolean> onConfirm,
boolean permanent) { boolean permanent) {
super(3, title, backOnCancel); super(3, title, titleParam, backOnCancel);
// Save item // Save item
this.pane.bindItem('S', new GuiItem( this.pane.bindItem('S', new GuiItem(
@ -42,7 +47,7 @@ public class ConfirmActionGui extends AbstractAskGui {
try { try {
success = onConfirm.get(); success = onConfirm.get();
} catch (Exception e) { } catch (Exception e) {
CustomAnvil.instance.getLogger().log(Level.WARNING, "Could not process confirmation supplier.", e); CustomAnvil.instance.getLogger().log(Level.WARNING, "Could not process confirmation supplier.", e); //TODO MESSAGE
MetricsUtil.INSTANCE.trackError(e); MetricsUtil.INSTANCE.trackError(e);
success = false; success = false;
} }
@ -58,18 +63,19 @@ public class ConfirmActionGui extends AbstractAskGui {
ItemStack infoItem = new ItemStack(Material.PAPER); ItemStack infoItem = new ItemStack(Material.PAPER);
ItemMeta infoMeta = infoItem.getItemMeta(); ItemMeta infoMeta = infoItem.getItemMeta();
infoMeta.setDisplayName("§eAre you sure ?"); infoMeta.setDisplayName("§eAre you sure ?"); //TODO MESSAGE
if(actionDescription != null){ if(actionDescription != null){
infoMeta.setLore(Arrays.asList(actionDescription.split("\n"))); ComponentUtil.INSTANCE.applyLore(actionDescription.formatted(), infoMeta);
} }
infoItem.setItemMeta(infoMeta); infoItem.setItemMeta(infoMeta);
pane.bindItem('I', new GuiItem(infoItem, GuiGlobalActions.stayInPlace, CustomAnvil.instance)); pane.bindItem('I', new GuiItem(infoItem, GuiGlobalActions.stayInPlace, CustomAnvil.instance));
} }
public ConfirmActionGui(@NotNull String title, String actionDescription, public ConfirmActionGui(@NotNull Message title, @NotNull String titleParam,
@Nullable Message actionDescription, @NotNull String actionParam,
Gui backOnCancel, Gui backOnConfirm, Supplier<Boolean> onConfirm){ Gui backOnCancel, Gui backOnConfirm, Supplier<Boolean> onConfirm){
this(title, actionDescription, backOnCancel, backOnConfirm, onConfirm, true); this(title, titleParam, actionDescription, actionParam, backOnCancel, backOnConfirm, onConfirm, true);
} }

View file

@ -12,7 +12,9 @@ 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.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.Message;
import xyz.alexcrea.cuanvil.lang.MsgUI; import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.ComponentUtil;
import xyz.alexcrea.cuanvil.util.MaterialUtil; import xyz.alexcrea.cuanvil.util.MaterialUtil;
import java.util.Arrays; import java.util.Arrays;
@ -22,12 +24,14 @@ import java.util.function.BiConsumer;
public class SelectItemTypeGui extends AbstractAskGui { public class SelectItemTypeGui extends AbstractAskGui {
private ItemStack selectedItem; private ItemStack selectedItem;
public SelectItemTypeGui(@NotNull String title, public SelectItemTypeGui(@NotNull Message title,
@NotNull String actionDescription, @NotNull String titleParam,
@NotNull Message actionDescription,
@NotNull String descriptionParam,
@NotNull Gui backOnCancel, @NotNull Gui backOnCancel,
@NotNull BiConsumer<ItemStack, HumanEntity> onSave, @NotNull BiConsumer<ItemStack, HumanEntity> onSave,
boolean materialOnly) { boolean materialOnly) {
super(3, title, backOnCancel); super(3, title, titleParam, backOnCancel);
this.selectedItem = null; this.selectedItem = null;
// Save item // Save item
@ -47,7 +51,7 @@ public class SelectItemTypeGui extends AbstractAskGui {
this.pane.bindItem('S', GuiGlobalItems.backgroundItem()); this.pane.bindItem('S', GuiGlobalItems.backgroundItem());
// Select item // Select item
ItemStack selectItem = setDisplayMeta(new ItemStack(Material.BARRIER), actionDescription); ItemStack selectItem = setDisplayMeta(new ItemStack(Material.BARRIER), actionDescription, descriptionParam);
AtomicReference<GuiItem> selectGuiItem = new AtomicReference<>(); AtomicReference<GuiItem> selectGuiItem = new AtomicReference<>();
selectGuiItem.set(new GuiItem(selectItem, event -> { selectGuiItem.set(new GuiItem(selectItem, event -> {
@ -58,7 +62,7 @@ public class SelectItemTypeGui extends AbstractAskGui {
ItemStack finalItem; ItemStack finalItem;
if(materialOnly){ if(materialOnly){
finalItem = setDisplayMeta(new ItemStack(cursor.getType()), actionDescription); finalItem = setDisplayMeta(new ItemStack(cursor.getType()), actionDescription, descriptionParam);
}else{ }else{
finalItem = cursor.clone(); finalItem = cursor.clone();
} }
@ -76,14 +80,18 @@ public class SelectItemTypeGui extends AbstractAskGui {
GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_STAINED_GLASS_PANE, this); GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_STAINED_GLASS_PANE, this);
this.pane.bindItem('s', temporaryLeave); this.pane.bindItem('s', temporaryLeave);
} }
private ItemStack setDisplayMeta(ItemStack item, String actionDescription){ @NotNull
private ItemStack setDisplayMeta(
@NotNull ItemStack item,
@NotNull Message actionDescription,
@NotNull String param
){
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
meta.setDisplayName("§ePlace an item here"); meta.setDisplayName("§ePlace an item here"); //TODO MESSAGE
meta.setLore(Arrays.asList(actionDescription.split("\n"))); ComponentUtil.INSTANCE.applyLore(actionDescription.formatted(param), meta);
item.setItemMeta(meta); item.setItemMeta(meta);
return item; return item;

View file

@ -9,6 +9,7 @@ import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry;
import xyz.alexcrea.cuanvil.gui.config.list.SettingGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.SettingGuiListConfigGui;
import xyz.alexcrea.cuanvil.gui.config.settings.SettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.SettingGui;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.Message;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@ -27,11 +28,11 @@ public abstract class AbstractEnchantConfigGui<T extends SettingGui.SettingGuiFa
* *
* @param title Title of the gui. * @param title Title of the gui.
*/ */
protected AbstractEnchantConfigGui(String title) { protected AbstractEnchantConfigGui(Message title) {
super(title); super(title);
} }
protected AbstractEnchantConfigGui(String title, Gui parent) { protected AbstractEnchantConfigGui(Message title, Gui parent) {
super(title, parent); super(title, parent);
} }

View file

@ -12,6 +12,7 @@ import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui;
import xyz.alexcrea.cuanvil.gui.config.list.elements.CustomRecipeSubSettingGui; import xyz.alexcrea.cuanvil.gui.config.list.elements.CustomRecipeSubSettingGui;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe; import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
@ -36,13 +37,13 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui<AnvilCustomRec
} }
private CustomRecipeConfigGui() { private CustomRecipeConfigGui() {
super("Custom Recipe Config"); super(MsgUI.INSTANCE.getCUSTOM_RECIPE_TITLE());
init(); init();
} }
public CustomRecipeConfigGui(Gui parent) { public CustomRecipeConfigGui(Gui parent) {
super("Custom Recipe Config", parent); super(MsgUI.INSTANCE.getCUSTOM_RECIPE_TITLE(), parent);
} }
@Override @Override
@ -60,7 +61,7 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui<AnvilCustomRec
ItemMeta meta = displayedItem.getItemMeta(); ItemMeta meta = displayedItem.getItemMeta();
assert meta != null; assert meta != null;
meta.setDisplayName("§e" + CasedStringUtil.snakeToUpperSpacedCase(recipe.toString()) + " §fCustom recipe"); meta.setDisplayName("§e" + CasedStringUtil.snakeToUpperSpacedCase(recipe.toString()) + " §fCustom recipe");//TODO MESSAGE
meta.addItemFlags(ItemFlag.values()); meta.addItemFlags(ItemFlag.values());
meta.setLore(getRecipeLore(recipe)); meta.setLore(getRecipeLore(recipe));
@ -72,7 +73,7 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui<AnvilCustomRec
private static @NotNull ArrayList<String> getRecipeLore(AnvilCustomRecipe recipe) { private static @NotNull ArrayList<String> getRecipeLore(AnvilCustomRecipe recipe) {
boolean shouldWork = recipe.validate(); boolean shouldWork = recipe.validate();
ArrayList<String> lore = new ArrayList<>(); ArrayList<String> lore = new ArrayList<>();//TODO MESSAGE
lore.add("§7Is valid: §" + (shouldWork ? "aYes" : "cNo")); lore.add("§7Is valid: §" + (shouldWork ? "aYes" : "cNo"));
lore.add("§7Exact count: §" + (recipe.getExactCount() ? "aYes" : "cNo")); lore.add("§7Exact count: §" + (recipe.getExactCount() ? "aYes" : "cNo"));
lore.add("§7Recipe Level Cost: §e" + recipe.getLevelCostPerCraft()); lore.add("§7Recipe Level Cost: §e" + recipe.getLevelCostPerCraft());
@ -90,7 +91,7 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui<AnvilCustomRec
@Override @Override
protected String genericDisplayedName() { protected String genericDisplayedName() {
return "custom recipe"; return "custom recipe";//TODO MESSAGE
} }
@Override @Override

View file

@ -14,6 +14,7 @@ import xyz.alexcrea.cuanvil.group.IncludeGroup;
import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui;
import xyz.alexcrea.cuanvil.gui.config.list.elements.EnchantConflictSubSettingGui; import xyz.alexcrea.cuanvil.gui.config.list.elements.EnchantConflictSubSettingGui;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import java.util.Arrays; import java.util.Arrays;
@ -38,11 +39,11 @@ public class EnchantConflictGui extends MappedGuiListConfigGui<EnchantConflictGr
// Need to init myself // Need to init myself
public EnchantConflictGui(Gui parent) { public EnchantConflictGui(Gui parent) {
super("Conflict Config", parent); super(MsgUI.INSTANCE.getENCHANTMENT_CONFLICT_TITLE(), parent);
} }
private EnchantConflictGui() { private EnchantConflictGui() {
super("Conflict Config"); super(MsgUI.INSTANCE.getENCHANTMENT_CONFLICT_TITLE());
init(); init();
} }
@ -80,8 +81,8 @@ public class EnchantConflictGui extends MappedGuiListConfigGui<EnchantConflictGr
assert meta != null; assert meta != null;
meta.addItemFlags(ItemFlag.values()); meta.addItemFlags(ItemFlag.values());
meta.setDisplayName("§e" + CasedStringUtil.snakeToUpperSpacedCase(conflict.toString()) + " §fConflict"); meta.setDisplayName("§e" + CasedStringUtil.snakeToUpperSpacedCase(conflict.toString()) + " §fConflict"); //TODO MESSAGE
meta.setLore(Arrays.asList( meta.setLore(Arrays.asList(//TODO MESSAGE
"§7Enchantment count: §e" + conflict.getEnchants().size(), "§7Enchantment count: §e" + conflict.getEnchants().size(),
"§7Group count: §e" + conflict.getCantConflictGroup().getGroups().size(), "§7Group count: §e" + conflict.getCantConflictGroup().getGroups().size(),
"§7Min enchantments count: §e" + conflict.getMinBeforeBlock() "§7Min enchantments count: §e" + conflict.getMinBeforeBlock()
@ -98,7 +99,7 @@ public class EnchantConflictGui extends MappedGuiListConfigGui<EnchantConflictGr
@Override @Override
protected String genericDisplayedName() { protected String genericDisplayedName() {
return "conflict"; return "conflict";//TODO MESSAGE
} }
@Override @Override

View file

@ -11,6 +11,7 @@ import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.gui.config.settings.EnchantCostSettingsGui; import xyz.alexcrea.cuanvil.gui.config.settings.EnchantCostSettingsGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import java.util.ArrayList; import java.util.ArrayList;
@ -36,7 +37,7 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui<EnchantCostSe
* Constructor of this Global gui for enchantment cost settings. * Constructor of this Global gui for enchantment cost settings.
*/ */
public EnchantCostConfigGui() { public EnchantCostConfigGui() {
super("§8Enchantment Level Cost"); super(MsgUI.INSTANCE.getENCHANTMENT_LEVEL_COST_TITLE());
if (INSTANCE == null) INSTANCE = this; if (INSTANCE == null) INSTANCE = this;
init(); init();
@ -46,7 +47,7 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui<EnchantCostSe
* Constructor of this Global gui for enchantment cost settings. * Constructor of this Global gui for enchantment cost settings.
*/ */
public EnchantCostConfigGui(Gui parent) { public EnchantCostConfigGui(Gui parent) {
super("§8Enchantment Level Cost", parent); super(MsgUI.INSTANCE.getENCHANTMENT_LEVEL_COST_TITLE(), parent);
} }
@Override @Override
@ -58,6 +59,7 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui<EnchantCostSe
String key = enchant.getKey().toString().toLowerCase(Locale.ENGLISH); String key = enchant.getKey().toString().toLowerCase(Locale.ENGLISH);
String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key.replace(":", "_")); String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key.replace(":", "_"));
//TODO MESSAGE
return new EnchantCostSettingsGui.EnchantCostSettingFactory(prettyKey + " Cost", parent, return new EnchantCostSettingsGui.EnchantCostSettingFactory(prettyKey + " Cost", parent,
ENCHANT_VALUES_ROOT + '.' + key, ConfigHolder.DEFAULT_CONFIG, ENCHANT_VALUES_ROOT + '.' + key, ConfigHolder.DEFAULT_CONFIG,
Arrays.asList( Arrays.asList(

View file

@ -9,6 +9,7 @@ import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment; import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import java.util.Collections; import java.util.Collections;
@ -32,14 +33,14 @@ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui<IntSettingsG
* Constructor of this Global gui for enchantment level limit settings. * Constructor of this Global gui for enchantment level limit settings.
*/ */
public EnchantLimitConfigGui() { public EnchantLimitConfigGui() {
super("§8Enchantment Level Limit"); super(MsgUI.INSTANCE.getENCHANTMENT_LEVEL_LIMIT_TITLE());
if(INSTANCE == null) INSTANCE = this; if(INSTANCE == null) INSTANCE = this;
init(); init();
} }
public EnchantLimitConfigGui(Gui parent) { public EnchantLimitConfigGui(Gui parent) {
super("§8Enchantment Level Limit", parent); super(MsgUI.INSTANCE.getENCHANTMENT_LEVEL_LIMIT_TITLE(), parent);
} }
@Override @Override

View file

@ -9,6 +9,7 @@ import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment; import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import java.util.Arrays; import java.util.Arrays;
@ -29,7 +30,7 @@ public class EnchantMergeLimitConfigGui extends AbstractEnchantConfigGui<IntSett
* Constructor of this Global gui for enchantment level limit settings. * Constructor of this Global gui for enchantment level limit settings.
*/ */
public EnchantMergeLimitConfigGui() { public EnchantMergeLimitConfigGui() {
super("§8Enchantment Maximum Merge Level"); super(MsgUI.INSTANCE.getENCHANTMENT_MERGE_LIMIT_TITLE());
if(INSTANCE == null) INSTANCE = this; if(INSTANCE == null) INSTANCE = this;
init(); init();
@ -39,7 +40,7 @@ public class EnchantMergeLimitConfigGui extends AbstractEnchantConfigGui<IntSett
* Constructor of this Global gui for enchantment level limit settings. * Constructor of this Global gui for enchantment level limit settings.
*/ */
public EnchantMergeLimitConfigGui(Gui parent) { public EnchantMergeLimitConfigGui(Gui parent) {
super("§8Enchantment Maximum Merge Level", parent); super(MsgUI.INSTANCE.getENCHANTMENT_MERGE_LIMIT_TITLE(), parent);
} }
@ -52,6 +53,7 @@ public class EnchantMergeLimitConfigGui extends AbstractEnchantConfigGui<IntSett
String key = enchant.getKey().toString().toLowerCase(Locale.ROOT); String key = enchant.getKey().toString().toLowerCase(Locale.ROOT);
String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key.replace(":", "_")); String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key.replace(":", "_"));
//TODO MESSAGE
return new IntSettingsGui.IntSettingFactory(prettyKey + " Merge Limit", parent, return new IntSettingsGui.IntSettingFactory(prettyKey + " Merge Limit", parent,
SECTION_NAME + '.' + key, ConfigHolder.DEFAULT_CONFIG, SECTION_NAME + '.' + key, ConfigHolder.DEFAULT_CONFIG,
Arrays.asList( Arrays.asList(

View file

@ -15,6 +15,7 @@ import xyz.alexcrea.cuanvil.group.IncludeGroup;
import xyz.alexcrea.cuanvil.group.ItemGroupManager; import xyz.alexcrea.cuanvil.group.ItemGroupManager;
import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui;
import xyz.alexcrea.cuanvil.gui.config.list.elements.GroupConfigSubSettingGui; import xyz.alexcrea.cuanvil.gui.config.list.elements.GroupConfigSubSettingGui;
import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import xyz.alexcrea.cuanvil.util.LazyValue; import xyz.alexcrea.cuanvil.util.LazyValue;
@ -39,13 +40,13 @@ public class GroupConfigGui extends MappedGuiListConfigGui<IncludeGroup, MappedG
} }
public GroupConfigGui() { public GroupConfigGui() {
super("Group Config"); super(MsgUI.INSTANCE.getMATERIAL_GROUP_TITLE());
init(); init();
} }
public GroupConfigGui(Gui parent) { public GroupConfigGui(Gui parent) {
super("Group Config", parent); super(MsgUI.INSTANCE.getMATERIAL_GROUP_TITLE(), parent);
} }
@Override @Override

View file

@ -13,6 +13,7 @@ import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui; import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui;
import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui;
import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui; import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui;
import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import xyz.alexcrea.cuanvil.util.MaterialUtil; import xyz.alexcrea.cuanvil.util.MaterialUtil;
@ -38,13 +39,13 @@ public class UnitRepairConfigGui extends
} }
private UnitRepairConfigGui() { private UnitRepairConfigGui() {
super("Unit Repair Config"); super(MsgUI.INSTANCE.getUNIT_REPAIR_TITLE());
init(); init();
} }
public UnitRepairConfigGui(Gui parent) { public UnitRepairConfigGui(Gui parent) {
super("Unit Repair Config", parent); super(MsgUI.INSTANCE.getUNIT_REPAIR_TITLE(), parent);
} }
@Override @Override
@ -128,9 +129,8 @@ public class UnitRepairConfigGui extends
clickEvent.setCancelled(true); clickEvent.setCancelled(true);
new SelectItemTypeGui( new SelectItemTypeGui(
"Select unit repair item.", MsgUI.INSTANCE.getUNIT_REPAIR_NEW_TITLE(), "",
"§7Click here with an item to set the item\n" + MsgUI.INSTANCE.getUNIT_REPAIR_NEW_DESCRIPTION(), "",
"§7You like to be an unit repair item",
this, this,
(itemStack, player) -> { (itemStack, player) -> {
NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack); NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack);

View file

@ -18,6 +18,7 @@ import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.Message;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@ -32,16 +33,18 @@ public abstract class ElementListConfigGui<T> extends ChestGui implements ValueU
public static final int LIST_FILLER_LENGTH = 7; public static final int LIST_FILLER_LENGTH = 7;
public static final int LIST_FILLER_HEIGHT = 4; public static final int LIST_FILLER_HEIGHT = 4;
private final String namePrefix; private final Message rawTitle;
private final String param;
protected PatternPane backgroundPane; protected PatternPane backgroundPane;
private Predicate<T> filter = (t) -> true; private Predicate<T> filter = (t) -> true;
private boolean hasDefaultFilter = true; private boolean hasDefaultFilter = true;
protected ElementListConfigGui(@NotNull String title, Gui parent) { protected ElementListConfigGui(@NotNull Message title, String param, Gui parent) {
super(6, title, CustomAnvil.instance); super(6, title.textHolder(param, "", ""), CustomAnvil.instance);
this.namePrefix = title; this.rawTitle = title;
this.param = param;
// Back item panel // Back item panel
Pattern pattern = getBackgroundPattern(); Pattern pattern = getBackgroundPattern();
@ -259,13 +262,10 @@ public abstract class ElementListConfigGui<T> extends ChestGui implements ValueU
// and add actual page // and add actual page
addPane(page); addPane(page);
// set title // intended parameter: (page/max_page) //TODO MESSAGE CHECK CHILDS
StringBuilder title = new StringBuilder(this.namePrefix);
int pagesSize = this.pages.size(); int pagesSize = this.pages.size();
if (pagesSize > 1) { var title = this.rawTitle.textHolder(param, pageID + 1, pagesSize);
title.append(" (").append(pageID + 1).append('/').append(pagesSize).append(')'); setTitle(title);
}
setTitle(title.toString());
super.show(humanEntity); super.show(humanEntity);

View file

@ -10,6 +10,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui; import xyz.alexcrea.cuanvil.gui.config.MainConfigGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
import xyz.alexcrea.cuanvil.lang.Message;
import xyz.alexcrea.cuanvil.lang.MsgUI; import xyz.alexcrea.cuanvil.lang.MsgUI;
import java.util.Arrays; import java.util.Arrays;
@ -20,14 +21,14 @@ public abstract class MappedElementListConfigGui<T, S> extends ElementListConfig
protected final HashMap<T, S> elementGuiMap; protected final HashMap<T, S> elementGuiMap;
protected MappedElementListConfigGui(@NotNull String title, @NotNull Gui parent) { protected MappedElementListConfigGui(@NotNull Message title, @NotNull String param, @NotNull Gui parent) {
super(title, parent); super(title, param, parent);
this.elementGuiMap = new HashMap<>(); this.elementGuiMap = new HashMap<>();
} }
protected MappedElementListConfigGui(@NotNull String title) { protected MappedElementListConfigGui(@NotNull Message title, @NotNull String param) {
this(title, MainConfigGui.getInstance()); this(title, param, MainConfigGui.getInstance());
} }
@Override @Override

View file

@ -8,6 +8,7 @@ import org.bukkit.event.inventory.InventoryClickEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.config.list.elements.ElementMappedToListGui; import xyz.alexcrea.cuanvil.gui.config.list.elements.ElementMappedToListGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
import xyz.alexcrea.cuanvil.lang.Message;
import xyz.alexcrea.cuanvil.lang.MsgUI; import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.LazyValue; import xyz.alexcrea.cuanvil.util.LazyValue;
@ -19,12 +20,20 @@ import java.util.function.Supplier;
public abstract class MappedGuiListConfigGui<T, S extends MappedGuiListConfigGui.LazyElement<?>> public abstract class MappedGuiListConfigGui<T, S extends MappedGuiListConfigGui.LazyElement<?>>
extends MappedElementListConfigGui<T, S> { extends MappedElementListConfigGui<T, S> {
protected MappedGuiListConfigGui(@NotNull String title) { protected MappedGuiListConfigGui(@NotNull Message title, @NotNull String param) {
super(title); super(title, param);
} }
protected MappedGuiListConfigGui(@NotNull String title, @NotNull Gui parent) { protected MappedGuiListConfigGui(@NotNull Message title, @NotNull String param, @NotNull Gui parent) {
super(title, parent); super(title, param, parent);
}
protected MappedGuiListConfigGui(@NotNull Message title) {
super(title, "");
}
protected MappedGuiListConfigGui(@NotNull Message title, @NotNull Gui parent) {
super(title, "", parent);
} }
@Override @Override

View file

@ -10,6 +10,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui; import xyz.alexcrea.cuanvil.gui.config.MainConfigGui;
import xyz.alexcrea.cuanvil.gui.config.settings.SettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.SettingGui;
import xyz.alexcrea.cuanvil.lang.Message;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -20,16 +21,26 @@ public abstract class SettingGuiListConfigGui<T, S extends SettingGui.SettingGui
protected HashMap<T, GuiItem> guiItemMap; protected HashMap<T, GuiItem> guiItemMap;
protected HashMap<T, S> factoryMap; protected HashMap<T, S> factoryMap;
protected SettingGuiListConfigGui(@NotNull String title, Gui parent) { protected SettingGuiListConfigGui(@NotNull Message title, Gui parent) {
super(title, parent); super(title, "", parent);
this.guiItemMap = new HashMap<>(); this.guiItemMap = new HashMap<>();
this.factoryMap = new HashMap<>(); this.factoryMap = new HashMap<>();
} }
protected SettingGuiListConfigGui(@NotNull String title) { protected SettingGuiListConfigGui(@NotNull Message title) {
this(title, MainConfigGui.getInstance()); this(title, MainConfigGui.getInstance());
} }
protected SettingGuiListConfigGui(@NotNull Message title, @NotNull String param, Gui parent) {
super(title, param, parent);
this.guiItemMap = new HashMap<>();
this.factoryMap = new HashMap<>();
}
protected SettingGuiListConfigGui(@NotNull Message title, @NotNull String param) {
this(title, param, MainConfigGui.getInstance());
}
@Override @Override
protected GuiItem prepareCreateNewItem() { protected GuiItem prepareCreateNewItem() {
ItemStack createItem = new ItemStack(Material.PAPER); ItemStack createItem = new ItemStack(Material.PAPER);

View file

@ -33,12 +33,16 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
private boolean shouldWork = true; private boolean shouldWork = true;
private static String prettifiedName(NamespacedKey parentMaterial) {
return CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase());
}
public UnitRepairElementListGui(@NotNull NamespacedKey parentMaterial, public UnitRepairElementListGui(@NotNull NamespacedKey parentMaterial,
@NotNull UnitRepairConfigGui parentGui) { @NotNull UnitRepairConfigGui parentGui) {
super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase()) + " §rUnit repair"); super(MsgUI.INSTANCE.getUNIT_REPAIR_ELEMENT_TITLE(), prettifiedName(parentMaterial));
this.parentMaterial = parentMaterial; this.parentMaterial = parentMaterial;
this.parentGui = parentGui; this.parentGui = parentGui;
this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase()); this.materialName = prettifiedName(parentMaterial);
GuiGlobalItems.addBackItem(this.backgroundPane, parentGui); GuiGlobalItems.addBackItem(this.backgroundPane, parentGui);
} }
@ -62,20 +66,19 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
event.setCancelled(true); event.setCancelled(true);
new SelectItemTypeGui( new SelectItemTypeGui(
"Select item to be repaired.", MsgUI.INSTANCE.getUNIT_REPAIR_NEW_ELEMENT_TITLE(), this.materialName,
"§7Click here with an item to set the item\n" + MsgUI.INSTANCE.getUNIT_REPAIR_NEW_ELEMENT_DESCRIPTION(), this.materialName,
"§7You like to be repaired by " + this.materialName,
this, this,
(itemStack, player) -> { (itemStack, player) -> {
ItemMeta meta = itemStack.getItemMeta(); ItemMeta meta = itemStack.getItemMeta();
NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack); NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack);
if (!(meta instanceof Damageable)) { if (!(meta instanceof Damageable)) {
MsgUI.INSTANCE.getUNIT_REPAIR_ELEMENT_CANNOT_REPAIR_NEW().send(player); MsgUI.INSTANCE.getUNIT_REPAIR_NEW_ELEMENT_CANNOT_REPAIR().send(player);
return; return;
} }
if (type.equals(this.parentMaterial)) { if (type.equals(this.parentMaterial)) {
MsgUI.INSTANCE.getUNIT_REPAIR_ELEMENT_SAME_TYPE_NEW().send(player); MsgUI.INSTANCE.getUNIT_REPAIR_NEW_ELEMENT_SAME_TYPE().send(player);
return; return;
} }

View file

@ -19,6 +19,7 @@ import xyz.alexcrea.cuanvil.gui.config.settings.ItemSettingGui;
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.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe; import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe;
import xyz.alexcrea.cuanvil.recipe.CustomAnvilRecipeManager; import xyz.alexcrea.cuanvil.recipe.CustomAnvilRecipeManager;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
@ -36,7 +37,7 @@ public class CustomRecipeSubSettingGui extends MappedToListSubSettingGui {
public CustomRecipeSubSettingGui( public CustomRecipeSubSettingGui(
@NotNull CustomRecipeConfigGui parent, @NotNull CustomRecipeConfigGui parent,
@NotNull AnvilCustomRecipe anvilRecipe) { @NotNull AnvilCustomRecipe anvilRecipe) {
super(4, "§e" + CasedStringUtil.snakeToUpperSpacedCase(anvilRecipe.toString()) + " §8Config"); super(4, CasedStringUtil.snakeToUpperSpacedCase(anvilRecipe.toString()));
this.parent = parent; this.parent = parent;
this.anvilRecipe = anvilRecipe; this.anvilRecipe = anvilRecipe;
@ -73,19 +74,19 @@ public class CustomRecipeSubSettingGui extends MappedToListSubSettingGui {
ItemMeta deleteMeta = deleteItem.getItemMeta(); ItemMeta deleteMeta = deleteItem.getItemMeta();
assert deleteMeta != null; assert deleteMeta != null;
deleteMeta.setDisplayName("§4DELETE RECIPE"); deleteMeta.setDisplayName("§4DELETE RECIPE");//TODO MESSAGE
deleteMeta.setLore(Collections.singletonList("§cCaution with this button !")); deleteMeta.setLore(Collections.singletonList("§cCaution with this button !"));//TODO MESSAGE
deleteItem.setItemMeta(deleteMeta); deleteItem.setItemMeta(deleteMeta);
this.pane.bindItem('D', new GuiItem(deleteItem, GuiGlobalActions.openGuiAction(createDeleteGui()), CustomAnvil.instance)); this.pane.bindItem('D', new GuiItem(deleteItem, GuiGlobalActions.openGuiAction(createDeleteGui()), CustomAnvil.instance));
// Displayed item will be updated later // Displayed item will be updated later
IntRange costRange = AnvilCustomRecipe.Companion.getXP_COST_CONFIG_RANGE(); IntRange costRange = AnvilCustomRecipe.Companion.getXP_COST_CONFIG_RANGE();
this.exactCountFactory = new BoolSettingsGui.BoolSettingFactory("§8Exact count ?", this, this.exactCountFactory = new BoolSettingsGui.BoolSettingFactory("§8Exact count ?", this,//TODO MESSAGE
ConfigHolder.CUSTOM_RECIPE_HOLDER, ConfigHolder.CUSTOM_RECIPE_HOLDER,
this.anvilRecipe + "." + AnvilCustomRecipe.EXACT_COUNT_CONFIG, AnvilCustomRecipe.DEFAULT_EXACT_COUNT_CONFIG); this.anvilRecipe + "." + AnvilCustomRecipe.EXACT_COUNT_CONFIG, AnvilCustomRecipe.DEFAULT_EXACT_COUNT_CONFIG);
this.removeExactLinearXpFactory = new BoolSettingsGui.BoolSettingFactory("§8Remove exact linear xp ?", this, this.removeExactLinearXpFactory = new BoolSettingsGui.BoolSettingFactory("§8Remove exact linear xp ?", this,//TODO MESSAGE
ConfigHolder.CUSTOM_RECIPE_HOLDER, ConfigHolder.CUSTOM_RECIPE_HOLDER,
this.anvilRecipe + "." + AnvilCustomRecipe.REMOVE_EXACT_XP_CONFIG, AnvilCustomRecipe.DEFAULT_REMOVE_EXACT_XP_CONFIG); this.anvilRecipe + "." + AnvilCustomRecipe.REMOVE_EXACT_XP_CONFIG, AnvilCustomRecipe.DEFAULT_REMOVE_EXACT_XP_CONFIG);
@ -93,18 +94,18 @@ public class CustomRecipeSubSettingGui extends MappedToListSubSettingGui {
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
assert meta != null; assert meta != null;
meta.setDisplayName("§cRemove exact linear xp ?"); meta.setDisplayName("§cRemove exact linear xp ?");//TODO MESSAGE
meta.setLore(Collections.singletonList("§7Not usable if linear cost is 0")); meta.setLore(Collections.singletonList("§7Not usable if linear cost is 0"));//TODO MESSAGE
item.setItemMeta(meta); item.setItemMeta(meta);
this.noRemoveExactLinearXp = new GuiItem(item, GuiGlobalActions.stayInPlace, CustomAnvil.instance); this.noRemoveExactLinearXp = new GuiItem(item, GuiGlobalActions.stayInPlace, CustomAnvil.instance);
this.levelCostFactory = new IntSettingsGui.IntSettingFactory("§8Recipe Level Cost", this, this.levelCostFactory = new IntSettingsGui.IntSettingFactory("§8Recipe Level Cost", this,//TODO MESSAGE
this.anvilRecipe + "." + AnvilCustomRecipe.XP_LEVEL_COST_CONFIG, this.anvilRecipe + "." + AnvilCustomRecipe.XP_LEVEL_COST_CONFIG,
ConfigHolder.CUSTOM_RECIPE_HOLDER, ConfigHolder.CUSTOM_RECIPE_HOLDER,
null, null,
costRange.getFirst(), costRange.getLast(), AnvilCustomRecipe.DEFAULT_XP_LEVEL_COST_CONFIG, 1, 5, 10); costRange.getFirst(), costRange.getLast(), AnvilCustomRecipe.DEFAULT_XP_LEVEL_COST_CONFIG, 1, 5, 10);
this.linearXpCostFactory = new IntSettingsGui.IntSettingFactory("§8Recipe Linear Xp Cost", this, this.linearXpCostFactory = new IntSettingsGui.IntSettingFactory("§8Recipe Linear Xp Cost", this,//TODO MESSAGE
this.anvilRecipe + "." + AnvilCustomRecipe.LINEAR_XP_COST_CONFIG, this.anvilRecipe + "." + AnvilCustomRecipe.LINEAR_XP_COST_CONFIG,
ConfigHolder.CUSTOM_RECIPE_HOLDER, ConfigHolder.CUSTOM_RECIPE_HOLDER,
null, null,
@ -117,21 +118,21 @@ public class CustomRecipeSubSettingGui extends MappedToListSubSettingGui {
ConfigHolder.CUSTOM_RECIPE_HOLDER, ConfigHolder.CUSTOM_RECIPE_HOLDER,
AnvilCustomRecipe.Companion.getDEFAULT_LEFT_ITEM_CONFIG(), AnvilCustomRecipe.Companion.getDEFAULT_LEFT_ITEM_CONFIG(),
"§7Set the left item of the custom craft", "§7Set the left item of the custom craft",
"§7\u25A0 + \u25A1 = \u25A1"); "§7■ + □ = □");//TODO MESSAGE
this.rightItemFactory = new ItemSettingGui.ItemSettingFactory("§eRecipe Right §8Item", this, this.rightItemFactory = new ItemSettingGui.ItemSettingFactory("§eRecipe Right §8Item", this,
this.anvilRecipe + "." + AnvilCustomRecipe.RIGHT_ITEM_CONFIG, this.anvilRecipe + "." + AnvilCustomRecipe.RIGHT_ITEM_CONFIG,
ConfigHolder.CUSTOM_RECIPE_HOLDER, ConfigHolder.CUSTOM_RECIPE_HOLDER,
AnvilCustomRecipe.Companion.getDEFAULT_RIGHT_ITEM_CONFIG(), AnvilCustomRecipe.Companion.getDEFAULT_RIGHT_ITEM_CONFIG(),
"§7Set the right item of the custom craft", "§7Set the right item of the custom craft",
"§7\u25A1 + \u25A0 = \u25A1"); "§7□ + ■ = □");//TODO MESSAGE
this.resultItemFactory = new ItemSettingGui.ItemSettingFactory("§aRecipe Result §8Item", this, this.resultItemFactory = new ItemSettingGui.ItemSettingFactory("§aRecipe Result §8Item", this,
this.anvilRecipe + "." + AnvilCustomRecipe.RESULT_ITEM_CONFIG, this.anvilRecipe + "." + AnvilCustomRecipe.RESULT_ITEM_CONFIG,
ConfigHolder.CUSTOM_RECIPE_HOLDER, ConfigHolder.CUSTOM_RECIPE_HOLDER,
AnvilCustomRecipe.Companion.getDEFAULT_RESULT_ITEM_CONFIG(), AnvilCustomRecipe.Companion.getDEFAULT_RESULT_ITEM_CONFIG(),
"§7Set the result item of the custom craft", "§7Set the result item of the custom craft",
"§7\u25A1 + \u25A1 = \u25A0"); "§7□ + □ = ■");//TODO MESSAGE
// Now we update the items // Now we update the items
updateLocal(); updateLocal();
@ -162,8 +163,9 @@ public class CustomRecipeSubSettingGui extends MappedToListSubSettingGui {
return success; return success;
}; };
return new ConfirmActionGui("§cDelete §e" + CasedStringUtil.snakeToUpperSpacedCase(this.anvilRecipe.toString()) + "§c?", var type = CasedStringUtil.snakeToUpperSpacedCase(this.anvilRecipe.toString());
"§7Confirm that you want to delete this conflict.", return new ConfirmActionGui(MsgUI.INSTANCE.getCUSTOM_RECIPE_ELEMENT_DELETE_TITLE(), type,
MsgUI.INSTANCE.getCUSTOM_RECIPE_ELEMENT_DELETE_DESCRIPTION(), type,
this, this.parent, deleteSupplier this, this.parent, deleteSupplier
); );
} }

View file

@ -24,6 +24,7 @@ import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
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.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import xyz.alexcrea.cuanvil.util.MetricsUtil; import xyz.alexcrea.cuanvil.util.MetricsUtil;
@ -41,8 +42,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
public EnchantConflictSubSettingGui( public EnchantConflictSubSettingGui(
@NotNull EnchantConflictGui parent, @NotNull EnchantConflictGui parent,
@NotNull EnchantConflictGroup enchantConflict) { @NotNull EnchantConflictGroup enchantConflict) {
super(3, super(3, CasedStringUtil.snakeToUpperSpacedCase(enchantConflict.toString()));
"§e" + CasedStringUtil.snakeToUpperSpacedCase(enchantConflict.toString()) + " §8Config");
this.parent = parent; this.parent = parent;
this.enchantConflict = enchantConflict; this.enchantConflict = enchantConflict;
@ -71,8 +71,8 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
ItemMeta deleteMeta = deleteItem.getItemMeta(); ItemMeta deleteMeta = deleteItem.getItemMeta();
assert deleteMeta != null; assert deleteMeta != null;
deleteMeta.setDisplayName("§4DELETE CONFLICT"); deleteMeta.setDisplayName("§4DELETE CONFLICT");//TODO MESSAGE
deleteMeta.setLore(Collections.singletonList("§cCaution with this button !")); deleteMeta.setLore(Collections.singletonList("§cCaution with this button !"));//TODO MESSAGE
deleteItem.setItemMeta(deleteMeta); deleteItem.setItemMeta(deleteMeta);
this.pane.bindItem('D', new GuiItem(deleteItem, GuiGlobalActions.openGuiAction(createDeleteGui()), CustomAnvil.instance)); this.pane.bindItem('D', new GuiItem(deleteItem, GuiGlobalActions.openGuiAction(createDeleteGui()), CustomAnvil.instance));
@ -80,22 +80,24 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
// Displayed item will be updated later // Displayed item will be updated later
this.enchantSettingItem = new GuiItem(new ItemStack(Material.ENCHANTED_BOOK), event -> { this.enchantSettingItem = new GuiItem(new ItemStack(Material.ENCHANTED_BOOK), event -> {
event.setCancelled(true); event.setCancelled(true);
var type = CasedStringUtil.snakeToUpperSpacedCase(enchantConflict.toString());
EnchantSelectSettingGui enchantGui = new EnchantSelectSettingGui( EnchantSelectSettingGui enchantGui = new EnchantSelectSettingGui(
"§e" + CasedStringUtil.snakeToUpperSpacedCase(enchantConflict.toString()) + "§5", MsgUI.INSTANCE.getENCHANTMENT_CONFLICT_ELEMENT_ENCHANTMENTS(), type,
this, this); this, this);
enchantGui.show(event.getWhoClicked()); enchantGui.show(event.getWhoClicked());
}, CustomAnvil.instance); }, CustomAnvil.instance);
this.groupSettingItem = new GuiItem(new ItemStack(Material.PAPER), event -> { this.groupSettingItem = new GuiItem(new ItemStack(Material.PAPER), event -> {
event.setCancelled(true); event.setCancelled(true);
var type = CasedStringUtil.snakeToUpperSpacedCase(this.enchantConflict.toString());
GroupSelectSettingGui enchantGui = new GroupSelectSettingGui( GroupSelectSettingGui enchantGui = new GroupSelectSettingGui(
"§e" + CasedStringUtil.snakeToUpperSpacedCase(this.enchantConflict.toString()) + " §3Groups", MsgUI.INSTANCE.getENCHANTMENT_CONFLICT_ELEMENT_SUB_GROUPS(), type,
this, this, 0); this, this, 0);
enchantGui.show(event.getWhoClicked()); enchantGui.show(event.getWhoClicked());
}, CustomAnvil.instance); }, CustomAnvil.instance);
this.minBeforeActiveSettingFactory = new IntSettingsGui.IntSettingFactory( this.minBeforeActiveSettingFactory = new IntSettingsGui.IntSettingFactory(
"§8Minimum enchantment count", "§8Minimum enchantment count",//TODO MESSAGE
this, this.enchantConflict + ".maxEnchantmentBeforeConflict", ConfigHolder.CONFLICT_HOLDER, this, this.enchantConflict + ".maxEnchantmentBeforeConflict", ConfigHolder.CONFLICT_HOLDER,
Arrays.asList( Arrays.asList(
"§7Minimum enchantment count set to X mean only X enchantment can be put", "§7Minimum enchantment count set to X mean only X enchantment can be put",
@ -137,8 +139,9 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
return success; return success;
}; };
return new ConfirmActionGui("§cDelete §e" + CasedStringUtil.snakeToUpperSpacedCase(this.enchantConflict.toString()) + "§c?", var type = CasedStringUtil.snakeToUpperSpacedCase(this.enchantConflict.toString());
"§7Confirm that you want to delete this conflict.", return new ConfirmActionGui(MsgUI.INSTANCE.getENCHANTMENT_CONFLICT_ELEMENT_DELETE_TITLE(), type,
MsgUI.INSTANCE.getENCHANTMENT_CONFLICT_ELEMENT_DELETE_DESCRIPTION(), type,
this, this.parent, deleteSupplier this, this.parent, deleteSupplier
); );
} }
@ -159,12 +162,12 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
// Prepare enchantment lore // Prepare enchantment lore
ArrayList<String> enchantLore = new ArrayList<>(); ArrayList<String> enchantLore = new ArrayList<>();
enchantLore.add("§7Allow you to select a list of §5Enchantments §7that this conflict should include"); enchantLore.add("§7Allow you to select a list of §5Enchantments §7that this conflict should include");//TODO MESSAGE
Set<CAEnchantment> enchants = getSelectedEnchantments(); Set<CAEnchantment> enchants = getSelectedEnchantments();
if (enchants.isEmpty()) { if (enchants.isEmpty()) {
enchantLore.add("§7There is no included enchantment for this conflict."); enchantLore.add("§7There is no included enchantment for this conflict.");//TODO MESSAGE
} else { } else {
enchantLore.add("§7List of included enchantment for this conflict:"); enchantLore.add("§7List of included enchantment for this conflict:");//TODO MESSAGE
Iterator<CAEnchantment> enchantIterator = enchants.iterator(); Iterator<CAEnchantment> enchantIterator = enchants.iterator();
boolean greaterThanMax = enchants.size() > 5; boolean greaterThanMax = enchants.size() > 5;
@ -175,7 +178,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
enchantLore.add("§7- §5" + formattedName); enchantLore.add("§7- §5" + formattedName);
} }
if (greaterThanMax) { if (greaterThanMax) {
enchantLore.add("§7And " + (enchants.size() - 4) + " more..."); enchantLore.add("§7And " + (enchants.size() - 4) + " more...");//TODO MESSAGE
} }
} }
@ -188,7 +191,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
ItemMeta enchantMeta = enchantItem.getItemMeta(); ItemMeta enchantMeta = enchantItem.getItemMeta();
assert enchantMeta != null; assert enchantMeta != null;
enchantMeta.setDisplayName("§aSelect included §5Enchantments §aSettings"); enchantMeta.setDisplayName("§aSelect included §5Enchantments §aSettings");//TODO MESSAGE
enchantMeta.setLore(enchantLore); enchantMeta.setLore(enchantLore);
enchantItem.setItemMeta(enchantMeta); enchantItem.setItemMeta(enchantMeta);
@ -200,7 +203,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
ItemMeta groupMeta = groupItem.getItemMeta(); ItemMeta groupMeta = groupItem.getItemMeta();
assert groupMeta != null; assert groupMeta != null;
groupMeta.setDisplayName("§aSelect Excluded §3Groups §aSettings"); groupMeta.setDisplayName("§aSelect Excluded §3Groups §aSettings");//TODO MESSAGE
groupMeta.setLore(groupLore); groupMeta.setLore(groupLore);
groupItem.setItemMeta(groupMeta); groupItem.setItemMeta(groupMeta);
@ -208,7 +211,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
this.groupSettingItem.setItem(groupItem); // Just in case this.groupSettingItem.setItem(groupItem); // Just in case
this.pane.bindItem('M', this.minBeforeActiveSettingFactory.getItem(Material.COMMAND_BLOCK, this.pane.bindItem('M', this.minBeforeActiveSettingFactory.getItem(Material.COMMAND_BLOCK,
"Minimum Enchantment Count")); "Minimum Enchantment Count"));//TODO MESSAGE
update(); update();
} }
@ -246,7 +249,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
@Override @Override
public boolean setSelectedEnchantments(Set<CAEnchantment> enchantments) { public boolean setSelectedEnchantments(Set<CAEnchantment> enchantments) {
if (!this.shouldWork) { if (!this.shouldWork) {
CustomAnvil.instance.getLogger().info("Trying to save " + enchantConflict + " enchants but sub config is destroyed"); CustomAnvil.instance.getLogger().info("Trying to save " + enchantConflict + " enchants but sub config is destroyed");//TODO MESSAGE
return false; return false;
} }
@ -264,7 +267,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
try { try {
updateGuiValues(); updateGuiValues();
} catch (Exception e) { } catch (Exception e) {
CustomAnvil.instance.getLogger().log(Level.WARNING, "An error occurred while updating enchants for " + this.enchantConflict, e); CustomAnvil.instance.getLogger().log(Level.WARNING, "An error occurred while updating enchants for " + this.enchantConflict, e);//TODO MESSAGE
MetricsUtil.INSTANCE.trackError(e); MetricsUtil.INSTANCE.trackError(e);
} }
@ -291,7 +294,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
@Override @Override
public boolean setSelectedGroups(Set<AbstractMaterialGroup> groups) { public boolean setSelectedGroups(Set<AbstractMaterialGroup> groups) {
if (!this.shouldWork) { if (!this.shouldWork) {
CustomAnvil.instance.getLogger().info("Trying to save " + enchantConflict.toString() + " groups but sub config is destroyed"); CustomAnvil.instance.getLogger().info("Trying to save " + enchantConflict.toString() + " groups but sub config is destroyed");//TODO MESSAGE
return false; return false;
} }
@ -309,7 +312,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
try { try {
updateGuiValues(); updateGuiValues();
} catch (Exception e) { } catch (Exception e) {
CustomAnvil.instance.getLogger().log(Level.WARNING, "An error occurred while updating group for " + this.enchantConflict, e); CustomAnvil.instance.getLogger().log(Level.WARNING, "An error occurred while updating group for " + this.enchantConflict, e);//TODO MESSAGE
MetricsUtil.INSTANCE.trackError(e); MetricsUtil.INSTANCE.trackError(e);
} }

View file

@ -13,6 +13,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.dependency.util.PlatformUtil;
import xyz.alexcrea.cuanvil.group.*; import xyz.alexcrea.cuanvil.group.*;
import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer; import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer;
import xyz.alexcrea.cuanvil.gui.config.SelectMaterialContainer; import xyz.alexcrea.cuanvil.gui.config.SelectMaterialContainer;
@ -20,11 +21,11 @@ import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui;
import xyz.alexcrea.cuanvil.gui.config.global.GroupConfigGui; import xyz.alexcrea.cuanvil.gui.config.global.GroupConfigGui;
import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui;
import xyz.alexcrea.cuanvil.gui.config.settings.MaterialSelectSettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.MaterialSelectSettingGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.MsgUI; import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import xyz.alexcrea.cuanvil.util.ComponentUtil;
import java.util.*; import java.util.*;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -40,8 +41,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
public GroupConfigSubSettingGui( public GroupConfigSubSettingGui(
@NotNull GroupConfigGui parent, @NotNull GroupConfigGui parent,
@NotNull IncludeGroup group) { @NotNull IncludeGroup group) {
super(3, super(3, CasedStringUtil.snakeToUpperSpacedCase(group.getName()));
"§e" + CasedStringUtil.snakeToUpperSpacedCase(group.getName()) + " §rConfig");
this.parent = parent; this.parent = parent;
this.group = group; this.group = group;
@ -66,38 +66,60 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
ItemStack deleteItem = new ItemStack(Material.RED_TERRACOTTA); ItemStack deleteItem = new ItemStack(Material.RED_TERRACOTTA);
ItemMeta deleteMeta = deleteItem.getItemMeta(); ItemMeta deleteMeta = deleteItem.getItemMeta();
deleteMeta.setDisplayName("§4DELETE GROUP"); assert deleteMeta != null;
deleteMeta.setLore(Collections.singletonList("§cCaution with this button !")); PlatformUtil.INSTANCE.setComponentDisplayName(
deleteMeta,
MsgUI.INSTANCE.getMATERIAL_GROUP_ELEMENT_DELETE_BUTTON_NAME().formattedConcatenated(),
null
);
ComponentUtil.INSTANCE.applyLore(
MsgUI.INSTANCE.getMATERIAL_GROUP_ELEMENT_DELETE_BUTTON_LORE().formatted(),
deleteMeta
);
deleteItem.setItemMeta(deleteMeta); deleteItem.setItemMeta(deleteMeta);
this.pane.bindItem('D', new GuiItem(deleteItem, openGuiAndCheckAction(), CustomAnvil.instance)); this.pane.bindItem('D', new GuiItem(deleteItem, openGuiAndCheckAction(), CustomAnvil.instance));
// Displayed item will be updated later // Displayed item will be updated later
String materialSelectionName = "§e" + CasedStringUtil.snakeToUpperSpacedCase(group.getName()) + " §rMaterials"; var materialSelectionName = MsgUI.INSTANCE.getMATERIAL_GROUP_ELEMENT_SELECTED_MATERIALS();
var name = CasedStringUtil.snakeToUpperSpacedCase(group.getName());
ItemStack selectItem = new ItemStack(Material.DIAMOND_SWORD); ItemStack selectItem = new ItemStack(Material.DIAMOND_SWORD);
ItemMeta selectItemMeta = selectItem.getItemMeta(); ItemMeta selectItemMeta = selectItem.getItemMeta();
selectItemMeta.setDisplayName(materialSelectionName); assert selectItemMeta != null;
PlatformUtil.INSTANCE.setComponentDisplayName(
selectItemMeta,
materialSelectionName.formattedConcatenated(name),
null
);
selectItem.setItemMeta(selectItemMeta); selectItem.setItemMeta(selectItemMeta);
this.materialSelection = new GuiItem(selectItem, (event) -> { this.materialSelection = new GuiItem(selectItem, (event) -> {
event.setCancelled(true); event.setCancelled(true);
MaterialSelectSettingGui selectGui = new MaterialSelectSettingGui(this, MaterialSelectSettingGui selectGui = new MaterialSelectSettingGui(this,
materialSelectionName materialSelectionName, name
, this); , this);
selectGui.show(event.getWhoClicked()); selectGui.show(event.getWhoClicked());
}, CustomAnvil.instance); }, CustomAnvil.instance);
String selectGroupName = "§e" + CasedStringUtil.snakeToUpperSpacedCase(this.group.getName()) + " §rGroups"; var selectGroupName = MsgUI.INSTANCE.getMATERIAL_GROUP_ELEMENT_SELECTED_SUB_GROUPS();
ItemStack selectGroup = new ItemStack(Material.CHEST); ItemStack selectGroup = new ItemStack(Material.CHEST);
ItemMeta selectGroupMeta = selectGroup.getItemMeta(); ItemMeta selectGroupMeta = selectGroup.getItemMeta();
selectGroupMeta.setDisplayName(selectGroupName); assert selectGroupMeta != null;
PlatformUtil.INSTANCE.setComponentDisplayName(
selectGroupMeta,
selectGroupName.formattedConcatenated(name),
null
);
selectGroup.setItemMeta(selectGroupMeta); selectGroup.setItemMeta(selectGroupMeta);
this.groupSelection = new GuiItem(selectGroup, (event) -> { this.groupSelection = new GuiItem(selectGroup, (event) -> {
event.setCancelled(true); event.setCancelled(true);
GroupSelectSettingGui enchantGui = new GroupSelectSettingGui( GroupSelectSettingGui enchantGui = new GroupSelectSettingGui(
selectGroupName, selectGroupName, name,
this, this, 0); this, this, 0);
enchantGui.show(event.getWhoClicked()); enchantGui.show(event.getWhoClicked());
}, CustomAnvil.instance); }, CustomAnvil.instance);
@ -152,8 +174,9 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
return success; return success;
}; };
return new ConfirmActionGui("§cDelete §e" + CasedStringUtil.snakeToUpperSpacedCase(this.group.toString()) + "§c?", var type = CasedStringUtil.snakeToUpperSpacedCase(this.group.toString());
"§7Confirm that you want to delete this group.", return new ConfirmActionGui(MsgUI.INSTANCE.getMATERIAL_GROUP_ELEMENT_DELETE_TITLE(), type,
MsgUI.INSTANCE.getMATERIAL_GROUP_ELEMENT_DELETE_DESCRIPTION(), type,
this, this.parent, deleteSupplier this, this.parent, deleteSupplier
); );
} }
@ -226,7 +249,8 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
ItemStack matSelectItem = this.materialSelection.getItem(); ItemStack matSelectItem = this.materialSelection.getItem();
ItemMeta matSelectMeta = matSelectItem.getItemMeta(); ItemMeta matSelectMeta = matSelectItem.getItemMeta();
matSelectMeta.setDisplayName("§aSelect included §eMaterials §aSettings"); assert matSelectMeta != null;
matSelectMeta.setDisplayName("§aSelect included §eMaterials §aSettings");//TODO MESSAGE
matSelectMeta.setLore(matLore); matSelectMeta.setLore(matLore);
matSelectMeta.addItemFlags(ItemFlag.values()); matSelectMeta.addItemFlags(ItemFlag.values());
@ -238,7 +262,8 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
ItemStack groupSelectItem = this.groupSelection.getItem(); ItemStack groupSelectItem = this.groupSelection.getItem();
ItemMeta groupSelectMeta = groupSelectItem.getItemMeta(); ItemMeta groupSelectMeta = groupSelectItem.getItemMeta();
groupSelectMeta.setDisplayName("§aSelect included §3Groups §aSettings"); assert groupSelectMeta != null;
groupSelectMeta.setDisplayName("§aSelect included §3Groups §aSettings");//TODO MESSAGE
groupSelectMeta.setLore(groupLore); groupSelectMeta.setLore(groupLore);
groupSelectItem.setItemMeta(groupSelectMeta); groupSelectItem.setItemMeta(groupSelectMeta);

View file

@ -1,18 +1,18 @@
package xyz.alexcrea.cuanvil.gui.config.list.elements; package xyz.alexcrea.cuanvil.gui.config.list.elements;
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; 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 io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.lang.MsgUI;
public abstract class MappedToListSubSettingGui extends ChestGui implements ValueUpdatableGui, ElementMappedToListGui { public abstract class MappedToListSubSettingGui extends ChestGui implements ValueUpdatableGui, ElementMappedToListGui {
protected MappedToListSubSettingGui( protected MappedToListSubSettingGui(
int rows, int rows,
@NotNull String title) { @NotNull String type) {
super(rows, title, CustomAnvil.instance); super(rows, MsgUI.INSTANCE.getSHARED_TYPED_CONFIG_TITLE().textHolder(type), CustomAnvil.instance);
} }
@Override @Override

View file

@ -20,6 +20,7 @@ import xyz.alexcrea.cuanvil.gui.config.SelectEnchantmentContainer;
import xyz.alexcrea.cuanvil.gui.config.list.SettingGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.SettingGuiListConfigGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.Message;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import java.util.*; import java.util.*;
@ -35,8 +36,10 @@ public class EnchantSelectSettingGui extends SettingGuiListConfigGui<CAEnchantme
private boolean displayUnselected; private boolean displayUnselected;
public EnchantSelectSettingGui(@NotNull String title, ValueUpdatableGui parent, SelectEnchantmentContainer enchantContainer) { public EnchantSelectSettingGui(
super(title, parent instanceof Gui parentGui ? parentGui : MainConfigGui.getInstance()) ; @NotNull Message title, @NotNull String param,
ValueUpdatableGui parent, SelectEnchantmentContainer enchantContainer) {
super(title, param, parent instanceof Gui parentGui ? parentGui : MainConfigGui.getInstance()) ;
this.enchantContainer = enchantContainer; this.enchantContainer = enchantContainer;
this.selectedEnchant = new HashSet<>(enchantContainer.getSelectedEnchantments()); this.selectedEnchant = new HashSet<>(enchantContainer.getSelectedEnchantments());

View file

@ -19,6 +19,7 @@ import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer; import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer;
import xyz.alexcrea.cuanvil.gui.config.list.ElementListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.ElementListConfigGui;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.Message;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import java.util.Collections; import java.util.Collections;
@ -34,8 +35,10 @@ public class GroupSelectSettingGui extends AbstractSettingGui {
Set<AbstractMaterialGroup> selectedGroups; Set<AbstractMaterialGroup> selectedGroups;
public GroupSelectSettingGui(@NotNull String title, ValueUpdatableGui parent, SelectGroupContainer groupContainer, int page) { public GroupSelectSettingGui(
super(6, title, parent); @NotNull Message title, @NotNull String param,
ValueUpdatableGui parent, SelectGroupContainer groupContainer, int page) {
super(6, title.textHolder(param), parent);
this.groupContainer = groupContainer; this.groupContainer = groupContainer;
//Not used but planned //Not used but planned
this.page = page; this.page = page;

View file

@ -18,6 +18,7 @@ import xyz.alexcrea.cuanvil.gui.config.list.MappedElementListConfigGui;
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.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.lang.Message;
import xyz.alexcrea.cuanvil.lang.MsgUI; import xyz.alexcrea.cuanvil.lang.MsgUI;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import xyz.alexcrea.cuanvil.util.MaterialUtil; import xyz.alexcrea.cuanvil.util.MaterialUtil;
@ -38,9 +39,10 @@ public class MaterialSelectSettingGui extends MappedElementListConfigGui<Namespa
public MaterialSelectSettingGui( public MaterialSelectSettingGui(
@NotNull SelectMaterialContainer selector, @NotNull SelectMaterialContainer selector,
@NotNull String title, @NotNull Message title,
@NotNull String param,
@NotNull Gui backGui) { @NotNull Gui backGui) {
super(title); super(title, param);//TODO MESSAGE make param go down
this.selector = selector; this.selector = selector;
this.backGui = backGui; this.backGui = backGui;
this.instantRemove = false; this.instantRemove = false;
@ -237,8 +239,8 @@ public class MaterialSelectSettingGui extends MappedElementListConfigGui<Namespa
// Create and show confirm remove gui. // Create and show confirm remove gui.
ConfirmActionGui confirmGui = new ConfirmActionGui( ConfirmActionGui confirmGui = new ConfirmActionGui(
"Remove " + materialName, MsgUI.INSTANCE.getMATERIAL_SELECT_CONFIRM_TITLE(), materialName,
"§7Confirm Remove " + materialName.toLowerCase() + " from this list.", MsgUI.INSTANCE.getMATERIAL_SELECT_CONFIRM_DESCRIPTION(), materialName.toLowerCase(),
this, this, this, this,
() -> { () -> {
removeMaterial(material); removeMaterial(material);

View file

@ -1,5 +1,7 @@
package xyz.alexcrea.cuanvil.lang package xyz.alexcrea.cuanvil.lang
import com.github.stefvanschie.inventoryframework.adventuresupport.ComponentHolder
import com.github.stefvanschie.inventoryframework.adventuresupport.TextHolder
import io.delilaheve.CustomAnvil import io.delilaheve.CustomAnvil
import net.kyori.adventure.text.Component import net.kyori.adventure.text.Component
import org.bukkit.command.CommandSender import org.bukkit.command.CommandSender
@ -22,6 +24,7 @@ open class Message(val key: String, vararg val params: String) {
for(i in 0 until min(params.size, values.size)) { for(i in 0 until min(params.size, values.size)) {
val key = params[i] val key = params[i]
val replacement = values[i].toString() val replacement = values[i].toString()
if(replacement.isEmpty()) continue //May not be good but can be changed if cause an issue
var current = 0 var current = 0
while(true) { while(true) {
@ -77,9 +80,11 @@ open class Message(val key: String, vararg val params: String) {
result.add(MiniMessageUtil.mm.deserialize(stb.toString())) result.add(MiniMessageUtil.mm.deserialize(stb.toString()))
} }
if(result.isEmpty()) return listOf(Component.text(key))
return result return result
} }
// return a list of AT LEAST 1 element. calling first is safe
fun formatted(vararg params: Any): List<Component> { fun formatted(vararg params: Any): List<Component> {
val section = Lang.getSection(key) val section = Lang.getSection(key)
if(section != null) return formattedMultiline(section, *params) if(section != null) return formattedMultiline(section, *params)
@ -89,6 +94,21 @@ open class Message(val key: String, vararg val params: String) {
return listOf(MiniMessageUtil.mm.deserialize(translated)) return listOf(MiniMessageUtil.mm.deserialize(translated))
} }
fun formattedConcatenated(vararg params: Any): Component {
val formated = formatted(*params)
var result = formated.first()
for(i in 1 until formated.size) {
result = result.appendNewline().append(formated[i])
}
return result
}
fun textHolder(vararg params: Any): TextHolder {
return ComponentHolder.of(formattedConcatenated(*params))
}
fun legacy(vararg params: Any): String { fun legacy(vararg params: Any): String {
val formated = formatted(*params) val formated = formatted(*params)

View file

@ -5,6 +5,7 @@ import xyz.alexcrea.cuanvil.lang.UIMessage as Message
object MsgUI { object MsgUI {
val SHARED_CONFIG_NO_EDIT_PERM = Message("shared.no-permission") val SHARED_CONFIG_NO_EDIT_PERM = Message("shared.no-permission")
val SHARED_TYPED_CONFIG_TITLE = Message("shared.typed-config-title", "type")
val CONFIRM_ACTION_FAILED = Message("confirm-action.fail") val CONFIRM_ACTION_FAILED = Message("confirm-action.fail")
@ -12,10 +13,44 @@ object MsgUI {
val ELEMENT_LIST_CANCELLED_NEW = Message("element-list.cancelled-new", "type") val ELEMENT_LIST_CANCELLED_NEW = Message("element-list.cancelled-new", "type")
val ELEMENT_LIST_DUPLICATED_NEW = Message("element-list.duplicated-new", "type") val ELEMENT_LIST_DUPLICATED_NEW = Message("element-list.duplicated-new", "type")
val UNIT_REPAIR_ELEMENT_TITLE = Message("unit-repair.element.title") val UNIT_REPAIR_TITLE = Message("unit-repair.title")
val UNIT_REPAIR_ELEMENT_DESCRIPTION = Message("unit-repair.element.description") val UNIT_REPAIR_ELEMENT_TITLE = Message("unit-repair.element_title")
val UNIT_REPAIR_ELEMENT_CANNOT_REPAIR_NEW = Message("unit-repair.element.cannot-damage-new") val UNIT_REPAIR_NEW_TITLE = Message("unit-repair.new.title")
val UNIT_REPAIR_ELEMENT_SAME_TYPE_NEW = Message("unit-repair.element.same-type-new") val UNIT_REPAIR_NEW_DESCRIPTION = Message("unit-repair.new.description")
val UNIT_REPAIR_NEW_ELEMENT_TITLE = Message("unit-repair.element.new.title", "name")
val UNIT_REPAIR_NEW_ELEMENT_DESCRIPTION = Message("unit-repair.element.new.description", "name")
val UNIT_REPAIR_NEW_ELEMENT_CANNOT_REPAIR = Message("unit-repair.element.new.cannot-damage")
val UNIT_REPAIR_NEW_ELEMENT_SAME_TYPE = Message("unit-repair.element.new.same-type")
val CUSTOM_RECIPE_TITLE = Message("custom-recipe.title")
val CUSTOM_RECIPE_ELEMENT_DELETE_TITLE = Message("custom-recipe.element.delete.title", "type")
val CUSTOM_RECIPE_ELEMENT_DELETE_DESCRIPTION = Message("custom-recipe.element.delete.description", "type")
val ENCHANTMENT_LEVEL_COST_TITLE = Message("enchant-level-cost.title")
val ENCHANTMENT_LEVEL_LIMIT_TITLE = Message("enchant-level-limit.title")
val ENCHANTMENT_MERGE_LIMIT_TITLE = Message("enchant-merge-limit.title")
val ENCHANTMENT_CONFLICT_TITLE = Message("enchant-conflict.title")
val ENCHANTMENT_CONFLICT_ELEMENT_ENCHANTMENTS = Message("enchant-conflict.element.selected-enchantments", "group")
val ENCHANTMENT_CONFLICT_ELEMENT_SUB_GROUPS = Message("enchant-conflict.element.selected-sub-groups", "group")
val ENCHANTMENT_CONFLICT_ELEMENT_DELETE_TITLE = Message("enchant-conflict.element.delete.title", "type")
val ENCHANTMENT_CONFLICT_ELEMENT_DELETE_DESCRIPTION = Message("enchant-conflict.element.delete.description", "type")
val MATERIAL_GROUP_TITLE = Message("material-group.title")
val MATERIAL_GROUP_ELEMENT_SELECTED_MATERIALS = Message("material-group.element.selected-materials", "group")
val MATERIAL_GROUP_ELEMENT_SELECTED_SUB_GROUPS = Message("material-group.element.selected-sub-groups", "group")
val MATERIAL_GROUP_ELEMENT_DELETE_TITLE = Message("material-group.element.delete.title", "type")
val MATERIAL_GROUP_ELEMENT_DELETE_DESCRIPTION = Message("material-group.element.delete.description", "type")
val MATERIAL_GROUP_ELEMENT_DELETE_BUTTON_NAME = Message("material-group.element.delete.button.name")
val MATERIAL_GROUP_ELEMENT_DELETE_BUTTON_LORE = Message("material-group.element.delete.button.lore")
val MATERIAL_SELECT_CONFIRM_TITLE = Message("material-select.confirm.title","name")
val MATERIAL_SELECT_CONFIRM_DESCRIPTION = Message("material-select.confirm.description","name")
} }

View file

@ -2,10 +2,28 @@ package xyz.alexcrea.cuanvil.util
import net.kyori.adventure.text.Component import net.kyori.adventure.text.Component
import org.bukkit.command.CommandSender import org.bukkit.command.CommandSender
import org.bukkit.inventory.meta.ItemMeta
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.sendPaperMessage import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.sendPaperMessage
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.setPaperLore
object ComponentUtil { object ComponentUtil {
fun Component.serializeMM(): String {
return MiniMessageUtil.mm.serialize(this)
}
fun Component.serializeMMColor(): String {
return MiniMessageUtil.color_only_mm.serialize(this)
}
fun Component.serializeLegacy(): String {
return MiniMessageUtil.legacy_mm.serialize(this)
}
fun Component.serializePlain(): String {
return MiniMessageUtil.plain_text_mm.serialize(this)
}
fun Component.send(destination: CommandSender) { fun Component.send(destination: CommandSender) {
if(!destination.sendPaperMessage(this)) if(!destination.sendPaperMessage(this))
destination.sendMessage(this.serializeLegacy()) destination.sendMessage(this.serializeLegacy())
@ -16,18 +34,9 @@ object ComponentUtil {
component.send(destination) component.send(destination)
} }
fun Component.serializeMM(): String { fun List<Component>.applyLore(meta: ItemMeta) {
return MiniMessageUtil.mm.serialize(this) if(!meta.setPaperLore(this))
meta.lore = this.map {obj -> obj.serializeLegacy()}
} }
fun Component.serializeMMColor(): String {
return MiniMessageUtil.color_only_mm.serialize(this)
}
fun Component.serializeLegacy(): String {
return MiniMessageUtil.legacy_mm.serialize(this)
}
fun Component.serializePlain(): String {
return MiniMessageUtil.plain_text_mm.serialize(this)
}
} }

View file

@ -24,6 +24,7 @@ error:
listeners: "error registering listeners" listeners: "error registering listeners"
enchant-system: "error initializing enchantment system" enchant-system: "error initializing enchantment system"
non-default-config: "Plugin has an issue while trying to load non default config... exiting..." non-default-config: "Plugin has an issue while trying to load non default config... exiting..."
reload: reload:
resource: resource:
fail: "Resource %path Could not be loaded or reloaded." fail: "Resource %path Could not be loaded or reloaded."
@ -37,11 +38,13 @@ command:
no-permission: "No permission to execute this command" no-permission: "No permission to execute this command"
warning: warning:
missing-subcmd: "Need to specify a subcommand. for example %example1 or %example2" missing-subcmd: "Need to specify a subcommand. for example %example1 or %example2"
root: root:
warning: warning:
unknown-sub: "<red>Invalid subcommand. run <yellow>`%command help` <red>to see available commands" unknown-sub: "<red>Invalid subcommand. run <yellow>`%command help` <red>to see available commands"
error: error:
generic: "<red>Error running this command" generic: "<red>Error running this command"
debug: debug:
description: "Used to toggle debug logs and retrieve them" description: "Used to toggle debug logs and retrieve them"
log-cleared: "Log Cleared" log-cleared: "Log Cleared"
@ -54,10 +57,12 @@ command:
unspecified-type: "Need to specify which type of debug to toggle: \"default\" or \"verbose\"" unspecified-type: "Need to specify which type of debug to toggle: \"default\" or \"verbose\""
invalid-type: "Invalid debug type \"%type\"" invalid-type: "Invalid debug type \"%type\""
no-log: "No log to show ? make sure you tried with debug log toggled (%command)" no-log: "No log to show ? make sure you tried with debug log toggled (%command)"
diagnostic: diagnostic:
description: "Basic diagnostic of this plugin" description: "Basic diagnostic of this plugin"
had-error: "<red>There was an error running the diagnostic" had-error: "<red>There was an error running the diagnostic"
copy: "<green>Click to copy diagnostic data" copy: "<green>Click to copy diagnostic data"
config: config:
description: "Used to edit the configuration of the plugin" description: "Used to edit the configuration of the plugin"
folia-issue: folia-issue:
@ -72,6 +77,7 @@ command:
warning: warning:
legacy-name: "<red>/ca gui has been moved to /ca config" legacy-name: "<red>/ca gui has been moved to /ca config"
cannot_configure: "Cannot configure the item in hand" cannot_configure: "Cannot configure the item in hand"
enchant: enchant:
description: "Allows to set enchantment to holden item" description: "Allows to set enchantment to holden item"
warning: warning:
@ -81,9 +87,11 @@ command:
cannot_enchant: "Cannot enchant this item" cannot_enchant: "Cannot enchant this item"
removed: "%name removed" removed: "%name removed"
set: "%name set to level %level" set: "%name set to level %level"
help: help:
description: "Help command" description: "Help command"
header: "List of available commands:" header: "List of available commands:"
reload: reload:
description: "Reload the configuration of this plugin" description: "Reload the configuration of this plugin"
start: "<yellow>Reloading config..." start: "<yellow>Reloading config..."
@ -94,19 +102,74 @@ command:
config-ui: config-ui:
shared: shared:
no-permission: "<red>You do not have permission to edit the config" no-permission: "<red>You do not have permission to edit the config"
typed-config-title: "<yellow>%type <white>Config"
confirm-action: confirm-action:
fail: "<red>Action could not be completed." fail: "<red>Action could not be completed."
element-list: element-list:
instruction-new: instruction-new:
1: "<yellow>Write the %type name you want to create in the chat." 1: "<yellow>Write the %type name you want to create in the chat."
2: "<yellow>Or write <red>cancel <yellow>to go back to %type config menu" 2: "<yellow>Or write <red>cancel <yellow>to go back to %type config menu"
cancelled-new: "%type creation cancelled..." cancelled-new: "%type creation cancelled..."
duplicated-new: "<red>Please enter a %type name that do not already exist..." duplicated-new: "<red>Please enter a %type name that do not already exist..."
unit-repair: unit-repair:
tile: "Unit Repair Config"
new:
title: "Select unit repair item."
description:
1: "<gray>Click here with an item to set the item"
2: "<gray>You like to be an unit repair item"
element: element:
title: "<yellow>%type <red>Unit repair"
new:
title: "Select item to be repaired." title: "Select item to be repaired."
description: description:
1: "<gray>Click here with an item to set the item" 1: "<gray>Click here with an item to set the item"
2: "<gray>You like to be repaired by %name" 2: "<gray>You like to be repaired by %name"
cannot-damage-new: "<red>This item can't be damaged, so it can't be repaired." cannot-damage: "<red>This item can't be damaged, so it can't be repaired."
same-type-new: "<red>Item can't repair something of the same type." same-type: "<red>Item can't repair something of the same type."
custom-recipe:
title: "Custom Recipe Config"
element:
delete:
title: "<red>Delete <yellow>%type<red>?"
description: "<gray>Confirm that you want to delete this recipe."
enchant-level-cost:
title: "<dark_gray>Enchantment Level Limit"
enchant-level-limit:
title: "<dark_gray>Enchantment Level Limit"
enchant-merge-limit:
title: "<dark_gray>Enchantment Maximum Merge Level"
enchant-conflict:
title: "Conflict Config"
element:
selected-enchantments: "<yellow>%group<dark_purple>" # likely need page and max page
selected-sub-groups: "<yellow>%group <red>Groups"
delete:
title: "<red>Delete <yellow>%type<red>?"
description: "<gray>Confirm that you want to delete this conflict."
material-group:
title: "Group Config"
element:
selected-materials: "<yellow>%group <red>Materials"
selected-sub-groups: "<yellow>%group <red>Groups"
delete:
title: "<red>Delete <yellow>%type<red>?"
description: "<gray>Confirm that you want to delete this group."
button:
name: "<dark_red>DELETE GROUP"
lore: "<red>Caution with this button !"
material-select:
new:
confirm:
title: "Remove %name"
description: "<dark_gray>Confirm Remove %name from this list."