remove unloaded aura chunks

This commit is contained in:
Ell 2021-01-30 16:50:02 +01:00
parent 25b5ab0548
commit ba6c274842

View file

@ -21,6 +21,7 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.IChunk;
import net.minecraft.world.gen.GenerationStage.Decoration; import net.minecraft.world.gen.GenerationStage.Decoration;
import net.minecraft.world.server.ChunkHolder; import net.minecraft.world.server.ChunkHolder;
import net.minecraft.world.server.ChunkManager; import net.minecraft.world.server.ChunkManager;
@ -29,6 +30,7 @@ import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.BiomeLoadingEvent; import net.minecraftforge.event.world.BiomeLoadingEvent;
import net.minecraftforge.event.world.ChunkEvent;
import net.minecraftforge.event.world.ChunkWatchEvent; import net.minecraftforge.event.world.ChunkWatchEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
@ -74,6 +76,19 @@ public class CommonEvents {
event.addCapability(new ResourceLocation(NaturesAura.MOD_ID, "data"), new WorldData()); event.addCapability(new ResourceLocation(NaturesAura.MOD_ID, "data"), new WorldData());
} }
@SubscribeEvent
public void onChunkUnload(ChunkEvent.Unload event) {
IChunk iChunk = event.getChunk();
if (iChunk instanceof Chunk) {
Chunk chunk = (Chunk) iChunk;
IAuraChunk auraChunk = chunk.getCapability(NaturesAuraAPI.capAuraChunk).orElse(null);
if (auraChunk instanceof AuraChunk) {
WorldData data = (WorldData) IWorldData.getWorldData(chunk.getWorld());
data.auraChunksWithSpots.remove(chunk.getPos().asLong());
}
}
}
@SubscribeEvent @SubscribeEvent
public void onItemUse(PlayerInteractEvent.RightClickBlock event) { public void onItemUse(PlayerInteractEvent.RightClickBlock event) {
PlayerEntity player = event.getPlayer(); PlayerEntity player = event.getPlayer();