From 080345167e0fc62c356df910ef336be17c2ac727 Mon Sep 17 00:00:00 2001 From: Scribble Date: Wed, 11 Dec 2024 10:23:48 +0100 Subject: [PATCH] [Savestates] Fix entities being duplicated after loadstate --- .../mixin/savestates/MixinWorldClient.java | 26 +++++++++++++++++++ .../savestates/SavestateHandlerClient.java | 4 ++- .../handlers/SavestateWorldHandler.java | 1 - .../com/minecrafttas/tasmod/util/Ducks.java | 11 ++++++++ src/main/resources/tasmod.mixin.json | 1 + 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/minecrafttas/tasmod/mixin/savestates/MixinWorldClient.java diff --git a/src/main/java/com/minecrafttas/tasmod/mixin/savestates/MixinWorldClient.java b/src/main/java/com/minecrafttas/tasmod/mixin/savestates/MixinWorldClient.java new file mode 100644 index 00000000..7027c68a --- /dev/null +++ b/src/main/java/com/minecrafttas/tasmod/mixin/savestates/MixinWorldClient.java @@ -0,0 +1,26 @@ +package com.minecrafttas.tasmod.mixin.savestates; + +import java.util.Set; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import com.minecrafttas.tasmod.util.Ducks.WorldClientDuck; + +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.entity.Entity; + +@Mixin(WorldClient.class) +public class MixinWorldClient implements WorldClientDuck { + + @Shadow + @Final + private Set entityList; + + @Override + public void clearEntityList() { + entityList.clear(); + } + +} diff --git a/src/main/java/com/minecrafttas/tasmod/savestates/SavestateHandlerClient.java b/src/main/java/com/minecrafttas/tasmod/savestates/SavestateHandlerClient.java index 2e9ba7b3..bbf21857 100644 --- a/src/main/java/com/minecrafttas/tasmod/savestates/SavestateHandlerClient.java +++ b/src/main/java/com/minecrafttas/tasmod/savestates/SavestateHandlerClient.java @@ -28,6 +28,7 @@ import com.minecrafttas.tasmod.savestates.gui.GuiSavestateSavingScreen; import com.minecrafttas.tasmod.util.Ducks.ChunkProviderDuck; import com.minecrafttas.tasmod.util.Ducks.SubtickDuck; +import com.minecrafttas.tasmod.util.Ducks.WorldClientDuck; import com.minecrafttas.tasmod.util.LoggerMarkers; import com.mojang.realmsclient.gui.ChatFormatting; @@ -325,7 +326,8 @@ public static void unloadAllClientChunks() { ChunkProviderClient chunkProvider = mc.world.getChunkProvider(); ((ChunkProviderDuck) chunkProvider).unloadAllChunks(); - Minecraft.getMinecraft().renderGlobal.loadRenderers(); + mc.renderGlobal.loadRenderers(); + ((WorldClientDuck) mc.world).clearEntityList(); } @Override diff --git a/src/main/java/com/minecrafttas/tasmod/savestates/handlers/SavestateWorldHandler.java b/src/main/java/com/minecrafttas/tasmod/savestates/handlers/SavestateWorldHandler.java index b5571bf5..c8de811a 100644 --- a/src/main/java/com/minecrafttas/tasmod/savestates/handlers/SavestateWorldHandler.java +++ b/src/main/java/com/minecrafttas/tasmod/savestates/handlers/SavestateWorldHandler.java @@ -159,7 +159,6 @@ private void addPlayerToChunkMap(WorldServer world, EntityPlayerMP player) { } world.getChunkProvider().provideChunk(playerChunkPosX, playerChunkPosY); - world.addWeatherEffect(player); world.spawnEntity(player); } diff --git a/src/main/java/com/minecrafttas/tasmod/util/Ducks.java b/src/main/java/com/minecrafttas/tasmod/util/Ducks.java index 81d0a8e4..ea310379 100644 --- a/src/main/java/com/minecrafttas/tasmod/util/Ducks.java +++ b/src/main/java/com/minecrafttas/tasmod/util/Ducks.java @@ -118,4 +118,15 @@ public static interface ScoreboardDuck { */ public void clearScoreboard(); } + + /** + * Quacks the world client + */ + public static interface WorldClientDuck { + + /** + * Clear entitylist on the client + */ + public void clearEntityList(); + } } diff --git a/src/main/resources/tasmod.mixin.json b/src/main/resources/tasmod.mixin.json index 9271a494..25231ee5 100644 --- a/src/main/resources/tasmod.mixin.json +++ b/src/main/resources/tasmod.mixin.json @@ -32,6 +32,7 @@ // Savestates "savestates.MixinChunkProviderClient", + "savestates.MixinWorldClient", // Interpolation "MixinFrustum",