From 7cb010183fd5bf3a6f9f75bcd82e096606213b78 Mon Sep 17 00:00:00 2001 From: hypherionmc Date: Mon, 17 Jun 2024 14:27:47 +0200 Subject: [PATCH] [HOTFIX] Fix rare edge crash when player is killed using enchanted weapon --- .../craterlib/utils/ChatUtils.java | 19 +++++++- .../craterlib/utils/ChatUtils.java.patch | 46 +++++++++++++++++++ 2 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 patches/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch diff --git a/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index 72ad9db..1f4ef76 100644 --- a/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -1,5 +1,7 @@ package com.hypherionmc.craterlib.utils; +import com.hypherionmc.craterlib.core.platform.CommonPlatform; +import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer; import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; @@ -9,7 +11,10 @@ import net.kyori.adventure.text.serializer.json.JSONOptions; import net.minecraft.ChatFormatting; import net.minecraft.SharedConstants; import net.minecraft.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistryAccess; +import net.minecraft.data.registries.VanillaRegistries; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; @@ -23,14 +28,24 @@ public class ChatUtils { public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { final String serialised = adventureSerializer.serialize(inComponent); - return Component.Serializer.fromJson(serialised, RegistryAccess.EMPTY); + return Component.Serializer.fromJson(serialised, getRegistryLookup()); } public static net.kyori.adventure.text.Component mojangToAdventure(Component inComponent) { - final String serialised = Component.Serializer.toJson(inComponent, RegistryAccess.EMPTY); + final String serialised = Component.Serializer.toJson(inComponent, getRegistryLookup()); return adventureSerializer.deserialize(serialised); } + private static HolderLookup.Provider getRegistryLookup() { + if (ModloaderEnvironment.INSTANCE.getEnvironment().isClient() && Minecraft.getInstance().level != null) + return Minecraft.getInstance().level.registryAccess(); + + if (ModloaderEnvironment.INSTANCE.getEnvironment().isServer() && CommonPlatform.INSTANCE.getMCServer() != null) + return CommonPlatform.INSTANCE.getMCServer().toMojang().registryAccess(); + + return RegistryAccess.EMPTY; + } + // Some text components contain duplicate text, resulting in duplicate messages // sent back to discord. This should help fix those issues public static Component safeCopy(Component inComponent) { diff --git a/patches/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch b/patches/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch new file mode 100644 index 0000000..c37e32a --- /dev/null +++ b/patches/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch @@ -0,0 +1,46 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java ++++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +@@ -1,5 +1,7 @@ + package com.hypherionmc.craterlib.utils; + ++import com.hypherionmc.craterlib.core.platform.CommonPlatform; ++import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; + import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; + import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer; + import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; +@@ -9,7 +11,10 @@ + import net.minecraft.ChatFormatting; + import net.minecraft.SharedConstants; + import net.minecraft.Util; ++import net.minecraft.client.Minecraft; ++import net.minecraft.core.HolderLookup; + import net.minecraft.core.RegistryAccess; ++import net.minecraft.data.registries.VanillaRegistries; + import net.minecraft.network.chat.Component; + import net.minecraft.network.chat.Style; + +@@ -23,12 +28,22 @@ + + public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { + final String serialised = adventureSerializer.serialize(inComponent); +- return Component.Serializer.fromJson(serialised, RegistryAccess.EMPTY); ++ return Component.Serializer.fromJson(serialised, getRegistryLookup()); + } + + public static net.kyori.adventure.text.Component mojangToAdventure(Component inComponent) { +- final String serialised = Component.Serializer.toJson(inComponent, RegistryAccess.EMPTY); ++ final String serialised = Component.Serializer.toJson(inComponent, getRegistryLookup()); + return adventureSerializer.deserialize(serialised); ++ } ++ ++ private static HolderLookup.Provider getRegistryLookup() { ++ if (ModloaderEnvironment.INSTANCE.getEnvironment().isClient() && Minecraft.getInstance().level != null) ++ return Minecraft.getInstance().level.registryAccess(); ++ ++ if (ModloaderEnvironment.INSTANCE.getEnvironment().isServer() && CommonPlatform.INSTANCE.getMCServer() != null) ++ return CommonPlatform.INSTANCE.getMCServer().toMojang().registryAccess(); ++ ++ return RegistryAccess.EMPTY; + } + + // Some text components contain duplicate text, resulting in duplicate messages