3
0
Mirror von https://github.com/PaperMC/Paper.git synchronisiert 2024-11-16 21:10:17 +01:00
Paper/CraftBukkit-Patches/0067-Snapshot-Protocol.patch

262 Zeilen
9.8 KiB
Diff

From 58f01e434d47d9543b1ef368c99503645fe6495e Mon Sep 17 00:00:00 2001
From: md_5 <md_5@live.com.au>
Date: Mon, 8 Jul 2013 21:27:40 +1000
Subject: [PATCH] Snapshot Protocol
diff --git a/pom.xml b/pom.xml
index 69e596b..f91396f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<packaging>jar</packaging>
- <version>1.6.1-R0.1-SNAPSHOT</version>
+ <version>1.6.2-R0.1-SNAPSHOT</version>
<name>Spigot</name>
<url>http://www.spigotmc.org</url>
@@ -42,7 +42,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
- <version>${project.version}</version>
+ <version>1.6.1-R0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
diff --git a/src/main/java/net/minecraft/server/ItemBlock.java b/src/main/java/net/minecraft/server/ItemBlock.java
index b2c3ed8..e46cb2a 100644
--- a/src/main/java/net/minecraft/server/ItemBlock.java
+++ b/src/main/java/net/minecraft/server/ItemBlock.java
@@ -110,6 +110,12 @@ public class ItemBlock extends Item {
world.makeSound((double) ((float) x + 0.5F), (double) ((float) y + 0.5F), (double) ((float) z + 0.5F), block.stepSound.getPlaceSound(), (block.stepSound.getVolume1() + 1.0F) / 2.0F, block.stepSound.getVolume2() * 0.8F);
}
+ // Spigot Start
+ if ( org.spigotmc.SpigotConfig.snapshotProtocol && block instanceof BlockSign )
+ {
+ ( (EntityPlayer) entityhuman ).playerConnection.sendPacket( new Packet133SignPlace( x, y, z ) );
+ }
+ // Spigot End
if (itemstack != null) {
--itemstack.count;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 415087a..de730fa 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -762,7 +762,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
}
public String getVersion() {
- return "1.6.1";
+ return org.spigotmc.SpigotConfig.gameVersion; // Spigot
}
public int A() {
diff --git a/src/main/java/net/minecraft/server/Packet.java b/src/main/java/net/minecraft/server/Packet.java
index 9389a7d..4a75e71 100644
--- a/src/main/java/net/minecraft/server/Packet.java
+++ b/src/main/java/net/minecraft/server/Packet.java
@@ -321,6 +321,7 @@ public abstract class Packet {
a(130, true, true, Packet130UpdateSign.class);
a(131, true, false, Packet131ItemData.class);
a(132, true, false, Packet132TileEntityData.class);
+ a(133, true, false, Packet133SignPlace.class); // Spigot
a(200, true, false, Packet200Statistic.class);
a(201, true, false, Packet201PlayerInfo.class);
a(202, true, true, Packet202Abilities.class);
diff --git a/src/main/java/net/minecraft/server/Packet133SignPlace.java b/src/main/java/net/minecraft/server/Packet133SignPlace.java
new file mode 100644
index 0000000..a1b2bbb
--- /dev/null
+++ b/src/main/java/net/minecraft/server/Packet133SignPlace.java
@@ -0,0 +1,49 @@
+package net.minecraft.server;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class Packet133SignPlace extends Packet
+{
+
+ private int x, y, z;
+
+ public Packet133SignPlace()
+ {
+ }
+
+ public Packet133SignPlace(int x, int y, int z)
+ {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ @Override
+ public void a(DataInput datainput) throws IOException
+ {
+ throw new UnsupportedOperationException( "Not supported yet." ); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void a(DataOutput dataoutput) throws IOException
+ {
+ dataoutput.writeByte( 0 );
+ dataoutput.writeInt( x );
+ dataoutput.writeInt( y );
+ dataoutput.writeInt( z );
+ }
+
+ @Override
+ public void handle(Connection connection)
+ {
+ throw new UnsupportedOperationException( "Not supported yet." ); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public int a()
+ {
+ return 13;
+ }
+}
diff --git a/src/main/java/net/minecraft/server/Packet44UpdateAttributes.java b/src/main/java/net/minecraft/server/Packet44UpdateAttributes.java
new file mode 100644
index 0000000..f0a5d99
--- /dev/null
+++ b/src/main/java/net/minecraft/server/Packet44UpdateAttributes.java
@@ -0,0 +1,75 @@
+package net.minecraft.server;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.util.Collection;
+import java.util.Iterator;
+
+public class Packet44UpdateAttributes extends Packet {
+
+ private class AttributeSnapshot
+ {
+
+ private final String a;
+ private final double b;
+ private final Collection c;
+
+ public AttributeSnapshot(String a, double b, Collection c)
+ {
+ this.a = a;
+ this.b = b;
+ this.c = c;
+ }
+ }
+ private int a;
+ private final java.util.List<AttributeSnapshot> b = new java.util.ArrayList<AttributeSnapshot>();
+
+ public Packet44UpdateAttributes() {}
+
+ public Packet44UpdateAttributes(int i, Collection collection) {
+ this.a = i;
+ Iterator iterator = collection.iterator();
+
+ while (iterator.hasNext()) {
+ AttributeInstance attributeinstance = (AttributeInstance) iterator.next();
+
+ this.b.add( new AttributeSnapshot( attributeinstance.a().a(),attributeinstance.b(),attributeinstance.c() ) );
+ }
+ }
+
+ public void a(DataInput datainput) throws java.io.IOException { // Spigot - throws
+ throw new UnsupportedOperationException();
+ }
+
+ public void a(DataOutput dataoutput) throws java.io.IOException { // Spigot - throws
+ dataoutput.writeInt( this.a );
+ dataoutput.writeInt( this.b.size() );
+ Iterator<AttributeSnapshot> iter = this.b.iterator();
+
+ while(iter.hasNext())
+ {
+ AttributeSnapshot attribute = iter.next();
+ a( attribute.a, dataoutput );
+ dataoutput.writeDouble( attribute.b );
+ dataoutput.writeShort( attribute.c.size() );
+
+ Iterator<AttributeModifier> inner = attribute.c.iterator();
+ while(inner.hasNext())
+ {
+ AttributeModifier modifier = (AttributeModifier) inner.next();
+ dataoutput.writeLong( modifier.a().getMostSignificantBits() );
+ dataoutput.writeLong( modifier.a().getLeastSignificantBits() );
+ dataoutput.writeDouble( modifier.d() );
+ dataoutput.writeByte( modifier.c() );
+ }
+ }
+ }
+
+ public void handle(Connection connection) {
+ connection.a(this);
+ }
+
+ public int a() {
+ return 8 + this.b.size() * 24;
+ }
+}
diff --git a/src/main/java/net/minecraft/server/PendingConnection.java b/src/main/java/net/minecraft/server/PendingConnection.java
index 9b8ddd2..3664a1c 100644
--- a/src/main/java/net/minecraft/server/PendingConnection.java
+++ b/src/main/java/net/minecraft/server/PendingConnection.java
@@ -76,8 +76,8 @@ public class PendingConnection extends Connection {
} else {
PublicKey publickey = this.server.H().getPublic();
- if (packet2handshake.d() != 73) {
- if (packet2handshake.d() > 73) {
+ if (packet2handshake.d() != org.spigotmc.SpigotConfig.protocolVersion) { // Spigot
+ if (packet2handshake.d() > org.spigotmc.SpigotConfig.protocolVersion) { // Spigot
this.disconnect("Outdated server!");
} else {
this.disconnect("Outdated client!");
@@ -156,7 +156,7 @@ public class PendingConnection extends Connection {
s = pingEvent.getMotd() + "\u00A7" + playerlist.getPlayerCount() + "\u00A7" + pingEvent.getMaxPlayers();
} else {
// CraftBukkit start - Don't create a list from an array
- Object[] list = new Object[] { 1, 73, this.server.getVersion(), pingEvent.getMotd(), playerlist.getPlayerCount(), pingEvent.getMaxPlayers() };
+ Object[] list = new Object[] { 1, org.spigotmc.SpigotConfig.protocolVersion, this.server.getVersion(), pingEvent.getMotd(), playerlist.getPlayerCount(), pingEvent.getMaxPlayers() }; // Spigot
StringBuilder builder = new StringBuilder();
for (Object object : list) {
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
index e8039d7..982f503 100644
--- a/src/main/java/org/spigotmc/SpigotConfig.java
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
@@ -280,4 +280,23 @@ public class SpigotConfig
Bukkit.getLogger().setFilter( new LogFilter() );
}
+
+ public static boolean snapshotProtocol;
+ public static String gameVersion;
+ public static byte protocolVersion;
+ private static void snapshotProtocol()
+ {
+ snapshotProtocol = getBoolean( "settings.snapshot-protocol", false );
+ snapshotProtocol = true;
+
+ gameVersion = ( snapshotProtocol ) ? "1.6.2" : "1.6.1";
+ protocolVersion = (byte) ( ( snapshotProtocol ) ? 74 : 73 );
+ if ( snapshotProtocol )
+ {
+ Bukkit.getLogger().severe( "================ [Snapshot Protocol] ================" );
+ Bukkit.getLogger().severe( "Initialised Snapshot Protocol for " + gameVersion + " (" + protocolVersion + ")" );
+ Bukkit.getLogger().severe( "Features may NOT be implemented! Use at your own risk!" );
+ Bukkit.getLogger().severe( "================ ====================================" );
+ }
+ }
}
--
1.8.1.2