mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 15:49:00 +01:00
Player Chunk Load/Unload Events
Co-authored-by: Mariell <proximyst@proximyst.com>
This commit is contained in:
parent
3e5a38ccf5
commit
11a4045767
2 changed files with 141 additions and 0 deletions
100
Spigot-API-Patches/Player-Chunk-Load-Unload-Events.patch
Normal file
100
Spigot-API-Patches/Player-Chunk-Load-Unload-Events.patch
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: ysl3000 <yannicklamprecht@live.de>
|
||||||
|
Date: Mon, 5 Oct 2020 21:24:45 +0200
|
||||||
|
Subject: [PATCH] Player Chunk Load/Unload Events
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/io/papermc/paper/event/packet/PlayerChunkLoadEvent.java b/src/main/java/io/papermc/paper/event/packet/PlayerChunkLoadEvent.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/java/io/papermc/paper/event/packet/PlayerChunkLoadEvent.java
|
||||||
|
@@ -0,0 +0,0 @@
|
||||||
|
+package io.papermc.paper.event.packet;
|
||||||
|
+
|
||||||
|
+import org.bukkit.Chunk;
|
||||||
|
+import org.bukkit.entity.Player;
|
||||||
|
+import org.bukkit.event.HandlerList;
|
||||||
|
+import org.bukkit.event.world.ChunkEvent;
|
||||||
|
+import org.jetbrains.annotations.NotNull;
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Is called when a {@link org.bukkit.entity.Player} receives a {@link org.bukkit.Chunk}
|
||||||
|
+ * <p>
|
||||||
|
+ * Can for example be used for spawning a fake entity when the player receives a chunk.
|
||||||
|
+ *
|
||||||
|
+ * Should only be used for packet/clientside related stuff.
|
||||||
|
+ * Not intended for modifying server side state.
|
||||||
|
+ */
|
||||||
|
+public class PlayerChunkLoadEvent extends ChunkEvent {
|
||||||
|
+
|
||||||
|
+ private static final HandlerList handlers = new HandlerList();
|
||||||
|
+ private final Player player;
|
||||||
|
+
|
||||||
|
+ public PlayerChunkLoadEvent(@NotNull Chunk chunk, @NotNull Player player) {
|
||||||
|
+ super(chunk);
|
||||||
|
+ this.player = player;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @NotNull
|
||||||
|
+ @Override
|
||||||
|
+ public HandlerList getHandlers() {
|
||||||
|
+ return handlers;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @NotNull
|
||||||
|
+ public Player getPlayer() {
|
||||||
|
+ return player;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @NotNull
|
||||||
|
+ public static HandlerList getHandlerList() {
|
||||||
|
+ return handlers;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
diff --git a/src/main/java/io/papermc/paper/event/packet/PlayerChunkUnloadEvent.java b/src/main/java/io/papermc/paper/event/packet/PlayerChunkUnloadEvent.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/java/io/papermc/paper/event/packet/PlayerChunkUnloadEvent.java
|
||||||
|
@@ -0,0 +0,0 @@
|
||||||
|
+package io.papermc.paper.event.packet;
|
||||||
|
+
|
||||||
|
+import org.bukkit.Chunk;
|
||||||
|
+import org.bukkit.entity.Player;
|
||||||
|
+import org.bukkit.event.HandlerList;
|
||||||
|
+import org.bukkit.event.world.ChunkEvent;
|
||||||
|
+import org.jetbrains.annotations.NotNull;
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Is called when a {@link Player} receives a chunk unload packet.
|
||||||
|
+ *
|
||||||
|
+ * Should only be used for packet/clientside related stuff.
|
||||||
|
+ * Not intended for modifying server side.
|
||||||
|
+ */
|
||||||
|
+public class PlayerChunkUnloadEvent extends ChunkEvent {
|
||||||
|
+
|
||||||
|
+ private static final HandlerList handlers = new HandlerList();
|
||||||
|
+ private final Player player;
|
||||||
|
+
|
||||||
|
+ public PlayerChunkUnloadEvent(@NotNull Chunk chunk, @NotNull Player player) {
|
||||||
|
+ super(chunk);
|
||||||
|
+ this.player = player;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @NotNull
|
||||||
|
+ @Override
|
||||||
|
+ public HandlerList getHandlers() {
|
||||||
|
+ return handlers;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @NotNull
|
||||||
|
+ public Player getPlayer() {
|
||||||
|
+ return player;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @NotNull
|
||||||
|
+ public static HandlerList getHandlerList() {
|
||||||
|
+ return handlers;
|
||||||
|
+ }
|
||||||
|
+}
|
41
Spigot-Server-Patches/Player-Chunk-Load-Unload-Events.patch
Normal file
41
Spigot-Server-Patches/Player-Chunk-Load-Unload-Events.patch
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: ysl3000 <yannicklamprecht@live.de>
|
||||||
|
Date: Mon, 5 Oct 2020 21:25:16 +0200
|
||||||
|
Subject: [PATCH] Player Chunk Load/Unload Events
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||||
|
@@ -0,0 +0,0 @@ import java.util.OptionalInt;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.UUID;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
+import io.papermc.paper.event.packet.PlayerChunkLoadEvent; // Paper
|
||||||
|
+import io.papermc.paper.event.packet.PlayerChunkUnloadEvent; // Paper
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||||
|
public void a(ChunkCoordIntPair chunkcoordintpair, Packet<?> packet, Packet<?> packet1) {
|
||||||
|
this.playerConnection.sendPacket(packet1);
|
||||||
|
this.playerConnection.sendPacket(packet);
|
||||||
|
+ // Paper start
|
||||||
|
+ if(PlayerChunkLoadEvent.getHandlerList().getRegisteredListeners().length > 0){
|
||||||
|
+ new PlayerChunkLoadEvent(this.getBukkitEntity().getWorld().getChunkAt(chunkcoordintpair.longKey), this.getBukkitEntity()).callEvent();
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a(ChunkCoordIntPair chunkcoordintpair) {
|
||||||
|
if (this.isAlive()) {
|
||||||
|
this.playerConnection.sendPacket(new PacketPlayOutUnloadChunk(chunkcoordintpair.x, chunkcoordintpair.z));
|
||||||
|
+ // Paper start
|
||||||
|
+ if(PlayerChunkUnloadEvent.getHandlerList().getRegisteredListeners().length > 0){
|
||||||
|
+ new PlayerChunkUnloadEvent(this.getBukkitEntity().getWorld().getChunkAt(chunkcoordintpair.longKey), this.getBukkitEntity()).callEvent();
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue