From 92b75c43abc1af3f978fd14d64e3e40a57b946f6 Mon Sep 17 00:00:00 2001 From: Boy0000 Date: Tue, 11 Nov 2025 01:39:33 +0100 Subject: [PATCH] feat: add itemmodel & itemname placeholders, bump api to 1.21.4 with attribute wrapper --- build.gradle.kts | 2 +- .../cosmetic/types/CosmeticBackpackType.java | 3 +- .../placeholders/HMCPlaceholderExpansion.java | 73 ++++++++++++++----- .../user/manager/UserBackpackManager.java | 3 +- .../user/manager/UserWardrobeManager.java | 3 +- .../hmccosmetics/util/AttributeWrapper.java | 18 +++++ 6 files changed, 78 insertions(+), 24 deletions(-) create mode 100644 common/src/main/java/com/hibiscusmc/hmccosmetics/util/AttributeWrapper.java diff --git a/build.gradle.kts b/build.gradle.kts index 5f76ab8f..2b062b78 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -75,7 +75,7 @@ allprojects { compileOnly(fileTree("${project.rootDir}/lib") { include("*.jar") }) compileOnly("com.mojang:authlib:1.5.25") //compileOnly("org.spigotmc:spigot-api:1.18.2-R0.1-SNAPSHOT") - compileOnly("io.papermc.paper:paper-api:1.20.6-R0.1-SNAPSHOT") + compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT") compileOnly("org.jetbrains:annotations:24.1.0") compileOnly("me.clip:placeholderapi:2.11.6") compileOnly("com.ticxo.modelengine:ModelEngine:R4.0.6") diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java index dfef6bc8..47d2cb1b 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java @@ -7,6 +7,7 @@ import com.hibiscusmc.hmccosmetics.cosmetic.behavior.CosmeticUpdateBehavior; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.user.manager.UserBackpackManager; import com.hibiscusmc.hmccosmetics.user.manager.UserEntity; +import com.hibiscusmc.hmccosmetics.util.AttributeWrapper; import com.hibiscusmc.hmccosmetics.util.packets.HMCCPacketManager; import lombok.Getter; import me.lojosho.hibiscuscommons.util.packets.PacketManager; @@ -63,7 +64,7 @@ public class CosmeticBackpackType extends Cosmetic implements CosmeticUpdateBeha PacketManager.equipmentSlotUpdate(firstArmorStandId, EquipmentSlot.HEAD, user.getUserCosmeticItem(this, getItem()), newViewers); if (user.getPlayer() != null) { - AttributeInstance scaleAttribute = user.getPlayer().getAttribute(Attribute.GENERIC_SCALE); + AttributeInstance scaleAttribute = user.getPlayer().getAttribute(AttributeWrapper.SCALE); if (scaleAttribute != null) { HMCCPacketManager.sendEntityScalePacket(user.getUserBackpackManager().getFirstArmorStandId(), scaleAttribute.getValue(), newViewers); } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/hooks/placeholders/HMCPlaceholderExpansion.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/hooks/placeholders/HMCPlaceholderExpansion.java index 3616afb5..7e885cca 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/hooks/placeholders/HMCPlaceholderExpansion.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/hooks/placeholders/HMCPlaceholderExpansion.java @@ -73,29 +73,20 @@ public class HMCPlaceholderExpansion extends PlaceholderExpansion { if (placeholderArgs.size() >= 2) { CosmeticSlot slot = CosmeticSlot.valueOf(placeholderArgs.get(1).toUpperCase()); if (slot == null) return null; - if (user.getCosmetic(slot) == null) return TranslationUtil.getTranslation("current-cosmetic", "no-cosmetic"); + Cosmetic cosmetic = user.getCosmetic(slot); + if (cosmetic == null) return TranslationUtil.getTranslation("current-cosmetic", "no-cosmetic"); if (placeholderArgs.size() == 2) return user.getCosmetic(slot).getId(); String output; switch (placeholderArgs.get(2).toLowerCase()) { - case "material" -> { - output = getMaterialName(user.getCosmetic(slot)); - } - case "custommodeldata" -> { - output = getModelData(user.getCosmetic(slot)); - } - case "name" -> { - output = getItemName(user.getCosmetic(slot)); - } - case "lore" -> { - output = getItemLore(user.getCosmetic(slot)); - } - case "permission" -> { - output = user.getCosmetic(slot).getPermission(); - } - default -> { - output = user.getCosmetic(slot).getId(); - } + case "material" -> output = getMaterialName(cosmetic); + case "custommodeldata" -> output = getModelData(cosmetic); + case "itemmodel" -> output = getItemModel(cosmetic); + case "itemname" -> output = getItemName(cosmetic); + case "name" -> output = getDisplayName(cosmetic); + case "lore" -> output = getItemLore(cosmetic); + case "permission" -> output = user.getCosmetic(slot).getPermission(); + default -> output = user.getCosmetic(slot).getId(); } if (output == null) output = "none"; return TranslationUtil.getTranslation("current-cosmetic", output); @@ -217,13 +208,55 @@ public class HMCPlaceholderExpansion extends PlaceholderExpansion { return String.valueOf(itemMeta.getCustomModelData()); } + + + /** + * Gets the cosmetic items item model + * @param cosmetic The cosmetic to get its item model + * @return The cosmetic items item model + */ + @Nullable + public String getItemModel(@NotNull Cosmetic cosmetic) { + try { + ItemStack item = cosmetic.getItem(); + if (item == null) return null; + if (!item.hasItemMeta()) return null; + ItemMeta itemMeta = item.getItemMeta(); + if (itemMeta == null && itemMeta.hasItemModel() ) return null; + return itemMeta.getItemModel().asString(); + } catch (Exception e) { + return null; + } + } + + + + /** + * Gets the cosmetic items item name + * @param cosmetic The cosmetic to get its items item name + * @return The cosmetic items item name + */ + @Nullable + public String getItemName(@NotNull Cosmetic cosmetic) { + try { + ItemStack item = cosmetic.getItem(); + if (item == null) return null; + if (!item.hasItemMeta()) return null; + ItemMeta itemMeta = item.getItemMeta(); + if (itemMeta == null || !itemMeta.hasItemName()) return null; + return itemMeta.getDisplayName(); + } catch (Exception e) { + return null; + } + } + /** * Gets the cosmetic items display name * @param cosmetic The cosmetic to get its items display name * @return The cosmetic items display name */ @Nullable - public String getItemName(@NotNull Cosmetic cosmetic) { + public String getDisplayName(@NotNull Cosmetic cosmetic) { ItemStack item = cosmetic.getItem(); if (item == null) return null; if (!item.hasItemMeta()) return null; diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java index 0854c9b1..19204714 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java @@ -3,6 +3,7 @@ package com.hibiscusmc.hmccosmetics.user.manager; import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticBackpackType; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; +import com.hibiscusmc.hmccosmetics.util.AttributeWrapper; import com.hibiscusmc.hmccosmetics.util.MessagesUtil; import com.hibiscusmc.hmccosmetics.util.packets.HMCCPacketManager; import lombok.Getter; @@ -60,7 +61,7 @@ public class UserBackpackManager { HMCCPacketManager.spawnInvisibleArmorstand(getFirstArmorStandId(), user.getEntity().getLocation(), UUID.randomUUID(), outsideViewers); if (user.getPlayer() != null) { - AttributeInstance scaleAttribute = user.getPlayer().getAttribute(Attribute.GENERIC_SCALE); + AttributeInstance scaleAttribute = user.getPlayer().getAttribute(AttributeWrapper.SCALE); if (scaleAttribute != null) { HMCCPacketManager.sendEntityScalePacket(getFirstArmorStandId(), scaleAttribute.getValue(), outsideViewers); } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java index 093be0d2..002161db 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java @@ -10,6 +10,7 @@ import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticBalloonType; import com.hibiscusmc.hmccosmetics.gui.Menu; import com.hibiscusmc.hmccosmetics.gui.Menus; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; +import com.hibiscusmc.hmccosmetics.util.AttributeWrapper; import com.hibiscusmc.hmccosmetics.util.HMCCInventoryUtils; import com.hibiscusmc.hmccosmetics.util.MessagesUtil; import com.hibiscusmc.hmccosmetics.util.HMCCServerUtils; @@ -143,7 +144,7 @@ public class UserWardrobeManager { HMCCPacketManager.sendPlayerOverlayPacket(NPC_ID, viewer); MessagesUtil.sendDebugMessages("Spawned Fake Player on " + npcLocation); NMSHandlers.getHandler().getPacketHandler().sendScoreboardHideNamePacket(player, npcName); - AttributeInstance scaleAttribute = user.getPlayer().getAttribute(Attribute.GENERIC_SCALE); + AttributeInstance scaleAttribute = user.getPlayer().getAttribute(AttributeWrapper.SCALE); if (scaleAttribute != null) { HMCCPacketManager.sendEntityScalePacket(NPC_ID, scaleAttribute.getValue(), viewer); } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/util/AttributeWrapper.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/util/AttributeWrapper.java new file mode 100644 index 00000000..3fb88326 --- /dev/null +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/util/AttributeWrapper.java @@ -0,0 +1,18 @@ +package com.hibiscusmc.hmccosmetics.util; + +import org.bukkit.attribute.Attribute; +import org.jetbrains.annotations.ApiStatus; + +public class AttributeWrapper { + @Deprecated + @ApiStatus.ScheduledForRemoval + public static Attribute SCALE; + + static { + try { + SCALE = Attribute.SCALE; + } catch (Exception e) { + SCALE = Attribute.valueOf("GENERIC_SCALE"); + } + } +}