Skip to content

Commit

Permalink
Rewrite custom payload handler
Browse files Browse the repository at this point in the history
  • Loading branch information
LemonCaramel committed Nov 3, 2023
1 parent 8493340 commit 7fee3b2
Show file tree
Hide file tree
Showing 601 changed files with 358 additions and 154 deletions.
76 changes: 0 additions & 76 deletions patches/server/0444-Brand-support.patch

This file was deleted.

180 changes: 180 additions & 0 deletions patches/server/0444-Rewrite-custom-payload-handler.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: LemonCaramel <[email protected]>
Date: Mon, 23 Oct 2023 15:03:59 +0900
Subject: [PATCH] Rewrite custom payload handler


diff --git a/src/main/java/io/papermc/paper/network/payload/ChannelPayload.java b/src/main/java/io/papermc/paper/network/payload/ChannelPayload.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7a8636de412d880d89fae43bb2ecaa61915eed2
--- /dev/null
+++ b/src/main/java/io/papermc/paper/network/payload/ChannelPayload.java
@@ -0,0 +1,59 @@
+package io.papermc.paper.network.payload;
+
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
+import net.minecraft.resources.ResourceLocation;
+import org.jetbrains.annotations.NotNull;
+import java.nio.charset.StandardCharsets;
+
+public sealed abstract class ChannelPayload implements CustomPacketPayload permits ChannelPayload.Register, ChannelPayload.Unregister {
+
+ public static final ResourceLocation REGISTER = new ResourceLocation("register");
+ public static final ResourceLocation UNREGISTER = new ResourceLocation("unregister");
+
+ private final String channels;
+
+ private ChannelPayload(final FriendlyByteBuf buf) {
+ this.channels = buf.toString(StandardCharsets.UTF_8);
+ buf.readerIndex(buf.readerIndex() + channels.length());
+ }
+
+ @Override
+ public final void write(final FriendlyByteBuf buf) {
+ buf.writeBytes(channels.getBytes(StandardCharsets.UTF_8));
+ }
+
+ public final String[] channels() {
+ return channels.split("\0");
+ }
+
+ /**
+ * Channel register payload. (minecraft:register)
+ */
+ public static final class Register extends ChannelPayload {
+
+ public Register(final FriendlyByteBuf buf) {
+ super(buf);
+ }
+
+ @Override
+ public @NotNull ResourceLocation id() {
+ return REGISTER;
+ }
+ }
+
+ /**
+ * Channel unregister payload. (minecraft:unregister)
+ */
+ public static final class Unregister extends ChannelPayload {
+
+ public Unregister(final FriendlyByteBuf buf) {
+ super(buf);
+ }
+
+ @Override
+ public @NotNull ResourceLocation id() {
+ return UNREGISTER;
+ }
+ }
+}
diff --git a/src/main/java/io/papermc/paper/network/payload/ReadableMessage.java b/src/main/java/io/papermc/paper/network/payload/ReadableMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..df2d63ab6c557755ed740c1b57e1a71af9db4ba2
--- /dev/null
+++ b/src/main/java/io/papermc/paper/network/payload/ReadableMessage.java
@@ -0,0 +1,8 @@
+package io.papermc.paper.network.payload;
+
+import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
+
+public interface ReadableMessage extends CustomPacketPayload {
+
+ byte[] message();
+}
diff --git a/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java b/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java
index af86f752c33a2990405fea058b7c41c437ba9d46..8f5ab7d6cceb3558960eeea1b90a75d227ba367a 100644
--- a/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java
@@ -12,7 +12,13 @@ import net.minecraft.resources.ResourceLocation;
public record ServerboundCustomPayloadPacket(CustomPacketPayload payload) implements Packet<ServerCommonPacketListener> {

private static final int MAX_PAYLOAD_SIZE = 32767;
- private static final Map<ResourceLocation, FriendlyByteBuf.Reader<? extends CustomPacketPayload>> KNOWN_TYPES = ImmutableMap.<ResourceLocation, FriendlyByteBuf.Reader<? extends CustomPacketPayload>>builder().build(); // CraftBukkit - no special handling
+ // Paper start - Rewrite custom payload handler
+ private static final Map<ResourceLocation, FriendlyByteBuf.Reader<? extends CustomPacketPayload>> KNOWN_TYPES =
+ ImmutableMap.<ResourceLocation, FriendlyByteBuf.Reader<? extends CustomPacketPayload>>builder()
+ .put(io.papermc.paper.network.payload.ChannelPayload.REGISTER, io.papermc.paper.network.payload.ChannelPayload.Register::new)
+ .put(io.papermc.paper.network.payload.ChannelPayload.UNREGISTER, io.papermc.paper.network.payload.ChannelPayload.Unregister::new)
+ .build();
+ // Paper end - Rewrite custom payload handler

public ServerboundCustomPayloadPacket(FriendlyByteBuf buf) {
this(readPayload(buf.readResourceLocation(), buf));
@@ -47,7 +53,15 @@ public record ServerboundCustomPayloadPacket(CustomPacketPayload payload) implem
}

// CraftBukkit start
- public record UnknownPayload(ResourceLocation id, io.netty.buffer.ByteBuf data) implements CustomPacketPayload {
+ // Paper start - Rewrite custom payload handler
+ public record UnknownPayload(ResourceLocation id, io.netty.buffer.ByteBuf data) implements io.papermc.paper.network.payload.ReadableMessage {
+ @Override
+ public byte[] message() {
+ final byte[] message = new byte[data.readableBytes()];
+ data.readBytes(message);
+ return message;
+ }
+ // Paper end - Rewrite custom payload handler

@Override
public void write(FriendlyByteBuf buf) {
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
index d25b6431ce617d90fd1d6489a308d6630b92c175..568a1252acb00a8547e95cf529fdf3be7f3ca839 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -104,6 +104,45 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
public void handlePong(ServerboundPongPacket packet) {}

// CraftBukkit start
+ // Paper start - Rewrite custom payload handler
+ @Override
+ public void handleCustomPayload(ServerboundCustomPayloadPacket packet) {
+ PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
+ if (packet.payload() instanceof io.papermc.paper.network.payload.ChannelPayload.Register payload) {
+ try {
+ final CraftPlayer player = this.getCraftPlayer();
+ for (final String channel : payload.channels()) {
+ player.addChannel(channel);
+ }
+ } catch (final Exception exception) {
+ ServerGamePacketListenerImpl.LOGGER.error("Couldn't register custom payload", exception);
+ this.disconnect("Invalid payload REGISTER!");
+ }
+ return;
+ } else if (packet.payload() instanceof io.papermc.paper.network.payload.ChannelPayload.Unregister payload) {
+ try {
+ final CraftPlayer player = this.getCraftPlayer();
+ for (final String channel : payload.channels()) {
+ player.removeChannel(channel);
+ }
+ } catch (final Exception exception) {
+ ServerGamePacketListenerImpl.LOGGER.error("Couldn't unregister custom payload", exception);
+ this.disconnect("Invalid payload UNREGISTER!");
+ }
+ return;
+ }
+
+ // Dispatch Message
+ if (packet.payload() instanceof io.papermc.paper.network.payload.ReadableMessage payload) {
+ try {
+ this.cserver.getMessenger().dispatchIncomingMessage(this.player.getBukkitEntity(), payload.id().toString(), payload.message());
+ } catch (final Exception exception) {
+ ServerGamePacketListenerImpl.LOGGER.error("Couldn't dispatch custom payload", exception);
+ this.disconnect("Invalid custom payload!");
+ }
+ }
+ }
+ /*
private static final ResourceLocation CUSTOM_REGISTER = new ResourceLocation("register");
private static final ResourceLocation CUSTOM_UNREGISTER = new ResourceLocation("unregister");

@@ -148,6 +187,8 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
}

}
+ */
+ // Paper end - Rewrite custom payload handler

public final boolean isDisconnected() {
return (!this.player.joining && !this.connection.isConnected()) || this.processedDisconnect; // Paper
100 changes: 100 additions & 0 deletions patches/server/0445-Brand-support.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: DigitalRegent <[email protected]>
Date: Sat, 11 Apr 2020 13:10:58 +0200
Subject: [PATCH] Brand support


diff --git a/src/main/java/io/papermc/paper/network/payload/BrandPayload.java b/src/main/java/io/papermc/paper/network/payload/BrandPayload.java
new file mode 100644
index 0000000000000000000000000000000000000000..da940967dd1f84093506f9d845d8ee8aaa53c693
--- /dev/null
+++ b/src/main/java/io/papermc/paper/network/payload/BrandPayload.java
@@ -0,0 +1,30 @@
+package io.papermc.paper.network.payload;
+
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.resources.ResourceLocation;
+import org.jetbrains.annotations.NotNull;
+import java.nio.charset.StandardCharsets;
+
+public record BrandPayload(@NotNull String raw, @NotNull String brand) implements ReadableMessage {
+
+ public static final ResourceLocation ID = new ResourceLocation("brand");
+
+ public BrandPayload(final FriendlyByteBuf buf) {
+ this(buf.toString(StandardCharsets.UTF_8), buf.readUtf());
+ }
+
+ @Override
+ public byte[] message() {
+ return raw.getBytes(StandardCharsets.UTF_8);
+ }
+
+ @Override
+ public void write(final FriendlyByteBuf buf) {
+ buf.writeUtf(this.brand);
+ }
+
+ @Override
+ public @NotNull ResourceLocation id() {
+ return ID;
+ }
+}
diff --git a/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java b/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java
index 8f5ab7d6cceb3558960eeea1b90a75d227ba367a..c4a5eca07ad0622d6e8d503ba53d9e012365005f 100644
--- a/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java
@@ -17,6 +17,7 @@ public record ServerboundCustomPayloadPacket(CustomPacketPayload payload) implem
ImmutableMap.<ResourceLocation, FriendlyByteBuf.Reader<? extends CustomPacketPayload>>builder()
.put(io.papermc.paper.network.payload.ChannelPayload.REGISTER, io.papermc.paper.network.payload.ChannelPayload.Register::new)
.put(io.papermc.paper.network.payload.ChannelPayload.UNREGISTER, io.papermc.paper.network.payload.ChannelPayload.Unregister::new)
+ .put(io.papermc.paper.network.payload.BrandPayload.ID, io.papermc.paper.network.payload.BrandPayload::new) // Paper - brand support
.build();
// Paper end - Rewrite custom payload handler

diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 2c2b1aef3f510edb9bb124581739f06692ab5673..567bfcdf5c946d09bb8188435ee13930082dccf5 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -271,6 +271,7 @@ public class ServerPlayer extends Player {
public boolean isRealPlayer; // Paper
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<ServerPlayer> cachedSingleHashSet; // Paper
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
+ public @Nullable String clientBrandName = null; // Paper - Brand name

// Paper start - replace player chunk loader
private final java.util.concurrent.atomic.AtomicReference<io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances> viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
index 568a1252acb00a8547e95cf529fdf3be7f3ca839..efc5543670af2b8bb83b862d4d7e70bbad5cda8c 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -131,6 +131,11 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
}
return;
}
+ // Paper start - handle brand payload packet
+ else if (packet.payload() instanceof io.papermc.paper.network.payload.BrandPayload brandPayload) {
+ this.player.clientBrandName = brandPayload.brand();
+ }
+ // Paper end - handle brand payload

// Dispatch Message
if (packet.payload() instanceof io.papermc.paper.network.payload.ReadableMessage payload) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index b92cc9f8d62cc3bfefe42c4c1fb08af4731dd48f..7b1404ac481ea9a059197b9f752327ef0bf72c5c 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3009,6 +3009,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
// Paper end
};

+ // Paper start - brand support
+ @Override
+ public String getClientBrandName() {
+ return getHandle().clientBrandName;
+ }
+ // Paper end
+
public Player.Spigot spigot()
{
return this.spigot;
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Player elytra boost API


diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 28c80b15f83947cf44f71da9f9d971f2d6e5dd5b..a0ee2811d691f0088d94a308705dab5529d52810 100644
index 0656ea43e1d508d8f6af308475942c28d77655a4..aef0fa6fd575c08c75c75463abcc43089aada9e3 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -626,6 +626,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
Expand Down
Loading

0 comments on commit 7fee3b2

Please sign in to comment.