ChunkStatusChangeEvent

This commit is contained in:
Cryptite
2023-11-06 08:24:33 -06:00
parent d047fef218
commit 2253da417d
2 changed files with 94 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 6 Nov 2023 08:19:46 -0600
Subject: [PATCH] ChunkStatusChangeEvent
diff --git a/src/main/java/com/destroystokyo/paper/event/chunk/ChunkStatusChangeEvent.java b/src/main/java/com/destroystokyo/paper/event/chunk/ChunkStatusChangeEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..512664d4a7a6821b8d79d0aabf5c31a61fcae6b9
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/event/chunk/ChunkStatusChangeEvent.java
@@ -0,0 +1,58 @@
+package com.destroystokyo.paper.event.chunk;
+
+import org.bukkit.Chunk;
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Called when the Full Status of a Chunk changes
+ */
+public class ChunkStatusChangeEvent extends Event {
+
+ private static final HandlerList handlers = new HandlerList();
+ private final Chunk chunk;
+ private final ChunkStatus currentState;
+ private final ChunkStatus newState;
+
+ public ChunkStatusChangeEvent(Chunk chunk, ChunkStatus currentState, ChunkStatus newState) {
+ super();
+ this.chunk = chunk;
+ this.currentState = currentState;
+ this.newState = newState;
+ }
+
+ public Chunk getChunk() {
+ return chunk;
+ }
+
+ public ChunkStatus getCurrentState() {
+ return currentState;
+ }
+
+ public ChunkStatus getNewState() {
+ return newState;
+ }
+
+ public boolean isUpgrade() {
+ return newState.ordinal() > currentState.ordinal();
+ }
+
+ @Override
+ @NotNull
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+
+ public enum ChunkStatus {
+ INACCESSIBLE,
+ FULL,
+ BLOCK_TICKING,
+ ENTITY_TICKING;
+ }
+}

View File

@@ -0,0 +1,24 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 6 Nov 2023 08:19:45 -0600
Subject: [PATCH] ChunkStatusChangeEvent
diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java
index b66a7d4aab887309579154815a0d4abf9de506b0..050a667d79df28570f95fe616696d0915257cc89 100644
--- a/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java
+++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java
@@ -1324,6 +1324,13 @@ public final class NewChunkHolder {
// chunks cannot downgrade state while status is pending a change
final LevelChunk chunk = (LevelChunk)this.currentChunk;
+ // Slice start
+ new com.destroystokyo.paper.event.chunk.ChunkStatusChangeEvent(new org.bukkit.craftbukkit.CraftChunk(chunk),
+ com.destroystokyo.paper.event.chunk.ChunkStatusChangeEvent.ChunkStatus.valueOf(currState.name()),
+ com.destroystokyo.paper.event.chunk.ChunkStatusChangeEvent.ChunkStatus.valueOf(nextState.name()))
+ .callEvent();
+ // Slice end
+
// Note: we assume that only load/unload contain plugin logic
// plugin logic is anything stupid enough to possibly change the chunk status while it is already
// being changed (i.e during load it is possible it will try to set to full ticking)