From 132251341fe12b6cb1d414e34658bb7a0297bc81 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 21 Jul 2024 20:06:40 -0500 Subject: [PATCH] Fix replay mod not showing LODs --- .../minecraft/MinecraftClientWrapper.java | 120 ++++++++++-------- .../wrappers/world/ClientLevelWrapper.java | 5 +- coreSubProjects | 2 +- 3 files changed, 69 insertions(+), 58 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java index 13f7805d6..684240b85 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java @@ -31,6 +31,7 @@ import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.enums.EDhDirection; +import com.seibel.distanthorizons.core.file.structure.ClientOnlySaveStructure; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; import com.seibel.distanthorizons.coreapi.ModInfo; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; @@ -43,6 +44,7 @@ import com.seibel.distanthorizons.core.pos.DhChunkPos; import net.minecraft.CrashReport; import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.resources.model.ModelManager; import net.minecraft.core.BlockPos; @@ -59,16 +61,15 @@ import org.jetbrains.annotations.Nullable; * A singleton that wraps the Minecraft object. * * @author James Seibel - * @version 3-5-2022 */ -//@Environment(EnvType.CLIENT) public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecraftSharedWrapper { private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + private static final Minecraft MINECRAFT = Minecraft.getInstance(); public static final MinecraftClientWrapper INSTANCE = new MinecraftClientWrapper(); - public final Minecraft mc = Minecraft.getInstance(); + /** * The lightmap for the current: @@ -99,10 +100,7 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra * This doesn't affect OpenGL objects in any way. */ @Override - public void clearFrameObjectCache() - { - lightMap = null; - } + public void clearFrameObjectCache() { this.lightMap = null; } @@ -118,10 +116,10 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra { default: case AUTO: - if (this.mc.level != null) + if (MINECRAFT.level != null) { Direction mcDir = McObjectConverter.Convert(lodDirection); - return this.mc.level.getShade(mcDir, true); + return MINECRAFT.level.getShade(mcDir, true); } else { @@ -150,47 +148,63 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra } @Override - public boolean hasSinglePlayerServer() { return mc.hasSingleplayerServer(); } + public boolean hasSinglePlayerServer() { return MINECRAFT.hasSingleplayerServer(); } @Override - public boolean clientConnectedToDedicatedServer() { return mc.getCurrentServer() != null && !this.hasSinglePlayerServer(); } + public boolean clientConnectedToDedicatedServer() { return MINECRAFT.getCurrentServer() != null && !this.hasSinglePlayerServer(); } + @Override + public boolean connectedToReplay() { return !MINECRAFT.hasSingleplayerServer() && MINECRAFT.getCurrentServer() == null; } @Override - public String getCurrentServerName() { return mc.getCurrentServer().name; } + public String getCurrentServerName() + { + if (this.connectedToReplay()) + { + return ClientOnlySaveStructure.REPLAY_SERVER_FOLDER_NAME; + } + else + { + ServerData server = MINECRAFT.getCurrentServer(); + return (server != null) ? server.name : "NULL"; + } + } @Override - public String getCurrentServerIp() { return mc.getCurrentServer().ip; } + public String getCurrentServerIp() + { + if (this.connectedToReplay()) + { + return ""; + } + else + { + ServerData server = MINECRAFT.getCurrentServer(); + return (server != null) ? server.ip : "NA"; + } + } @Override public String getCurrentServerVersion() { - return mc.getCurrentServer().version.getString(); + ServerData server = MINECRAFT.getCurrentServer(); + return (server != null) ? server.version.getString() : "UNKOWN"; } //=============// // Simple gets // //=============// - public LocalPlayer getPlayer() - { - return mc.player; - } + public LocalPlayer getPlayer() { return MINECRAFT.player; } @Override - public boolean playerExists() - { - return mc.player != null; - } + public boolean playerExists() { return MINECRAFT.player != null; } @Override - public UUID getPlayerUUID() - { - return getPlayer().getUUID(); - } + public UUID getPlayerUUID() { return this.getPlayer().getUUID(); } @Override public DhBlockPos getPlayerBlockPos() { - BlockPos playerPos = getPlayer().blockPosition(); + BlockPos playerPos = this.getPlayer().blockPosition(); return new DhBlockPos(playerPos.getX(), playerPos.getY(), playerPos.getZ()); } @@ -198,9 +212,9 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra public DhChunkPos getPlayerChunkPos() { #if MC_VER < MC_1_17_1 - ChunkPos playerPos = new ChunkPos(getPlayer().blockPosition()); + ChunkPos playerPos = new ChunkPos(this.getPlayer().blockPosition()); #else - ChunkPos playerPos = getPlayer().chunkPosition(); + ChunkPos playerPos = this.getPlayer().chunkPosition(); #endif return new DhChunkPos(playerPos.x, playerPos.z); } @@ -209,24 +223,27 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra @Override public IClientLevelWrapper getWrappedClientLevel() { - if (this.mc.level == null) + if (MINECRAFT.level == null) { return null; } - return ClientLevelWrapper.getWrapperIgnoringOverride(this.mc.level); - } - + return ClientLevelWrapper.getWrapperIgnoringOverride(MINECRAFT.level); } @Override public IProfilerWrapper getProfiler() { - if (profilerWrapper == null) - profilerWrapper = new ProfilerWrapper(mc.getProfiler()); - else if (mc.getProfiler() != profilerWrapper.profiler) - profilerWrapper.profiler = mc.getProfiler(); - return profilerWrapper; + if (this.profilerWrapper == null) + { + this.profilerWrapper = new ProfilerWrapper(MINECRAFT.getProfiler()); + } + else if (MINECRAFT.getProfiler() != this.profilerWrapper.profiler) + { + this.profilerWrapper.profiler = MINECRAFT.getProfiler(); + } + + return this.profilerWrapper; } /** Returns all worlds available to the server */ @@ -235,7 +252,7 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra { ArrayList worlds = new ArrayList(); - Iterable serverWorlds = mc.getSingleplayerServer().getAllLevels(); + Iterable serverWorlds = MINECRAFT.getSingleplayerServer().getAllLevels(); for (ServerLevel world : serverWorlds) { worlds.add(ServerLevelWrapper.getWrapper(world)); @@ -249,12 +266,12 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra @Override public void sendChatMessage(String string) { - LocalPlayer p = getPlayer(); - if (p == null) return; + LocalPlayer player = this.getPlayer(); + if (player == null) return; #if MC_VER < MC_1_19_2 - p.sendMessage(new TextComponent(string), getPlayer().getUUID()); + player.sendMessage(new TextComponent(string), getPlayer().getUUID()); #else - p.sendSystemMessage(net.minecraft.network.chat.Component.translatable(string)); + player.sendSystemMessage(net.minecraft.network.chat.Component.translatable(string)); #endif } @@ -279,24 +296,15 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra } @Override - public Object getOptionsObject() - { - return mc.options; - } + public Object getOptionsObject() { return MINECRAFT.options; } @Override - public boolean isDedicatedServer() - { - return false; - } + public boolean isDedicatedServer() { return false; } @Override - public File getInstallationDirectory() - { - return mc.gameDirectory; - } + public File getInstallationDirectory() { return MINECRAFT.gameDirectory; } @Override - public void executeOnRenderThread(Runnable runnable) { this.mc.execute(runnable); } + public void executeOnRenderThread(Runnable runnable) { MINECRAFT.execute(runnable); } } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java index 5ea9dfce4..c2fb642a6 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java @@ -19,6 +19,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IDimensionTypeWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper; +import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.chunk.ChunkAccess; @@ -42,6 +43,8 @@ public class ClientLevelWrapper implements IClientLevelWrapper private static final ConcurrentHashMap LEVEL_WRAPPER_BY_CLIENT_LEVEL = new ConcurrentHashMap<>(); // TODO can leak private static final IKeyedClientLevelManager KEYED_CLIENT_LEVEL_MANAGER = SingletonInjector.INSTANCE.get(IKeyedClientLevelManager.class); + private static final Minecraft MINECRAFT = Minecraft.getInstance(); + private final ClientLevel level; private final ClientBlockDetailMap blockMap = new ClientBlockDetailMap(this); @@ -88,7 +91,7 @@ public class ClientLevelWrapper implements IClientLevelWrapper { try { - Iterable serverLevels = MinecraftClientWrapper.INSTANCE.mc.getSingleplayerServer().getAllLevels(); + Iterable serverLevels = MINECRAFT.getSingleplayerServer().getAllLevels(); // attempt to find the server level with the same dimension type // TODO this assumes only one level per dimension type, the SubDimensionLevelMatcher will need to be added for supporting multiple levels per dimension diff --git a/coreSubProjects b/coreSubProjects index c9b650fb7..d38711ca4 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit c9b650fb7fc9a2805736852e3423953fbcc87702 +Subproject commit d38711ca4bee9ec8bb1f9a6067993a851a66f41f