[CHORE] Update dev branch with hotfixes

This commit is contained in:
2024-07-05 20:29:10 +02:00
parent ce16c08760
commit 843f23b9c7
5 changed files with 46 additions and 28 deletions

View File

@@ -11,7 +11,7 @@ public class ResourceIdentifier {
} }
public ResourceIdentifier(String path) { public ResourceIdentifier(String path) {
this.internal = ResourceLocation.withDefaultNamespace(path); this.internal = ResourceLocation.parse(path);
} }
public String getNamespace() { public String getNamespace() {

View File

@@ -1,5 +1,7 @@
package com.hypherionmc.craterlib.utils; 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 com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier;
import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer; import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer;
import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; 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.ChatFormatting;
import net.minecraft.SharedConstants; import net.minecraft.SharedConstants;
import net.minecraft.Util; import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.RegistryAccess; import net.minecraft.core.RegistryAccess;
import net.minecraft.data.registries.VanillaRegistries;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.Style; import net.minecraft.network.chat.Style;
@@ -23,14 +28,24 @@ public class ChatUtils {
public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) {
final String serialised = adventureSerializer.serialize(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) { 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); 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 // Some text components contain duplicate text, resulting in duplicate messages
// sent back to discord. This should help fix those issues // sent back to discord. This should help fix those issues
public static Component safeCopy(Component inComponent) { public static Component safeCopy(Component inComponent) {

View File

@@ -1,32 +1,20 @@
package com.hypherionmc.craterlib; package com.hypherionmc.craterlib;
import com.hypherionmc.craterlib.api.events.client.LateInitEvent; import com.hypherionmc.craterlib.client.NeoForgeClientHelper;
import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen;
import com.hypherionmc.craterlib.common.NeoForgeServerEvents; import com.hypherionmc.craterlib.common.NeoForgeServerEvents;
import com.hypherionmc.craterlib.compat.Vanish; 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.CraterPacketNetwork;
import com.hypherionmc.craterlib.core.networking.PacketRegistry; import com.hypherionmc.craterlib.core.networking.PacketRegistry;
import com.hypherionmc.craterlib.core.networking.data.PacketSide; import com.hypherionmc.craterlib.core.networking.data.PacketSide;
import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment;
import com.hypherionmc.craterlib.network.CraterNeoForgeNetworkHandler; 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.bus.api.IEventBus;
import net.neoforged.fml.ModList;
import net.neoforged.fml.common.Mod; import net.neoforged.fml.common.Mod;
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.fml.loading.FMLEnvironment;
import net.neoforged.fml.loading.FMLLoader; import net.neoforged.fml.loading.FMLLoader;
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.common.NeoForge;
import java.util.Optional;
@Mod(CraterConstants.MOD_ID) @Mod(CraterConstants.MOD_ID)
public class CraterLib { public class CraterLib {
@@ -35,6 +23,7 @@ public class CraterLib {
public CraterLib(IEventBus eventBus) { public CraterLib(IEventBus eventBus) {
NeoForge.EVENT_BUS.register(new NeoForgeServerEvents()); NeoForge.EVENT_BUS.register(new NeoForgeServerEvents());
eventBus.addListener(this::commonSetup); eventBus.addListener(this::commonSetup);
eventBus.addListener(this::clientSetup);
handler = new CraterNeoForgeNetworkHandler(FMLLoader.getDist().isClient() ? PacketSide.CLIENT : PacketSide.SERVER); handler = new CraterNeoForgeNetworkHandler(FMLLoader.getDist().isClient() ? PacketSide.CLIENT : PacketSide.SERVER);
if (ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) { if (ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) {
@@ -44,16 +33,9 @@ public class CraterLib {
public void commonSetup(FMLCommonSetupEvent evt) { public void commonSetup(FMLCommonSetupEvent evt) {
new CraterPacketNetwork(handler); 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) -> { public void clientSetup(FMLClientSetupEvent evt) {
if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) { NeoForgeClientHelper.registerClient();
ModuleConfig config = (ModuleConfig) conf;
ModList.get().getModContainerById(config.getModId()).ifPresent(c -> c.registerExtensionPoint(IConfigScreenFactory.class, ((minecraft, screen) -> new CraterConfigScreen(config, screen))));
}
});
}
} }
} }

View File

@@ -1,11 +1,20 @@
package com.hypherionmc.craterlib.client; 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.core.platform.ClientPlatform;
import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; 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.client.multiplayer.BridgedClientLevel;
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.network.Connection; import net.minecraft.network.Connection;
import net.neoforged.fml.ModList;
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
import java.util.Objects; 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!"); Objects.requireNonNull(Minecraft.getInstance().getConnection(), "Cannot send packets when not in game!");
return Minecraft.getInstance().getConnection().getConnection(); 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))));
}
});
}
} }

View File

@@ -43,4 +43,4 @@ release_type=port
# Gradle # Gradle
org.gradle.jvmargs=-Xmx3G org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false org.gradle.daemon=false