From 335f11acd3834eb2287b11ef0c1367d9e29494f2 Mon Sep 17 00:00:00 2001 From: s809 <11816467-s809@users.noreply.gitlab.com> Date: Fri, 10 May 2024 23:56:15 +0500 Subject: [PATCH] Fix dimension switching (at cost of breaking immersive portals) --- coreSubProjects | 2 +- .../mixins/client/MixinClientLevel.java | 17 +++++----- .../fabric/mixins/client/MixinLevel.java | 25 -------------- .../fabric/mixins/client/MixinMinecraft.java | 34 +++++++++++++++++-- .../DistantHorizons.fabric.mixins.json | 1 - 5 files changed, 40 insertions(+), 39 deletions(-) delete mode 100644 fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevel.java diff --git a/coreSubProjects b/coreSubProjects index 3d86c5c5e..543b5ed49 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 3d86c5c5ee63c1ba33907d968efa03dad26615bb +Subproject commit 543b5ed49aafcf343dae4545a39b71ffcadff925 diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientLevel.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientLevel.java index 7f88d9a72..178c5d462 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientLevel.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientLevel.java @@ -26,10 +26,6 @@ import com.seibel.distanthorizons.core.api.internal.SharedApi; import net.minecraft.client.multiplayer.ClientLevel; #if MC_VER >= MC_1_18_2 #endif -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; import net.minecraft.world.level.chunk.LevelChunk; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -45,11 +41,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientLevel.class) public class MixinClientLevel { - @Inject(method = "", at = @At("TAIL")) - private void loadWorldEvent(CallbackInfo ci) - { - ClientApi.INSTANCE.clientLevelLoadEvent(ClientLevelWrapper.getWrapper((ClientLevel) (Object) this)); - } +// //Moved to MixinClientPacketListener +// @Inject(method = "", at = @At("TAIL")) +// private void loadWorldEvent(ClientPacketListener clientPacketListener, ClientLevel.ClientLevelData clientLevelData, ResourceKey resourceKey, +// #if MC_VER >= MC_1_18_2 Holder holder, #else DimensionType dimensionType, #endif int i, +// #if MC_VER >= MC_1_18_2 int j, #endif Supplier supplier, LevelRenderer levelRenderer, boolean bl, long l, CallbackInfo ci) +// { +// ClientApi.INSTANCE.clientLevelLoadEvent(WorldWrapper.getWorldWrapper((ClientLevel)(Object)this)); +// } // Moved to overriding the enableChunkLight(...) method over at ClientPacketListener for 1.20+ #if MC_VER >= MC_1_18_2 && MC_VER < MC_1_20_1 // Only the setLightReady is only available after 1.18. This ensures the light data is ready. diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevel.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevel.java deleted file mode 100644 index 828a5a08e..000000000 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevel.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.seibel.distanthorizons.fabric.mixins.client; - -import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; -import com.seibel.distanthorizons.core.api.internal.ClientApi; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.level.Level; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Level.class) -public class MixinLevel -{ - @SuppressWarnings("UnreachableCode") - @Inject(method = "close", at = @At("HEAD")) - private void unloadWorldEvent(CallbackInfo ci) - { - if ((Object) this instanceof ClientLevel) - { - ClientApi.INSTANCE.clientLevelLoadEvent(ClientLevelWrapper.getWrapper((ClientLevel) (Object) this)); - } - } - -} \ No newline at end of file diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java index f4bf969a6..9fc5cbd59 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java @@ -2,6 +2,8 @@ package com.seibel.distanthorizons.fabric.mixins.client; import com.seibel.distanthorizons.api.enums.config.EDhApiUpdateBranch; import com.seibel.distanthorizons.common.wrappers.gui.updater.UpdateModScreen; +import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; +import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.jar.installer.GitlabGetter; @@ -9,9 +11,11 @@ import com.seibel.distanthorizons.core.jar.installer.ModrinthGetter; import com.seibel.distanthorizons.core.jar.updater.SelfUpdater; import com.seibel.distanthorizons.core.wrapperInterfaces.IVersionConstants; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.TitleScreen; +import net.minecraft.client.multiplayer.ClientLevel; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; @@ -23,8 +27,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; * @author coolGi */ @Mixin(Minecraft.class) -public class MixinMinecraft +public abstract class MixinMinecraft { + @Shadow + public abstract boolean isLocalServer(); + + @Unique + private ClientLevel lastLevel; + #if MC_VER < MC_1_20_2 #if MC_VER == MC_1_20_1 @Redirect( @@ -88,7 +98,25 @@ public class MixinMinecraft } #endif + @Inject(at = @At("HEAD"), method = "updateLevelInEngines") + public void updateLevelInEngines(ClientLevel level, CallbackInfo ci) + { + // Only for multiplayer clients + if (!this.isLocalServer()) + { + if (this.lastLevel != null && level != this.lastLevel) + { + ClientApi.INSTANCE.clientLevelUnloadEvent(ClientLevelWrapper.getWrapper(this.lastLevel)); + } + if (level != null) + { + ClientApi.INSTANCE.clientLevelLoadEvent(ClientLevelWrapper.getWrapper(level)); + } + this.lastLevel = level; + } + } + @Inject(at = @At("HEAD"), method = "close()V") public void close(CallbackInfo ci) { SelfUpdater.onClose(); } -} +} \ No newline at end of file diff --git a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json index 787d86ac0..5d1ce2c2c 100644 --- a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json +++ b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json @@ -9,7 +9,6 @@ ], "client": [ "client.MixinClientLevel", - "client.MixinLevel", "client.MixinClientPacketListener", "client.MixinDebugScreenOverlay", "client.MixinFogRenderer",