HolographicDisplays/core/src/main/java/me/filoghost/holographicdisplays/core/listener/ChunkListener.java

88 lines
2.9 KiB
Java
Raw Normal View History

2021-05-17 19:31:20 +02:00
/*
* Copyright (C) filoghost and contributors
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package me.filoghost.holographicdisplays.core.listener;
2021-02-20 09:30:28 +01:00
import me.filoghost.holographicdisplays.core.api.current.APIHologramManager;
import me.filoghost.holographicdisplays.core.api.v2.V2HologramManager;
2021-06-20 11:50:09 +02:00
import org.bukkit.Bukkit;
2021-02-20 09:30:28 +01:00
import org.bukkit.Chunk;
2021-08-23 13:45:41 +02:00
import org.bukkit.World;
2021-02-20 09:30:28 +01:00
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.world.ChunkLoadEvent;
import org.bukkit.event.world.ChunkUnloadEvent;
import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.event.world.WorldUnloadEvent;
import org.bukkit.plugin.Plugin;
2021-02-20 09:30:28 +01:00
public class ChunkListener implements Listener {
private final Plugin plugin;
2021-08-05 11:34:03 +02:00
private final APIHologramManager apiHologramManager;
2021-08-23 13:45:41 +02:00
private final V2HologramManager v2HologramManager;
2021-02-20 09:30:28 +01:00
2022-05-03 23:46:57 +02:00
public ChunkListener(Plugin plugin, APIHologramManager apiHologramManager, V2HologramManager v2HologramManager) {
this.plugin = plugin;
2021-08-05 11:34:03 +02:00
this.apiHologramManager = apiHologramManager;
2021-08-23 13:45:41 +02:00
this.v2HologramManager = v2HologramManager;
2021-02-20 09:30:28 +01:00
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
2021-08-23 12:42:59 +02:00
public void onWorldUnload(WorldUnloadEvent event) {
2021-08-23 13:45:41 +02:00
World world = event.getWorld();
apiHologramManager.onWorldUnload(world);
v2HologramManager.onWorldUnload(world);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onWorldLoad(WorldLoadEvent event) {
2021-08-23 13:45:41 +02:00
World world = event.getWorld();
apiHologramManager.onWorldLoad(world);
v2HologramManager.onWorldLoad(world);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
2021-02-20 09:30:28 +01:00
public void onChunkUnload(ChunkUnloadEvent event) {
2021-08-23 13:45:41 +02:00
Chunk chunk = event.getChunk();
2022-10-01 16:27:24 +02:00
// Always execute on the main thread
if (Bukkit.isPrimaryThread()) {
onChunkUnload(chunk);
} else {
Bukkit.getScheduler().runTask(plugin, () -> onChunkUnload(chunk));
}
}
private void onChunkUnload(Chunk chunk) {
2021-08-23 13:45:41 +02:00
apiHologramManager.onChunkUnload(chunk);
v2HologramManager.onChunkUnload(chunk);
2021-02-20 09:30:28 +01:00
}
2021-06-20 16:32:42 +02:00
@EventHandler(priority = EventPriority.MONITOR)
2021-02-20 09:30:28 +01:00
public void onChunkLoad(ChunkLoadEvent event) {
Chunk chunk = event.getChunk();
2021-05-17 18:19:09 +02:00
// Other plugins could call this event wrongly, check if the chunk is actually loaded
2021-02-20 09:30:28 +01:00
if (!chunk.isLoaded()) {
return;
}
2022-10-01 16:27:24 +02:00
// Always execute on the main thread
2021-06-20 11:50:09 +02:00
if (Bukkit.isPrimaryThread()) {
onChunkLoad(chunk);
} else {
Bukkit.getScheduler().runTask(plugin, () -> onChunkLoad(chunk));
2021-06-20 11:50:09 +02:00
}
}
private void onChunkLoad(Chunk chunk) {
2021-08-05 11:34:03 +02:00
apiHologramManager.onChunkLoad(chunk);
2021-08-23 13:45:41 +02:00
v2HologramManager.onChunkLoad(chunk);
2021-02-20 09:30:28 +01:00
}
}