From 74f9cd596526fb71dafc592394ed9b8f648b54c2 Mon Sep 17 00:00:00 2001 From: TomTom <93038247+AverageGithub@users.noreply.github.com> Date: Wed, 7 Feb 2024 10:33:30 +0100 Subject: [PATCH] Possibly fix minions sometimes being broken --- build.gradle | 2 +- .../axminions/AxMinionsPlugin.kt | 20 ++++++++++--------- .../axminions/listeners/ChunkListener.kt | 4 ++-- .../listeners/MinionPlaceListener.kt | 4 ++-- .../axminions/listeners/WorldListener.kt | 17 ++++++++++++++++ .../axminions/minions/Minions.kt | 4 ++-- 6 files changed, 35 insertions(+), 16 deletions(-) diff --git a/build.gradle b/build.gradle index 5aef030..9718b69 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ plugins { } group = 'com.artillexstudios.axminions' -version = '1.0.4' +version = '1.0.5' repositories { mavenCentral() diff --git a/common/src/main/kotlin/com/artillexstudios/axminions/AxMinionsPlugin.kt b/common/src/main/kotlin/com/artillexstudios/axminions/AxMinionsPlugin.kt index 0402c7b..01495d9 100644 --- a/common/src/main/kotlin/com/artillexstudios/axminions/AxMinionsPlugin.kt +++ b/common/src/main/kotlin/com/artillexstudios/axminions/AxMinionsPlugin.kt @@ -106,15 +106,6 @@ class AxMinionsPlugin : AxPlugin() { handler.registerBrigadier() } - // Retroactively load minions for the already loaded worlds - dataQueue.submit { - Bukkit.getWorlds().fastFor { world -> - MinionTypes.getMinionTypes().fastFor { _, v -> - dataHandler.loadMinionsForWorld(v, world) - } - } - } - Bukkit.getPluginManager().also { it.registerEvents(MinionPlaceListener(), this) it.registerEvents(LinkingListener(), this) @@ -125,6 +116,17 @@ class AxMinionsPlugin : AxPlugin() { it.registerEvents(MinionDropListener(), this) } + // Retroactively load minions for the already loaded worlds + Bukkit.getWorlds().fastFor { world -> + MinionTypes.getMinionTypes().fastFor { _, v -> + dataHandler.loadMinionsForWorld(v, world) + } + + world.loadedChunks.fastFor { + Minions.startTicking(it) + } + } + MinionTicker.startTicking() Scheduler.get().runTimer({ diff --git a/common/src/main/kotlin/com/artillexstudios/axminions/listeners/ChunkListener.kt b/common/src/main/kotlin/com/artillexstudios/axminions/listeners/ChunkListener.kt index a972c9b..3963085 100644 --- a/common/src/main/kotlin/com/artillexstudios/axminions/listeners/ChunkListener.kt +++ b/common/src/main/kotlin/com/artillexstudios/axminions/listeners/ChunkListener.kt @@ -10,11 +10,11 @@ class ChunkListener : Listener { @EventHandler fun onChunkLoadEvent(event: ChunkLoadEvent) { - Minions.addTicking(event.chunk) + Minions.startTicking(event.chunk) } @EventHandler fun onChunkUnloadEvent(event: ChunkUnloadEvent) { - Minions.removeTicking(event.chunk) + Minions.stopTicking(event.chunk) } } \ No newline at end of file diff --git a/common/src/main/kotlin/com/artillexstudios/axminions/listeners/MinionPlaceListener.kt b/common/src/main/kotlin/com/artillexstudios/axminions/listeners/MinionPlaceListener.kt index a351c6f..26f325b 100644 --- a/common/src/main/kotlin/com/artillexstudios/axminions/listeners/MinionPlaceListener.kt +++ b/common/src/main/kotlin/com/artillexstudios/axminions/listeners/MinionPlaceListener.kt @@ -86,9 +86,9 @@ class MinionPlaceListener : Listener { locationId, 0 ) - Minions.addTicking(chunk) + Minions.startTicking(chunk) - Scheduler.get().run { task -> + Scheduler.get().run { _ -> meta = item.itemMeta!! meta.persistentDataContainer.remove(Keys.PLACED) item.itemMeta = meta diff --git a/common/src/main/kotlin/com/artillexstudios/axminions/listeners/WorldListener.kt b/common/src/main/kotlin/com/artillexstudios/axminions/listeners/WorldListener.kt index 0fe4aa3..a390bb7 100644 --- a/common/src/main/kotlin/com/artillexstudios/axminions/listeners/WorldListener.kt +++ b/common/src/main/kotlin/com/artillexstudios/axminions/listeners/WorldListener.kt @@ -1,14 +1,31 @@ package com.artillexstudios.axminions.listeners import com.artillexstudios.axminions.api.minions.miniontype.MinionTypes +import com.artillexstudios.axminions.api.utils.fastFor +import com.artillexstudios.axminions.minions.Minions import org.bukkit.event.EventHandler import org.bukkit.event.Listener import org.bukkit.event.world.WorldLoadEvent +import org.bukkit.event.world.WorldUnloadEvent class WorldListener : Listener { @EventHandler fun onWorldLoadEvent(event: WorldLoadEvent) { MinionTypes.loadForWorld(event.world) + + event.world.loadedChunks.fastFor { + Minions.startTicking(it) + } + } + + @EventHandler + fun onWorldUnload(event: WorldUnloadEvent) { + val worldUUID = event.world.uid + Minions.getMinions().fastFor { + if (it.getLocation().world?.uid == worldUUID) { + Minions.remove(it) + } + } } } \ No newline at end of file diff --git a/common/src/main/kotlin/com/artillexstudios/axminions/minions/Minions.kt b/common/src/main/kotlin/com/artillexstudios/axminions/minions/Minions.kt index 6c351ee..365e48f 100644 --- a/common/src/main/kotlin/com/artillexstudios/axminions/minions/Minions.kt +++ b/common/src/main/kotlin/com/artillexstudios/axminions/minions/Minions.kt @@ -12,7 +12,7 @@ object Minions { internal val lock = ReentrantReadWriteLock() internal val minions = arrayListOf() - fun addTicking(chunk: Chunk) { + fun startTicking(chunk: Chunk) { val chunkX = chunk.x val chunkZ = chunk.z val world = chunk.world @@ -45,7 +45,7 @@ object Minions { return false } - fun removeTicking(chunk: Chunk) { + fun stopTicking(chunk: Chunk) { val chunkX = chunk.x val chunkZ = chunk.z val world = chunk.world