From 892f8941e228b0598b6a6cf550b75f0a9c4406b1 Mon Sep 17 00:00:00 2001 From: Alexdoru <57050655+Alexdoru@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:11:09 +0200 Subject: [PATCH] Fix two world leaks (#110) --- .../thaumichorizons/client/ClientProxy.java | 86 +++++++------------ .../common/lib/EventHandlerEntity.java | 4 +- 2 files changed, 36 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/kentington/thaumichorizons/client/ClientProxy.java b/src/main/java/com/kentington/thaumichorizons/client/ClientProxy.java index bd2c4fa..a52f42f 100644 --- a/src/main/java/com/kentington/thaumichorizons/client/ClientProxy.java +++ b/src/main/java/com/kentington/thaumichorizons/client/ClientProxy.java @@ -29,6 +29,7 @@ import net.minecraft.item.Item; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.WorldEvent; import com.kentington.thaumichorizons.client.audio.VortexSound; import com.kentington.thaumichorizons.client.fx.FXSonic; @@ -166,6 +167,7 @@ import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; import thaumcraft.api.wands.IWandTriggerManager; import thaumcraft.client.fx.ParticleEngine; import thaumcraft.client.fx.particles.FXBurst; @@ -184,6 +186,7 @@ public class ClientProxy extends CommonProxy { @Override public void registerHandlers() { + MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(ThaumicHorizons.instance.renderEventHandler); final IResourceManager resourceManager = Minecraft.getMinecraft().getResourceManager(); if (resourceManager instanceof IReloadableResourceManager) { @@ -198,6 +201,7 @@ public class ClientProxy extends CommonProxy { @Override public void registerRenderers() { + // spotless:off ClientRegistry.bindTileEntitySpecialRenderer(TileNodeMonitor.class, new TileNodeMonitorRender()); ClientRegistry.bindTileEntitySpecialRenderer(TileSyntheticNode.class, new TileEtherealShardRender()); ClientRegistry.bindTileEntitySpecialRenderer(TileVisDynamo.class, new TileVisDynamoRender()); @@ -209,8 +213,7 @@ public class ClientProxy extends CommonProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileVatMatrix.class, new TileVatMatrixRender(0)); ClientRegistry.bindTileEntitySpecialRenderer(TileBloodInfuser.class, new TileBloodInfuserRender()); ClientRegistry.bindTileEntitySpecialRenderer(TileSoulBeacon.class, new TileSoulBeaconRender()); - ClientRegistry - .bindTileEntitySpecialRenderer(TileTransductionAmplifier.class, new TileTransductionAmplifierRender()); + ClientRegistry.bindTileEntitySpecialRenderer(TileTransductionAmplifier.class, new TileTransductionAmplifierRender()); ClientRegistry.bindTileEntitySpecialRenderer(TileRecombinator.class, new TileRecombinatorRender()); ClientRegistry.bindTileEntitySpecialRenderer(TileVortexStabilizer.class, new TileVortexStabilizerRender()); ClientRegistry.bindTileEntitySpecialRenderer(TileVortex.class, new TileVortexRender()); @@ -220,61 +223,29 @@ public class ClientProxy extends CommonProxy { RenderingRegistry.registerEntityRenderingHandler(EntityAlchemitePrimed.class, new RenderAlchemitePrimed()); RenderingRegistry.registerEntityRenderingHandler(EntitySyringe.class, new RenderSyringe()); RenderingRegistry.registerEntityRenderingHandler(EntityBlastPhial.class, new BlastPhialRender()); - RenderingRegistry - .registerEntityRenderingHandler(EntityChocolateCow.class, new RenderChocolateCow(new ModelCow(), 0.7f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityOrePig.class, - new RenderOreBoar(new ModelPig(), new ModelPig(0.5f), 0.7f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityGuardianPanther.class, - new RenderGuardianPanther(new ModelOcelot(), 1.0f)); - RenderingRegistry - .registerEntityRenderingHandler(EntityFamiliar.class, new RenderFamiliar(new ModelFamiliar(), 0.5f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityGravekeeper.class, - new RenderGravekeeper(new ModelOcelot(), 0.5f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityGoldChicken.class, - new RenderGoldChicken(new ModelChicken(), 0.5f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityScholarChicken.class, - new RenderScholarChicken(new ModelChicken(), 0.5f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityTaintPig.class, - new RenderTaintfeeder(new ModelPig(), new ModelPig(0.5f), 0.5f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityNetherHound.class, - new RenderNetherHound(new ModelWolf(), new ModelWolf(), 0.5f)); - RenderingRegistry.registerEntityRenderingHandler( - EntitySeawolf.class, - new RenderSeawolf(new ModelWolf(), new ModelWolf(), 0.5f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityLunarWolf.class, - new RenderLunarWolf(new ModelWolf(), new ModelWolf(), 0.5f)); - RenderingRegistry - .registerEntityRenderingHandler(EntityGolemTH.class, new RenderGolemTH(new ModelGolemTH(false))); - RenderingRegistry - .registerEntityRenderingHandler(EntityEndersteed.class, new RenderEndersteed(new ModelHorse(), 0.75f)); - RenderingRegistry - .registerEntityRenderingHandler(EntityNightmare.class, new RenderNightmare(new ModelHorse(), 0.75f)); + RenderingRegistry.registerEntityRenderingHandler(EntityChocolateCow.class, new RenderChocolateCow(new ModelCow(), 0.7f)); + RenderingRegistry.registerEntityRenderingHandler(EntityOrePig.class, new RenderOreBoar(new ModelPig(), new ModelPig(0.5f), 0.7f)); + RenderingRegistry.registerEntityRenderingHandler(EntityGuardianPanther.class, new RenderGuardianPanther(new ModelOcelot(), 1.0f)); + RenderingRegistry.registerEntityRenderingHandler(EntityFamiliar.class, new RenderFamiliar(new ModelFamiliar(), 0.5f)); + RenderingRegistry.registerEntityRenderingHandler(EntityGravekeeper.class, new RenderGravekeeper(new ModelOcelot(), 0.5f)); + RenderingRegistry.registerEntityRenderingHandler(EntityGoldChicken.class, new RenderGoldChicken(new ModelChicken(), 0.5f)); + RenderingRegistry.registerEntityRenderingHandler(EntityScholarChicken.class, new RenderScholarChicken(new ModelChicken(), 0.5f)); + RenderingRegistry.registerEntityRenderingHandler(EntityTaintPig.class, new RenderTaintfeeder(new ModelPig(), new ModelPig(0.5f), 0.5f)); + RenderingRegistry.registerEntityRenderingHandler(EntityNetherHound.class, new RenderNetherHound(new ModelWolf(), new ModelWolf(), 0.5f)); + RenderingRegistry.registerEntityRenderingHandler(EntitySeawolf.class, new RenderSeawolf(new ModelWolf(), new ModelWolf(), 0.5f)); + RenderingRegistry.registerEntityRenderingHandler(EntityLunarWolf.class, new RenderLunarWolf(new ModelWolf(), new ModelWolf(), 0.5f)); + RenderingRegistry.registerEntityRenderingHandler(EntityGolemTH.class, new RenderGolemTH(new ModelGolemTH(false))); + RenderingRegistry.registerEntityRenderingHandler(EntityEndersteed.class, new RenderEndersteed(new ModelHorse(), 0.75f)); + RenderingRegistry.registerEntityRenderingHandler(EntityNightmare.class, new RenderNightmare(new ModelHorse(), 0.75f)); RenderingRegistry.registerEntityRenderingHandler(EntityBoatGreatwood.class, new RenderBoatGreatwood()); RenderingRegistry.registerEntityRenderingHandler(EntityBoatThaumium.class, new RenderBoatThaumium()); - RenderingRegistry.registerEntityRenderingHandler( - EntityMeatSlime.class, - new RenderMeatSlime(new ModelSlime(16), new ModelSlime(0), 0.25f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityMercurialSlime.class, - new RenderMercurialSlime(new ModelSlime(16), new ModelSlime(0), 0.25f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityVoltSlime.class, - new RenderVoltSlime(new ModelSlime(16), new ModelSlime(0), 0.25f)); - RenderingRegistry.registerEntityRenderingHandler( - EntityMedSlime.class, - new RenderMedSlime(new ModelSlime(16), new ModelSlime(0), 0.25f)); + RenderingRegistry.registerEntityRenderingHandler(EntityMeatSlime.class, new RenderMeatSlime(new ModelSlime(16), new ModelSlime(0), 0.25f)); + RenderingRegistry.registerEntityRenderingHandler(EntityMercurialSlime.class, new RenderMercurialSlime(new ModelSlime(16), new ModelSlime(0), 0.25f)); + RenderingRegistry.registerEntityRenderingHandler(EntityVoltSlime.class, new RenderVoltSlime(new ModelSlime(16), new ModelSlime(0), 0.25f)); + RenderingRegistry.registerEntityRenderingHandler(EntityMedSlime.class, new RenderMedSlime(new ModelSlime(16), new ModelSlime(0), 0.25f)); RenderingRegistry.registerEntityRenderingHandler(EntitySheeder.class, new RenderSheeder()); RenderingRegistry.registerEntityRenderingHandler(EntitySoul.class, new RenderSoul()); - RenderingRegistry - .registerEntityRenderingHandler(EntityLightningBoltFinite.class, new RenderLightningBoltFinite()); + RenderingRegistry.registerEntityRenderingHandler(EntityLightningBoltFinite.class, new RenderLightningBoltFinite()); MinecraftForgeClient.registerItemRenderer(ThaumicHorizons.itemSyringeBloodSample, new ItemSyringeRender()); MinecraftForgeClient.registerItemRenderer(ThaumicHorizons.itemSyringeHuman, new ItemSyringeRender()); MinecraftForgeClient.registerItemRenderer(ThaumicHorizons.itemSyringeEmpty, new ItemSyringeRender()); @@ -282,6 +253,7 @@ public class ClientProxy extends CommonProxy { MinecraftForgeClient.registerItemRenderer(ThaumicHorizons.itemCorpseEffigy, new ItemCorpseEffigyRender()); MinecraftForgeClient.registerItemRenderer(ThaumicHorizons.itemInjector, new ItemInjectorRender()); MinecraftForgeClient.registerItemRenderer(ThaumicHorizons.itemWandCastingDisposable, new ItemWandRenderer()); + // spotless:on } @Override @@ -561,6 +533,14 @@ public class ClientProxy extends CommonProxy { private final Map activeVortexSounds = new HashMap<>(); + @SubscribeEvent + public void onWorldUnload(WorldEvent.Unload event) { + if (event.world.isRemote) { + activeVortexSounds.clear(); + ThaumicHorizons.instance.renderEventHandler.thingsThatSparkle.clear(); + } + } + @Override public void playVortexSound(TileVortex tile) { if (tile == null || tile.isInvalid() || tile.getWorldObj() == null) return; diff --git a/src/main/java/com/kentington/thaumichorizons/common/lib/EventHandlerEntity.java b/src/main/java/com/kentington/thaumichorizons/common/lib/EventHandlerEntity.java index dd2e33a..0ae423f 100644 --- a/src/main/java/com/kentington/thaumichorizons/common/lib/EventHandlerEntity.java +++ b/src/main/java/com/kentington/thaumichorizons/common/lib/EventHandlerEntity.java @@ -171,7 +171,9 @@ public class EventHandlerEntity { final PotionEffect effect = new PotionEffect(Potion.resistance.id, Integer.MAX_VALUE, 0, true); effect.setCurativeItems(new ArrayList<>()); entity.addPotionEffect(effect); - ThaumicHorizons.instance.renderEventHandler.thingsThatSparkle.add(entity); + if (entity.worldObj.isRemote) { + ThaumicHorizons.instance.renderEventHandler.thingsThatSparkle.add(entity); + } } else if (infusions[i] == 8 && !entity.getEntityData().hasKey("runicCharge")) { entity.getEntityData().setInteger("runicCharge", 6); } else if (infusions[i] == 7) {