9
0
mirror of https://github.com/HibiscusMC/HMCCosmetics.git synced 2025-12-31 21:06:38 +00:00

feat: add option to add glide item component when player has elytra equipped

This commit is contained in:
Logan
2025-12-31 14:00:26 -06:00
parent e7307145de
commit 02d869dc01
5 changed files with 33 additions and 5 deletions

View File

@@ -205,7 +205,8 @@ public class Settings {
}
boolean addEnchantments = value.node("add-enchantments").getBoolean(false);
boolean requireEmpty = value.node("require-empty").getBoolean(false);
slotOptions.put(slot, new SlotOptionConfig(slot, addEnchantments, requireEmpty));
boolean addElytraComponent = value.node("add-elytra-componnt").getBoolean(true);
slotOptions.put(slot, new SlotOptionConfig(slot, addEnchantments, requireEmpty, addElytraComponent));
});
tickPeriod = cosmeticSettings.node(TICK_PERIOD_PATH).getInt(-1);
@@ -270,7 +271,7 @@ public class Settings {
}
public static SlotOptionConfig getSlotOption(EquipmentSlot slot) {
if (!slotOptions.containsKey(slot)) slotOptions.put(slot, new SlotOptionConfig(slot, false, false));
if (!slotOptions.containsKey(slot)) slotOptions.put(slot, new SlotOptionConfig(slot, false, false, false));
return slotOptions.get(slot);
}

View File

@@ -11,10 +11,13 @@ public class SlotOptionConfig {
private final boolean addEnchantments;
@Getter
private final boolean requireEmpty;
@Getter
private final boolean addElytraComponent;
public SlotOptionConfig(EquipmentSlot slot, boolean addEnchantments, boolean requireEmpty) {
public SlotOptionConfig(EquipmentSlot slot, boolean addEnchantments, boolean requireEmpty, boolean addElytraComponent) {
this.slot = slot;
this.addEnchantments = addEnchantments;
this.requireEmpty = requireEmpty;
this.addElytraComponent = addElytraComponent;
}
}

View File

@@ -1,11 +1,16 @@
package com.hibiscusmc.hmccosmetics.cosmetic.types;
import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin;
import com.hibiscusmc.hmccosmetics.config.Settings;
import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic;
import com.hibiscusmc.hmccosmetics.cosmetic.behavior.CosmeticUpdateBehavior;
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
import com.hibiscusmc.hmccosmetics.util.HMCCInventoryUtils;
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
import com.hibiscusmc.hmccosmetics.util.packets.HMCCPacketManager;
import io.papermc.paper.datacomponent.DataComponentType;
import io.papermc.paper.datacomponent.DataComponentTypes;
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
import me.lojosho.hibiscuscommons.util.packets.PacketManager;
import me.lojosho.shaded.configurate.ConfigurationNode;
import org.bukkit.Bukkit;
@@ -16,6 +21,8 @@ import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.logging.Level;
public class CosmeticArmorType extends Cosmetic implements CosmeticUpdateBehavior {
private final EquipmentSlot equipSlot;
@@ -51,9 +58,14 @@ public class CosmeticArmorType extends Cosmetic implements CosmeticUpdateBehavio
Player player = user.getPlayer();
if (player == null) return null;
ItemStack physicalEquippedItem = player.getInventory().getItem(equipSlot);
if (Settings.getSlotOption(equipSlot).isAddEnchantments()) {
ItemStack equippedItem = player.getInventory().getItem(equipSlot);
cosmeticItem.addUnsafeEnchantments(equippedItem.getEnchantments());
cosmeticItem.addUnsafeEnchantments(physicalEquippedItem.getEnchantments());
}
if (Settings.getSlotOption(equipSlot).isAddElytraComponent()
&& HibiscusCommonsPlugin.isOnPaper()
&& HMCCInventoryUtils.isGlider(physicalEquippedItem)) {
cosmeticItem.editMeta(itemMeta -> itemMeta.setGlider(true));
}
// Basically, if force offhand is off AND there is no item in an offhand slot, then the equipment packet to add the cosmetic
return cosmeticItem;

View File

@@ -2,9 +2,11 @@ package com.hibiscusmc.hmccosmetics.util;
import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin;
import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
@@ -136,4 +138,13 @@ public class HMCCInventoryUtils {
public static List<EquipmentSlot> getPlayerArmorSlots() {
return Arrays.asList(EquipmentSlot.HEAD, EquipmentSlot.CHEST, EquipmentSlot.LEGS, EquipmentSlot.FEET, EquipmentSlot.OFF_HAND, EquipmentSlot.HAND);
}
public static boolean isGlider(@NotNull ItemStack itemStack) {
Material type = itemStack.getType();
if (type.isAir()) return false;
if (type == Material.ELYTRA) return true; // Hacky
ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta == null) return false;
return itemMeta.isGlider();
}
}

View File

@@ -68,6 +68,7 @@ cosmetic-settings:
chestplate:
add-enchantments: false
require-empty: false
add-elytra-componnt: true
leggings:
add-enchantments: false
require-empty: false