Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a call helper to Event #155

Merged
merged 9 commits into from
Aug 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions patches/api/0025-Add-a-call-helper-to-Event.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Fri, 14 Jul 2023 14:30:52 -0300
Subject: [PATCH] Add a call helper to Event

Reduces diff in Server patches

diff --git a/src/main/java/org/bukkit/event/Event.java b/src/main/java/org/bukkit/event/Event.java
index 6677e1bd6f5ae4385d3da9fe39caaa75468ee1fa..07137e0433e7615edac672b5f470883eeea12362 100644
--- a/src/main/java/org/bukkit/event/Event.java
+++ b/src/main/java/org/bukkit/event/Event.java
@@ -33,6 +33,22 @@ public abstract class Event {
this.async = isAsync;
}

+ // PandaSpigot start
+ /**
+ * Calls the event and tests if cancelled.
+ *
+ * @return false if event was cancelled, if cancellable. otherwise true.
+ */
+ public boolean callEvent() {
+ org.bukkit.Bukkit.getPluginManager().callEvent(this);
+ if (this instanceof Cancellable) {
+ return !((Cancellable) this).isCancelled();
+ } else {
+ return true;
+ }
+ }
+ // PandaSpigot end
+
/**
* Convenience method for providing a user-friendly identifier. By
* default, it is the event's class's {@linkplain Class#getSimpleName()
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ Subject: [PATCH] Backport PlayerHandshakeEvent from Paper
This patch was added in Paper 1.9.4, and is used by plugins such as BungeeGuard to listen to and modify handshake packets without requiring a packet listener such as ProtocolLib.

diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java
index 215648ece51b9e0316bae17de60abccfd40f8b35..b7615b1472470805e6ee2a49dd8d4cdca4f70806 100644
index 215648ece51b9e0316bae17de60abccfd40f8b35..e1a86a75524c3e3f3a9a4fbd447e01c7cb4d2b78 100644
--- a/src/main/java/net/minecraft/server/HandshakeListener.java
+++ b/src/main/java/net/minecraft/server/HandshakeListener.java
@@ -72,8 +72,36 @@ public class HandshakeListener implements PacketHandshakingInListener {
@@ -72,8 +72,35 @@ public class HandshakeListener implements PacketHandshakingInListener {
this.b.close(chatcomponenttext);
} else {
this.b.a((PacketListener) (new LoginListener(this.a, this.b)));
Expand All @@ -21,8 +21,7 @@ index 215648ece51b9e0316bae17de60abccfd40f8b35..b7615b1472470805e6ee2a49dd8d4cdc
+ java.net.SocketAddress socketAddress = this.b.l;
+ String hostnameOfRemote = socketAddress instanceof java.net.InetSocketAddress ? ((java.net.InetSocketAddress) socketAddress).getHostString() : InetAddress.getLoopbackAddress().getHostAddress();
+ com.destroystokyo.paper.event.player.PlayerHandshakeEvent event = new com.destroystokyo.paper.event.player.PlayerHandshakeEvent(packethandshakinginsetprotocol.hostname, hostnameOfRemote, !proxyLogicEnabled);
+ org.bukkit.Bukkit.getPluginManager().callEvent(event);
+ if (!event.isCancelled()) {
+ if (event.callEvent()) {
+ // If we've failed somehow, let the client know so and go no further.
+ if (event.isFailed()) {
+ chatcomponenttext = new ChatComponentText(event.getFailMessage());
Expand Down
6 changes: 3 additions & 3 deletions patches/server/0007-Add-Unix-domain-socket-support.patch
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ This feature can be enabled by setting the "server-ip" field in server.propertie
Currently, this feature is only supported on Linux environments with Epoll available.

diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
index 8e8330fbd317807c4e8ad7f8910fd86fff9a43d3..2c9d1944f186b66726fec19d07601d2bb6507380 100644
index 6434b8613971a228fb0074390d8223bfcefe4e9f..ee6a6b379575b0d0b10b96bac4ae8e1ffa810b8f 100644
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
@@ -165,6 +165,28 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
Expand Down Expand Up @@ -76,7 +76,7 @@ index 8e8330fbd317807c4e8ad7f8910fd86fff9a43d3..2c9d1944f186b66726fec19d07601d2b
DedicatedServer.LOGGER.warn("**** FAILED TO BIND TO PORT!");
DedicatedServer.LOGGER.warn("The exception was: {}", new Object[] { ioexception.toString()});
diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java
index b7615b1472470805e6ee2a49dd8d4cdca4f70806..578a417bda8dddbd46db77cfe0304d9dc06ce4cf 100644
index e1a86a75524c3e3f3a9a4fbd447e01c7cb4d2b78..10a8c440f08535d90d8d1204a23c859ba296aa39 100644
--- a/src/main/java/net/minecraft/server/HandshakeListener.java
+++ b/src/main/java/net/minecraft/server/HandshakeListener.java
@@ -29,6 +29,7 @@ public class HandshakeListener implements PacketHandshakingInListener {
Expand All @@ -95,7 +95,7 @@ index b7615b1472470805e6ee2a49dd8d4cdca4f70806..578a417bda8dddbd46db77cfe0304d9d
} catch (Throwable t) {
org.apache.logging.log4j.LogManager.getLogger().debug("Failed to check connection throttle", t);
}
@@ -104,8 +106,11 @@ public class HandshakeListener implements PacketHandshakingInListener {
@@ -103,8 +105,11 @@ public class HandshakeListener implements PacketHandshakingInListener {
//if (org.spigotmc.SpigotConfig.bungee) { // PandaSpigot - comment out, we check above!
String[] split = packethandshakinginsetprotocol.hostname.split("\00");
if ( split.length == 3 || split.length == 4 ) {
Expand Down
9 changes: 4 additions & 5 deletions patches/server/0022-EntityMoveEvent.patch
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] EntityMoveEvent


diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index 72c7e6fc8bb0a71877d6759af44d39030bcf51f5..cd95aa17291d31e3cebe9f6488a43923a18facba 100644
index 72c7e6fc8bb0a71877d6759af44d39030bcf51f5..e8a20bc5b66b4777c1d5de1f0a036db85407766b 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -1665,6 +1665,22 @@ public abstract class EntityLiving extends Entity {
@@ -1665,6 +1665,21 @@ public abstract class EntityLiving extends Entity {
}

this.world.methodProfiler.b();
Expand All @@ -18,8 +18,7 @@ index 72c7e6fc8bb0a71877d6759af44d39030bcf51f5..cd95aa17291d31e3cebe9f6488a43923
+ org.bukkit.Location from = new org.bukkit.Location(this.world.getWorld(), this.lastX, this.lastY, this.lastZ, this.lastYaw, this.lastPitch);
+ org.bukkit.Location to = new org.bukkit.Location (this.world.getWorld(), this.locX, this.locY, this.locZ, this.yaw, this.pitch);
+ io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent((LivingEntity) this.getBukkitEntity(), from, to.clone());
+ Bukkit.getPluginManager().callEvent(event);
+ if (event.isCancelled()) {
+ if (!event.callEvent()) {
+ // if cancelled, set back to previous position
+ this.setLocation(from.getX(), from.getY(), from.getZ(), from.getYaw(), from.getPitch());
+ } else if (!to.equals(event.getTo())) {
Expand All @@ -32,7 +31,7 @@ index 72c7e6fc8bb0a71877d6759af44d39030bcf51f5..cd95aa17291d31e3cebe9f6488a43923

protected void doTick() {}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 9e3bb94f11263c4614f18c282ae236d03599619a..f6d1510fc16fc48be221cc7bb5968a132a2b9752 100644
index b7decb879f530345b82722aeb1294864feecd2c2..66d4c410c2bcc345bf09e07a63de7534064524d2 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -926,6 +926,7 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
Expand Down
8 changes: 4 additions & 4 deletions patches/server/0023-Player-Chunk-Load-Unload-Events.patch
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,26 @@ 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 0c49a256cc481af1ceb7a873b03763e1d942a362..77068cd022e677fbf284df3d8aff95325089ce4f 100644
index 0c49a256cc481af1ceb7a873b03763e1d942a362..23524af2dd05a6f14ff3bddbf524c5d4d483290f 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -241,6 +241,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
arraylist.add(chunk);
arraylist1.addAll(chunk.tileEntities.values()); // CraftBukkit - Get tile entities directly from the chunk instead of the world
iterator1.remove();
+ Bukkit.getPluginManager().callEvent(new io.papermc.paper.event.packet.PlayerChunkLoadEvent(chunk.bukkitChunk, this.getBukkitEntity())); // PandaSpigot
+ new io.papermc.paper.event.packet.PlayerChunkLoadEvent(chunk.bukkitChunk, this.getBukkitEntity()).callEvent(); // PandaSpigot
}
}
} else {
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
index 38586aad7548b69275f0e5b3f5e8b2c2734076fe..4bf77d3cec9c3a1f0048de7749432b9a6024b242 100644
index 38586aad7548b69275f0e5b3f5e8b2c2734076fe..696edfe83aa6c75deaaa59cc10818dbf261cc5a9 100644
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
@@ -428,6 +428,7 @@ public class PlayerChunkMap {
this.players.remove(entityplayer); // CraftBukkit
this.b.remove(entityplayer);
entityplayer.chunkCoordIntPairQueue.remove(this.location);
+ org.bukkit.Bukkit.getPluginManager().callEvent(new io.papermc.paper.event.packet.PlayerChunkUnloadEvent(chunk.bukkitChunk, entityplayer.getBukkitEntity())); // PandaSpigot
+ new io.papermc.paper.event.packet.PlayerChunkUnloadEvent(chunk.bukkitChunk, entityplayer.getBukkitEntity()).callEvent(); // PandaSpigot
if (this.b.isEmpty()) {
long i = (long) this.location.x + 2147483647L | (long) this.location.z + 2147483647L << 32;

13 changes: 5 additions & 8 deletions patches/server/0037-Sound-events.patch
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,17 @@ Subject: [PATCH] Sound events


diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 73de7d6d4dc619416363a7d8557b71b850313cfb..3795d7f097c8051e5e80f6920d1b3fd69531c994 100644
index 73de7d6d4dc619416363a7d8557b71b850313cfb..f2442d75a73c6b6e6ae286f36b11992d11604637 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -944,20 +944,57 @@ public abstract class World implements IBlockAccess {
@@ -944,20 +944,54 @@ public abstract class World implements IBlockAccess {
}

public void makeSound(Entity entity, String s, float f, float f1) {
+ // PandaSpigot start - EntitySoundEvent
+ com.hpfxd.pandaspigot.event.sound.EntitySoundEvent event = new com.hpfxd.pandaspigot.event.sound.EntitySoundEvent(
+ entity.bukkitEntity, s, f, f1);
+ this.getServer().getPluginManager().callEvent(event);
+ if (event.isCancelled()) return;
+ if (!event.callEvent()) return;
+
+ org.bukkit.Location loc = event.getLocation();
+ s = event.getSound();
Expand All @@ -34,8 +33,7 @@ index 73de7d6d4dc619416363a7d8557b71b850313cfb..3795d7f097c8051e5e80f6920d1b3fd6
+ // PandaSpigot start - PlayerSoundEvent
+ com.hpfxd.pandaspigot.event.sound.PlayerSoundEvent event = new com.hpfxd.pandaspigot.event.sound.PlayerSoundEvent(
+ (org.bukkit.entity.Player) entityhuman.bukkitEntity, s, f, f1);
+ this.getServer().getPluginManager().callEvent(event);
+ if (event.isCancelled()) return;
+ if (!event.callEvent()) return;
+
+ org.bukkit.Location loc = event.getLocation();
+ s = event.getSound();
Expand All @@ -53,8 +51,7 @@ index 73de7d6d4dc619416363a7d8557b71b850313cfb..3795d7f097c8051e5e80f6920d1b3fd6
+ // PandaSpigot start - SoundEvent
+ com.hpfxd.pandaspigot.event.sound.SoundEvent event = new com.hpfxd.pandaspigot.event.sound.SoundEvent(
+ new org.bukkit.Location(this.world, d0, d1, d2), s, f, f1);
+ this.getServer().getPluginManager().callEvent(event);
+ if (event.isCancelled()) return;
+ if (!event.callEvent()) return;
+
+ org.bukkit.Location loc = event.getLocation();
+ d0 = loc.getX();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Backport TabCompleteEvent and AsyncTabCompleteEvent


diff --git a/src/main/java/com/hpfxd/pandaspigot/console/PandaConsoleCompleter.java b/src/main/java/com/hpfxd/pandaspigot/console/PandaConsoleCompleter.java
index 1aa335eca007be52e9813ce933d271eac9b1fdce..ad68ab6618e3d13b1df59398471b95c955efd026 100644
index 1aa335eca007be52e9813ce933d271eac9b1fdce..9212f9798707a50860daaff1d3520d52549c2f7a 100644
--- a/src/main/java/com/hpfxd/pandaspigot/console/PandaConsoleCompleter.java
+++ b/src/main/java/com/hpfxd/pandaspigot/console/PandaConsoleCompleter.java
@@ -3,11 +3,13 @@ package com.hpfxd.pandaspigot.console;
Expand All @@ -22,15 +22,15 @@ index 1aa335eca007be52e9813ce933d271eac9b1fdce..ad68ab6618e3d13b1df59398471b95c9
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
@@ -21,6 +23,39 @@ public class PandaConsoleCompleter implements Completer {
@@ -21,6 +23,38 @@ public class PandaConsoleCompleter implements Completer {

@Override
public void complete(LineReader reader, ParsedLine line, List<Candidate> candidates) {
+ // Async Tab Completion
+ com.destroystokyo.paper.event.server.AsyncTabCompleteEvent event;
+ java.util.List<String> completions = new java.util.ArrayList<>();
+ event = new com.destroystokyo.paper.event.server.AsyncTabCompleteEvent(server.server.getConsoleSender(), completions, line.line(), true, null);
+ server.server.getPluginManager().callEvent(event);
+ event.callEvent();
+ completions = event.isCancelled() ? com.google.common.collect.ImmutableList.of() : event.getCompletions();
+
+ if (event.isCancelled() || event.isHandled()) {
Expand All @@ -41,8 +41,7 @@ index 1aa335eca007be52e9813ce933d271eac9b1fdce..ad68ab6618e3d13b1df59398471b95c9
+ @Override
+ protected List<String> evaluate() {
+ org.bukkit.event.server.TabCompleteEvent syncEvent = new org.bukkit.event.server.TabCompleteEvent(server.server.getConsoleSender(), line.line(), finalCompletions);
+ server.server.getPluginManager().callEvent(event);
+ return !syncEvent.isCancelled() ? syncEvent.getCompletions() : com.google.common.collect.ImmutableList.of();
+ return syncEvent.callEvent() ? syncEvent.getCompletions() : com.google.common.collect.ImmutableList.of();
+ }
+ };
+ server.processQueue.add(syncCompletions);
Expand All @@ -62,7 +61,7 @@ index 1aa335eca007be52e9813ce933d271eac9b1fdce..ad68ab6618e3d13b1df59398471b95c9
CompletionWaiter waiter = new CompletionWaiter(line.line());
this.server.processQueue.add(waiter);

@@ -49,8 +84,12 @@ public class PandaConsoleCompleter implements Completer {
@@ -49,8 +83,12 @@ public class PandaConsoleCompleter implements Completer {
@Override
protected List<String> evaluate() {
final CraftServer server = PandaConsoleCompleter.this.server.server;
Expand All @@ -78,7 +77,7 @@ index 1aa335eca007be52e9813ce933d271eac9b1fdce..ad68ab6618e3d13b1df59398471b95c9
}
}
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index e2499f5f9c4b289e41c0f8fb922ed085047c7099..15f7c315df23eac08e12ce752b1b1bb23fd25aba 100644
index e2499f5f9c4b289e41c0f8fb922ed085047c7099..977675f6155a1ccb1d9cdfdcb48a9f922805df9a 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -1967,23 +1967,43 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList
Expand Down Expand Up @@ -106,7 +105,7 @@ index e2499f5f9c4b289e41c0f8fb922ed085047c7099..15f7c315df23eac08e12ce752b1b1bb2
+ boolean isCommand = buffer.startsWith("/");
+ event = new com.destroystokyo.paper.event.server.AsyncTabCompleteEvent(this.getPlayer(), completions,
+ buffer, isCommand, blockpos != null ? new Location(player.world.getWorld(), blockpos.getX(), blockpos.getY(), blockpos.getZ()) : null);
+ this.server.getPluginManager().callEvent(event);
+ event.callEvent();
+ completions = event.isCancelled() ? com.google.common.collect.ImmutableList.of() : event.getCompletions();
+ if (!event.isHandled()) {
+ // If the event isn't handled, we can assume that we have no completions, and so we'll ask the server
Expand Down Expand Up @@ -136,7 +135,7 @@ index e2499f5f9c4b289e41c0f8fb922ed085047c7099..15f7c315df23eac08e12ce752b1b1bb2

public void a(PacketPlayInSettings packetplayinsettings) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 15727da153524a13d5b507c11aef69d7571f6e70..6630d6f3c32d1cf46a8e5200b1ec55cd0754309a 100644
index 22b2dae71a5aa02d678c1d052ed8f4d5e0b8a5b9..cdff7613b406a39d102ab94395c4fb107ae356e8 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1632,11 +1632,17 @@ public final class CraftServer implements Server {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ index e67aa0423f6a28b286174662f29ffc32a74992d9..22c3ac7a71043ab82e7d3c95c71e02fa
}

diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 56d9a764bbf521f512e959efaa864c445a198917..870e4f920fc336e38f331699eb0d8d91c43112d8 100644
index a429dc5e950a31557d444d0a50ed71d13f13d555..46ebdb5e22592658cbd8172390b52edac5344e0f 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -874,7 +874,10 @@ public abstract class World implements IBlockAccess {
Expand All @@ -219,7 +219,7 @@ index 56d9a764bbf521f512e959efaa864c445a198917..870e4f920fc336e38f331699eb0d8d91
Block block1 = iblockdata1.getBlock();

if (!flag1 || block1.a(this, blockposition, iblockdata1) != null) {
@@ -2715,8 +2721,11 @@ public abstract class World implements IBlockAccess {
@@ -2712,8 +2718,11 @@ public abstract class World implements IBlockAccess {

for (int i1 = i; i1 <= j; ++i1) {
for (int j1 = k; j1 <= l; ++j1) {
Expand Down
4 changes: 2 additions & 2 deletions patches/server/0078-Fix-MC-117075-TE-Unload-Lag-Spike.patch
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Fix MC-117075: TE Unload Lag Spike


diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index ad5db898164f575b37fdc9c8800660eded6dc45c..e1857066baa97eb4cd50fd9c0337e1ea2e09123e 100644
index ba185d2ef2b7970f566aa9c5980dad1e6c80e6f0..e7ccc5ef7e288068cc5f08772eb8dd4ee6b6f3f7 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -1610,7 +1610,11 @@ public abstract class World implements IBlockAccess {
@@ -1607,7 +1607,11 @@ public abstract class World implements IBlockAccess {
this.M = true;
// CraftBukkit start - From below, clean up tile entities before ticking them
if (!this.c.isEmpty()) {
Expand Down
Loading