From b59f5a350c6a6225c72b6dcdc51132a62141f22e Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Mon, 24 Mar 2025 12:54:31 -0500 Subject: [PATCH 1/4] 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/4] 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/4] 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/4] 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); }