From b59f5a350c6a6225c72b6dcdc51132a62141f22e Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Mon, 24 Mar 2025 12:54:31 -0500 Subject: [PATCH 1/7] chore: update Paper repo --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index d41ed3f..3763f43 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -24,7 +24,7 @@ allprojects { maven("https://oss.sonatype.org/content/repositories/snapshots") // Paper Repo - maven("https://papermc.io/repo/repository/maven-public/") + maven("https://repo.papermc.io/repository/maven-public/") // UpdateChecker maven("https://repo.jeff-media.com/public") From a50faee7fcb581e57c3566fc1cdd6eb9f142b30b Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Mon, 24 Mar 2025 13:05:28 -0500 Subject: [PATCH 2/7] feat: add ability for a HibiscusCommonsPlugin to see if it's on Folia --- .../HibiscusCommonsPlugin.java | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/HibiscusCommonsPlugin.java b/common/src/main/java/me/lojosho/hibiscuscommons/HibiscusCommonsPlugin.java index cc15c94..7713b5d 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/HibiscusCommonsPlugin.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/HibiscusCommonsPlugin.java @@ -4,6 +4,7 @@ import lombok.Getter; import me.lojosho.hibiscuscommons.hooks.Hooks; import me.lojosho.hibiscuscommons.nms.NMSHandlers; import me.lojosho.hibiscuscommons.util.ServerUtils; +import org.jetbrains.annotations.ApiStatus; public final class HibiscusCommonsPlugin extends HibiscusPlugin { @@ -11,6 +12,8 @@ public final class HibiscusCommonsPlugin extends HibiscusPlugin { private static HibiscusCommonsPlugin instance; @Getter private static boolean onPaper = false; + @Getter + private static boolean onFolia = false; public HibiscusCommonsPlugin() { super(20726); @@ -20,9 +23,10 @@ public final class HibiscusCommonsPlugin extends HibiscusPlugin { public void onStart() { instance = this; - // Detects if a user is running a paper server - if (ServerUtils.hasClass("com.destroystokyo.paper.PaperConfig") || ServerUtils.hasClass("io.papermc.paper.configuration.Configuration")) { - onPaper = true; + // Do startup checks + onPaper = isOnPaper(); + onFolia = isOnFolia(); + if (onPaper) { getLogger().info("Detected Paper! Enabling Paper support..."); //getServer().getPluginManager().registerEvents(new PaperPlayerGameListener(), this); } else { @@ -40,6 +44,29 @@ public final class HibiscusCommonsPlugin extends HibiscusPlugin { // Plugin startup logic Hooks.setup(); + } + /** + * Checks for Paper classes. Use {@link HibiscusCommonsPlugin#isOnPaper()} for cached value + * @return True if plugin is running on a server with Paper; False if not + */ + @ApiStatus.Internal + public boolean checkPaper() { + if (ServerUtils.hasClass("com.destroystokyo.paper.PaperConfig") || ServerUtils.hasClass("io.papermc.paper.configuration.Configuration")) { + return true; + } + return false; + } + + /** + * Checks for the Folia classes. Use {@link HibiscusCommonsPlugin#isOnFolia()} for cached value. + * @return True if plugin is running on a server with Folia; False if not + */ + @ApiStatus.Internal + public boolean checkFolia() { + if (ServerUtils.hasClass("io.papermc.paper.threadedregions.RegionizedServer")) { + return true; + } + return false; } } From 75c3d4b19a41217c6751dc8b01fd337d9f127582 Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Mon, 24 Mar 2025 15:40:45 -0500 Subject: [PATCH 3/7] feat: add item model id for item serializer --- build.gradle.kts | 1 - common/build.gradle.kts | 4 ++++ .../config/serializer/ItemSerializer.java | 22 ++++++++++++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3763f43..1d2528d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -78,7 +78,6 @@ allprojects { // Included externally compileOnly("com.mojang:authlib:3.13.56") - compileOnly("io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT") compileOnly("org.jetbrains:annotations:26.0.1") compileOnly("io.th0rgal:oraxen:1.182.0") compileOnly("com.nexomc:nexo:1.0.0") diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 8b94ab3..0f3dd80 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -15,4 +15,8 @@ tasks { duplicatesStrategy = DuplicatesStrategy.INCLUDE filteringCharset = Charsets.UTF_8.name() } +} + +dependencies { + compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT") } \ No newline at end of file diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/config/serializer/ItemSerializer.java b/common/src/main/java/me/lojosho/hibiscuscommons/config/serializer/ItemSerializer.java index e35f41d..53d9125 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/config/serializer/ItemSerializer.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/config/serializer/ItemSerializer.java @@ -2,6 +2,9 @@ package me.lojosho.hibiscuscommons.config.serializer; import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin; import me.lojosho.hibiscuscommons.hooks.Hooks; +import me.lojosho.hibiscuscommons.nms.MinecraftVersion; +import me.lojosho.hibiscuscommons.nms.NMSHandler; +import me.lojosho.hibiscuscommons.nms.NMSHandlers; import me.lojosho.hibiscuscommons.util.*; import org.apache.commons.lang3.EnumUtils; import org.bukkit.*; @@ -35,6 +38,7 @@ public class ItemSerializer implements TypeSerializer { private static final String GLOWING = "glowing"; private static final String LORE = "lore"; private static final String MODEL_DATA = "model-data"; + private static final String MODEL_ID = "model-id"; private static final String NBT_TAGS = "nbt-tag"; private static final String ENCHANTS = "enchants"; private static final String ITEM_FLAGS = "item-flags"; @@ -58,6 +62,7 @@ public class ItemSerializer implements TypeSerializer { final ConfigurationNode glowingNode = source.node(GLOWING); final ConfigurationNode loreNode = source.node(LORE); final ConfigurationNode modelDataNode = source.node(MODEL_DATA); + final ConfigurationNode modelIdNode = source.node(MODEL_ID); final ConfigurationNode nbtNode = source.node(NBT_TAGS); final ConfigurationNode enchantsNode = source.node(ENCHANTS); final ConfigurationNode itemFlagsNode = source.node(ITEM_FLAGS); @@ -87,7 +92,7 @@ public class ItemSerializer implements TypeSerializer { if (!unbreakableNode.virtual()) itemMeta.setUnbreakable(unbreakableNode.getBoolean()); if (!glowingNode.virtual()) { itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - itemMeta.addEnchant(Enchantment.LUCK, 1, true); + itemMeta.addEnchant(Enchantment.UNBREAKING, 1, true); } if (!loreNode.virtual()) { if (HibiscusCommonsPlugin.isOnPaper()) @@ -98,6 +103,21 @@ public class ItemSerializer implements TypeSerializer { } if (!modelDataNode.virtual()) itemMeta.setCustomModelData(modelDataNode.getInt()); + if (NMSHandlers.getVersion().isHigherOrEqual(MinecraftVersion.v1_21_4) && !modelIdNode.virtual()) { + String itemModelId = modelIdNode.getString(""); + String stringKey = HibiscusCommonsPlugin.getInstance().getName(); + if (itemModelId.contains(":")) { + String[] split = itemModelId.split(":"); + itemModelId = split[1]; + stringKey = split[0]; + } + if (!itemModelId.isEmpty()) { + NamespacedKey key = new NamespacedKey(stringKey, itemModelId); + itemMeta.setItemModel(key); + } else { + MessagesUtil.sendDebugMessages("Could not find item model id for " + stringKey + " in " + itemModelId); + } + } if (!nbtNode.virtual()) { for (ConfigurationNode nbtNodes : nbtNode.childrenMap().values()) { From c9ed39b5254656fdaca622c94850351f10469c1e Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Mon, 24 Mar 2025 15:45:39 -0500 Subject: [PATCH 4/7] chore: use new paper registry on recent versions for enchantments --- .../config/serializer/ItemSerializer.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/config/serializer/ItemSerializer.java b/common/src/main/java/me/lojosho/hibiscuscommons/config/serializer/ItemSerializer.java index 53d9125..4eec2ef 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/config/serializer/ItemSerializer.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/config/serializer/ItemSerializer.java @@ -1,5 +1,7 @@ package me.lojosho.hibiscuscommons.config.serializer; +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin; import me.lojosho.hibiscuscommons.hooks.Hooks; import me.lojosho.hibiscuscommons.nms.MinecraftVersion; @@ -129,7 +131,13 @@ public class ItemSerializer implements TypeSerializer { for (ConfigurationNode enchantNode : enchantsNode.childrenMap().values()) { String enchantName = enchantNode.key().toString().toLowerCase(); NamespacedKey key = NamespacedKey.minecraft(enchantName); - Enchantment enchant = Registry.ENCHANTMENT.get(key); + Enchantment enchant = null; + + if (HibiscusCommonsPlugin.isOnPaper() && NMSHandlers.getVersion().isHigherOrEqual(MinecraftVersion.v1_21_4)) { + enchant = RegistryAccess.registryAccess().getRegistry(RegistryKey.ENCHANTMENT).get(key); + } else { + enchant = Registry.ENCHANTMENT.get(key); + } if (enchant == null) continue; itemMeta.addEnchant(enchant, enchantNode.getInt(1), true); } From b323955fc984d665956160efac77ff8d8f4febf9 Mon Sep 17 00:00:00 2001 From: yusshu Date: Tue, 25 Mar 2025 09:43:44 -0500 Subject: [PATCH 5/7] fix: update to 1.21.4 item model components --- .../nms/v1_21_R3/NMSPackets.java | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java b/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java index 72f1426..5349455 100644 --- a/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java +++ b/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java @@ -1,5 +1,6 @@ package me.lojosho.hibiscuscommons.nms.v1_21_R3; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.mojang.datafixers.util.Pair; import com.mojang.serialization.JsonOps; @@ -26,6 +27,7 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.world.scores.PlayerTeam; import net.minecraft.world.scores.Team; import org.bukkit.Bukkit; +import org.bukkit.Color; import org.bukkit.Location; import org.bukkit.craftbukkit.CraftEquipmentSlot; import org.bukkit.craftbukkit.entity.CraftEntityType; @@ -39,6 +41,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.components.CustomModelDataComponent; import org.joml.Quaternionf; import org.joml.Vector3f; @@ -318,8 +321,43 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. components.addProperty("minecraft:enchantment_glint_override", true); } + if (meta.hasItemModel()) { + components.addProperty("minecraft:item_model", meta.getItemModel().toString()); + } + if (meta.hasCustomModelData()) { - components.addProperty("minecraft:custom_model_data", meta.getCustomModelData()); + CustomModelDataComponent customModelDataComponent = meta.getCustomModelDataComponent(); + JsonObject customModelDataComponentJson = new JsonObject(); + + List floats = customModelDataComponent.getFloats(); + if (!floats.isEmpty()) { + JsonArray floatsArray = new JsonArray(); + floats.forEach(floatsArray::add); + customModelDataComponentJson.add("floats", floatsArray); + } + + List flags = customModelDataComponent.getFlags(); + if (!flags.isEmpty()) { + JsonArray flagsArray = new JsonArray(); + flags.forEach(flagsArray::add); + customModelDataComponentJson.add("flags", flagsArray); + } + + List strings = customModelDataComponent.getStrings(); + if (!strings.isEmpty()) { + JsonArray stringsArray = new JsonArray(); + strings.forEach(stringsArray::add); + customModelDataComponentJson.add("strings", stringsArray); + } + + List colors = customModelDataComponent.getColors(); + if (!colors.isEmpty()) { + JsonArray colorsArray = new JsonArray(); + colors.forEach(color -> colorsArray.add(color.asRGB())); + customModelDataComponentJson.add("colors", colorsArray); + } + + components.add("minecraft:custom_model_data", customModelDataComponentJson); } iconObj.add("components", components); From 7d25b8c470148f2226e788d3c9b6ae0024f6384b Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Tue, 25 Mar 2025 13:40:50 -0500 Subject: [PATCH 6/7] fix: paper and folia check not actually checking classes --- .../me/lojosho/hibiscuscommons/HibiscusCommonsPlugin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/HibiscusCommonsPlugin.java b/common/src/main/java/me/lojosho/hibiscuscommons/HibiscusCommonsPlugin.java index 7713b5d..6713406 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/HibiscusCommonsPlugin.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/HibiscusCommonsPlugin.java @@ -24,8 +24,8 @@ public final class HibiscusCommonsPlugin extends HibiscusPlugin { instance = this; // Do startup checks - onPaper = isOnPaper(); - onFolia = isOnFolia(); + onPaper = checkPaper(); + onFolia = checkFolia(); if (onPaper) { getLogger().info("Detected Paper! Enabling Paper support..."); //getServer().getPluginManager().registerEvents(new PaperPlayerGameListener(), this); From 0aa62a485f89fa33f45bfe781d50a0ae39f8fe1f Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Sat, 29 Mar 2025 10:56:40 -0500 Subject: [PATCH 7/7] version bump (0.6.3) --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1d2528d..98440a9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "me.lojosho" -version = "0.6.2${getGitCommitHash()}" +version = "0.6.3${getGitCommitHash()}" allprojects { apply(plugin = "java")