diff --git a/Spigot-API-Patches/0219-Brand-support.patch b/Spigot-API-Patches/0219-Brand-support.patch new file mode 100644 index 0000000000..bb501f24a8 --- /dev/null +++ b/Spigot-API-Patches/0219-Brand-support.patch @@ -0,0 +1,27 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: DigitalRegent +Date: Mon, 6 Apr 2020 20:30:09 +0200 +Subject: [PATCH] Brand support + + +diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java +index b584f8b15f7ee36b42bba0e0bae721aae8f6f14b..991f757a89d2e917186bb152a2f92bad8b6c2897 100644 +--- a/src/main/java/org/bukkit/entity/Player.java ++++ b/src/main/java/org/bukkit/entity/Player.java +@@ -1873,6 +1873,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM + } + } + ++ // Paper start - brand support ++ /** ++ * Returns player's client brand name. If the client didn't send this information, the brand name will be null.
++ * For the Notchian client this name defaults to vanilla. Some modified clients report other names such as forge.
++ * @return client brand name ++ */ ++ @Nullable ++ String getClientBrandName(); ++ // Paper end ++ + @NotNull + @Override + Spigot spigot(); diff --git a/Spigot-Server-Patches/0554-Brand-support.patch b/Spigot-Server-Patches/0554-Brand-support.patch new file mode 100644 index 0000000000..0dacea0bc3 --- /dev/null +++ b/Spigot-Server-Patches/0554-Brand-support.patch @@ -0,0 +1,79 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: DigitalRegent +Date: Sat, 11 Apr 2020 13:10:58 +0200 +Subject: [PATCH] Brand support + + +diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java +index 6259ff4a571abb842b4a1b15a43b2b7c3fd5f0ab..9ec90ad2310b794ccf161a50ad59cccde97a01ba 100644 +--- a/src/main/java/net/minecraft/server/PlayerConnection.java ++++ b/src/main/java/net/minecraft/server/PlayerConnection.java +@@ -4,6 +4,7 @@ import com.google.common.primitives.Doubles; + import com.google.common.primitives.Floats; + import com.mojang.brigadier.ParseResults; + import com.mojang.brigadier.StringReader; ++import io.netty.buffer.Unpooled; + import io.netty.util.concurrent.Future; + import io.netty.util.concurrent.GenericFutureListener; + import it.unimi.dsi.fastutil.ints.Int2ShortMap; +@@ -107,6 +108,8 @@ public class PlayerConnection implements PacketListenerPlayIn { + private static final int MAX_SIGN_LINE_LENGTH = Integer.getInteger("Paper.maxSignLength", 80); + private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit + ++ private String clientBrandName = null; // Paper - Brand name ++ + public PlayerConnection(MinecraftServer minecraftserver, NetworkManager networkmanager, EntityPlayer entityplayer) { + this.minecraftServer = minecraftserver; + this.networkManager = networkmanager; +@@ -2737,6 +2740,8 @@ public class PlayerConnection implements PacketListenerPlayIn { + private static final MinecraftKey CUSTOM_REGISTER = new MinecraftKey("register"); + private static final MinecraftKey CUSTOM_UNREGISTER = new MinecraftKey("unregister"); + ++ private static final MinecraftKey MINECRAFT_BRAND = new MinecraftKey("brand"); // Paper - Brand support ++ + @Override + public void a(PacketPlayInCustomPayload packetplayincustompayload) { + PlayerConnectionUtils.ensureMainThread(packetplayincustompayload, this, this.player.getWorldServer()); +@@ -2764,6 +2769,11 @@ public class PlayerConnection implements PacketListenerPlayIn { + try { + byte[] data = new byte[packetplayincustompayload.data.readableBytes()]; + packetplayincustompayload.data.readBytes(data); ++ ++ // Paper start - Brand support ++ if (packetplayincustompayload.tag.equals(MINECRAFT_BRAND)) ++ this.clientBrandName = new PacketDataSerializer(Unpooled.copiedBuffer(data)).readUTF(256); ++ // Paper end + server.getMessenger().dispatchIncomingMessage(player.getBukkitEntity(), packetplayincustompayload.tag.toString(), data); + } catch (Exception ex) { + PlayerConnection.LOGGER.error("Couldn\'t dispatch custom payload", ex); +@@ -2773,6 +2783,12 @@ public class PlayerConnection implements PacketListenerPlayIn { + + } + ++ // Paper start - brand support ++ public String getClientBrandName() { ++ return clientBrandName; ++ } ++ // Paper end ++ + public final boolean isDisconnected() { + return (!this.player.joining && !this.networkManager.isConnected()) || this.processedDisconnect; // Paper + } +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index adf918fd757fe3147f897de3ade64a9adf1d3203..3ca1cf7e1c39b39e39f38d70ea786c5f0bb1e607 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -2150,6 +2150,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + // Paper end + }; + ++ // Paper start - brand support ++ @Override ++ public String getClientBrandName() { ++ return getHandle().playerConnection.getClientBrandName(); ++ } ++ // Paper end ++ + public Player.Spigot spigot() + { + return spigot;