From 43740dcd3a4e57d8bdb94ca44869c027ca867a9f Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Tue, 4 Oct 2022 00:26:48 +0700 Subject: [PATCH] Subscribe to LevelEvent.Unload --- .../java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java | 1 + .../mc/otm/block/entity/SynchronizedBlockEntity.kt | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java index 6b1bee0ef..2b4ddfdc7 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java +++ b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java @@ -141,6 +141,7 @@ public final class OverdriveThatMatters { EVENT_BUS.addListener(EventPriority.NORMAL, AndroidResearchManager.INSTANCE::syncEvent); EVENT_BUS.addListener(EventPriority.NORMAL, SynchronizedBlockEntity.Companion::onServerStopping); + EVENT_BUS.addListener(EventPriority.NORMAL, SynchronizedBlockEntity.Companion::onLevelUnload); EVENT_BUS.addListener(EventPriority.NORMAL, SynchronizedBlockEntity.Companion::onWatch); EVENT_BUS.addListener(EventPriority.NORMAL, SynchronizedBlockEntity.Companion::onForget); EVENT_BUS.addListener(EventPriority.NORMAL, SynchronizedBlockEntity.Companion::playerDisconnected); diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/SynchronizedBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/SynchronizedBlockEntity.kt index 5f9d2ab07..66ef189a7 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/SynchronizedBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/SynchronizedBlockEntity.kt @@ -14,6 +14,7 @@ import net.minecraftforge.event.TickEvent import net.minecraftforge.event.TickEvent.LevelTickEvent import net.minecraftforge.event.entity.player.PlayerEvent import net.minecraftforge.event.level.ChunkWatchEvent +import net.minecraftforge.event.level.LevelEvent import net.minecraftforge.event.server.ServerStoppingEvent import ru.dbotthepony.mc.otm.network.BlockEntitySyncPacket import ru.dbotthepony.mc.otm.network.FieldSynchronizer @@ -261,8 +262,15 @@ abstract class SynchronizedBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: private val playerMap = WeakHashMap>() private val tickingMap = WeakHashMap>>() + fun onLevelUnload(event: LevelEvent.Unload) { + val level = event.level as? ServerLevel ?: return + playerMap.remove(level) + tickingMap.remove(level) + } + fun onServerStopping(event: ServerStoppingEvent) { playerMap.clear() + tickingMap.clear() } fun postLevelTick(event: LevelTickEvent) {