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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,6 +68,7 @@ cosmetic-settings:
|
||||
chestplate:
|
||||
add-enchantments: false
|
||||
require-empty: false
|
||||
add-elytra-componnt: true
|
||||
leggings:
|
||||
add-enchantments: false
|
||||
require-empty: false
|
||||
|
||||
Reference in New Issue
Block a user