From 843f23b9c72c71b2ac99a9f3b874a4613462980e Mon Sep 17 00:00:00 2001 From: hypherionmc Date: Fri, 5 Jul 2024 20:29:10 +0200 Subject: [PATCH] [CHORE] Update dev branch with hotfixes --- .../nojang/resources/ResourceIdentifier.java | 2 +- .../craterlib/utils/ChatUtils.java | 19 ++++++++++-- .../com/hypherionmc/craterlib/CraterLib.java | 30 ++++--------------- .../client/NeoForgeClientHelper.java | 21 +++++++++++++ gradle.properties | 2 +- 5 files changed, 46 insertions(+), 28 deletions(-) diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/resources/ResourceIdentifier.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/resources/ResourceIdentifier.java index 4cd88f3..379839d 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/resources/ResourceIdentifier.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/resources/ResourceIdentifier.java @@ -11,7 +11,7 @@ public class ResourceIdentifier { } public ResourceIdentifier(String path) { - this.internal = ResourceLocation.withDefaultNamespace(path); + this.internal = ResourceLocation.parse(path); } public String getNamespace() { diff --git a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index 72ad9db..1f4ef76 100644 --- 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.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/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java index 900cdf1..7e2c82f 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java @@ -1,32 +1,20 @@ package com.hypherionmc.craterlib; -import com.hypherionmc.craterlib.api.events.client.LateInitEvent; -import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen; +import com.hypherionmc.craterlib.client.NeoForgeClientHelper; import com.hypherionmc.craterlib.common.NeoForgeServerEvents; import com.hypherionmc.craterlib.compat.Vanish; -import com.hypherionmc.craterlib.core.config.ConfigController; -import com.hypherionmc.craterlib.core.config.ModuleConfig; -import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen; -import com.hypherionmc.craterlib.core.event.CraterEventBus; import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork; import com.hypherionmc.craterlib.core.networking.PacketRegistry; import com.hypherionmc.craterlib.core.networking.data.PacketSide; import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; import com.hypherionmc.craterlib.network.CraterNeoForgeNetworkHandler; -import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; -import com.hypherionmc.craterlib.nojang.client.BridgedOptions; -import net.minecraft.client.Minecraft; import net.neoforged.bus.api.IEventBus; -import net.neoforged.fml.ModList; import net.neoforged.fml.common.Mod; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; -import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.fml.loading.FMLLoader; -import net.neoforged.neoforge.client.gui.IConfigScreenFactory; import net.neoforged.neoforge.common.NeoForge; -import java.util.Optional; - @Mod(CraterConstants.MOD_ID) public class CraterLib { @@ -35,6 +23,7 @@ public class CraterLib { public CraterLib(IEventBus eventBus) { NeoForge.EVENT_BUS.register(new NeoForgeServerEvents()); eventBus.addListener(this::commonSetup); + eventBus.addListener(this::clientSetup); handler = new CraterNeoForgeNetworkHandler(FMLLoader.getDist().isClient() ? PacketSide.CLIENT : PacketSide.SERVER); if (ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) { @@ -44,16 +33,9 @@ public class CraterLib { public void commonSetup(FMLCommonSetupEvent evt) { new CraterPacketNetwork(handler); - if (FMLEnvironment.dist.isClient()) { - LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options)); - CraterEventBus.INSTANCE.postEvent(event); + } - ConfigController.getMonitoredConfigs().forEach((conf, watcher) -> { - if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) { - ModuleConfig config = (ModuleConfig) conf; - ModList.get().getModContainerById(config.getModId()).ifPresent(c -> c.registerExtensionPoint(IConfigScreenFactory.class, ((minecraft, screen) -> new CraterConfigScreen(config, screen)))); - } - }); - } + public void clientSetup(FMLClientSetupEvent evt) { + NeoForgeClientHelper.registerClient(); } } diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientHelper.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientHelper.java index d6c2ef7..5aeb1fd 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientHelper.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientHelper.java @@ -1,11 +1,20 @@ package com.hypherionmc.craterlib.client; +import com.hypherionmc.craterlib.api.events.client.LateInitEvent; +import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen; +import com.hypherionmc.craterlib.core.config.ConfigController; +import com.hypherionmc.craterlib.core.config.ModuleConfig; +import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen; +import com.hypherionmc.craterlib.core.event.CraterEventBus; import com.hypherionmc.craterlib.core.platform.ClientPlatform; import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +import com.hypherionmc.craterlib.nojang.client.BridgedOptions; import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.minecraft.client.Minecraft; import net.minecraft.network.Connection; +import net.neoforged.fml.ModList; +import net.neoforged.neoforge.client.gui.IConfigScreenFactory; import java.util.Objects; @@ -37,4 +46,16 @@ public class NeoForgeClientHelper implements ClientPlatform { Objects.requireNonNull(Minecraft.getInstance().getConnection(), "Cannot send packets when not in game!"); return Minecraft.getInstance().getConnection().getConnection(); } + + public static void registerClient() { + LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options)); + CraterEventBus.INSTANCE.postEvent(event); + + ConfigController.getMonitoredConfigs().forEach((conf, watcher) -> { + if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) { + ModuleConfig config = (ModuleConfig) conf; + ModList.get().getModContainerById(config.getModId()).ifPresent(c -> c.registerExtensionPoint(IConfigScreenFactory.class, ((minecraft, screen) -> new CraterConfigScreen(config, screen)))); + } + }); + } } diff --git a/gradle.properties b/gradle.properties index 58702aa..a2e0efe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -43,4 +43,4 @@ release_type=port # Gradle org.gradle.jvmargs=-Xmx3G -org.gradle.daemon=false \ No newline at end of file +org.gradle.daemon=false