Allow for sending plugin messages during configuration stage (#12915)
This commit is contained in:
@@ -4,11 +4,12 @@ import java.util.Map;
|
||||
|
||||
import com.destroystokyo.paper.ClientOption;
|
||||
import org.bukkit.ServerLinks;
|
||||
import org.bukkit.plugin.messaging.PluginMessageRecipient;
|
||||
|
||||
/**
|
||||
* Represents a connection that has properties shared between the GAME and CONFIG stage.
|
||||
*/
|
||||
public interface PlayerCommonConnection extends WritablePlayerCookieConnection, ReadablePlayerCookieConnection {
|
||||
public interface PlayerCommonConnection extends WritablePlayerCookieConnection, ReadablePlayerCookieConnection, PluginMessageRecipient {
|
||||
|
||||
/**
|
||||
* Sends data to appear in this connection's report logs.
|
||||
|
||||
@@ -100,7 +100,7 @@ index 962084054c0208470d0c3c99c5dca6327c9b8752..2abc21102bbd2da79dc0c50826cff7da
|
||||
}
|
||||
}
|
||||
diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
||||
index 1b42d5e9f9fd07f99009de6f4483648f416db733..08c59d603fca038fc2dde36384eea1b6c971e659 100644
|
||||
index 5e074e6b5b8699b5c978a31518775479a43266ac..07c4a25c121676db867e8fb438ba41ad58528a4d 100644
|
||||
--- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
||||
+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
||||
@@ -38,12 +38,13 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
|
||||
@@ -120,7 +120,7 @@ index 1b42d5e9f9fd07f99009de6f4483648f416db733..08c59d603fca038fc2dde36384eea1b6
|
||||
+ private final io.papermc.paper.util.KeepAlive keepAlive; // Paper - improve keepalives
|
||||
private volatile boolean suspendFlushingOnServerThread = false;
|
||||
// CraftBukkit start
|
||||
protected final org.bukkit.craftbukkit.CraftServer cserver;
|
||||
public final org.bukkit.craftbukkit.CraftServer cserver;
|
||||
@@ -60,13 +61,14 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
|
||||
public ServerCommonPacketListenerImpl(MinecraftServer server, Connection connection, CommonListenerCookie cookie) {
|
||||
this.server = server;
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
private int latency;
|
||||
private volatile boolean suspendFlushingOnServerThread = false;
|
||||
+ // CraftBukkit start
|
||||
+ protected final org.bukkit.craftbukkit.CraftServer cserver;
|
||||
+ public final org.bukkit.craftbukkit.CraftServer cserver;
|
||||
+ public boolean processedDisconnect;
|
||||
+ // CraftBukkit end
|
||||
+ public final java.util.Map<java.util.UUID, net.kyori.adventure.resource.ResourcePackCallback> packCallbacks = new java.util.concurrent.ConcurrentHashMap<>(); // Paper - adventure resource pack callbacks
|
||||
|
||||
+22
@@ -20,13 +20,18 @@ import net.kyori.adventure.resource.ResourcePackInfo;
|
||||
import net.kyori.adventure.resource.ResourcePackRequest;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.protocol.common.ClientboundClearDialogPacket;
|
||||
import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket;
|
||||
import net.minecraft.network.protocol.common.ClientboundResourcePackPopPacket;
|
||||
import net.minecraft.network.protocol.common.ClientboundResourcePackPushPacket;
|
||||
import net.minecraft.network.protocol.common.ClientboundShowDialogPacket;
|
||||
import net.minecraft.network.protocol.common.custom.DiscardedPayload;
|
||||
import net.minecraft.network.protocol.configuration.ClientboundResetChatPacket;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ClientInformation;
|
||||
import net.minecraft.server.network.ConfigurationTask;
|
||||
import net.minecraft.server.network.ServerConfigurationPacketListenerImpl;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.messaging.StandardMessenger;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
public class PaperPlayerConfigurationConnection extends PaperCommonConnection<ServerConfigurationPacketListenerImpl> implements PlayerConfigurationConnection, Audience, PluginMessageBridgeImpl {
|
||||
@@ -122,4 +127,21 @@ public class PaperPlayerConfigurationConnection extends PaperCommonConnection<Se
|
||||
public Set<String> channels() {
|
||||
return this.handle.pluginMessagerChannels;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPluginMessage(final Plugin source, final String channel, final byte[] message) {
|
||||
StandardMessenger.validatePluginMessage(this.handle.cserver.getMessenger(), source, channel, message);
|
||||
|
||||
if (this.channels().contains(channel)) {
|
||||
@SuppressWarnings("deprecation") // "not an API method" does not apply to us
|
||||
ResourceLocation id = ResourceLocation.parse(StandardMessenger.validateAndCorrectChannel(channel));
|
||||
ClientboundCustomPayloadPacket packet = new ClientboundCustomPayloadPacket(new DiscardedPayload(id, message));
|
||||
this.handle.send(packet);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getListeningPluginChannels() {
|
||||
return Set.copyOf(this.channels());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ package io.papermc.paper.connection;
|
||||
import net.minecraft.server.level.ClientInformation;
|
||||
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import java.util.Set;
|
||||
|
||||
public class PaperPlayerGameConnection extends PaperCommonConnection<ServerGamePacketListenerImpl> implements PlayerGameConnection {
|
||||
|
||||
@@ -28,4 +30,14 @@ public class PaperPlayerGameConnection extends PaperCommonConnection<ServerGameP
|
||||
public Player getPlayer() {
|
||||
return this.handle.getCraftPlayer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPluginMessage(final Plugin source, final String channel, final byte[] message) {
|
||||
getPlayer().sendPluginMessage(source, channel, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getListeningPluginChannels() {
|
||||
return getPlayer().getListeningPluginChannels();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user