diff --git a/api/build.gradle.kts b/api/build.gradle.kts index a868ac7..205472b 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -15,6 +15,7 @@ dependencies { compileOnly("net.kyori:adventure-text-serializer-gson:${rootProject.properties["adventure_bundle_version"]}") compileOnly("net.kyori:adventure-text-minimessage:${rootProject.properties["adventure_bundle_version"]}") compileOnly("net.kyori:adventure-text-serializer-gson:${rootProject.properties["adventure_bundle_version"]}") + compileOnly("net.kyori:adventure-text-serializer-json-legacy-impl:${rootProject.properties["adventure_bundle_version"]}") // YAML implementation(files("libs/boosted-yaml-${rootProject.properties["boosted_yaml_version"]}.jar")) // Cache diff --git a/api/src/main/java/net/momirealms/customnameplates/api/helper/AdventureHelper.java b/api/src/main/java/net/momirealms/customnameplates/api/helper/AdventureHelper.java index 0b25497..0bf3e07 100644 --- a/api/src/main/java/net/momirealms/customnameplates/api/helper/AdventureHelper.java +++ b/api/src/main/java/net/momirealms/customnameplates/api/helper/AdventureHelper.java @@ -23,6 +23,8 @@ import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.kyori.adventure.text.serializer.json.JSONOptions; +import net.kyori.adventure.text.serializer.json.legacyimpl.NBTLegacyHoverEventSerializer; import net.momirealms.customnameplates.api.ConfigManager; import net.momirealms.customnameplates.api.CustomNameplates; @@ -52,7 +54,19 @@ public class AdventureHelper { private AdventureHelper() { this.miniMessage = MiniMessage.builder().build(); this.miniMessageStrict = MiniMessage.builder().strict(true).build(); - this.gsonComponentSerializer = GsonComponentSerializer.builder().build(); + GsonComponentSerializer.Builder builder = GsonComponentSerializer.builder(); + if (!VersionHelper.isVersionNewerThan1_20_5()) { + builder.legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get()); + builder.editOptions((b) -> b.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, false)); + } + if (!VersionHelper.isVersionNewerThan1_21_5()) { + builder.editOptions((b) -> { + b.value(JSONOptions.EMIT_CLICK_EVENT_TYPE, JSONOptions.ClickEventValueMode.CAMEL_CASE); + b.value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.CAMEL_CASE); + b.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_KEY_AS_TYPE_AND_UUID_AS_ID, true); + }); + } + this.gsonComponentSerializer = builder.build(); ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1, r -> { Thread thread = Executors.defaultThreadFactory().newThread(r); diff --git a/api/src/main/java/net/momirealms/customnameplates/api/network/PacketEvent.java b/api/src/main/java/net/momirealms/customnameplates/api/network/PacketEvent.java index 2fb9ccb..bd1c567 100644 --- a/api/src/main/java/net/momirealms/customnameplates/api/network/PacketEvent.java +++ b/api/src/main/java/net/momirealms/customnameplates/api/network/PacketEvent.java @@ -19,18 +19,12 @@ package net.momirealms.customnameplates.api.network; import net.momirealms.customnameplates.common.event.Cancellable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - /** * Represents a packet event, which can be cancelled and supports delayed tasks that are executed later. */ public class PacketEvent implements Cancellable { private boolean cancelled; - private List delayedTasks = null; private final Object packet; /** @@ -51,27 +45,6 @@ public class PacketEvent implements Cancellable { return packet; } - /** - * Adds a task to be executed later, after the event has been processed. - * - * @param task the task to be added - */ - public void addDelayedTask(Runnable task) { - if (delayedTasks == null) { - delayedTasks = new ArrayList<>(); - } - delayedTasks.add(task); - } - - /** - * Returns the list of delayed tasks to be executed. - * - * @return a list of tasks, or an empty list if no tasks are added - */ - public List getDelayedTasks() { - return Optional.ofNullable(delayedTasks).orElse(Collections.emptyList()); - } - /** * Checks if the event has been cancelled. * diff --git a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/pack/ResourcePackManagerImpl.java b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/pack/ResourcePackManagerImpl.java index 1bbc7d4..b6971fe 100644 --- a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/pack/ResourcePackManagerImpl.java +++ b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/pack/ResourcePackManagerImpl.java @@ -33,6 +33,7 @@ import net.momirealms.customnameplates.api.feature.image.Animation; import net.momirealms.customnameplates.api.feature.image.Image; import net.momirealms.customnameplates.api.feature.nameplate.Nameplate; import net.momirealms.customnameplates.api.feature.pack.ResourcePackManager; +import net.momirealms.customnameplates.api.helper.AdventureHelper; import net.momirealms.customnameplates.api.util.CharacterUtils; import net.momirealms.customnameplates.api.util.ZipUtils; import org.apache.commons.io.FileUtils; @@ -72,46 +73,16 @@ public class ResourcePackManagerImpl implements ResourcePackManager { if (ConfigManager.enableShader()) { if (ConfigManager.minPackVersion() >= 21.4f) { - this.generateShaders("ResourcePack" + File.separator + "overlay_1_21_4" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, true); - try { - FileUtils.copyDirectory( - new File(plugin.getDataFolder(), "ResourcePack" + File.separator + "overlay_1_21_4"), - new File(plugin.getDataFolder(), "ResourcePack") - ); - FileUtils.deleteDirectory(new File(plugin.getDataFolder(), "ResourcePack" + File.separator + "overlay_1_21_4")); - } catch (IOException e) { - throw new RuntimeException(e); - } + // do nothing } else if (ConfigManager.minPackVersion() >= 21.2f) { this.generateShaders("ResourcePack" + File.separator + "overlay_1_21_2" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, true); - try { - FileUtils.copyDirectory( - new File(plugin.getDataFolder(), "ResourcePack" + File.separator + "overlay_1_21_2"), - new File(plugin.getDataFolder(), "ResourcePack") - ); - FileUtils.deleteDirectory(new File(plugin.getDataFolder(), "ResourcePack" + File.separator + "overlay_1_21_2")); - } catch (IOException e) { - throw new RuntimeException(e); - } - this.generateShaders("ResourcePack" + File.separator + "overlay_1_21_4" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, true); } else if (ConfigManager.minPackVersion() >= 20.5f) { this.generateShaders("ResourcePack" + File.separator + "overlay_1_20_5" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, true); - try { - FileUtils.copyDirectory( - new File(plugin.getDataFolder(), "ResourcePack" + File.separator + "overlay_1_20_5"), - new File(plugin.getDataFolder(), "ResourcePack") - ); - FileUtils.deleteDirectory(new File(plugin.getDataFolder(), "ResourcePack" + File.separator + "overlay_1_20_5")); - } catch (IOException e) { - throw new RuntimeException(e); - } this.generateShaders("ResourcePack" + File.separator + "overlay_1_21_2" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, true); - this.generateShaders("ResourcePack" + File.separator + "overlay_1_21_4" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, true); } else { - this.generateShaders("ResourcePack" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, false); + this.generateShaders("ResourcePack" + File.separator + "overlay_1_20_2" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, false); this.generateShaders("ResourcePack" + File.separator + "overlay_1_20_5" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, true); this.generateShaders("ResourcePack" + File.separator + "overlay_1_21_2" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, true); - this.generateShaders("ResourcePack" + File.separator + "overlay_1_21_4" + File.separator + "assets" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator, true); } } diff --git a/backend/src/main/resources/ResourcePack/assets/minecraft/shaders/core/rendertype_text.fsh b/backend/src/main/resources/ResourcePack/overlay_1_20_2/assets/minecraft/shaders/core/rendertype_text.fsh similarity index 100% rename from backend/src/main/resources/ResourcePack/assets/minecraft/shaders/core/rendertype_text.fsh rename to backend/src/main/resources/ResourcePack/overlay_1_20_2/assets/minecraft/shaders/core/rendertype_text.fsh diff --git a/backend/src/main/resources/ResourcePack/assets/minecraft/shaders/core/rendertype_text.json b/backend/src/main/resources/ResourcePack/overlay_1_20_2/assets/minecraft/shaders/core/rendertype_text.json similarity index 100% rename from backend/src/main/resources/ResourcePack/assets/minecraft/shaders/core/rendertype_text.json rename to backend/src/main/resources/ResourcePack/overlay_1_20_2/assets/minecraft/shaders/core/rendertype_text.json diff --git a/backend/src/main/resources/ResourcePack/assets/minecraft/shaders/core/rendertype_text.vsh b/backend/src/main/resources/ResourcePack/overlay_1_20_2/assets/minecraft/shaders/core/rendertype_text.vsh similarity index 100% rename from backend/src/main/resources/ResourcePack/assets/minecraft/shaders/core/rendertype_text.vsh rename to backend/src/main/resources/ResourcePack/overlay_1_20_2/assets/minecraft/shaders/core/rendertype_text.vsh diff --git a/backend/src/main/resources/ResourcePack/overlay_1_21_4/assets/minecraft/shaders/core/rendertype_text.fsh b/backend/src/main/resources/ResourcePack/overlay_1_21_4/assets/minecraft/shaders/core/rendertype_text.fsh deleted file mode 100644 index 49cbc4b..0000000 --- a/backend/src/main/resources/ResourcePack/overlay_1_21_4/assets/minecraft/shaders/core/rendertype_text.fsh +++ /dev/null @@ -1,24 +0,0 @@ -#version 150 - -#moj_import - -uniform sampler2D Sampler0; - -uniform vec4 ColorModulator; -uniform float FogStart; -uniform float FogEnd; -uniform vec4 FogColor; - -in float vertexDistance; -in vec4 vertexColor; -in vec2 texCoord0; - -out vec4 fragColor; - -void main() { - vec4 color = texture(Sampler0, texCoord0) * vertexColor * ColorModulator; - if (color.a < 0.1) { - discard; - } - fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor); -} diff --git a/backend/src/main/resources/ResourcePack/overlay_1_21_4/assets/minecraft/shaders/core/rendertype_text.json b/backend/src/main/resources/ResourcePack/overlay_1_21_4/assets/minecraft/shaders/core/rendertype_text.json deleted file mode 100644 index 8fff4c6..0000000 --- a/backend/src/main/resources/ResourcePack/overlay_1_21_4/assets/minecraft/shaders/core/rendertype_text.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "vertex": "minecraft:core/rendertype_text", - "fragment": "minecraft:core/rendertype_text", - "samplers": [ - { "name": "Sampler0" }, - { "name": "Sampler2" } - ], - "uniforms": [ - { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, - { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, - { "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] }, - { "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] }, - { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, - { "name": "FogColor", "type": "float", "count": 4, "values": [ 0.0, 0.0, 0.0, 0.0 ] }, - { "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] } - ] -} diff --git a/backend/src/main/resources/ResourcePack/overlay_1_21_4/assets/minecraft/shaders/core/rendertype_text.vsh b/backend/src/main/resources/ResourcePack/overlay_1_21_4/assets/minecraft/shaders/core/rendertype_text.vsh deleted file mode 100644 index 2852ddd..0000000 --- a/backend/src/main/resources/ResourcePack/overlay_1_21_4/assets/minecraft/shaders/core/rendertype_text.vsh +++ /dev/null @@ -1,26 +0,0 @@ -#version 150 - -#moj_import - -in vec3 Position; -in vec4 Color; -in vec2 UV0; -in ivec2 UV2; - -uniform sampler2D Sampler2; - -uniform mat4 ModelViewMat; -uniform mat4 ProjMat; -uniform int FogShape; - -out float vertexDistance; -out vec4 vertexColor; -out vec2 texCoord0; - -void main() { - gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0); - - vertexDistance = fog_distance(Position, FogShape); - vertexColor = Color * texelFetch(Sampler2, UV2 / 16, 0); - texCoord0 = UV0; -} diff --git a/backend/src/main/resources/ResourcePack/pack.mcmeta b/backend/src/main/resources/ResourcePack/pack.mcmeta index f943f28..94dacff 100644 --- a/backend/src/main/resources/ResourcePack/pack.mcmeta +++ b/backend/src/main/resources/ResourcePack/pack.mcmeta @@ -9,6 +9,13 @@ }, "overlays": { "entries": [ + { + "formats": { + "min_inclusive": 13, + "max_inclusive": 31 + }, + "directory": "overlay_1_20_2" + }, { "formats": { "min_inclusive": 32, @@ -22,13 +29,6 @@ "max_inclusive": 45 }, "directory": "overlay_1_21_2" - }, - { - "formats": { - "min_inclusive": 46, - "max_inclusive": 99 - }, - "directory": "overlay_1_21_4" } ] } diff --git a/backend/src/main/resources/ResourcePack/pack_1_20_5.mcmeta b/backend/src/main/resources/ResourcePack/pack_1_20_5.mcmeta index 25c82dc..c4eda0a 100644 --- a/backend/src/main/resources/ResourcePack/pack_1_20_5.mcmeta +++ b/backend/src/main/resources/ResourcePack/pack_1_20_5.mcmeta @@ -9,19 +9,19 @@ }, "overlays": { "entries": [ + { + "formats": { + "min_inclusive": 32, + "max_inclusive": 41 + }, + "directory": "overlay_1_20_5" + }, { "formats": { "min_inclusive": 42, "max_inclusive": 45 }, "directory": "overlay_1_21_2" - }, - { - "formats": { - "min_inclusive": 46, - "max_inclusive": 99 - }, - "directory": "overlay_1_21_4" } ] } diff --git a/backend/src/main/resources/ResourcePack/pack_1_21_2.mcmeta b/backend/src/main/resources/ResourcePack/pack_1_21_2.mcmeta index e97166f..356aaa0 100644 --- a/backend/src/main/resources/ResourcePack/pack_1_21_2.mcmeta +++ b/backend/src/main/resources/ResourcePack/pack_1_21_2.mcmeta @@ -11,10 +11,10 @@ "entries": [ { "formats": { - "min_inclusive": 46, - "max_inclusive": 99 + "min_inclusive": 42, + "max_inclusive": 45 }, - "directory": "overlay_1_21_4" + "directory": "overlay_1_21_2" } ] } diff --git a/backend/src/main/resources/config.yml b/backend/src/main/resources/config.yml index 9b7ddd1..7b90491 100644 --- a/backend/src/main/resources/config.yml +++ b/backend/src/main/resources/config.yml @@ -46,7 +46,7 @@ integrations: resource-pack: disable-generation-on-start: false # Allow resource pack generation at server start supported-version: - # You can specify a version like 1.20.1, 1.21.4 or use SERVER_VERSION + # You can specify a version like 1.20.2, 1.21.4 or use SERVER_VERSION min: "SERVER_VERSION" namespace: "nameplates" # Namespace for the resource pack font: "default" # Default font used @@ -57,6 +57,8 @@ resource-pack: images: 'font/images/' # Path for other images bubbles: 'font/bubbles/' # Path for bubble text images space-split: 'font/base/' # Path for base font images + # Using shader is dangerous and might conflict with other plugin + # It's recommended to disable shaders on a 1.21.4+ server shader: enable: true # Enable shader generation hide-scoreboard-number: false # Hiding of scoreboard numbers diff --git a/gradle.properties b/gradle.properties index 7241ae6..131f370 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=3.0.28 +project_version=3.0.29 config_version=38 project_group=net.momirealms @@ -18,7 +18,7 @@ asm_commons_version=9.8 jar_relocator_version=1.7 h2_driver_version=2.3.232 sqlite_driver_version=3.49.1.0 -adventure_bundle_version=4.21.0 +adventure_bundle_version=4.23.0 adventure_platform_version=4.4.0 cloud_core_version=2.0.0 cloud_services_version=2.0.0 diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index 979d084..39ef6ba 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -27,6 +27,7 @@ dependencies { implementation("net.kyori:adventure-text-serializer-gson:${rootProject.properties["adventure_bundle_version"]}") { exclude("com.google.code.gson", "gson") } + implementation("net.kyori:adventure-text-serializer-json-legacy-impl:${rootProject.properties["adventure_bundle_version"]}") // BStats compileOnly("org.bstats:bstats-bukkit:${rootProject.properties["bstats_version"]}") diff --git a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitNetworkManager.java b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitNetworkManager.java index 3d0a96f..19ebccf 100644 --- a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitNetworkManager.java +++ b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitNetworkManager.java @@ -297,11 +297,6 @@ public class BukkitNetworkManager implements PacketSender, PipelineInjector { plugin.getPlatform().onPacketSend(player, event); if (event.cancelled()) return; super.write(context, packet, channelPromise); - channelPromise.addListener((p) -> { - for (Runnable task : event.getDelayedTasks()) { - task.run(); - } - }); } catch (Throwable e) { plugin.getPluginLogger().severe("An error occurred when reading packets", e); super.write(context, packet, channelPromise); diff --git a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitPlatform.java b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitPlatform.java index 35e5926..0a24cae 100644 --- a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitPlatform.java +++ b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitPlatform.java @@ -482,35 +482,19 @@ public class BukkitPlatform implements Platform { @Override public Object jsonToMinecraftComponent(String json) { - if (VersionHelper.isVersionNewerThan1_20_5()) { - try { - return Reflections.method$Component$Serializer$fromJson.invoke(null, json, Reflections.instance$MinecraftRegistry); - } catch (ReflectiveOperationException e) { - throw new RuntimeException(e); - } - } else { - try { - return Reflections.method$CraftChatMessage$fromJSON.invoke(null, json); - } catch (ReflectiveOperationException e) { - throw new RuntimeException(e); - } + try { + return Reflections.method$CraftChatMessage$fromJSON.invoke(null, json); + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); } } @Override public String minecraftComponentToJson(Object component) { - if (VersionHelper.isVersionNewerThan1_20_5()) { - try { - return (String) Reflections.method$Component$Serializer$toJson.invoke(null, component, Reflections.instance$MinecraftRegistry); - } catch (ReflectiveOperationException e) { - throw new RuntimeException(e); - } - } else { - try { - return (String) Reflections.method$CraftChatMessage$toJSON.invoke(null, component); - } catch (ReflectiveOperationException e) { - throw new RuntimeException(e); - } + try { + return (String) Reflections.method$CraftChatMessage$toJSON.invoke(null, component); + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); } } diff --git a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitSenderFactory.java b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitSenderFactory.java index 214b51d..2dcadf6 100644 --- a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitSenderFactory.java +++ b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitSenderFactory.java @@ -28,6 +28,8 @@ package net.momirealms.customnameplates.bukkit; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; +import net.momirealms.customnameplates.api.helper.AdventureHelper; +import net.momirealms.customnameplates.bukkit.util.Reflections; import net.momirealms.customnameplates.common.sender.Sender; import net.momirealms.customnameplates.common.sender.SenderFactory; import net.momirealms.customnameplates.common.util.Tristate; @@ -69,8 +71,14 @@ public class BukkitSenderFactory extends SenderFactory getAudience(sender).sendMessage(message)); diff --git a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/util/Reflections.java b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/util/Reflections.java index 3c8c65a..f21737c 100644 --- a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/util/Reflections.java +++ b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/util/Reflections.java @@ -124,6 +124,12 @@ public class Reflections { clazz$ClientboundSystemChatPacket, String.class, 0 ); + public static final Constructor constructor$ClientboundSystemChatPacket = requireNonNull( + ReflectionUtils.getConstructor( + clazz$ClientboundSystemChatPacket, clazz$Component, boolean.class + ) + ); + public static final Class clazz$CraftChatMessage = requireNonNull( ReflectionUtils.getClazz( BukkitReflectionUtils.assembleCBClass("util.CraftChatMessage") @@ -317,30 +323,11 @@ public class Reflections { } } - public static final Class clazz$Component$Serializer = requireNonNull( - ReflectionUtils.getClazz( - BukkitReflectionUtils.assembleMCClass("network.chat.Component$Serializer"), - BukkitReflectionUtils.assembleMCClass("network.chat.IChatBaseComponent$ChatSerializer") - ) - ); - public static final Class clazz$HolderLookup$Provider = ReflectionUtils.getClazz( BukkitReflectionUtils.assembleMCClass("core.HolderLookup$Provider"), BukkitReflectionUtils.assembleMCClass(VersionHelper.isVersionNewerThan1_20_5() ? "core.HolderLookup$a" : "core.HolderLookup$b") ); - public static final Method method$Component$Serializer$fromJson = ReflectionUtils.getMethod( - clazz$Component$Serializer, - new String[] { "fromJson", "a" }, - String.class, clazz$HolderLookup$Provider - ); - - public static final Method method$Component$Serializer$toJson = ReflectionUtils.getMethod( - clazz$Component$Serializer, - new String[] { "toJson", "a" }, - clazz$Component, clazz$HolderLookup$Provider - ); - public static final Class clazz$ClientboundBundlePacket = requireNonNull( ReflectionUtils.getClazz( BukkitReflectionUtils.assembleMCClass("network.protocol.game.ClientboundBundlePacket")