diff --git a/API/src/main/java/fr/maxlego08/items/api/configurations/ItemConfiguration.java b/API/src/main/java/fr/maxlego08/items/api/configurations/ItemConfiguration.java index 81aa58c..52150ae 100644 --- a/API/src/main/java/fr/maxlego08/items/api/configurations/ItemConfiguration.java +++ b/API/src/main/java/fr/maxlego08/items/api/configurations/ItemConfiguration.java @@ -39,6 +39,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Axolotl; import org.bukkit.entity.Player; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemRarity; import org.bukkit.inventory.meta.ArmorMeta; @@ -107,6 +108,8 @@ public class ItemConfiguration { private final YamlConfiguration configuration; private final boolean repairDisabled; private String equippedModel= null; + private EquipmentSlot equippedSlot = null; + private boolean swappableEquipment = false; private AxolotlBucketConfiguration axolotlBucketConfiguration; private BannerMetaConfiguration bannerMetaConfiguration; private PotionMetaConfiguration potionMetaConfiguration; @@ -246,6 +249,18 @@ public ItemConfiguration(ItemPlugin plugin, YamlConfiguration configuration, Str if (equippedModel != null && !equippedModel.isEmpty()) { this.equippedModel = equippedModel; } + String equippedSlotString = configuration.getString(path + "equipped-slot"); + if (equippedSlotString != null && !equippedSlotString.isEmpty()) { + try { + this.equippedSlot = EquipmentSlot.valueOf(equippedSlotString.toUpperCase()); + } catch (IllegalArgumentException e) { + plugin.getLogger().severe("Equipped slot " + equippedSlotString + " is not valid for item " + fileName); + } + } + boolean swappableEquipment = configuration.getBoolean(path + "swappable-equipment", false); + if (swappableEquipment && this.equippedModel != null && this.equippedSlot != null) { + this.swappableEquipment = true; + } this.loadAxolotl(plugin, configuration, fileName, path); this.loadBanner(plugin, configuration, fileName, path); @@ -613,6 +628,14 @@ public String getEquippedModel() { return equippedModel; } + public EquipmentSlot getEquippedSlot() { + return equippedSlot; + } + + public boolean isSwappableEquipment() { + return swappableEquipment; + } + public CommandsConfiguration getCommandsConfiguration() { return commandsConfiguration; } diff --git a/src/main/java/fr/maxlego08/items/ZItem.java b/src/main/java/fr/maxlego08/items/ZItem.java index 11e946d..d4dab1d 100644 --- a/src/main/java/fr/maxlego08/items/ZItem.java +++ b/src/main/java/fr/maxlego08/items/ZItem.java @@ -13,6 +13,7 @@ import org.bukkit.NamespacedKey; import org.bukkit.attribute.AttributeModifier; import org.bukkit.entity.Player; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ArmorMeta; @@ -132,10 +133,18 @@ public ItemStack build(Player player, int amount) { persistentDataContainer.set(this.plugin.getRuneManager().getRuneRepresentKey(), this.plugin.getRuneManager().getDataType(), this.configuration.getItemRuneConfiguration().rune()); } - if (this.configuration.getEquippedModel() != null){ - String[] split = this.configuration.getEquippedModel().split(":",2); + if (this.configuration.getEquippedModel() != null || this.configuration.getEquippedSlot() != null) { EquippableComponent equippableComponent = itemMeta.getEquippable(); - equippableComponent.setModel(new NamespacedKey(split[0], split[1])); + if (this.configuration.getEquippedModel() != null) { + String[] split = this.configuration.getEquippedModel().split(":",2); + equippableComponent.setModel(new NamespacedKey(split[0], split[1])); + } + if (this.configuration.getEquippedSlot() != null) { + equippableComponent.setSlot(this.configuration.getEquippedSlot()); + } + if (this.configuration.isSwappableEquipment()){ + equippableComponent.setSwappable(this.configuration.isSwappableEquipment()); + } itemMeta.setEquippable(equippableComponent); }