diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/config/Settings.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/config/Settings.java index 4388be33..6ab43b89 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/config/Settings.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/config/Settings.java @@ -47,6 +47,10 @@ public class Settings { private static final String COSMETIC_ADD_ENCHANTS_LEGGINGS_PATH = "leggings-add-enchantments"; private static final String COSMETIC_ADD_ENCHANTS_BOOTS_PATH = "boots-add-enchantments"; private static final String COSMETIC_DESTROY_LOOSE_COSMETIC_PATH = "destroy-loose-cosmetics"; + private static final String MENU_SETTINGS_PATH = "menu-settings"; + private static final String COSMETIC_TYPE_SETTINGS_PATH = "cosmetic-type"; + private static final String EQUIP_CLICK_TYPE = "equip-click"; + private static final String UNEQUIP_CLICK_TYPE = "unequip-click"; private static String defaultMenu; private static String dyeMenuName; @@ -77,6 +81,8 @@ public class Settings { private static int tickPeriod; private static double emoteDistance; private static Vector balloonOffset; + private static String cosmeticEquipClickType; + private static String cosmeticUnEquipClickType; public static void load(ConfigurationNode source) { @@ -113,10 +119,14 @@ public class Settings { addChestplateEnchants = cosmeticSettings.node(COSMETIC_ADD_ENCHANTS_CHESTPLATE_PATH).getBoolean(false); addLeggingEnchants = cosmeticSettings.node(COSMETIC_ADD_ENCHANTS_LEGGINGS_PATH).getBoolean(false); addBootsEnchants = cosmeticSettings.node(COSMETIC_ADD_ENCHANTS_BOOTS_PATH).getBoolean(false); - tickPeriod = cosmeticSettings.node(TICK_PERIOD_PATH).getInt(-1); viewDistance = cosmeticSettings.node(VIEW_DISTANCE_PATH).getInt(); + ConfigurationNode menuSettings = source.node(MENU_SETTINGS_PATH); + ConfigurationNode cosmeticTypeSettings = menuSettings.node(COSMETIC_TYPE_SETTINGS_PATH); + cosmeticEquipClickType = cosmeticTypeSettings.node(EQUIP_CLICK_TYPE).getString("ALL"); + cosmeticUnEquipClickType = cosmeticTypeSettings.node(UNEQUIP_CLICK_TYPE).getString("ALL"); + final var balloonSection = cosmeticSettings.node(BALLOON_OFFSET); balloonOffset = loadVector(balloonSection); @@ -312,4 +322,12 @@ public class Settings { plugin.saveConfig(); } + + public static String getCosmeticEquipClickType() { + return cosmeticEquipClickType; + } + + public static String getCosmeticUnEquipClickType() { + return cosmeticUnEquipClickType; + } } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/Menu.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/Menu.java index 4f6b2a66..8cf32454 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/Menu.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/Menu.java @@ -2,6 +2,7 @@ package com.hibiscusmc.hmccosmetics.gui; import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; import com.hibiscusmc.hmccosmetics.api.events.PlayerMenuOpenEvent; +import com.hibiscusmc.hmccosmetics.config.Settings; import com.hibiscusmc.hmccosmetics.config.serializer.ItemSerializer; import com.hibiscusmc.hmccosmetics.gui.type.Type; import com.hibiscusmc.hmccosmetics.gui.type.Types; diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/type/types/TypeCosmetic.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/type/types/TypeCosmetic.java index 440bd9e5..77f2ce8c 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/type/types/TypeCosmetic.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/type/types/TypeCosmetic.java @@ -1,6 +1,7 @@ package com.hibiscusmc.hmccosmetics.gui.type.types; import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; +import com.hibiscusmc.hmccosmetics.config.Settings; import com.hibiscusmc.hmccosmetics.config.serializer.ItemSerializer; import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetics; @@ -53,6 +54,20 @@ public class TypeCosmetic extends Type { return; } + boolean isUnEquippingCosmetic = false; + if (user.getCosmetic(cosmetic.getSlot()) == cosmetic) isUnEquippingCosmetic = true; + + String requiredClick; + if (isUnEquippingCosmetic) requiredClick = Settings.getCosmeticUnEquipClickType(); + else requiredClick = Settings.getCosmeticEquipClickType(); + + MessagesUtil.sendDebugMessages("Required click type: " + requiredClick); + MessagesUtil.sendDebugMessages("Click type: " + clickType.name()); + if (!requiredClick.equalsIgnoreCase("ANY") && !requiredClick.equalsIgnoreCase(clickType.name())) { + MessagesUtil.sendMessage(user.getPlayer(), "invalid-click-type"); + return; + } + List actionStrings = new ArrayList<>(); ConfigurationNode actionConfig = config.node("actions"); @@ -70,7 +85,7 @@ public class TypeCosmetic extends Type { } } - if (user.getCosmetic(cosmetic.getSlot()) == cosmetic) { + if (isUnEquippingCosmetic) { if (!actionConfig.node("on-unequip").virtual()) actionStrings.addAll(actionConfig.node("on-unequip").getList(String.class)); MessagesUtil.sendDebugMessages("on-unequip"); user.removeCosmeticSlot(cosmetic); diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index ad3e0cb9..fb846cf1 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -48,6 +48,11 @@ cosmetic-settings: x: 0.5 y: 3 z: 0.5 +menu-settings: + cosmetic-type: + # This allows you to specify if it should require a special click type for the interaction to work. + equip-click: "ANY" # ANY or ClickType, https://jd.papermc.io/paper/1.20/org/bukkit/event/inventory/ClickType.html + unequip-click: "ANY" # ANY or ClickType, https://jd.papermc.io/paper/1.20/org/bukkit/event/inventory/ClickType.html dye-menu: # If you use ItemsAdder, set this to "§f:offset_-8::dye_menu:" # If you use Oraxen, set this to ""