From 566e67a1882493910632d89951c8b8246afd6962 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 19 Apr 2013 19:14:11 +1000 Subject: [PATCH] Welcome back snapshot protocol patch! Now 30% more reliable than a leading brand of car cleaner! Testers welcome <3 --- .../0039-Snapshot-Protocol.patch | 393 ++++++++++++++++++ 1 file changed, 393 insertions(+) create mode 100644 CraftBukkit-Patches/0039-Snapshot-Protocol.patch diff --git a/CraftBukkit-Patches/0039-Snapshot-Protocol.patch b/CraftBukkit-Patches/0039-Snapshot-Protocol.patch new file mode 100644 index 0000000000..1df04c97ca --- /dev/null +++ b/CraftBukkit-Patches/0039-Snapshot-Protocol.patch @@ -0,0 +1,393 @@ +From ee9246854da8fff0ec2a98c4e3263334325c0a52 Mon Sep 17 00:00:00 2001 +From: md_5 +Date: Fri, 19 Apr 2013 19:13:42 +1000 +Subject: [PATCH] Snapshot Protocol + + +diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java +index cd032ae..14da2b9 100644 +--- a/src/main/java/net/minecraft/server/ItemStack.java ++++ b/src/main/java/net/minecraft/server/ItemStack.java +@@ -41,6 +41,7 @@ public final class ItemStack { + this.id = i; + this.count = j; + // CraftBukkit start - Pass to setData to do filtering ++ if (org.bukkit.craftbukkit.Spigot.snapshotSupport && this.id >= 170 && this.id <= 171) this.id = 0; // Spigot + this.setData(k); + //if (this.damage < 0) { + // this.damage = 0; +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index a1d77ad..ad6cc57 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -753,7 +753,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo + } + + public String getVersion() { +- return "1.5.1"; ++ return (org.bukkit.craftbukkit.Spigot.snapshotSupport) ? org.bukkit.craftbukkit.Spigot.snapshotVersion : "1.5.1"; + } + + public int y() { +diff --git a/src/main/java/net/minecraft/server/Packet19EntityAction.java b/src/main/java/net/minecraft/server/Packet19EntityAction.java +new file mode 100644 +index 0000000..259dcbb +--- /dev/null ++++ b/src/main/java/net/minecraft/server/Packet19EntityAction.java +@@ -0,0 +1,32 @@ ++package net.minecraft.server; ++ ++import java.io.DataInputStream; ++import java.io.DataOutputStream; ++import java.io.IOException; ++ ++public class Packet19EntityAction extends Packet { ++ ++ public int a; ++ public int animation; ++ ++ public Packet19EntityAction() {} ++ ++ public void a(DataInputStream datainputstream) throws IOException { ++ this.a = datainputstream.readInt(); ++ this.animation = datainputstream.readByte(); ++ if (org.bukkit.craftbukkit.Spigot.snapshotSupport) datainputstream.readInt(); // Spigot ++ } ++ ++ public void a(DataOutputStream dataoutputstream) throws IOException { ++ dataoutputstream.writeInt(this.a); ++ dataoutputstream.writeByte(this.animation); ++ } ++ ++ public void handle(Connection connection) { ++ connection.a(this); ++ } ++ ++ public int a() { ++ return 5; ++ } ++} +diff --git a/src/main/java/net/minecraft/server/Packet202Abilities.java b/src/main/java/net/minecraft/server/Packet202Abilities.java +new file mode 100644 +index 0000000..2a2dad5 +--- /dev/null ++++ b/src/main/java/net/minecraft/server/Packet202Abilities.java +@@ -0,0 +1,131 @@ ++package net.minecraft.server; ++ ++import java.io.DataInputStream; ++import java.io.DataOutputStream; ++import java.io.IOException; ++ ++public class Packet202Abilities extends Packet { ++ ++ private boolean a = false; ++ private boolean b = false; ++ private boolean c = false; ++ private boolean d = false; ++ private float e; ++ private float f; ++ ++ public Packet202Abilities() {} ++ ++ public Packet202Abilities(PlayerAbilities playerabilities) { ++ this.a(playerabilities.isInvulnerable); ++ this.b(playerabilities.isFlying); ++ this.c(playerabilities.canFly); ++ this.d(playerabilities.canInstantlyBuild); ++ this.a(playerabilities.a()); ++ this.b(playerabilities.b()); ++ } ++ ++ public void a(DataInputStream datainputstream) throws IOException { ++ byte b0 = datainputstream.readByte(); ++ ++ this.a((b0 & 1) > 0); ++ this.b((b0 & 2) > 0); ++ this.c((b0 & 4) > 0); ++ this.d((b0 & 8) > 0); ++ // Spigot start ++ if (org.bukkit.craftbukkit.Spigot.snapshotSupport) { ++ this.a(datainputstream.readFloat()); ++ this.b(datainputstream.readFloat()); ++ } else { ++ this.a((float) datainputstream.readByte() / 255.0F); ++ this.b((float) datainputstream.readByte() / 255.0F); ++ } ++ // Spigot end ++ } ++ ++ public void a(DataOutputStream dataoutputstream) throws IOException { ++ byte b0 = 0; ++ ++ if (this.d()) { ++ b0 = (byte) (b0 | 1); ++ } ++ ++ if (this.f()) { ++ b0 = (byte) (b0 | 2); ++ } ++ ++ if (this.g()) { ++ b0 = (byte) (b0 | 4); ++ } ++ ++ if (this.h()) { ++ b0 = (byte) (b0 | 8); ++ } ++ ++ dataoutputstream.writeByte(b0); ++ // Spigot start ++ if (org.bukkit.craftbukkit.Spigot.snapshotSupport) { ++ dataoutputstream.writeFloat(this.e); ++ dataoutputstream.writeFloat(this.f); ++ } else { ++ dataoutputstream.writeByte((int) (this.e * 255.0F)); ++ dataoutputstream.writeByte((int) (this.f * 255.0F)); ++ } ++ // Spigot end ++ } ++ ++ public void handle(Connection connection) { ++ connection.a(this); ++ } ++ ++ public int a() { ++ return 2; ++ } ++ ++ public boolean d() { ++ return this.a; ++ } ++ ++ public void a(boolean flag) { ++ this.a = flag; ++ } ++ ++ public boolean f() { ++ return this.b; ++ } ++ ++ public void b(boolean flag) { ++ this.b = flag; ++ } ++ ++ public boolean g() { ++ return this.c; ++ } ++ ++ public void c(boolean flag) { ++ this.c = flag; ++ } ++ ++ public boolean h() { ++ return this.d; ++ } ++ ++ public void d(boolean flag) { ++ this.d = flag; ++ } ++ ++ public void a(float f) { ++ this.e = f; ++ } ++ ++ public void b(float f) { ++ this.f = f; ++ } ++ ++ public boolean e() { ++ return true; ++ } ++ ++ public boolean a(Packet packet) { ++ return true; ++ } ++} +diff --git a/src/main/java/net/minecraft/server/Packet39AttachEntity.java b/src/main/java/net/minecraft/server/Packet39AttachEntity.java +new file mode 100644 +index 0000000..a728ace +--- /dev/null ++++ b/src/main/java/net/minecraft/server/Packet39AttachEntity.java +@@ -0,0 +1,47 @@ ++package net.minecraft.server; ++ ++import java.io.DataInputStream; ++import java.io.DataOutputStream; ++import java.io.IOException; ++ ++public class Packet39AttachEntity extends Packet { ++ ++ public int a; ++ public int b; ++ ++ public Packet39AttachEntity() {} ++ ++ public Packet39AttachEntity(Entity entity, Entity entity1) { ++ this.a = entity.id; ++ this.b = entity1 != null ? entity1.id : -1; ++ } ++ ++ public int a() { ++ return 8; ++ } ++ ++ public void a(DataInputStream datainputstream) throws IOException { ++ this.a = datainputstream.readInt(); ++ this.b = datainputstream.readInt(); ++ } ++ ++ public void a(DataOutputStream dataoutputstream) throws IOException { ++ dataoutputstream.writeInt(this.a); ++ dataoutputstream.writeInt(this.b); ++ if (org.bukkit.craftbukkit.Spigot.snapshotSupport) dataoutputstream.writeBoolean(false); // Spigot ++ } ++ ++ public void handle(Connection connection) { ++ connection.a(this); ++ } ++ ++ public boolean e() { ++ return true; ++ } ++ ++ public boolean a(Packet packet) { ++ Packet39AttachEntity packet39attachentity = (Packet39AttachEntity) packet; ++ ++ return packet39attachentity.a == this.a; ++ } ++} +diff --git a/src/main/java/net/minecraft/server/Packet8UpdateHealth.java b/src/main/java/net/minecraft/server/Packet8UpdateHealth.java +new file mode 100644 +index 0000000..bbfbb88 +--- /dev/null ++++ b/src/main/java/net/minecraft/server/Packet8UpdateHealth.java +@@ -0,0 +1,52 @@ ++package net.minecraft.server; ++ ++import java.io.DataInputStream; ++import java.io.DataOutputStream; ++import java.io.IOException; ++ ++public class Packet8UpdateHealth extends Packet { ++ ++ public float a; ++ public int b; ++ public float c; ++ ++ public Packet8UpdateHealth() {} ++ ++ public Packet8UpdateHealth(int i, int j, float f) { ++ this.a = i; ++ this.b = j; ++ this.c = f; ++ } ++ ++ public void a(DataInputStream datainputstream) throws IOException { ++ this.a = datainputstream.readShort(); ++ this.b = datainputstream.readShort(); ++ this.c = datainputstream.readFloat(); ++ } ++ ++ public void a(DataOutputStream dataoutputstream) throws IOException { ++ if (org.bukkit.craftbukkit.Spigot.snapshotSupport) { ++ dataoutputstream.writeFloat(this.a); ++ } else { ++ dataoutputstream.writeShort((short) this.a); ++ } ++ dataoutputstream.writeShort(this.b); ++ dataoutputstream.writeFloat(this.c); ++ } ++ ++ public void handle(Connection connection) { ++ connection.a(this); ++ } ++ ++ public int a() { ++ return 8; ++ } ++ ++ public boolean e() { ++ return true; ++ } ++ ++ public boolean a(Packet packet) { ++ return true; ++ } ++} +diff --git a/src/main/java/net/minecraft/server/PendingConnection.java b/src/main/java/net/minecraft/server/PendingConnection.java +index 27cf4e3..adc3509 100644 +--- a/src/main/java/net/minecraft/server/PendingConnection.java ++++ b/src/main/java/net/minecraft/server/PendingConnection.java +@@ -77,8 +77,8 @@ public class PendingConnection extends Connection { + } else { + PublicKey publickey = this.server.F().getPublic(); + +- if (packet2handshake.d() != 60) { +- if (packet2handshake.d() > 60) { ++ if (packet2handshake.d() != ((org.bukkit.craftbukkit.Spigot.snapshotSupport) ? org.bukkit.craftbukkit.Spigot.snapshotProtocolVersion : 60)) { ++ if (packet2handshake.d() > ((org.bukkit.craftbukkit.Spigot.snapshotSupport) ? org.bukkit.craftbukkit.Spigot.snapshotProtocolVersion : 60)) { + this.disconnect("Outdated server!"); + } else { + this.disconnect("Outdated client!"); +@@ -153,7 +153,7 @@ public class PendingConnection extends Connection { + + if (true) { + // CraftBukkit start - Fix decompile issues, don't create a list from an array +- Object[] list = new Object[] { 1, 60, this.server.getVersion(), pingEvent.getMotd(), playerlist.getPlayerCount(), pingEvent.getMaxPlayers() }; ++ Object[] list = new Object[]{1, ((org.bukkit.craftbukkit.Spigot.snapshotSupport) ? org.bukkit.craftbukkit.Spigot.snapshotProtocolVersion : 60), this.server.getVersion(), pingEvent.getMotd(), playerlist.getPlayerCount(), pingEvent.getMaxPlayers()}; + + for (Object object : list) { + if (s == null) { +diff --git a/src/main/java/org/bukkit/craftbukkit/Spigot.java b/src/main/java/org/bukkit/craftbukkit/Spigot.java +index ff28a99..99e8aa8 100644 +--- a/src/main/java/org/bukkit/craftbukkit/Spigot.java ++++ b/src/main/java/org/bukkit/craftbukkit/Spigot.java +@@ -28,6 +28,9 @@ public class Spigot { + public static List bungeeIPs; + public static int textureResolution = 16; + public static final Pattern validName = Pattern.compile("^[a-zA-Z0-9_]{2,16}$"); ++ public static boolean snapshotSupport; ++ public static int snapshotProtocolVersion = 62; ++ public static String snapshotVersion = "13w16a"; + + public static void initialize(CraftServer server, SimpleCommandMap commandMap, YamlConfiguration configuration) { + commandMap.register("bukkit", new org.bukkit.craftbukkit.command.TicksPerSecondCommand("tps")); +@@ -67,6 +70,10 @@ public class Spigot { + tabPing = configuration.getBoolean("settings.tab-ping", tabPing); + bungeeIPs = configuration.getStringList("settings.bungee-proxies"); + textureResolution = configuration.getInt("settings.texture-resolution", textureResolution); ++ snapshotSupport = configuration.getBoolean("settings.snapshot-protocol", snapshotSupport); ++ if (snapshotSupport) { ++ server.getLogger().log(Level.INFO, "Enabled support for pre release / snapshot version {0}", snapshotVersion); ++ } + + if (metrics == null) { + try { +@@ -354,7 +361,9 @@ public class Spigot { + } + + /** +- * Gets the range an entity should be 'tracked' by players and visible in the client. ++ * Gets the range an entity should be 'tracked' by players and visible in ++ * the client. ++ * + * @param entity + * @param defaultRange Default range defined by Mojang + * @return +diff --git a/src/main/resources/configurations/bukkit.yml b/src/main/resources/configurations/bukkit.yml +index 891d7fa..1534a25 100644 +--- a/src/main/resources/configurations/bukkit.yml ++++ b/src/main/resources/configurations/bukkit.yml +@@ -40,6 +40,8 @@ settings: + bungee-proxies: + - 127.0.0.1 + texture-resolution: 16 ++ # fakes the latest pre release / snapshot ++ snapshot-protocol: false + world-settings: + default: + growth-chunks-per-tick: 650 +-- +1.8.2.1 +