diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/level/KeyedClientLevelManager.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/level/KeyedClientLevelManager.java index bbe90fc99..f69cf8eeb 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/level/KeyedClientLevelManager.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/level/KeyedClientLevelManager.java @@ -13,7 +13,7 @@ public class KeyedClientLevelManager implements IKeyedClientLevelManager /** This is set and managed by the ClientApi for servers with support for DH. */ @Nullable private IServerKeyedClientLevel serverKeyedLevel = null; - private boolean managedByServer = false; + private boolean enabled = false; @@ -42,7 +42,7 @@ public class KeyedClientLevelManager implements IKeyedClientLevelManager { IServerKeyedClientLevel keyedLevel = new ServerKeyedClientLevel((ClientLevel) clientLevel.getWrappedMcObject(), levelKey); this.serverKeyedLevel = keyedLevel; - this.managedByServer = true; + this.enabled = true; return keyedLevel; } @@ -55,14 +55,14 @@ public class KeyedClientLevelManager implements IKeyedClientLevelManager @Override public boolean isEnabled() { - return this.managedByServer; + return this.enabled; } @Override public void disable() { this.clearServerKeyedLevel(); - this.managedByServer = false; + this.enabled = false; } } 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 f0d3dc654..908a644aa 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 @@ -43,6 +43,7 @@ import com.seibel.distanthorizons.core.pos.DhChunkPos; import net.minecraft.CrashReport; import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.resources.model.ModelManager; import net.minecraft.core.BlockPos; @@ -101,7 +102,7 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra @Override public void clearFrameObjectCache() { - lightMap = null; + this.lightMap = null; } @@ -150,20 +151,20 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra } @Override - public boolean hasSinglePlayerServer() { return mc.hasSingleplayerServer(); } + public boolean hasSinglePlayerServer() { return this.mc.hasSingleplayerServer(); } @Override - public boolean clientConnectedToDedicatedServer() { return mc.getCurrentServer() != null && !this.hasSinglePlayerServer(); } + public boolean clientConnectedToDedicatedServer() { return this.mc.getCurrentServer() != null && !this.hasSinglePlayerServer(); } @Override - public String getCurrentServerName() { return mc.getCurrentServer().name; } + public String getCurrentServerName() { return this.mc.getCurrentServer().name; } @Override - public String getCurrentServerIp() { return mc.getCurrentServer().ip; } + public String getCurrentServerIp() { return this.mc.getCurrentServer().ip; } @Override public String getCurrentServerVersion() { - return mc.getCurrentServer().version.getString(); + return this.mc.getCurrentServer().version.getString(); } //=============// @@ -172,25 +173,25 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra public LocalPlayer getPlayer() { - return mc.player; + return this.mc.player; } @Override public boolean playerExists() { - return mc.player != null; + return this.mc.player != null; } @Override public UUID getPlayerUUID() { - return getPlayer().getUUID(); + 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()); } @@ -200,26 +201,34 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra #if MC_VER < MC_1_17_1 ChunkPos playerPos = new ChunkPos(getPlayer().blockPosition()); #else - ChunkPos playerPos = getPlayer().chunkPosition(); + ChunkPos playerPos = this.getPlayer().chunkPosition(); #endif return new DhChunkPos(playerPos.x, playerPos.z); } public ModelManager getModelManager() { - return mc.getModelManager(); + return this.mc.getModelManager(); } @Nullable @Override public IClientLevelWrapper getWrappedClientLevel() { - if (this.mc.level == null) + return this.getWrappedClientLevel(false); + } + + @Override + @Nullable + public IClientLevelWrapper getWrappedClientLevel(boolean bypassMultiverse) + { + ClientLevel level = this.mc.level; + if (level == null) { return null; } - return ClientLevelWrapper.getWrapperIgnoringOverride(this.mc.level); + return ClientLevelWrapper.getWrapper(level, bypassMultiverse); } /** Please move over to getInstallationDirectory() */ @@ -227,17 +236,21 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra @Override public File getGameDirectory() { - return getInstallationDirectory(); + return this.getInstallationDirectory(); } @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(this.mc.getProfiler()); + } + else if (this.mc.getProfiler() != this.profilerWrapper.profiler) + { + this.profilerWrapper.profiler = this.mc.getProfiler(); + } + return this.profilerWrapper; } /** Returns all worlds available to the server */ @@ -246,7 +259,7 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra { ArrayList worlds = new ArrayList(); - Iterable serverWorlds = mc.getSingleplayerServer().getAllLevels(); + Iterable serverWorlds = this.mc.getSingleplayerServer().getAllLevels(); for (ServerLevel world : serverWorlds) { worlds.add(ServerLevelWrapper.getWrapper(world)); @@ -260,8 +273,11 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra @Override public void sendChatMessage(String string) { - LocalPlayer p = getPlayer(); - if (p == null) return; + LocalPlayer p = this.getPlayer(); + if (p == null) + { + return; + } #if MC_VER < MC_1_19_2 p.sendMessage(new TextComponent(string), getPlayer().getUUID()); #else @@ -292,7 +308,7 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra @Override public Object getOptionsObject() { - return mc.options; + return this.mc.options; } @Override @@ -304,7 +320,7 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra @Override public File getInstallationDirectory() { - return mc.gameDirectory; + return this.mc.gameDirectory; } @Override diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/network/AbstractPluginPacketSender.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/network/AbstractPluginPacketSender.java index 72d199ee9..8556e1161 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/network/AbstractPluginPacketSender.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/network/AbstractPluginPacketSender.java @@ -29,8 +29,8 @@ public abstract class AbstractPluginPacketSender implements IPluginPacketSender } } - protected abstract void sendPluginPacketClient(FriendlyByteBuf mcBuffer); - protected abstract void sendPluginPacketServer(ServerPlayer serverPlayer, FriendlyByteBuf mcBuffer); + protected abstract void sendPluginPacketClient(FriendlyByteBuf mcBuffer); + } 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 54d666c46..3c9b359c9 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 @@ -53,24 +53,31 @@ public class ClientLevelWrapper implements IClientLevelWrapper // wrapper logic // //===============// - @Nullable - public static IClientLevelWrapper getWrapper(@Nullable ClientLevel level) + public static IClientLevelWrapper getWrapper(@NotNull ClientLevel level) { - if (level == null) - { - return null; - } - - // used if the client is connected to a server that defines the currently loaded level - IServerKeyedClientLevel overrideLevel = KEYED_CLIENT_LEVEL_MANAGER.getServerKeyedLevel(); - if (overrideLevel != null) - { - return overrideLevel; - } - - return getWrapperIgnoringOverride(level); + return getWrapper(level, false); + } + + @Nullable + public static IClientLevelWrapper getWrapper(@Nullable ClientLevel level, boolean bypassMultiverse) + { + if (!bypassMultiverse) + { + if (level == null) + { + return null; + } + + // used if the client is connected to a server that defines the currently loaded level + IServerKeyedClientLevel overrideLevel = KEYED_CLIENT_LEVEL_MANAGER.getServerKeyedLevel(); + if (overrideLevel != null) + { + return overrideLevel; + } + } + + return LEVEL_WRAPPER_BY_CLIENT_LEVEL.computeIfAbsent(level, ClientLevelWrapper::new); } - public static IClientLevelWrapper getWrapperIgnoringOverride(@NotNull ClientLevel level) { return LEVEL_WRAPPER_BY_CLIENT_LEVEL.computeIfAbsent(level, ClientLevelWrapper::new); } @Nullable @Override diff --git a/coreSubProjects b/coreSubProjects index 278ae0453..1f438d8f8 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 278ae04532075810e0d3076b9895d3f63976eb3e +Subproject commit 1f438d8f87861608405f5f8d26aad7b44fa66837 diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java index 980fbfa8e..cd48a22ac 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -42,7 +42,6 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientChunkEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.fabricmc.fabric.api.event.player.AttackBlockCallback; @@ -55,7 +54,10 @@ import net.minecraft.client.gui.screens.TitleScreen; import java.nio.FloatBuffer; #endif import java.util.HashSet; +import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; +import net.minecraft.client.multiplayer.ClientHandshakePacketListenerImpl; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.network.FriendlyByteBuf; diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientPacketListener.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientPacketListener.java index 99b188663..70e242920 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientPacketListener.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientPacketListener.java @@ -24,12 +24,22 @@ public class MixinClientPacketListener private ClientLevel level; @Inject(method = "handleLogin", at = @At("RETURN")) - void onHandleLoginEnd(CallbackInfo ci) { ClientApi.INSTANCE.onClientOnlyConnected(); } + void onHandleLoginEnd(CallbackInfo ci) + { + ClientApi.INSTANCE.onClientOnlyConnected(); + ClientApi.INSTANCE.clientLevelLoadEvent(ClientLevelWrapper.getWrapper(this.level)); + } @Inject(method = "handleRespawn", at = @At("HEAD")) - void onHandleRespawnStart(CallbackInfo ci) { ClientApi.INSTANCE.clientLevelUnloadEvent(ClientLevelWrapper.getWrapper(this.level), true); } + void onHandleRespawnStart(CallbackInfo ci) + { + ClientApi.INSTANCE.clientLevelUnloadEvent(ClientLevelWrapper.getWrapper(this.level), true); + } @Inject(method = "handleRespawn", at = @At("RETURN")) - void onHandleRespawnEnd(CallbackInfo ci) { ClientApi.INSTANCE.clientLevelLoadEvent(ClientLevelWrapper.getWrapper(this.level)); } + void onHandleRespawnEnd(CallbackInfo ci) + { + ClientApi.INSTANCE.clientLevelLoadEvent(ClientLevelWrapper.getWrapper(this.level)); + } #if MC_VER < MC_1_19_4 @Inject(method = "cleanup", at = @At("HEAD"))