mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-01 08:20:51 +01:00
de04cbced5
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: f29cb801 Separate checkstyle-suppressions file is not required 86f99bbe SPIGOT-7540, PR-946: Add ServerTickManager API d4119585 SPIGOT-6903, PR-945: Add BlockData#getMapColor b7a2ed41 SPIGOT-7530, PR-947: Add Player#removeResourcePack 9dd56255 SPIGOT-7527, PR-944: Add WindCharge#explode() 994a6163 Attempt upgrade of resolver libraries CraftBukkit Changes: b3b43a6ad Add Checkstyle check for unused imports 13fb3358e SPIGOT-7544: Scoreboard#getEntries() doesn't get entries but class names 3dda99c06 SPIGOT-7540, PR-1312: Add ServerTickManager API 2ab4508c0 SPIGOT-6903, PR-1311: Add BlockData#getMapColor 1dbdbbed4 PR-1238: Remove unnecessary sign ticking 659728d2a MC-264285, SPIGOT-7439, PR-1237: Fix unbreakable flint and steel is completely consumed while igniting creeper e37e29ce0 Increase outdated build delay c00438b39 SPIGOT-7530, PR-1313: Add Player#removeResourcePack 492dd80ce SPIGOT-7527, PR-1310: Add WindCharge#explode() e11fbb9d7 Upgrade MySQL driver 9f3a0bd2a Attempt upgrade of resolver libraries 60d16d7ca PR-1306: Centralize Bukkit and Minecraft entity conversion Spigot Changes: 06d602e7 Rebuild patches
156 lines
6.6 KiB
Diff
156 lines
6.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Nassim Jahnke <nassim@njahnke.dev>
|
|
Date: Thu, 29 Apr 2021 21:19:33 +0200
|
|
Subject: [PATCH] Add Channel initialization listeners
|
|
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/network/ChannelInitializeListener.java b/src/main/java/io/papermc/paper/network/ChannelInitializeListener.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..88099df34c2d74daba9645aadf65b446ca795a91
|
|
--- /dev/null
|
|
+++ b/src/main/java/io/papermc/paper/network/ChannelInitializeListener.java
|
|
@@ -0,0 +1,15 @@
|
|
+package io.papermc.paper.network;
|
|
+
|
|
+import io.netty.channel.Channel;
|
|
+import org.checkerframework.checker.nullness.qual.NonNull;
|
|
+
|
|
+/**
|
|
+ * Internal API to register channel initialization listeners.
|
|
+ * <p>
|
|
+ * This is not officially supported API and we make no guarantees to the existence or state of this interface.
|
|
+ */
|
|
+@FunctionalInterface
|
|
+public interface ChannelInitializeListener {
|
|
+
|
|
+ void afterInitChannel(@NonNull Channel channel);
|
|
+}
|
|
diff --git a/src/main/java/io/papermc/paper/network/ChannelInitializeListenerHolder.java b/src/main/java/io/papermc/paper/network/ChannelInitializeListenerHolder.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..30e62719e0a83525daa33cf41cb61df360c0e046
|
|
--- /dev/null
|
|
+++ b/src/main/java/io/papermc/paper/network/ChannelInitializeListenerHolder.java
|
|
@@ -0,0 +1,74 @@
|
|
+package io.papermc.paper.network;
|
|
+
|
|
+import io.netty.channel.Channel;
|
|
+import net.kyori.adventure.key.Key;
|
|
+import org.checkerframework.checker.nullness.qual.NonNull;
|
|
+import org.checkerframework.checker.nullness.qual.Nullable;
|
|
+
|
|
+import java.util.Collections;
|
|
+import java.util.HashMap;
|
|
+import java.util.Map;
|
|
+
|
|
+/**
|
|
+ * Internal API to register channel initialization listeners.
|
|
+ * <p>
|
|
+ * This is not officially supported API and we make no guarantees to the existence or state of this class.
|
|
+ */
|
|
+public final class ChannelInitializeListenerHolder {
|
|
+
|
|
+ private static final Map<Key, ChannelInitializeListener> LISTENERS = new HashMap<>();
|
|
+ private static final Map<Key, ChannelInitializeListener> IMMUTABLE_VIEW = Collections.unmodifiableMap(LISTENERS);
|
|
+
|
|
+ private ChannelInitializeListenerHolder() {
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Registers whether an initialization listener is registered under the given key.
|
|
+ *
|
|
+ * @param key key
|
|
+ * @return whether an initialization listener is registered under the given key
|
|
+ */
|
|
+ public static boolean hasListener(@NonNull Key key) {
|
|
+ return LISTENERS.containsKey(key);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Registers a channel initialization listener called after ServerConnection is initialized.
|
|
+ *
|
|
+ * @param key key
|
|
+ * @param listener initialization listeners
|
|
+ */
|
|
+ public static void addListener(@NonNull Key key, @NonNull ChannelInitializeListener listener) {
|
|
+ LISTENERS.put(key, listener);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Removes and returns an initialization listener registered by the given key if present.
|
|
+ *
|
|
+ * @param key key
|
|
+ * @return removed initialization listener if present
|
|
+ */
|
|
+ public static @Nullable ChannelInitializeListener removeListener(@NonNull Key key) {
|
|
+ return LISTENERS.remove(key);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Returns an immutable map of registered initialization listeners.
|
|
+ *
|
|
+ * @return immutable map of registered initialization listeners
|
|
+ */
|
|
+ public static @NonNull Map<Key, ChannelInitializeListener> getListeners() {
|
|
+ return IMMUTABLE_VIEW;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Calls the registered listeners with the given channel.
|
|
+ *
|
|
+ * @param channel channel
|
|
+ */
|
|
+ public static void callListeners(@NonNull Channel channel) {
|
|
+ for (ChannelInitializeListener listener : LISTENERS.values()) {
|
|
+ listener.afterInitChannel(channel);
|
|
+ }
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/io/papermc/paper/network/ConnectionEvent.java b/src/main/java/io/papermc/paper/network/ConnectionEvent.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..0d7e7db9e37ef0183c32b217bd944fb4f41ab83a
|
|
--- /dev/null
|
|
+++ b/src/main/java/io/papermc/paper/network/ConnectionEvent.java
|
|
@@ -0,0 +1,10 @@
|
|
+package io.papermc.paper.network;
|
|
+
|
|
+/**
|
|
+ * Internal connection pipeline events.
|
|
+ */
|
|
+public enum ConnectionEvent {
|
|
+
|
|
+ COMPRESSION_THRESHOLD_SET,
|
|
+ COMPRESSION_DISABLED
|
|
+}
|
|
diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java
|
|
index 33a3c657bd390b9e8bc23af93c1107f5327181b2..332a37dbd3ffa05614ae97b90453fcc242b6007d 100644
|
|
--- a/src/main/java/net/minecraft/network/Connection.java
|
|
+++ b/src/main/java/net/minecraft/network/Connection.java
|
|
@@ -717,6 +717,7 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
|
} else {
|
|
this.channel.pipeline().addBefore("encoder", "compress", new CompressionEncoder(compressionThreshold));
|
|
}
|
|
+ this.channel.pipeline().fireUserEventTriggered(io.papermc.paper.network.ConnectionEvent.COMPRESSION_THRESHOLD_SET); // Paper
|
|
} else {
|
|
if (this.channel.pipeline().get("decompress") instanceof CompressionDecoder) {
|
|
this.channel.pipeline().remove("decompress");
|
|
@@ -725,6 +726,7 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
|
if (this.channel.pipeline().get("compress") instanceof CompressionEncoder) {
|
|
this.channel.pipeline().remove("compress");
|
|
}
|
|
+ this.channel.pipeline().fireUserEventTriggered(io.papermc.paper.network.ConnectionEvent.COMPRESSION_DISABLED); // Paper
|
|
}
|
|
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
index b2bfb3893200362ac35ae60982f203f86a1148ec..6641fd04821240b1bbeff1bd8d996a8f2fff8385 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
@@ -116,6 +116,7 @@ public class ServerConnectionListener {
|
|
pending.add(object); // Paper
|
|
((Connection) object).configurePacketHandler(channelpipeline);
|
|
((Connection) object).setListenerForServerboundHandshake(new ServerHandshakePacketListenerImpl(ServerConnectionListener.this.server, (Connection) object));
|
|
+ io.papermc.paper.network.ChannelInitializeListenerHolder.callListeners(channel); // Paper
|
|
}
|
|
}).group(eventloopgroup).localAddress(address, port)).option(ChannelOption.AUTO_READ, false).bind().syncUninterruptibly()); // CraftBukkit
|
|
}
|