4120 Zeilen
178 KiB
Diff
4120 Zeilen
178 KiB
Diff
|
From c6375be65f8716214295ff749bb253ba55f9e4c1 Mon Sep 17 00:00:00 2001
|
||
|
From: Thinkofdeath <thinkofdeath@spigotmc.org>
|
||
|
Date: Mon, 1 Sep 2014 16:47:48 +1000
|
||
|
Subject: [PATCH] Snapshot protocol
|
||
|
|
||
|
|
||
|
diff --git a/pom.xml b/pom.xml
|
||
|
index 6aeffa8..0d00e79 100644
|
||
|
--- a/pom.xml
|
||
|
+++ b/pom.xml
|
||
|
@@ -146,6 +146,7 @@
|
||
|
<Specification-Version>${api.version}</Specification-Version>
|
||
|
<Specification-Vendor>Bukkit Team</Specification-Vendor>
|
||
|
<Sealed>true</Sealed>
|
||
|
+ <Timestamp>${maven.build.timestamp}</Timestamp>
|
||
|
</manifestEntries>
|
||
|
<manifestSections>
|
||
|
<manifestSection>
|
||
|
diff --git a/src/main/java/net/minecraft/server/DataWatcher.java b/src/main/java/net/minecraft/server/DataWatcher.java
|
||
|
index 395d054..96e40ec 100644
|
||
|
--- a/src/main/java/net/minecraft/server/DataWatcher.java
|
||
|
+++ b/src/main/java/net/minecraft/server/DataWatcher.java
|
||
|
@@ -9,6 +9,7 @@ import java.util.concurrent.locks.ReadWriteLock;
|
||
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||
|
|
||
|
import net.minecraft.util.org.apache.commons.lang3.ObjectUtils;
|
||
|
+import org.spigotmc.ProtocolData; // Spigot - protocol patch
|
||
|
|
||
|
public class DataWatcher {
|
||
|
|
||
|
@@ -31,6 +32,19 @@ public class DataWatcher {
|
||
|
public void a(int i, Object object) {
|
||
|
int integer = classToId.get(object.getClass()); // Spigot
|
||
|
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( object instanceof ProtocolData.ByteShort
|
||
|
+ || object instanceof ProtocolData.DualByte
|
||
|
+ || object instanceof ProtocolData.HiddenByte )
|
||
|
+ {
|
||
|
+ integer = classToId.get( Byte.class );
|
||
|
+ }
|
||
|
+ if ( object instanceof ProtocolData.IntByte
|
||
|
+ || object instanceof ProtocolData.DualInt ) {
|
||
|
+ integer = classToId.get( Integer.class );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
+
|
||
|
if (integer == -1) { // Spigot
|
||
|
throw new IllegalArgumentException("Unknown data type: " + object.getClass());
|
||
|
} else if (i > 31) {
|
||
|
@@ -57,19 +71,19 @@ public class DataWatcher {
|
||
|
}
|
||
|
|
||
|
public byte getByte(int i) {
|
||
|
- return ((Byte) this.i(i).b()).byteValue();
|
||
|
+ return ((Number) this.i(i).b()).byteValue(); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public short getShort(int i) {
|
||
|
- return ((Short) this.i(i).b()).shortValue();
|
||
|
+ return ((Number) this.i(i).b()).shortValue(); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public int getInt(int i) {
|
||
|
- return ((Integer) this.i(i).b()).intValue();
|
||
|
+ return ((Number) this.i(i).b()).intValue(); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public float getFloat(int i) {
|
||
|
- return ((Float) this.i(i).b()).floatValue();
|
||
|
+ return ((Number) this.i(i).b()).floatValue(); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public String getString(int i) {
|
||
|
@@ -80,6 +94,18 @@ public class DataWatcher {
|
||
|
return (ItemStack) this.i(i).b();
|
||
|
}
|
||
|
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ public ProtocolData.DualByte getDualByte(int i) {
|
||
|
+ return (ProtocolData.DualByte) this.i(i).b();
|
||
|
+ }
|
||
|
+ public ProtocolData.IntByte getIntByte(int i) {
|
||
|
+ return (ProtocolData.IntByte) this.i(i).b();
|
||
|
+ }
|
||
|
+ public ProtocolData.DualInt getDualInt(int i) {
|
||
|
+ return (ProtocolData.DualInt) this.i(i).b();
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
+
|
||
|
private WatchableObject i(int i) {
|
||
|
this.f.readLock().lock();
|
||
|
|
||
|
@@ -119,14 +145,20 @@ public class DataWatcher {
|
||
|
return this.e;
|
||
|
}
|
||
|
|
||
|
+ // Spigot start - protocol patch
|
||
|
public static void a(List list, PacketDataSerializer packetdataserializer) {
|
||
|
+ a(list, packetdataserializer, 5);
|
||
|
+ }
|
||
|
+
|
||
|
+ public static void a(List list, PacketDataSerializer packetdataserializer, int version) {
|
||
|
+ // Spigot end - protocol patch
|
||
|
if (list != null) {
|
||
|
Iterator iterator = list.iterator();
|
||
|
|
||
|
while (iterator.hasNext()) {
|
||
|
WatchableObject watchableobject = (WatchableObject) iterator.next();
|
||
|
|
||
|
- a(packetdataserializer, watchableobject);
|
||
|
+ a(packetdataserializer, watchableobject, version); // Spigot - protocol patch
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@@ -171,14 +203,20 @@ public class DataWatcher {
|
||
|
return arraylist;
|
||
|
}
|
||
|
|
||
|
+ // Spigot start - protocol patch
|
||
|
public void a(PacketDataSerializer packetdataserializer) {
|
||
|
+ a(packetdataserializer, 5);
|
||
|
+ }
|
||
|
+
|
||
|
+ public void a(PacketDataSerializer packetdataserializer, int version) {
|
||
|
+ // Spigot end
|
||
|
this.f.readLock().lock();
|
||
|
Iterator iterator = this.dataValues.valueCollection().iterator(); // Spigot
|
||
|
|
||
|
while (iterator.hasNext()) {
|
||
|
WatchableObject watchableobject = (WatchableObject) iterator.next();
|
||
|
|
||
|
- a(packetdataserializer, watchableobject);
|
||
|
+ a(packetdataserializer, watchableobject, version); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
this.f.readLock().unlock();
|
||
|
@@ -211,25 +249,46 @@ public class DataWatcher {
|
||
|
return arraylist;
|
||
|
}
|
||
|
|
||
|
- private static void a(PacketDataSerializer packetdataserializer, WatchableObject watchableobject) {
|
||
|
- int i = (watchableobject.c() << 5 | watchableobject.a() & 31) & 255;
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ private static void a(PacketDataSerializer packetdataserializer, WatchableObject watchableobject, int version) {
|
||
|
+ int type = watchableobject.c();
|
||
|
+ if (watchableobject.b() instanceof ProtocolData.ByteShort && version >= 16) {
|
||
|
+ type = 1;
|
||
|
+ }
|
||
|
+ if (watchableobject.b() instanceof ProtocolData.IntByte && version >= 28) {
|
||
|
+ type = 0;
|
||
|
+ }
|
||
|
+ if ( version < 16 && watchableobject.b() instanceof ProtocolData.HiddenByte ) return;
|
||
|
+
|
||
|
+ int i = (type << 5 | watchableobject.a() & 31) & 255;
|
||
|
|
||
|
packetdataserializer.writeByte(i);
|
||
|
- switch (watchableobject.c()) {
|
||
|
+ switch (type) {
|
||
|
case 0:
|
||
|
- packetdataserializer.writeByte(((Byte) watchableobject.b()).byteValue());
|
||
|
+ if ( watchableobject.b() instanceof ProtocolData.DualByte )
|
||
|
+ {
|
||
|
+ ProtocolData.DualByte dualByte = (ProtocolData.DualByte) watchableobject.b();
|
||
|
+ packetdataserializer.writeByte( version >= 16 ? dualByte.value2 : dualByte.value );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writeByte( ( (Number) watchableobject.b() ).byteValue() );
|
||
|
+ }
|
||
|
break;
|
||
|
|
||
|
case 1:
|
||
|
- packetdataserializer.writeShort(((Short) watchableobject.b()).shortValue());
|
||
|
+ packetdataserializer.writeShort(((Number) watchableobject.b()).shortValue());
|
||
|
break;
|
||
|
|
||
|
case 2:
|
||
|
- packetdataserializer.writeInt(((Integer) watchableobject.b()).intValue());
|
||
|
+ int val = ((Number) watchableobject.b()).intValue();
|
||
|
+ if ( watchableobject.b() instanceof ProtocolData.DualInt && version >= 46 ) {
|
||
|
+ val = ((ProtocolData.DualInt) watchableobject.b()).value2;
|
||
|
+ }
|
||
|
+ packetdataserializer.writeInt(val);
|
||
|
break;
|
||
|
|
||
|
case 3:
|
||
|
- packetdataserializer.writeFloat(((Float) watchableobject.b()).floatValue());
|
||
|
+ packetdataserializer.writeFloat(((Number) watchableobject.b()).floatValue());
|
||
|
break;
|
||
|
|
||
|
case 4:
|
||
|
@@ -254,6 +313,7 @@ public class DataWatcher {
|
||
|
packetdataserializer.writeInt(chunkcoordinates.z);
|
||
|
}
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
|
||
|
public static List b(PacketDataSerializer packetdataserializer) {
|
||
|
ArrayList arraylist = null;
|
||
|
diff --git a/src/main/java/net/minecraft/server/EntityAgeable.java b/src/main/java/net/minecraft/server/EntityAgeable.java
|
||
|
index 7ddca48..af73b81 100644
|
||
|
--- a/src/main/java/net/minecraft/server/EntityAgeable.java
|
||
|
+++ b/src/main/java/net/minecraft/server/EntityAgeable.java
|
||
|
@@ -73,11 +73,11 @@ public abstract class EntityAgeable extends EntityCreature {
|
||
|
|
||
|
protected void c() {
|
||
|
super.c();
|
||
|
- this.datawatcher.a(12, new Integer(0));
|
||
|
+ this.datawatcher.a(12, new org.spigotmc.ProtocolData.IntByte(0, (byte) 0)); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public int getAge() {
|
||
|
- return this.datawatcher.getInt(12);
|
||
|
+ return this.datawatcher.getIntByte(12).value; // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public void a(int i) {
|
||
|
@@ -92,7 +92,7 @@ public abstract class EntityAgeable extends EntityCreature {
|
||
|
}
|
||
|
|
||
|
public void setAge(int i) {
|
||
|
- this.datawatcher.watch(12, Integer.valueOf(i));
|
||
|
+ this.datawatcher.watch(12, new org.spigotmc.ProtocolData.IntByte(i, (byte) ( i < 0 ? -1 : (i >= 6000 ? 1 : 0)))); // Spigot - protocol patch
|
||
|
this.a(this.isBaby());
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java
|
||
|
index fa6670b..87afc9c 100644
|
||
|
--- a/src/main/java/net/minecraft/server/EntityEnderman.java
|
||
|
+++ b/src/main/java/net/minecraft/server/EntityEnderman.java
|
||
|
@@ -7,6 +7,7 @@ import org.bukkit.Location;
|
||
|
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||
|
import org.bukkit.event.entity.EntityTeleportEvent;
|
||
|
// CraftBukkit end
|
||
|
+import org.spigotmc.ProtocolData; // Spigot - protocol patch
|
||
|
|
||
|
public class EntityEnderman extends EntityMonster {
|
||
|
|
||
|
@@ -33,7 +34,7 @@ public class EntityEnderman extends EntityMonster {
|
||
|
|
||
|
protected void c() {
|
||
|
super.c();
|
||
|
- this.datawatcher.a(16, new Byte((byte) 0));
|
||
|
+ this.datawatcher.a( 16, new ProtocolData.ByteShort( (short) 0 ) ); // Spigot - protocol patch, handle metadata change
|
||
|
this.datawatcher.a(17, new Byte((byte) 0));
|
||
|
this.datawatcher.a(18, new Byte((byte) 0));
|
||
|
}
|
||
|
@@ -315,11 +316,11 @@ public class EntityEnderman extends EntityMonster {
|
||
|
}
|
||
|
|
||
|
public void setCarried(Block block) {
|
||
|
- this.datawatcher.watch(16, Byte.valueOf((byte) (Block.getId(block) & 255)));
|
||
|
+ this.datawatcher.watch( 16, new ProtocolData.ByteShort( (short) Block.getId( block ) ) ); // Spigot - protocol patch, handle metadata change
|
||
|
}
|
||
|
|
||
|
public Block getCarried() {
|
||
|
- return Block.getById(this.datawatcher.getByte(16));
|
||
|
+ return Block.getById(this.datawatcher.getShort( 16 )); // Spigot - protocol patch, handle metadata change
|
||
|
}
|
||
|
|
||
|
public void setCarriedData(int i) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
||
|
index 219eb5f..5bb7295 100644
|
||
|
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||
|
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
||
|
@@ -19,6 +19,7 @@ import org.bukkit.event.player.PlayerBedLeaveEvent;
|
||
|
import org.bukkit.event.player.PlayerDropItemEvent;
|
||
|
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
||
|
// CraftBukkit end
|
||
|
+import org.spigotmc.ProtocolData; // Spigot - protocol patch
|
||
|
|
||
|
public abstract class EntityHuman extends EntityLiving implements ICommandListener {
|
||
|
|
||
|
@@ -89,9 +90,10 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen
|
||
|
|
||
|
protected void c() {
|
||
|
super.c();
|
||
|
- this.datawatcher.a(16, Byte.valueOf((byte) 0));
|
||
|
+ this.datawatcher.a( 16, new ProtocolData.DualByte( (byte) 0, (byte) 0 ) ); // Spigot - protocol patch, handle metadata usage change (show cape -> collisions)
|
||
|
this.datawatcher.a(17, Float.valueOf(0.0F));
|
||
|
this.datawatcher.a(18, Integer.valueOf(0));
|
||
|
+ this.datawatcher.a( 10, new ProtocolData.HiddenByte( (byte) 0 ) ); // Spigot - protocol patch, handle new metadata value
|
||
|
}
|
||
|
|
||
|
public boolean by() {
|
||
|
@@ -1224,15 +1226,23 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen
|
||
|
return this.sleeping && this.sleepTicks >= 100;
|
||
|
}
|
||
|
|
||
|
- protected void b(int i, boolean flag) {
|
||
|
- byte b0 = this.datawatcher.getByte(16);
|
||
|
-
|
||
|
+ // Spigot start - protocol patch, handle metadata usage change (show cape -> collisions)
|
||
|
+ protected void b(int i, boolean flag, int version) {
|
||
|
+ ProtocolData.DualByte db = this.datawatcher.getDualByte( 16 );
|
||
|
+ byte b0 = version >= 16 ? db.value2 : db.value;
|
||
|
if (flag) {
|
||
|
- this.datawatcher.watch(16, Byte.valueOf((byte) (b0 | 1 << i)));
|
||
|
+ b0 = (byte) ( b0 | 1 << i );
|
||
|
+ } else {
|
||
|
+ b0 = (byte) (b0 & ~(1 << i));
|
||
|
+ }
|
||
|
+ if (version >= 16) {
|
||
|
+ db.value2 = b0;
|
||
|
} else {
|
||
|
- this.datawatcher.watch(16, Byte.valueOf((byte) (b0 & ~(1 << i))));
|
||
|
+ db.value = b0;
|
||
|
}
|
||
|
+ this.datawatcher.watch(16, db);
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
|
||
|
public void b(IChatBaseComponent ichatbasecomponent) {}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||
|
index f6c4788..617f7d4 100644
|
||
|
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
||
|
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||
|
@@ -93,6 +93,10 @@ public abstract class EntityInsentient extends EntityLiving {
|
||
|
super.c();
|
||
|
this.datawatcher.a(11, Byte.valueOf((byte) 0));
|
||
|
this.datawatcher.a(10, "");
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ this.datawatcher.a(3, Byte.valueOf((byte) 0));
|
||
|
+ this.datawatcher.a(2, "");
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public int q() {
|
||
|
@@ -733,6 +737,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
||
|
|
||
|
public void setCustomName(String s) {
|
||
|
this.datawatcher.watch(10, s);
|
||
|
+ this.datawatcher.watch(2, s); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public String getCustomName() {
|
||
|
@@ -745,6 +750,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
||
|
|
||
|
public void setCustomNameVisible(boolean flag) {
|
||
|
this.datawatcher.watch(11, Byte.valueOf((byte) (flag ? 1 : 0)));
|
||
|
+ this.datawatcher.watch(3, Byte.valueOf((byte) (flag ? 1 : 0))); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public boolean getCustomNameVisible() {
|
||
|
diff --git a/src/main/java/net/minecraft/server/EntityItemFrame.java b/src/main/java/net/minecraft/server/EntityItemFrame.java
|
||
|
index d1d73f9..5109b5d 100644
|
||
|
--- a/src/main/java/net/minecraft/server/EntityItemFrame.java
|
||
|
+++ b/src/main/java/net/minecraft/server/EntityItemFrame.java
|
||
|
@@ -16,6 +16,10 @@ public class EntityItemFrame extends EntityHanging {
|
||
|
protected void c() {
|
||
|
this.getDataWatcher().add(2, 5);
|
||
|
this.getDataWatcher().a(3, Byte.valueOf((byte) 0));
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ this.getDataWatcher().add(8, 5);
|
||
|
+ this.getDataWatcher().a(9, Byte.valueOf((byte) 0));
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public boolean damageEntity(DamageSource damagesource, float f) {
|
||
|
@@ -99,6 +103,10 @@ public class EntityItemFrame extends EntityHanging {
|
||
|
|
||
|
this.getDataWatcher().watch(2, itemstack);
|
||
|
this.getDataWatcher().update(2);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ this.getDataWatcher().watch(8, itemstack);
|
||
|
+ this.getDataWatcher().update(8);
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public int getRotation() {
|
||
|
@@ -107,6 +115,7 @@ public class EntityItemFrame extends EntityHanging {
|
||
|
|
||
|
public void setRotation(int i) {
|
||
|
this.getDataWatcher().watch(3, Byte.valueOf((byte) (i % 4)));
|
||
|
+ this.getDataWatcher().watch(9, Byte.valueOf((byte) ((i % 4) * 2))); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public void b(NBTTagCompound nbttagcompound) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
|
||
|
index 2a1e69d..0710fcc 100644
|
||
|
--- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
|
||
|
+++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
|
||
|
@@ -74,7 +74,7 @@ public abstract class EntityMinecartAbstract extends Entity {
|
||
|
this.datawatcher.a(17, new Integer(0));
|
||
|
this.datawatcher.a(18, new Integer(1));
|
||
|
this.datawatcher.a(19, new Float(0.0F));
|
||
|
- this.datawatcher.a(20, new Integer(0));
|
||
|
+ this.datawatcher.a(20, new org.spigotmc.ProtocolData.DualInt(0, 0)); // Spigot - protocol patch
|
||
|
this.datawatcher.a(21, new Integer(6));
|
||
|
this.datawatcher.a(22, Byte.valueOf((byte) 0));
|
||
|
}
|
||
|
@@ -841,12 +841,22 @@ public abstract class EntityMinecartAbstract extends Entity {
|
||
|
}
|
||
|
|
||
|
public void k(int i) {
|
||
|
- this.getDataWatcher().watch(20, Integer.valueOf(i & '\uffff' | this.p() << 16));
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ org.spigotmc.ProtocolData.DualInt val = datawatcher.getDualInt(20);
|
||
|
+ val.value = Integer.valueOf(i & '\uffff' | this.p() << 16);
|
||
|
+ val.value2 = Integer.valueOf(i & '\uffff' | this.p() << 12);
|
||
|
+ this.getDataWatcher().watch(20, val);
|
||
|
+ // Spigot end
|
||
|
this.a(true);
|
||
|
}
|
||
|
|
||
|
public void l(int i) {
|
||
|
- this.getDataWatcher().watch(20, Integer.valueOf(Block.getId(this.n()) & '\uffff' | i << 16));
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ org.spigotmc.ProtocolData.DualInt val = datawatcher.getDualInt(20);
|
||
|
+ val.value = Integer.valueOf(Block.getId(this.n()) & '\uffff' | i << 16);
|
||
|
+ val.value2 = Integer.valueOf(Block.getId(this.n()) & '\uffff' | i << 12);
|
||
|
+ this.getDataWatcher().watch(20, val);
|
||
|
+ // Spigot end
|
||
|
this.a(true);
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||
|
index 413af68..bf70d65 100644
|
||
|
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||
|
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||
|
@@ -26,6 +26,7 @@ import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||
|
import org.bukkit.event.inventory.InventoryType;
|
||
|
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||
|
// CraftBukkit end
|
||
|
+import org.spigotmc.ProtocolData; // Spigot - protocol patch
|
||
|
|
||
|
public class EntityPlayer extends EntityHuman implements ICrafting {
|
||
|
|
||
|
@@ -233,7 +234,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||
|
}
|
||
|
|
||
|
if (!arraylist.isEmpty()) {
|
||
|
- this.playerConnection.sendPacket(new PacketPlayOutMapChunkBulk(arraylist));
|
||
|
+ this.playerConnection.sendPacket(new PacketPlayOutMapChunkBulk(arraylist, this.playerConnection.networkManager.getVersion())); // Spigot - protocol patch
|
||
|
Iterator iterator2 = arraylist1.iterator();
|
||
|
|
||
|
while (iterator2.hasNext()) {
|
||
|
@@ -594,7 +595,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||
|
// CraftBukkit end
|
||
|
|
||
|
this.nextContainerCounter();
|
||
|
- this.playerConnection.sendPacket(new PacketPlayOutOpenWindow(this.containerCounter, 1, "Crafting", 9, true));
|
||
|
+ this.playerConnection.sendPacket(new PacketPlayOutOpenWindow(this.containerCounter, 1, "Crafting", 0, true)); // Spigot - protocol patch
|
||
|
this.activeContainer = container; // CraftBukkit - Use container we passed to event
|
||
|
this.activeContainer.windowId = this.containerCounter;
|
||
|
this.activeContainer.addSlotListener(this);
|
||
|
@@ -609,7 +610,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||
|
// CraftBukkit end
|
||
|
|
||
|
this.nextContainerCounter();
|
||
|
- this.playerConnection.sendPacket(new PacketPlayOutOpenWindow(this.containerCounter, 4, s == null ? "" : s, 9, s != null));
|
||
|
+ this.playerConnection.sendPacket(new PacketPlayOutOpenWindow(this.containerCounter, 4, s == null ? "" : s, 0, s != null)); // Spigot - protocol patch
|
||
|
this.activeContainer = container; // CraftBukkit - Use container we passed to event
|
||
|
this.activeContainer.windowId = this.containerCounter;
|
||
|
this.activeContainer.addSlotListener(this);
|
||
|
@@ -624,7 +625,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||
|
// CraftBukkit end
|
||
|
|
||
|
this.nextContainerCounter();
|
||
|
- this.playerConnection.sendPacket(new PacketPlayOutOpenWindow(this.containerCounter, 8, "Repairing", 9, true));
|
||
|
+ this.playerConnection.sendPacket(new PacketPlayOutOpenWindow(this.containerCounter, 8, "Repairing", 0, true)); // Spigot - protocol patch
|
||
|
this.activeContainer = container; // CraftBukkit - Use container we passed to event
|
||
|
this.activeContainer.windowId = this.containerCounter;
|
||
|
this.activeContainer.addSlotListener(this);
|
||
|
@@ -764,7 +765,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||
|
MerchantRecipeList merchantrecipelist = imerchant.getOffers(this);
|
||
|
|
||
|
if (merchantrecipelist != null) {
|
||
|
- PacketDataSerializer packetdataserializer = new PacketDataSerializer(Unpooled.buffer());
|
||
|
+ PacketDataSerializer packetdataserializer = new PacketDataSerializer(Unpooled.buffer(), playerConnection.networkManager.getVersion()); // Spigot
|
||
|
|
||
|
try {
|
||
|
packetdataserializer.writeInt(this.containerCounter);
|
||
|
@@ -1004,7 +1005,16 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||
|
this.server.a(packetplayinsettings.g());
|
||
|
}
|
||
|
|
||
|
- this.b(1, !packetplayinsettings.h());
|
||
|
+ // Spigot start - protocol patch, handle metadata usage change (show cape -> collisions)
|
||
|
+ if (packetplayinsettings.version < 16)
|
||
|
+ {
|
||
|
+ this.b( 1, !packetplayinsettings.h(), packetplayinsettings.version );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ this.b( 1, false, packetplayinsettings.version );
|
||
|
+ datawatcher.watch( 10, new ProtocolData.HiddenByte( (byte) packetplayinsettings.flags ) );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public EnumChatVisibility getChatFlags() {
|
||
|
@@ -1013,6 +1023,12 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||
|
|
||
|
public void setResourcePack(String s) {
|
||
|
this.playerConnection.sendPacket(new PacketPlayOutCustomPayload("MC|RPack", s.getBytes(Charsets.UTF_8)));
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( playerConnection.networkManager.getVersion() >= 36 )
|
||
|
+ {
|
||
|
+ playerConnection.sendPacket( new org.spigotmc.ProtocolInjector.PacketPlayResourcePackSend( s, "thinkislazy" ) );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public ChunkCoordinates getChunkCoordinates() {
|
||
|
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||
|
index f654d58..6e32e24 100644
|
||
|
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||
|
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||
|
@@ -320,6 +320,13 @@ public class EntityTrackerEntry {
|
||
|
this.trackedPlayers.add(entityplayer);
|
||
|
Packet packet = this.c();
|
||
|
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( tracker instanceof EntityPlayer )
|
||
|
+ {
|
||
|
+ entityplayer.playerConnection.sendPacket( PacketPlayOutPlayerInfo.addPlayer( (EntityPlayer) tracker ) );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
+
|
||
|
entityplayer.playerConnection.sendPacket(packet);
|
||
|
if (!this.tracker.getDataWatcher().d()) {
|
||
|
entityplayer.playerConnection.sendPacket(new PacketPlayOutEntityMetadata(this.tracker.getId(), this.tracker.getDataWatcher(), true));
|
||
|
diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java
|
||
|
index 09fdb88..3d659ea 100644
|
||
|
--- a/src/main/java/net/minecraft/server/HandshakeListener.java
|
||
|
+++ b/src/main/java/net/minecraft/server/HandshakeListener.java
|
||
|
@@ -72,7 +72,7 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
||
|
}
|
||
|
// CraftBukkit end
|
||
|
|
||
|
- if (packethandshakinginsetprotocol.d() > 5) {
|
||
|
+ if (packethandshakinginsetprotocol.d() > 5 && packethandshakinginsetprotocol.d() != 46) { // Spigot
|
||
|
chatcomponenttext = new ChatComponentText( org.spigotmc.SpigotConfig.outdatedServerMessage ); // Spigot
|
||
|
this.b.handle(new PacketLoginOutDisconnect(chatcomponenttext), new GenericFutureListener[0]);
|
||
|
this.b.close(chatcomponenttext);
|
||
|
diff --git a/src/main/java/net/minecraft/server/ItemWorldMap.java b/src/main/java/net/minecraft/server/ItemWorldMap.java
|
||
|
index c08ccca..881fd4b 100644
|
||
|
--- a/src/main/java/net/minecraft/server/ItemWorldMap.java
|
||
|
+++ b/src/main/java/net/minecraft/server/ItemWorldMap.java
|
||
|
@@ -199,7 +199,7 @@ public class ItemWorldMap extends ItemWorldMapBase {
|
||
|
public Packet c(ItemStack itemstack, World world, EntityHuman entityhuman) {
|
||
|
byte[] abyte = this.getSavedMap(itemstack, world).getUpdatePacket(itemstack, world, entityhuman);
|
||
|
|
||
|
- return abyte == null ? null : new PacketPlayOutMap(itemstack.getData(), abyte);
|
||
|
+ return abyte == null ? null : new PacketPlayOutMap(itemstack.getData(), abyte, this.getSavedMap(itemstack, world).scale); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public void d(ItemStack itemstack, World world, EntityHuman entityhuman) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java
|
||
|
index e380a70..bd254de 100644
|
||
|
--- a/src/main/java/net/minecraft/server/LoginListener.java
|
||
|
+++ b/src/main/java/net/minecraft/server/LoginListener.java
|
||
|
@@ -10,6 +10,7 @@ import javax.crypto.SecretKey;
|
||
|
import net.minecraft.util.com.google.common.base.Charsets;
|
||
|
import net.minecraft.util.com.mojang.authlib.GameProfile;
|
||
|
import net.minecraft.util.com.mojang.authlib.properties.Property;
|
||
|
+import net.minecraft.util.io.netty.util.concurrent.Future;
|
||
|
import net.minecraft.util.io.netty.util.concurrent.GenericFutureListener;
|
||
|
import net.minecraft.util.org.apache.commons.lang3.Validate;
|
||
|
import org.apache.logging.log4j.LogManager;
|
||
|
@@ -101,6 +102,19 @@ public class LoginListener implements PacketLoginInListener {
|
||
|
// CraftBukkit end
|
||
|
} else {
|
||
|
this.g = EnumProtocolState.e;
|
||
|
+ // Spigot start
|
||
|
+ if ( networkManager.getVersion() >= 27 )
|
||
|
+ {
|
||
|
+ this.networkManager.handle( new org.spigotmc.ProtocolInjector.PacketLoginCompression( 256 ), new GenericFutureListener()
|
||
|
+ {
|
||
|
+ @Override
|
||
|
+ public void operationComplete(Future future) throws Exception
|
||
|
+ {
|
||
|
+ networkManager.enableCompression();
|
||
|
+ }
|
||
|
+ } );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
this.networkManager.handle(new PacketLoginOutSuccess(this.i), new GenericFutureListener[0]);
|
||
|
this.server.getPlayerList().a(this.networkManager, this.server.getPlayerList().processLogin(this.i, s)); // CraftBukkit - add player reference
|
||
|
}
|
||
|
diff --git a/src/main/java/net/minecraft/server/MerchantRecipe.java b/src/main/java/net/minecraft/server/MerchantRecipe.java
|
||
|
index 770da8f..aa6bbf6 100644
|
||
|
--- a/src/main/java/net/minecraft/server/MerchantRecipe.java
|
||
|
+++ b/src/main/java/net/minecraft/server/MerchantRecipe.java
|
||
|
@@ -5,8 +5,8 @@ public class MerchantRecipe {
|
||
|
private ItemStack buyingItem1;
|
||
|
private ItemStack buyingItem2;
|
||
|
private ItemStack sellingItem;
|
||
|
- private int uses;
|
||
|
- private int maxUses;
|
||
|
+ public int uses; // Spigot - protocol patch
|
||
|
+ public int maxUses; // Spigot - protocol patch
|
||
|
|
||
|
public MerchantRecipe(NBTTagCompound nbttagcompound) {
|
||
|
this.a(nbttagcompound);
|
||
|
diff --git a/src/main/java/net/minecraft/server/MerchantRecipeList.java b/src/main/java/net/minecraft/server/MerchantRecipeList.java
|
||
|
index be6ab25..6ddbf7a 100644
|
||
|
--- a/src/main/java/net/minecraft/server/MerchantRecipeList.java
|
||
|
+++ b/src/main/java/net/minecraft/server/MerchantRecipeList.java
|
||
|
@@ -60,6 +60,13 @@ public class MerchantRecipeList extends ArrayList {
|
||
|
}
|
||
|
|
||
|
packetdataserializer.writeBoolean(merchantrecipe.g());
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version >= 28 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( merchantrecipe.uses );
|
||
|
+ packetdataserializer.writeInt( merchantrecipe.maxUses );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||
|
index b905c6e..8c3950a 100644
|
||
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||
|
@@ -758,6 +758,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||
|
|
||
|
public static void main(final OptionSet options) { // CraftBukkit - replaces main(String[] astring)
|
||
|
DispenserRegistry.b();
|
||
|
+ org.spigotmc.ProtocolInjector.inject();
|
||
|
|
||
|
try {
|
||
|
/* CraftBukkit start - Replace everything
|
||
|
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
|
||
|
index ae3de2f..6d579e3 100644
|
||
|
--- a/src/main/java/net/minecraft/server/NetworkManager.java
|
||
|
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
|
||
|
@@ -24,6 +24,8 @@ import org.apache.logging.log4j.Marker;
|
||
|
import org.apache.logging.log4j.MarkerManager;
|
||
|
// Spigot start
|
||
|
import com.google.common.collect.ImmutableSet;
|
||
|
+import org.spigotmc.SpigotCompressor;
|
||
|
+import org.spigotmc.SpigotDecompressor;
|
||
|
// Spigot end
|
||
|
|
||
|
public class NetworkManager extends SimpleChannelInboundHandler {
|
||
|
@@ -53,7 +55,7 @@ public class NetworkManager extends SimpleChannelInboundHandler {
|
||
|
private boolean r;
|
||
|
// Spigot Start
|
||
|
public static final AttributeKey<Integer> protocolVersion = new AttributeKey<Integer>("protocol_version");
|
||
|
- public static final ImmutableSet<Integer> SUPPORTED_VERSIONS = ImmutableSet.of(4, 5);
|
||
|
+ public static final ImmutableSet<Integer> SUPPORTED_VERSIONS = ImmutableSet.of(4, 5, 46);
|
||
|
public static final int CURRENT_VERSION = 5;
|
||
|
public static int getVersion(Channel attr)
|
||
|
{
|
||
|
@@ -244,4 +246,12 @@ public class NetworkManager extends SimpleChannelInboundHandler {
|
||
|
return this.m.remoteAddress();
|
||
|
}
|
||
|
// Spigot End
|
||
|
+
|
||
|
+
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ public void enableCompression() {
|
||
|
+ m.pipeline().addBefore( "decoder", "decompress", new SpigotDecompressor() );
|
||
|
+ m.pipeline().addBefore( "encoder", "compress", new SpigotCompressor() );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
diff --git a/src/main/java/net/minecraft/server/Packet.java b/src/main/java/net/minecraft/server/Packet.java
|
||
|
index 592ffc5..7a1e8f0 100644
|
||
|
--- a/src/main/java/net/minecraft/server/Packet.java
|
||
|
+++ b/src/main/java/net/minecraft/server/Packet.java
|
||
|
@@ -26,12 +26,39 @@ public abstract class Packet {
|
||
|
}
|
||
|
|
||
|
public static void a(ByteBuf bytebuf, byte[] abyte) {
|
||
|
- bytebuf.writeShort(abyte.length);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if (bytebuf instanceof PacketDataSerializer)
|
||
|
+ {
|
||
|
+ PacketDataSerializer packetDataSerializer = (PacketDataSerializer) bytebuf;
|
||
|
+ if (packetDataSerializer.version >= 20) {
|
||
|
+ packetDataSerializer.b( abyte.length );
|
||
|
+ } else {
|
||
|
+ bytebuf.writeShort( abyte.length );
|
||
|
+ }
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ bytebuf.writeShort( abyte.length );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
bytebuf.writeBytes(abyte);
|
||
|
}
|
||
|
|
||
|
public static byte[] a(ByteBuf bytebuf) throws IOException { // CraftBukkit - added throws
|
||
|
- short short1 = bytebuf.readShort();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ short short1 = 0;
|
||
|
+ if (bytebuf instanceof PacketDataSerializer)
|
||
|
+ {
|
||
|
+ PacketDataSerializer packetDataSerializer = (PacketDataSerializer) bytebuf;
|
||
|
+ if (packetDataSerializer.version >= 20) {
|
||
|
+ short1 = (short) packetDataSerializer.a();
|
||
|
+ } else {
|
||
|
+ short1 = bytebuf.readShort();
|
||
|
+ }
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ short1 = bytebuf.readShort();
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
|
||
|
if (short1 < 0) {
|
||
|
throw new IOException("Key was smaller than nothing! Weird key!");
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketDataSerializer.java b/src/main/java/net/minecraft/server/PacketDataSerializer.java
|
||
|
index e4df5b3..90641d9 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketDataSerializer.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketDataSerializer.java
|
||
|
@@ -8,6 +8,7 @@ import java.nio.ByteOrder;
|
||
|
import java.nio.channels.GatheringByteChannel;
|
||
|
import java.nio.channels.ScatteringByteChannel;
|
||
|
import java.nio.charset.Charset;
|
||
|
+import java.util.UUID;
|
||
|
|
||
|
import net.minecraft.util.com.google.common.base.Charsets;
|
||
|
import net.minecraft.util.io.netty.buffer.ByteBuf;
|
||
|
@@ -16,6 +17,15 @@ import net.minecraft.util.io.netty.buffer.ByteBufProcessor;
|
||
|
|
||
|
import org.bukkit.craftbukkit.inventory.CraftItemStack; // CraftBukkit
|
||
|
|
||
|
+// Spigot start - protocol patch
|
||
|
+import java.io.DataInputStream;
|
||
|
+import java.io.DataOutputStream;
|
||
|
+import net.minecraft.util.io.netty.buffer.Unpooled;
|
||
|
+import net.minecraft.util.io.netty.buffer.ByteBufInputStream;
|
||
|
+import net.minecraft.util.io.netty.buffer.ByteBufOutputStream;
|
||
|
+import org.spigotmc.SpigotComponentReverter;
|
||
|
+// Spigot end
|
||
|
+
|
||
|
public class PacketDataSerializer extends ByteBuf {
|
||
|
|
||
|
private final ByteBuf a;
|
||
|
@@ -31,6 +41,32 @@ public class PacketDataSerializer extends ByteBuf {
|
||
|
this.a = bytebuf;
|
||
|
this.version = version;
|
||
|
}
|
||
|
+
|
||
|
+ public void writePosition(int x, int y, int z) {
|
||
|
+ writeLong( ( ( (long) x & 0x3FFFFFFL ) << 38 )
|
||
|
+ | ( ( (long) y & 0xFFFL ) << 26 )
|
||
|
+ | ( (long) z & 0x3FFFFFFL ) );
|
||
|
+ }
|
||
|
+
|
||
|
+ public int readPositionX(long val)
|
||
|
+ {
|
||
|
+ return (int) ( val >> 38 );
|
||
|
+ }
|
||
|
+
|
||
|
+ public int readPositionY(long val)
|
||
|
+ {
|
||
|
+ return (int) (val << 26 >> 52);
|
||
|
+ }
|
||
|
+
|
||
|
+ public int readPositionZ(long val)
|
||
|
+ {
|
||
|
+ return (int) (val << 38 >> 38);
|
||
|
+ }
|
||
|
+
|
||
|
+ public void writeUUID(UUID uuid) {
|
||
|
+ writeLong( uuid.getMostSignificantBits() );
|
||
|
+ writeLong( uuid.getLeastSignificantBits() );
|
||
|
+ }
|
||
|
// Spigot End
|
||
|
|
||
|
public static int a(int i) {
|
||
|
@@ -63,29 +99,61 @@ public class PacketDataSerializer extends ByteBuf {
|
||
|
this.writeByte(i);
|
||
|
}
|
||
|
|
||
|
- public void a(NBTTagCompound nbttagcompound) {
|
||
|
- if (nbttagcompound == null) {
|
||
|
- this.writeShort(-1);
|
||
|
- } else {
|
||
|
- byte[] abyte = NBTCompressedStreamTools.a(nbttagcompound);
|
||
|
-
|
||
|
- this.writeShort((short) abyte.length);
|
||
|
- this.writeBytes(abyte);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ public void a(NBTTagCompound nbttagcompound)
|
||
|
+ {
|
||
|
+ if ( version < 28 )
|
||
|
+ {
|
||
|
+ if ( nbttagcompound == null )
|
||
|
+ {
|
||
|
+ this.writeShort( -1 );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ byte[] abyte = NBTCompressedStreamTools.a( nbttagcompound );
|
||
|
+
|
||
|
+ this.writeShort( (short) abyte.length );
|
||
|
+ this.writeBytes( abyte );
|
||
|
+ }
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ if ( nbttagcompound == null )
|
||
|
+ {
|
||
|
+ this.writeByte( 0 );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ ByteBufOutputStream out = new ByteBufOutputStream( Unpooled.buffer() );
|
||
|
+ NBTCompressedStreamTools.a( nbttagcompound, (java.io.DataOutput) new DataOutputStream( out ) );
|
||
|
+ writeBytes( out.buffer() );
|
||
|
+ out.buffer().release();
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public NBTTagCompound b() {
|
||
|
- short short1 = this.readShort();
|
||
|
-
|
||
|
- if (short1 < 0) {
|
||
|
- return null;
|
||
|
+ if ( version < 28 )
|
||
|
+ {
|
||
|
+ short short1 = this.readShort();
|
||
|
+
|
||
|
+ if ( short1 < 0 )
|
||
|
+ {
|
||
|
+ return null;
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ byte[] abyte = new byte[ short1 ];
|
||
|
+
|
||
|
+ this.readBytes( abyte );
|
||
|
+ return NBTCompressedStreamTools.a( abyte, new NBTReadLimiter( 2097152L ) );
|
||
|
+ }
|
||
|
} else {
|
||
|
- byte[] abyte = new byte[short1];
|
||
|
-
|
||
|
- this.readBytes(abyte);
|
||
|
- return NBTCompressedStreamTools.a(abyte, new NBTReadLimiter(2097152L));
|
||
|
+ int index = readerIndex();
|
||
|
+ if (readByte() == 0) {
|
||
|
+ return null;
|
||
|
+ }
|
||
|
+ readerIndex(index);
|
||
|
+ return NBTCompressedStreamTools.a( new DataInputStream( new ByteBufInputStream( a ) ) );
|
||
|
}
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
|
||
|
public void a(ItemStack itemstack) {
|
||
|
if (itemstack == null || itemstack.getItem() == null) { // CraftBukkit - NPE fix itemstack.getItem()
|
||
|
@@ -104,6 +172,31 @@ public class PacketDataSerializer extends ByteBuf {
|
||
|
nbttagcompound = itemstack.tag;
|
||
|
}
|
||
|
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if (nbttagcompound != null && version >= 29 )
|
||
|
+ {
|
||
|
+ if ( itemstack.getItem() == Items.WRITTEN_BOOK && nbttagcompound.hasKeyOfType("pages", 9) )
|
||
|
+ {
|
||
|
+ nbttagcompound = (NBTTagCompound) nbttagcompound.clone();
|
||
|
+ NBTTagList nbttaglist = nbttagcompound.getList( "pages", 8 );
|
||
|
+ NBTTagList newList = new NBTTagList();
|
||
|
+ for (int i = 0; i < nbttaglist.size(); ++i)
|
||
|
+ {
|
||
|
+ IChatBaseComponent[] parts = org.bukkit.craftbukkit.util.CraftChatMessage.fromString( nbttaglist.getString( i ) );
|
||
|
+ IChatBaseComponent root = parts[0];
|
||
|
+ for ( int i1 = 1; i1 < parts.length; i1++ )
|
||
|
+ {
|
||
|
+ IChatBaseComponent c = parts[ i1 ];
|
||
|
+ root.a( "\n" );
|
||
|
+ root.addSibling( c );
|
||
|
+ }
|
||
|
+ newList.add( new NBTTagString( ChatSerializer.a( root ) ) );
|
||
|
+ }
|
||
|
+ nbttagcompound.set( "pages", newList );
|
||
|
+ }
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
+
|
||
|
this.a(nbttagcompound);
|
||
|
}
|
||
|
}
|
||
|
@@ -120,6 +213,24 @@ public class PacketDataSerializer extends ByteBuf {
|
||
|
itemstack.tag = this.b();
|
||
|
// CraftBukkit start
|
||
|
if (itemstack.tag != null) {
|
||
|
+
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( version >= 29
|
||
|
+ && itemstack.getItem() == Items.WRITTEN_BOOK
|
||
|
+ && itemstack.tag.hasKeyOfType("pages", 9) )
|
||
|
+ {
|
||
|
+ NBTTagList nbttaglist = itemstack.tag.getList( "pages", 8 );
|
||
|
+ NBTTagList newList = new NBTTagList();
|
||
|
+ for (int i = 0; i < nbttaglist.size(); ++i)
|
||
|
+ {
|
||
|
+ IChatBaseComponent s = ChatSerializer.a( nbttaglist.getString( i ) );
|
||
|
+ String newString = SpigotComponentReverter.toLegacy( s );
|
||
|
+ newList.add( new NBTTagString( newString ) );
|
||
|
+ }
|
||
|
+ itemstack.tag.set( "pages", newList );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
+
|
||
|
CraftItemStack.setItemMeta(itemstack, CraftItemStack.getItemMeta(itemstack));
|
||
|
}
|
||
|
// CraftBukkit end
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketDecoder.java b/src/main/java/net/minecraft/server/PacketDecoder.java
|
||
|
index 71ec28c..5213f1f 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketDecoder.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketDecoder.java
|
||
|
@@ -26,7 +26,7 @@ public class PacketDecoder extends ByteToMessageDecoder {
|
||
|
int i = bytebuf.readableBytes();
|
||
|
|
||
|
if (i != 0) {
|
||
|
- PacketDataSerializer packetdataserializer = new PacketDataSerializer(bytebuf);
|
||
|
+ PacketDataSerializer packetdataserializer = new PacketDataSerializer( bytebuf, NetworkManager.getVersion( channelhandlercontext.channel() ) ); // Spigot
|
||
|
int j = packetdataserializer.a();
|
||
|
Packet packet = Packet.a((BiMap) channelhandlercontext.channel().attr(NetworkManager.e).get(), j);
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInArmAnimation.java b/src/main/java/net/minecraft/server/PacketPlayInArmAnimation.java
|
||
|
index 91df585..91d9e58 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInArmAnimation.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInArmAnimation.java
|
||
|
@@ -8,8 +8,15 @@ public class PacketPlayInArmAnimation extends Packet {
|
||
|
public PacketPlayInArmAnimation() {}
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) {
|
||
|
- this.a = packetdataserializer.readInt();
|
||
|
- this.b = packetdataserializer.readByte();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ this.a = packetdataserializer.readInt();
|
||
|
+ this.b = packetdataserializer.readByte();
|
||
|
+ } else {
|
||
|
+ b = 1;
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInBlockDig.java b/src/main/java/net/minecraft/server/PacketPlayInBlockDig.java
|
||
|
index 3c5ed45..e85ba8c 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInBlockDig.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInBlockDig.java
|
||
|
@@ -12,9 +12,20 @@ public class PacketPlayInBlockDig extends Packet {
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) {
|
||
|
this.e = packetdataserializer.readUnsignedByte();
|
||
|
- this.a = packetdataserializer.readInt();
|
||
|
- this.b = packetdataserializer.readUnsignedByte();
|
||
|
- this.c = packetdataserializer.readInt();
|
||
|
+ // Spigot start
|
||
|
+ if ( packetdataserializer.version < 16)
|
||
|
+ {
|
||
|
+ this.a = packetdataserializer.readInt();
|
||
|
+ this.b = packetdataserializer.readUnsignedByte();
|
||
|
+ this.c = packetdataserializer.readInt();
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ long position = packetdataserializer.readLong();
|
||
|
+ a = packetdataserializer.readPositionX( position );
|
||
|
+ b = packetdataserializer.readPositionY( position );
|
||
|
+ c = packetdataserializer.readPositionZ( position );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
this.face = packetdataserializer.readUnsignedByte();
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java b/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java
|
||
|
index 701b3a2..b9cea4c 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java
|
||
|
@@ -14,9 +14,20 @@ public class PacketPlayInBlockPlace extends Packet {
|
||
|
public PacketPlayInBlockPlace() {}
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) {
|
||
|
- this.a = packetdataserializer.readInt();
|
||
|
- this.b = packetdataserializer.readUnsignedByte();
|
||
|
- this.c = packetdataserializer.readInt();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ this.a = packetdataserializer.readInt();
|
||
|
+ this.b = packetdataserializer.readUnsignedByte();
|
||
|
+ this.c = packetdataserializer.readInt();
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ long position = packetdataserializer.readLong();
|
||
|
+ a = packetdataserializer.readPositionX( position );
|
||
|
+ b = packetdataserializer.readPositionY( position );
|
||
|
+ c = packetdataserializer.readPositionZ( position );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
this.d = packetdataserializer.readUnsignedByte();
|
||
|
this.e = packetdataserializer.c();
|
||
|
this.f = (float) packetdataserializer.readUnsignedByte() / 16.0F;
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInCustomPayload.java b/src/main/java/net/minecraft/server/PacketPlayInCustomPayload.java
|
||
|
index 5df99a4..54ac5b7 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInCustomPayload.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInCustomPayload.java
|
||
|
@@ -12,7 +12,15 @@ public class PacketPlayInCustomPayload extends Packet {
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) throws IOException { // CraftBukkit - added throws
|
||
|
this.tag = packetdataserializer.c(20);
|
||
|
- this.length = packetdataserializer.readShort();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 29 )
|
||
|
+ {
|
||
|
+ this.length = packetdataserializer.readShort();
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ this.length = packetdataserializer.readableBytes();
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
if (this.length > 0 && this.length < 32767) {
|
||
|
this.data = new byte[this.length];
|
||
|
packetdataserializer.readBytes(this.data);
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInEntityAction.java b/src/main/java/net/minecraft/server/PacketPlayInEntityAction.java
|
||
|
index e05fe07..5e4a377 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInEntityAction.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInEntityAction.java
|
||
|
@@ -9,9 +9,19 @@ public class PacketPlayInEntityAction extends Packet {
|
||
|
public PacketPlayInEntityAction() {}
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) {
|
||
|
- this.a = packetdataserializer.readInt();
|
||
|
- this.animation = packetdataserializer.readByte();
|
||
|
- this.c = packetdataserializer.readInt();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ this.a = packetdataserializer.readInt();
|
||
|
+ this.animation = packetdataserializer.readByte();
|
||
|
+ this.c = packetdataserializer.readInt();
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ a = packetdataserializer.a();
|
||
|
+ animation = packetdataserializer.readUnsignedByte() + 1;
|
||
|
+ c = packetdataserializer.a();
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java b/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java
|
||
|
index 6dab3b9..5c88cf1 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java
|
||
|
@@ -11,7 +11,15 @@ public class PacketPlayInKeepAlive extends Packet {
|
||
|
}
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) {
|
||
|
- this.a = packetdataserializer.readInt();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ this.a = packetdataserializer.readInt();
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ this.a = packetdataserializer.a();
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInPosition.java b/src/main/java/net/minecraft/server/PacketPlayInPosition.java
|
||
|
index 63b8e4b..2f3a2ec 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInPosition.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInPosition.java
|
||
|
@@ -8,8 +8,17 @@ public class PacketPlayInPosition extends PacketPlayInFlying {
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) {
|
||
|
this.x = packetdataserializer.readDouble();
|
||
|
- this.y = packetdataserializer.readDouble();
|
||
|
- this.stance = packetdataserializer.readDouble();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if (packetdataserializer.version < 16)
|
||
|
+ {
|
||
|
+ this.y = packetdataserializer.readDouble();
|
||
|
+ this.stance = packetdataserializer.readDouble();
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ this.y = packetdataserializer.readDouble();
|
||
|
+ this.stance = y + 1.62;
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
this.z = packetdataserializer.readDouble();
|
||
|
super.a(packetdataserializer);
|
||
|
}
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInPositionLook.java b/src/main/java/net/minecraft/server/PacketPlayInPositionLook.java
|
||
|
index 9a6b726..0266592 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInPositionLook.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInPositionLook.java
|
||
|
@@ -9,8 +9,17 @@ public class PacketPlayInPositionLook extends PacketPlayInFlying {
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) {
|
||
|
this.x = packetdataserializer.readDouble();
|
||
|
- this.y = packetdataserializer.readDouble();
|
||
|
- this.stance = packetdataserializer.readDouble();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if (packetdataserializer.version < 16)
|
||
|
+ {
|
||
|
+ this.y = packetdataserializer.readDouble();
|
||
|
+ this.stance = packetdataserializer.readDouble();
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ this.y = packetdataserializer.readDouble();
|
||
|
+ this.stance = y + 1.62;
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
this.z = packetdataserializer.readDouble();
|
||
|
this.yaw = packetdataserializer.readFloat();
|
||
|
this.pitch = packetdataserializer.readFloat();
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInSettings.java b/src/main/java/net/minecraft/server/PacketPlayInSettings.java
|
||
|
index 034fd5e..ea51d91 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInSettings.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInSettings.java
|
||
|
@@ -11,6 +11,11 @@ public class PacketPlayInSettings extends Packet {
|
||
|
private EnumDifficulty e;
|
||
|
private boolean f;
|
||
|
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ public int version;
|
||
|
+ public int flags;
|
||
|
+ // Spigot end
|
||
|
+
|
||
|
public PacketPlayInSettings() {}
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
@@ -18,8 +23,17 @@ public class PacketPlayInSettings extends Packet {
|
||
|
this.b = packetdataserializer.readByte();
|
||
|
this.c = EnumChatVisibility.a(packetdataserializer.readByte());
|
||
|
this.d = packetdataserializer.readBoolean();
|
||
|
- this.e = EnumDifficulty.getById(packetdataserializer.readByte());
|
||
|
- this.f = packetdataserializer.readBoolean();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ this.e = EnumDifficulty.getById( packetdataserializer.readByte() );
|
||
|
+ this.f = packetdataserializer.readBoolean();
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ flags = packetdataserializer.readUnsignedByte();
|
||
|
+ }
|
||
|
+ version = packetdataserializer.version;
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInSteerVehicle.java b/src/main/java/net/minecraft/server/PacketPlayInSteerVehicle.java
|
||
|
index d304284..c26bf77 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInSteerVehicle.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInSteerVehicle.java
|
||
|
@@ -12,8 +12,17 @@ public class PacketPlayInSteerVehicle extends Packet {
|
||
|
public void a(PacketDataSerializer packetdataserializer) {
|
||
|
this.a = packetdataserializer.readFloat();
|
||
|
this.b = packetdataserializer.readFloat();
|
||
|
- this.c = packetdataserializer.readBoolean();
|
||
|
- this.d = packetdataserializer.readBoolean();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ this.c = packetdataserializer.readBoolean();
|
||
|
+ this.d = packetdataserializer.readBoolean();
|
||
|
+ } else {
|
||
|
+ int flags = packetdataserializer.readUnsignedByte();
|
||
|
+ c = (flags & 0x1) != 0;
|
||
|
+ d = (flags & 0x2) != 0;
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInTabComplete.java b/src/main/java/net/minecraft/server/PacketPlayInTabComplete.java
|
||
|
index 476638e..5909876 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInTabComplete.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInTabComplete.java
|
||
|
@@ -16,6 +16,14 @@ public class PacketPlayInTabComplete extends Packet {
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
this.a = packetdataserializer.c(32767);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version >= 37 )
|
||
|
+ {
|
||
|
+ if (packetdataserializer.readBoolean()) {
|
||
|
+ long position = packetdataserializer.readLong();
|
||
|
+ }
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInUpdateSign.java b/src/main/java/net/minecraft/server/PacketPlayInUpdateSign.java
|
||
|
index 3458448..f6cf5c8 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInUpdateSign.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInUpdateSign.java
|
||
|
@@ -12,13 +12,35 @@ public class PacketPlayInUpdateSign extends Packet {
|
||
|
public PacketPlayInUpdateSign() {}
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
- this.a = packetdataserializer.readInt();
|
||
|
- this.b = packetdataserializer.readShort();
|
||
|
- this.c = packetdataserializer.readInt();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ this.a = packetdataserializer.readInt();
|
||
|
+ this.b = packetdataserializer.readShort();
|
||
|
+ this.c = packetdataserializer.readInt();
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ long position = packetdataserializer.readLong();
|
||
|
+ a = packetdataserializer.readPositionX( position );
|
||
|
+ b = packetdataserializer.readPositionY( position );
|
||
|
+ c = packetdataserializer.readPositionZ( position );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
this.d = new String[4];
|
||
|
|
||
|
for (int i = 0; i < 4; ++i) {
|
||
|
- this.d[i] = packetdataserializer.c(15);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 21 )
|
||
|
+ {
|
||
|
+ this.d[ i ] = packetdataserializer.c( 15 );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ this.d[ i ] = ChatSerializer.a( packetdataserializer.c( Short.MAX_VALUE ) ).c();
|
||
|
+ }
|
||
|
+ if (this.d[i].length() > 15) {
|
||
|
+ this.d[i] = this.d[i].substring( 0, 15 );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInUseEntity.java b/src/main/java/net/minecraft/server/PacketPlayInUseEntity.java
|
||
|
index 39f3037..3f12453 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInUseEntity.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInUseEntity.java
|
||
|
@@ -8,8 +8,24 @@ public class PacketPlayInUseEntity extends Packet {
|
||
|
public PacketPlayInUseEntity() {}
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) {
|
||
|
- this.a = packetdataserializer.readInt();
|
||
|
- this.action = EnumEntityUseAction.values()[packetdataserializer.readByte() % EnumEntityUseAction.values().length];
|
||
|
+ // Spigot start
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ this.a = packetdataserializer.readInt();
|
||
|
+ this.action = EnumEntityUseAction.values()[packetdataserializer.readByte() % EnumEntityUseAction.values().length];
|
||
|
+ } else {
|
||
|
+ this.a = packetdataserializer.a();
|
||
|
+ int val = packetdataserializer.a();
|
||
|
+ if ( val == 2 ) {
|
||
|
+ packetdataserializer.readFloat();
|
||
|
+ packetdataserializer.readFloat();
|
||
|
+ packetdataserializer.readFloat();
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ this.action = EnumEntityUseAction.values()[ val % EnumEntityUseAction.values().length ];
|
||
|
+ }
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInWindowClick.java b/src/main/java/net/minecraft/server/PacketPlayInWindowClick.java
|
||
|
index 2bba639..87daa8e 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayInWindowClick.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInWindowClick.java
|
||
|
@@ -3,7 +3,7 @@ package net.minecraft.server;
|
||
|
public class PacketPlayInWindowClick extends Packet {
|
||
|
|
||
|
private int a;
|
||
|
- private int slot;
|
||
|
+ public int slot; // Spigot
|
||
|
private int button;
|
||
|
private short d;
|
||
|
private ItemStack item;
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutBed.java b/src/main/java/net/minecraft/server/PacketPlayOutBed.java
|
||
|
index d7954ff..b361f38 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutBed.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutBed.java
|
||
|
@@ -24,10 +24,19 @@ public class PacketPlayOutBed extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
- packetdataserializer.writeInt(this.b);
|
||
|
- packetdataserializer.writeByte(this.c);
|
||
|
- packetdataserializer.writeInt(this.d);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ packetdataserializer.writeInt( this.b );
|
||
|
+ packetdataserializer.writeByte( this.c );
|
||
|
+ packetdataserializer.writeInt( this.d );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( a );
|
||
|
+ packetdataserializer.writePosition( b, c, d );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java b/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java
|
||
|
index cdcdfd6..959d052 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java
|
||
|
@@ -30,9 +30,17 @@ public class PacketPlayOutBlockAction extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
- packetdataserializer.writeShort(this.b);
|
||
|
- packetdataserializer.writeInt(this.c);
|
||
|
+ // Spigot start
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ packetdataserializer.writeShort( this.b );
|
||
|
+ packetdataserializer.writeInt( this.c );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writePosition( a, b, c );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeByte(this.d);
|
||
|
packetdataserializer.writeByte(this.e);
|
||
|
packetdataserializer.b(Block.getId(this.f) & 4095);
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java b/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java
|
||
|
index c93e8bc..1d70129 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java
|
||
|
@@ -28,9 +28,17 @@ public class PacketPlayOutBlockBreakAnimation extends Packet {
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
packetdataserializer.b(this.a);
|
||
|
- packetdataserializer.writeInt(this.b);
|
||
|
- packetdataserializer.writeInt(this.c);
|
||
|
- packetdataserializer.writeInt(this.d);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.b );
|
||
|
+ packetdataserializer.writeInt( this.c );
|
||
|
+ packetdataserializer.writeInt( this.d );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writePosition( b, c, d );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeByte(this.e);
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java b/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java
|
||
|
index 4c622e2..25f45a0 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java
|
||
|
@@ -27,11 +27,22 @@ public class PacketPlayOutBlockChange extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
- packetdataserializer.writeByte(this.b);
|
||
|
- packetdataserializer.writeInt(this.c);
|
||
|
- packetdataserializer.b(Block.getId(this.block));
|
||
|
- packetdataserializer.writeByte(this.data);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 25 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ packetdataserializer.writeByte( this.b );
|
||
|
+ packetdataserializer.writeInt( this.c );
|
||
|
+ packetdataserializer.b( Block.getId( this.block ) );
|
||
|
+ packetdataserializer.writeByte(this.data);
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writePosition( a, b, c );
|
||
|
+ int id = Block.getId( this.block );
|
||
|
+ data = org.spigotmc.SpigotBlockDebreakifier.getCorrectedData( id, data );
|
||
|
+ packetdataserializer.b( (id << 4) | this.data );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutChat.java b/src/main/java/net/minecraft/server/PacketPlayOutChat.java
|
||
|
index f6863bd..fdbdcc6 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutChat.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutChat.java
|
||
|
@@ -27,6 +27,12 @@ public class PacketPlayOutChat extends Packet {
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
packetdataserializer.a(ChatSerializer.a(this.a));
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version >= 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeByte(0);
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutCollect.java b/src/main/java/net/minecraft/server/PacketPlayOutCollect.java
|
||
|
index 0870ac9..8eff9e5 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutCollect.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutCollect.java
|
||
|
@@ -18,8 +18,17 @@ public class PacketPlayOutCollect extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
- packetdataserializer.writeInt(this.b);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ packetdataserializer.writeInt( this.b );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( this.a );
|
||
|
+ packetdataserializer.b( this.b );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutCustomPayload.java b/src/main/java/net/minecraft/server/PacketPlayOutCustomPayload.java
|
||
|
index f2a032e..fda616c 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutCustomPayload.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutCustomPayload.java
|
||
|
@@ -31,8 +31,17 @@ public class PacketPlayOutCustomPayload extends Packet {
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
packetdataserializer.a(this.tag);
|
||
|
- packetdataserializer.writeShort(this.data.length);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 29 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeShort( this.data.length );
|
||
|
+ }
|
||
|
packetdataserializer.writeBytes(this.data);
|
||
|
+ if ( packetdataserializer.version >= 29 && tag.equals( "MC|AdvCdm" ) )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeBoolean( true );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java
|
||
|
index dc4259d..749b32d 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java
|
||
|
@@ -21,7 +21,15 @@ public class PacketPlayOutEntity extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( a );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityDestroy.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityDestroy.java
|
||
|
index 4fa5b82..bef5ae3 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntityDestroy.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityDestroy.java
|
||
|
@@ -19,11 +19,22 @@ public class PacketPlayOutEntityDestroy extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeByte(this.a.length);
|
||
|
-
|
||
|
- for (int i = 0; i < this.a.length; ++i) {
|
||
|
- packetdataserializer.writeInt(this.a[i]);
|
||
|
+ // Spigot start - protocol lib
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeByte( this.a.length );
|
||
|
+
|
||
|
+ for ( int i = 0; i < this.a.length; ++i )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a[ i ] );
|
||
|
+ }
|
||
|
+ } else {
|
||
|
+ packetdataserializer.b( a.length );
|
||
|
+ for ( int i : a ) {
|
||
|
+ packetdataserializer.b( i );
|
||
|
+ }
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityEffect.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityEffect.java
|
||
|
index 97752ca..3693850 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntityEffect.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityEffect.java
|
||
|
@@ -28,10 +28,22 @@ public class PacketPlayOutEntityEffect extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
- packetdataserializer.writeByte(this.b);
|
||
|
- packetdataserializer.writeByte(this.c);
|
||
|
- packetdataserializer.writeShort(this.d);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ packetdataserializer.writeByte( this.b );
|
||
|
+ packetdataserializer.writeByte( this.c );
|
||
|
+ packetdataserializer.writeShort( this.d );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( a );
|
||
|
+ packetdataserializer.writeByte( b );
|
||
|
+ packetdataserializer.writeByte( c );
|
||
|
+ packetdataserializer.b( d );
|
||
|
+ packetdataserializer.writeBoolean( false );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java
|
||
|
index 736e3fd..1ca4f08 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java
|
||
|
@@ -21,7 +21,14 @@ public class PacketPlayOutEntityEquipment extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt(this.a);
|
||
|
+ } else {
|
||
|
+ packetdataserializer.b( this.a );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeShort(this.b);
|
||
|
packetdataserializer.a(this.c);
|
||
|
}
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityHeadRotation.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityHeadRotation.java
|
||
|
index 0204062..2e4abe1 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntityHeadRotation.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityHeadRotation.java
|
||
|
@@ -18,7 +18,15 @@ public class PacketPlayOutEntityHeadRotation extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( a );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeByte(this.b);
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityLook.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityLook.java
|
||
|
index 72243ec..238e346 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntityLook.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityLook.java
|
||
|
@@ -23,6 +23,12 @@ public class PacketPlayOutEntityLook extends PacketPlayOutEntity {
|
||
|
super.b(packetdataserializer);
|
||
|
packetdataserializer.writeByte(this.e);
|
||
|
packetdataserializer.writeByte(this.f);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version >= 22 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeBoolean( true );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public String b() {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java
|
||
|
index a95877f..c937f59 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java
|
||
|
@@ -24,8 +24,16 @@ public class PacketPlayOutEntityMetadata extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
- DataWatcher.a(this.b, packetdataserializer);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( a );
|
||
|
+ }
|
||
|
+ DataWatcher.a(this.b, packetdataserializer, packetdataserializer.version);
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java
|
||
|
index c988bcc..6a0f882 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java
|
||
|
@@ -39,12 +39,26 @@ public class PacketPlayOutEntityTeleport extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
+ // Spigot start - protocol
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( a );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeInt(this.b);
|
||
|
packetdataserializer.writeInt(this.c);
|
||
|
packetdataserializer.writeInt(this.d);
|
||
|
packetdataserializer.writeByte(this.e);
|
||
|
packetdataserializer.writeByte(this.f);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version >= 22 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeBoolean( true );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java
|
||
|
index 46f2543..170f27f 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java
|
||
|
@@ -54,7 +54,15 @@ public class PacketPlayOutEntityVelocity extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( a );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeShort(this.b);
|
||
|
packetdataserializer.writeShort(this.c);
|
||
|
packetdataserializer.writeShort(this.d);
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutExperience.java b/src/main/java/net/minecraft/server/PacketPlayOutExperience.java
|
||
|
index 4038cc8..35788b2 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutExperience.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutExperience.java
|
||
|
@@ -22,8 +22,17 @@ public class PacketPlayOutExperience extends Packet {
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
packetdataserializer.writeFloat(this.a);
|
||
|
- packetdataserializer.writeShort(this.c);
|
||
|
- packetdataserializer.writeShort(this.b);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeShort( this.c );
|
||
|
+ packetdataserializer.writeShort( this.b );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( c );
|
||
|
+ packetdataserializer.b( b );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutKeepAlive.java b/src/main/java/net/minecraft/server/PacketPlayOutKeepAlive.java
|
||
|
index 456532b..e9ff5ee 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutKeepAlive.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutKeepAlive.java
|
||
|
@@ -19,7 +19,15 @@ public class PacketPlayOutKeepAlive extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
+ // Spigot start
|
||
|
+ if ( packetdataserializer.version >= 32 )
|
||
|
+ {
|
||
|
+ packetdataserializer.b( this.a );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public boolean a() {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutLogin.java b/src/main/java/net/minecraft/server/PacketPlayOutLogin.java
|
||
|
index 49e0ff5..9ebf9b5 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutLogin.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutLogin.java
|
||
|
@@ -54,6 +54,13 @@ public class PacketPlayOutLogin extends Packet {
|
||
|
packetdataserializer.writeByte(this.e.a());
|
||
|
packetdataserializer.writeByte(this.f);
|
||
|
packetdataserializer.a(this.g.name());
|
||
|
+
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version >= 29 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeBoolean( false );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMap.java b/src/main/java/net/minecraft/server/PacketPlayOutMap.java
|
||
|
index 5980c2d..1c69026 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutMap.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMap.java
|
||
|
@@ -1,13 +1,19 @@
|
||
|
package net.minecraft.server;
|
||
|
|
||
|
+import java.util.Arrays;
|
||
|
+
|
||
|
public class PacketPlayOutMap extends Packet {
|
||
|
|
||
|
private int a;
|
||
|
private byte[] b;
|
||
|
+ private byte scale; // Spigot - protocol patch
|
||
|
|
||
|
public PacketPlayOutMap() {}
|
||
|
|
||
|
- public PacketPlayOutMap(int i, byte[] abyte) {
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ public PacketPlayOutMap(int i, byte[] abyte, byte scale) {
|
||
|
+ this.scale = scale;
|
||
|
+ // Spigot end
|
||
|
this.a = i;
|
||
|
this.b = abyte;
|
||
|
}
|
||
|
@@ -20,8 +26,35 @@ public class PacketPlayOutMap extends Packet {
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
packetdataserializer.b(this.a);
|
||
|
- packetdataserializer.writeShort(this.b.length);
|
||
|
- packetdataserializer.writeBytes(this.b);
|
||
|
+ if ( packetdataserializer.version < 27 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeShort( this.b.length );
|
||
|
+ packetdataserializer.writeBytes( this.b );
|
||
|
+ } else {
|
||
|
+ packetdataserializer.writeByte( scale );
|
||
|
+ if (b[0] == 1) {
|
||
|
+ int count = (b.length - 1) / 3;
|
||
|
+ packetdataserializer.b( count );
|
||
|
+ for (int i = 0; i < count; i++) {
|
||
|
+ packetdataserializer.writeByte( b[1 + i * 3] );
|
||
|
+ packetdataserializer.writeByte( b[2 + i * 3] );
|
||
|
+ packetdataserializer.writeByte( b[3 + i * 3] );
|
||
|
+ }
|
||
|
+ } else {
|
||
|
+ packetdataserializer.b( 0 );
|
||
|
+ }
|
||
|
+
|
||
|
+ if (b[0] == 0) {
|
||
|
+ packetdataserializer.writeByte( 1 );
|
||
|
+ int rows = (b.length - 3);
|
||
|
+ packetdataserializer.writeByte( rows );
|
||
|
+ packetdataserializer.writeByte( b[1] );
|
||
|
+ packetdataserializer.writeByte( b[2] );
|
||
|
+ a( packetdataserializer, Arrays.copyOfRange(b, 3, rows) );
|
||
|
+ } else {
|
||
|
+ packetdataserializer.writeByte( 0 );
|
||
|
+ }
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||
|
index 7479600..843f4e0 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||
|
@@ -17,28 +17,24 @@ public class PacketPlayOutMapChunk extends Packet {
|
||
|
private int h;
|
||
|
private static byte[] i = new byte[196864];
|
||
|
|
||
|
+ private Chunk chunk; // Spigot
|
||
|
+ private int mask; // Spigot
|
||
|
+
|
||
|
public PacketPlayOutMapChunk() {}
|
||
|
|
||
|
- public PacketPlayOutMapChunk(Chunk chunk, boolean flag, int i) {
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ public PacketPlayOutMapChunk(Chunk chunk, boolean flag, int i, int version) {
|
||
|
+ this.chunk = chunk;
|
||
|
+ this.mask = i;
|
||
|
this.a = chunk.locX;
|
||
|
this.b = chunk.locZ;
|
||
|
this.g = flag;
|
||
|
- ChunkMap chunkmap = a(chunk, flag, i);
|
||
|
- Deflater deflater = new Deflater(4); // Spigot
|
||
|
+ ChunkMap chunkmap = a(chunk, flag, i, version);
|
||
|
|
||
|
this.d = chunkmap.c;
|
||
|
this.c = chunkmap.b;
|
||
|
- chunk.world.spigotConfig.antiXrayInstance.obfuscateSync(chunk.locX, chunk.locZ, i, chunkmap.a, chunk.world); // Spigot
|
||
|
|
||
|
- try {
|
||
|
- this.f = chunkmap.a;
|
||
|
- deflater.setInput(chunkmap.a, 0, chunkmap.a.length);
|
||
|
- deflater.finish();
|
||
|
- this.e = new byte[chunkmap.a.length];
|
||
|
- this.h = deflater.deflate(this.e);
|
||
|
- } finally {
|
||
|
- deflater.end();
|
||
|
- }
|
||
|
+ this.f = chunkmap.a;
|
||
|
}
|
||
|
|
||
|
public static int c() {
|
||
|
@@ -89,9 +85,28 @@ public class PacketPlayOutMapChunk extends Packet {
|
||
|
packetdataserializer.writeInt(this.b);
|
||
|
packetdataserializer.writeBoolean(this.g);
|
||
|
packetdataserializer.writeShort((short) (this.c & '\uffff'));
|
||
|
- packetdataserializer.writeShort((short) (this.d & '\uffff'));
|
||
|
- packetdataserializer.writeInt(this.h);
|
||
|
- packetdataserializer.writeBytes(this.e, 0, this.h);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 27 )
|
||
|
+ {
|
||
|
+ chunk.world.spigotConfig.antiXrayInstance.obfuscate(chunk.locX, chunk.locZ, mask, this.f, chunk.world, false); // Spigot
|
||
|
+ Deflater deflater = new Deflater(4); // Spigot
|
||
|
+ try {
|
||
|
+ deflater.setInput(this.f, 0, this.f.length);
|
||
|
+ deflater.finish();
|
||
|
+ this.e = new byte[this.f.length];
|
||
|
+ this.h = deflater.deflate(this.e);
|
||
|
+ } finally {
|
||
|
+ deflater.end();
|
||
|
+ }
|
||
|
+ packetdataserializer.writeShort( (short) ( this.d & '\uffff' ) );
|
||
|
+ packetdataserializer.writeInt( this.h );
|
||
|
+ packetdataserializer.writeBytes( this.e, 0, this.h );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ chunk.world.spigotConfig.antiXrayInstance.obfuscate(chunk.locX, chunk.locZ, mask, this.f, chunk.world, true); // Spigot
|
||
|
+ a( packetdataserializer, this.f );
|
||
|
+ }
|
||
|
+ // Spigot end - protocol patch
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
@@ -102,7 +117,8 @@ public class PacketPlayOutMapChunk extends Packet {
|
||
|
return String.format("x=%d, z=%d, full=%b, sects=%d, add=%d, size=%d", new Object[] { Integer.valueOf(this.a), Integer.valueOf(this.b), Boolean.valueOf(this.g), Integer.valueOf(this.c), Integer.valueOf(this.d), Integer.valueOf(this.h)});
|
||
|
}
|
||
|
|
||
|
- public static ChunkMap a(Chunk chunk, boolean flag, int i) {
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ public static ChunkMap a(Chunk chunk, boolean flag, int i, int version) {
|
||
|
int j = 0;
|
||
|
ChunkSection[] achunksection = chunk.getSections();
|
||
|
int k = 0;
|
||
|
@@ -125,22 +141,59 @@ public class PacketPlayOutMapChunk extends Packet {
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- for (l = 0; l < achunksection.length; ++l) {
|
||
|
- if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && (i & 1 << l) != 0) {
|
||
|
- byte[] abyte1 = achunksection[l].getIdArray();
|
||
|
+ if ( version < 24 )
|
||
|
+ {
|
||
|
+ for ( l = 0; l < achunksection.length; ++l )
|
||
|
+ {
|
||
|
+ if ( achunksection[ l ] != null && ( !flag || !achunksection[ l ].isEmpty() ) && ( i & 1 << l ) != 0 )
|
||
|
+ {
|
||
|
+ byte[] abyte1 = achunksection[ l ].getIdArray();
|
||
|
|
||
|
- System.arraycopy(abyte1, 0, abyte, j, abyte1.length);
|
||
|
- j += abyte1.length;
|
||
|
+ System.arraycopy( abyte1, 0, abyte, j, abyte1.length );
|
||
|
+ j += abyte1.length;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ } else {
|
||
|
+ for ( l = 0; l < achunksection.length; ++l )
|
||
|
+ {
|
||
|
+ if ( achunksection[ l ] != null && ( !flag || !achunksection[ l ].isEmpty() ) && ( i & 1 << l ) != 0 )
|
||
|
+ {
|
||
|
+ byte[] abyte1 = achunksection[ l ].getIdArray();
|
||
|
+ NibbleArray nibblearray = achunksection[ l ].getDataArray();
|
||
|
+ for ( int ind = 0; ind < abyte1.length; ind++ )
|
||
|
+ {
|
||
|
+ int id = abyte1[ ind ] & 0xFF;
|
||
|
+ int px = ind & 0xF;
|
||
|
+ int py = ( ind >> 8 ) & 0xF;
|
||
|
+ int pz = ( ind >> 4 ) & 0xF;
|
||
|
+ int data = nibblearray.a( px, py, pz );
|
||
|
+ if ( id == 90 && data == 0 )
|
||
|
+ {
|
||
|
+ Blocks.PORTAL.updateShape( chunk.world, ( chunk.locX << 4 ) + px, ( l << 4 ) + py, ( chunk.locZ << 4 ) + pz );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ data = org.spigotmc.SpigotBlockDebreakifier.getCorrectedData( id, data );
|
||
|
+ }
|
||
|
+ char val = (char) ( id << 4 | data );
|
||
|
+ abyte[ j++ ] = (byte) ( val & 0xFF );
|
||
|
+ abyte[ j++ ] = (byte) ( ( val >> 8 ) & 0xFF );
|
||
|
+ }
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
NibbleArray nibblearray;
|
||
|
|
||
|
- for (l = 0; l < achunksection.length; ++l) {
|
||
|
- if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && (i & 1 << l) != 0) {
|
||
|
- nibblearray = achunksection[l].getDataArray();
|
||
|
- System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length);
|
||
|
- j += nibblearray.a.length;
|
||
|
+ if ( version < 24 )
|
||
|
+ {
|
||
|
+ for ( l = 0; l < achunksection.length; ++l )
|
||
|
+ {
|
||
|
+ if ( achunksection[ l ] != null && ( !flag || !achunksection[ l ].isEmpty() ) && ( i & 1 << l ) != 0 )
|
||
|
+ {
|
||
|
+ nibblearray = achunksection[ l ].getDataArray();
|
||
|
+ System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length);
|
||
|
+ j += nibblearray.a.length;
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@@ -162,7 +215,7 @@ public class PacketPlayOutMapChunk extends Packet {
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- if (k > 0) {
|
||
|
+ if (k > 0 && version < 24) {
|
||
|
for (l = 0; l < achunksection.length; ++l) {
|
||
|
if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && achunksection[l].getExtendedIdArray() != null && (i & 1 << l) != 0) {
|
||
|
nibblearray = achunksection[l].getExtendedIdArray();
|
||
|
@@ -183,7 +236,9 @@ public class PacketPlayOutMapChunk extends Packet {
|
||
|
System.arraycopy(abyte, 0, chunkmap.a, 0, j);
|
||
|
return chunkmap;
|
||
|
}
|
||
|
+ // Spigot end - protocol patch
|
||
|
|
||
|
+ @Override
|
||
|
public void handle(PacketListener packetlistener) {
|
||
|
this.a((PacketPlayOutListener) packetlistener);
|
||
|
}
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||
|
index 30bf8a7..b9db43c 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||
|
@@ -30,7 +30,7 @@ public class PacketPlayOutMapChunkBulk extends Packet {
|
||
|
|
||
|
public PacketPlayOutMapChunkBulk() {}
|
||
|
|
||
|
- public PacketPlayOutMapChunkBulk(List list) {
|
||
|
+ public PacketPlayOutMapChunkBulk(List list, int version) {
|
||
|
int i = list.size();
|
||
|
|
||
|
this.a = new int[i];
|
||
|
@@ -43,7 +43,7 @@ public class PacketPlayOutMapChunkBulk extends Packet {
|
||
|
|
||
|
for (int k = 0; k < i; ++k) {
|
||
|
Chunk chunk = (Chunk) list.get(k);
|
||
|
- ChunkMap chunkmap = PacketPlayOutMapChunk.a(chunk, true, '\uffff');
|
||
|
+ ChunkMap chunkmap = PacketPlayOutMapChunk.a(chunk, true, '\uffff', version);
|
||
|
|
||
|
// Spigot start
|
||
|
world = chunk.world;
|
||
|
@@ -89,7 +89,7 @@ public class PacketPlayOutMapChunkBulk extends Packet {
|
||
|
int finalBufferSize = 0;
|
||
|
// Obfuscate all sections
|
||
|
for (int i = 0; i < a.length; i++) {
|
||
|
- world.spigotConfig.antiXrayInstance.obfuscate(a[i], b[i], c[i], inflatedBuffers[i], world);
|
||
|
+ world.spigotConfig.antiXrayInstance.obfuscate(a[i], b[i], c[i], inflatedBuffers[i], world, false);
|
||
|
finalBufferSize += inflatedBuffers[i].length;
|
||
|
}
|
||
|
|
||
|
@@ -174,17 +174,34 @@ public class PacketPlayOutMapChunkBulk extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException { // CraftBukkit - throws IOException
|
||
|
- compress(); // CraftBukkit
|
||
|
- packetdataserializer.writeShort(this.a.length);
|
||
|
- packetdataserializer.writeInt(this.size);
|
||
|
- packetdataserializer.writeBoolean(this.h);
|
||
|
- packetdataserializer.writeBytes(this.buffer, 0, this.size);
|
||
|
-
|
||
|
- for (int i = 0; i < this.a.length; ++i) {
|
||
|
- packetdataserializer.writeInt(this.a[i]);
|
||
|
- packetdataserializer.writeInt(this.b[i]);
|
||
|
- packetdataserializer.writeShort((short) (this.c[i] & '\uffff'));
|
||
|
- packetdataserializer.writeShort((short) (this.d[i] & '\uffff'));
|
||
|
+ if ( packetdataserializer.version < 27 )
|
||
|
+ {
|
||
|
+ compress(); // CraftBukkit
|
||
|
+ packetdataserializer.writeShort( this.a.length );
|
||
|
+ packetdataserializer.writeInt( this.size );
|
||
|
+ packetdataserializer.writeBoolean( this.h );
|
||
|
+ packetdataserializer.writeBytes( this.buffer, 0, this.size );
|
||
|
+
|
||
|
+ for (int i = 0; i < this.a.length; ++i) {
|
||
|
+ packetdataserializer.writeInt(this.a[i]);
|
||
|
+ packetdataserializer.writeInt(this.b[i]);
|
||
|
+ packetdataserializer.writeShort((short) (this.c[i] & '\uffff'));
|
||
|
+ packetdataserializer.writeShort( (short) ( this.d[i] & '\uffff' ) );
|
||
|
+ }
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writeBoolean( this.h );
|
||
|
+ packetdataserializer.b( this.a.length );
|
||
|
+
|
||
|
+ for (int i = 0; i < this.a.length; ++i) {
|
||
|
+ packetdataserializer.writeInt(this.a[i]);
|
||
|
+ packetdataserializer.writeInt(this.b[i]);
|
||
|
+ packetdataserializer.writeShort((short) (this.c[i] & '\uffff'));
|
||
|
+ }
|
||
|
+ for (int i = 0; i < this.a.length; ++i) {
|
||
|
+ world.spigotConfig.antiXrayInstance.obfuscate(a[i], b[i], c[i], inflatedBuffers[i], world, true);
|
||
|
+ packetdataserializer.writeBytes( inflatedBuffers[i] );
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java b/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java
|
||
|
index 0a12db5..0e3419f 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java
|
||
|
@@ -13,26 +13,44 @@ public class PacketPlayOutMultiBlockChange extends Packet {
|
||
|
private ChunkCoordIntPair b;
|
||
|
private byte[] c;
|
||
|
private int d;
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ private short[] ashort;
|
||
|
+ private int[] blocks;
|
||
|
+ private Chunk chunk;
|
||
|
+ // Spigot end
|
||
|
|
||
|
public PacketPlayOutMultiBlockChange() {}
|
||
|
|
||
|
public PacketPlayOutMultiBlockChange(int i, short[] ashort, Chunk chunk) {
|
||
|
+ // Spigot start
|
||
|
+ this.ashort = ashort;
|
||
|
+ this.chunk = chunk;
|
||
|
+ // Spigot end
|
||
|
this.b = new ChunkCoordIntPair(chunk.locX, chunk.locZ);
|
||
|
this.d = i;
|
||
|
int j = 4 * i;
|
||
|
|
||
|
- try {
|
||
|
- ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(j);
|
||
|
- DataOutputStream dataoutputstream = new DataOutputStream(bytearrayoutputstream);
|
||
|
+ try
|
||
|
+ {
|
||
|
+ ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream( j );
|
||
|
+ DataOutputStream dataoutputstream = new DataOutputStream( bytearrayoutputstream );
|
||
|
|
||
|
+ // Spigot start
|
||
|
+ blocks = new int[i];
|
||
|
for (int k = 0; k < i; ++k) {
|
||
|
int l = ashort[k] >> 12 & 15;
|
||
|
int i1 = ashort[k] >> 8 & 15;
|
||
|
int j1 = ashort[k] & 255;
|
||
|
|
||
|
dataoutputstream.writeShort(ashort[k]);
|
||
|
- dataoutputstream.writeShort((short) ((Block.getId(chunk.getType(l, j1, i1)) & 4095) << 4 | chunk.getData(l, j1, i1) & 15));
|
||
|
+ int blockId = Block.getId( chunk.getType( l, j1, i1 ) );
|
||
|
+ int data = chunk.getData( l, j1, i1 );
|
||
|
+ data = org.spigotmc.SpigotBlockDebreakifier.getCorrectedData( blockId, data );
|
||
|
+ int id = ( blockId & 4095 ) << 4 | data & 15;
|
||
|
+ dataoutputstream.writeShort((short) id);
|
||
|
+ blocks[k] = id;
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
|
||
|
this.c = bytearrayoutputstream.toByteArray();
|
||
|
if (this.c.length != j) {
|
||
|
@@ -56,15 +74,31 @@ public class PacketPlayOutMultiBlockChange extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.b.x);
|
||
|
- packetdataserializer.writeInt(this.b.z);
|
||
|
- packetdataserializer.writeShort((short) this.d);
|
||
|
- if (this.c != null) {
|
||
|
- packetdataserializer.writeInt(this.c.length);
|
||
|
- packetdataserializer.writeBytes(this.c);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if (packetdataserializer.version < 25)
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.b.x );
|
||
|
+ packetdataserializer.writeInt( this.b.z );
|
||
|
+ packetdataserializer.writeShort( (short) this.d );
|
||
|
+ if ( this.c != null )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.c.length );
|
||
|
+ packetdataserializer.writeBytes( this.c );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( 0 );
|
||
|
+ }
|
||
|
} else {
|
||
|
- packetdataserializer.writeInt(0);
|
||
|
+ packetdataserializer.writeInt( this.b.x );
|
||
|
+ packetdataserializer.writeInt( this.b.z );
|
||
|
+ packetdataserializer.b( this.d );
|
||
|
+ for ( int i = 0; i < d; i++ )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeShort( ashort[ i ] );
|
||
|
+ packetdataserializer.b( blocks[ i ] );
|
||
|
+ }
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java b/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java
|
||
|
index ccd4cec..ecc28be 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java
|
||
|
@@ -64,8 +64,10 @@ public class PacketPlayOutNamedEntitySpawn extends Packet {
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException { // CraftBukkit - added throws
|
||
|
packetdataserializer.b(this.a);
|
||
|
- UUID uuid = this.b.getId();
|
||
|
|
||
|
+ UUID uuid = this.b.getId();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if (packetdataserializer.version < 20) {
|
||
|
packetdataserializer.a( uuid == null ? "" : ( ( packetdataserializer.version >= 5 ) ? uuid.toString() : uuid.toString().replaceAll( "-", "" ) ) ); // Spigot
|
||
|
packetdataserializer.a(this.b.getName().length() > 16 ? this.b.getName().substring(0, 16) : this.b.getName()); // CraftBukkit - Limit name length to 16 characters
|
||
|
if (packetdataserializer.version >= 5 ) { // Spigot
|
||
|
@@ -79,7 +81,12 @@ public class PacketPlayOutNamedEntitySpawn extends Packet {
|
||
|
packetdataserializer.a(property.getValue());
|
||
|
packetdataserializer.a(property.getSignature());
|
||
|
}
|
||
|
- } // Spigot
|
||
|
+ }
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writeUUID( uuid );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
|
||
|
packetdataserializer.writeInt(this.c);
|
||
|
packetdataserializer.writeInt(this.d);
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutOpenSignEditor.java b/src/main/java/net/minecraft/server/PacketPlayOutOpenSignEditor.java
|
||
|
index d67a364..052da02 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutOpenSignEditor.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutOpenSignEditor.java
|
||
|
@@ -25,9 +25,17 @@ public class PacketPlayOutOpenSignEditor extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
- packetdataserializer.writeInt(this.b);
|
||
|
- packetdataserializer.writeInt(this.c);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ packetdataserializer.writeInt( this.b );
|
||
|
+ packetdataserializer.writeInt( this.c );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writePosition( a, b, c );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void handle(PacketListener packetlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java b/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java
|
||
|
index 860592d..8e9ea33 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java
|
||
|
@@ -1,5 +1,7 @@
|
||
|
package net.minecraft.server;
|
||
|
|
||
|
+import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||
|
+
|
||
|
import java.io.IOException;
|
||
|
|
||
|
public class PacketPlayOutOpenWindow extends Packet {
|
||
|
@@ -43,15 +45,68 @@ public class PacketPlayOutOpenWindow extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
- packetdataserializer.writeByte(this.a);
|
||
|
- packetdataserializer.writeByte(this.b);
|
||
|
- packetdataserializer.a(this.c);
|
||
|
- packetdataserializer.writeByte(this.d);
|
||
|
- packetdataserializer.writeBoolean(this.e);
|
||
|
- if (this.b == 11) {
|
||
|
- packetdataserializer.writeInt(this.f);
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeByte( this.a );
|
||
|
+ packetdataserializer.writeByte( this.b );
|
||
|
+ packetdataserializer.a( this.c );
|
||
|
+ packetdataserializer.writeByte( this.d );
|
||
|
+ packetdataserializer.writeBoolean( this.e );
|
||
|
+ if ( this.b == 11 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.f );
|
||
|
+ }
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writeByte( a );
|
||
|
+ packetdataserializer.a( getInventoryString( b ) );
|
||
|
+ if ( e )
|
||
|
+ {
|
||
|
+ packetdataserializer.a( ChatSerializer.a( CraftChatMessage.fromString( c )[ 0 ] ) );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.a( ChatSerializer.a( new ChatMessage( c ) ) );
|
||
|
+ }
|
||
|
+ packetdataserializer.writeByte( d );
|
||
|
+ if ( this.b == 11 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.f );
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ private String getInventoryString(int b)
|
||
|
+ {
|
||
|
+ switch ( b ) {
|
||
|
+ case 0:
|
||
|
+ return "minecraft:chest";
|
||
|
+ case 1:
|
||
|
+ return "minecraft:crafting_table";
|
||
|
+ case 2:
|
||
|
+ return "minecraft:furnace";
|
||
|
+ case 3:
|
||
|
+ return "minecraft:dispenser";
|
||
|
+ case 4:
|
||
|
+ return "minecraft:enchanting_table";
|
||
|
+ case 5:
|
||
|
+ return "minecraft:brewing_stand";
|
||
|
+ case 6:
|
||
|
+ return "minecraft:villager";
|
||
|
+ case 7:
|
||
|
+ return "minecraft:beacon";
|
||
|
+ case 8:
|
||
|
+ return "minecraft:anvil";
|
||
|
+ case 9:
|
||
|
+ return "minecraft:hopper";
|
||
|
+ case 10:
|
||
|
+ return "minecraft:dropper";
|
||
|
+ case 11:
|
||
|
+ return "EntityHorse";
|
||
|
}
|
||
|
+ throw new IllegalArgumentException( "Unknown type " + b );
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
|
||
|
public void handle(PacketListener packetlistener) {
|
||
|
this.a((PacketPlayOutListener) packetlistener);
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java b/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java
|
||
|
index 7cae01e..9585615 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java
|
||
|
@@ -1,31 +1,138 @@
|
||
|
package net.minecraft.server;
|
||
|
|
||
|
import java.io.IOException;
|
||
|
+// Spigot start - protocol patch
|
||
|
+import net.minecraft.util.com.mojang.authlib.GameProfile;
|
||
|
+import net.minecraft.util.com.mojang.authlib.properties.Property;
|
||
|
+import net.minecraft.util.com.mojang.authlib.properties.PropertyMap;
|
||
|
+import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||
|
|
||
|
public class PacketPlayOutPlayerInfo extends Packet {
|
||
|
|
||
|
- private String a;
|
||
|
- private boolean b;
|
||
|
- private int c;
|
||
|
+ private static final int ADD_PLAYER = 0;
|
||
|
+ private static final int UPDATE_GAMEMODE = 1;
|
||
|
+ private static final int UPDATE_LATENCY = 2;
|
||
|
+ private static final int UPDATE_DISPLAY_NAME = 3;
|
||
|
+ private static final int REMOVE_PLAYER = 4;
|
||
|
+
|
||
|
+ private int action;
|
||
|
+ // private int length; We don't batch (yet)
|
||
|
+ private GameProfile player;
|
||
|
+
|
||
|
+ private int gamemode;
|
||
|
+ private int ping;
|
||
|
+ private String username;
|
||
|
|
||
|
public PacketPlayOutPlayerInfo() {}
|
||
|
|
||
|
+ /* removed to force breaking
|
||
|
public PacketPlayOutPlayerInfo(String s, boolean flag, int i) {
|
||
|
this.a = s;
|
||
|
this.b = flag;
|
||
|
this.c = i;
|
||
|
}
|
||
|
+ */
|
||
|
+
|
||
|
+ public static PacketPlayOutPlayerInfo addPlayer(EntityPlayer player) {
|
||
|
+ PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo();
|
||
|
+ packet.action = ADD_PLAYER;
|
||
|
+ packet.username = player.listName;
|
||
|
+ packet.player = player.getProfile();
|
||
|
+ packet.ping = player.ping;
|
||
|
+ packet.gamemode = player.playerInteractManager.getGameMode().getId();
|
||
|
+ return packet;
|
||
|
+ }
|
||
|
+
|
||
|
+ public static PacketPlayOutPlayerInfo updatePing(EntityPlayer player) {
|
||
|
+ PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo();
|
||
|
+ packet.action = UPDATE_LATENCY;
|
||
|
+ packet.username = player.listName;
|
||
|
+ packet.player = player.getProfile();
|
||
|
+ packet.ping = player.ping;
|
||
|
+ return packet;
|
||
|
+ }
|
||
|
+
|
||
|
+ public static PacketPlayOutPlayerInfo updateGamemode(EntityPlayer player) {
|
||
|
+ PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo();
|
||
|
+ packet.action = UPDATE_LATENCY;
|
||
|
+ packet.username = player.listName;
|
||
|
+ packet.player = player.getProfile();
|
||
|
+ packet.gamemode = player.playerInteractManager.getGameMode().getId();
|
||
|
+ return packet;
|
||
|
+ }
|
||
|
+
|
||
|
+ public static PacketPlayOutPlayerInfo updateDisplayName(EntityPlayer player) {
|
||
|
+ PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo();
|
||
|
+ packet.action = UPDATE_DISPLAY_NAME;
|
||
|
+ packet.username = player.listName;
|
||
|
+ packet.player = player.getProfile();
|
||
|
+ return packet;
|
||
|
+ }
|
||
|
+
|
||
|
+ public static PacketPlayOutPlayerInfo removePlayer(EntityPlayer player) {
|
||
|
+ PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo();
|
||
|
+ packet.action = REMOVE_PLAYER;
|
||
|
+ packet.username = player.listName;
|
||
|
+ packet.player = player.getProfile();
|
||
|
+ return packet;
|
||
|
+ }
|
||
|
|
||
|
public void a(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
- this.a = packetdataserializer.c(16);
|
||
|
- this.b = packetdataserializer.readBoolean();
|
||
|
- this.c = packetdataserializer.readShort();
|
||
|
+ // Not needed
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
- packetdataserializer.a(this.a);
|
||
|
- packetdataserializer.writeBoolean(this.b);
|
||
|
- packetdataserializer.writeShort(this.c);
|
||
|
+ if ( packetdataserializer.version >= 20 )
|
||
|
+ {
|
||
|
+ packetdataserializer.b( action );
|
||
|
+ packetdataserializer.b( 1 );
|
||
|
+ packetdataserializer.writeUUID( player.getId() );
|
||
|
+ switch ( action )
|
||
|
+ {
|
||
|
+ case ADD_PLAYER:
|
||
|
+ packetdataserializer.a( player.getName() );
|
||
|
+ PropertyMap properties = player.getProperties();
|
||
|
+ packetdataserializer.b( properties.size() );
|
||
|
+ for ( Property property : properties.values() )
|
||
|
+ {
|
||
|
+ packetdataserializer.a( property.getName() );
|
||
|
+ packetdataserializer.a( property.getValue() );
|
||
|
+ packetdataserializer.writeBoolean( property.hasSignature() );
|
||
|
+ if ( property.hasSignature() )
|
||
|
+ {
|
||
|
+ packetdataserializer.a( property.getSignature() );
|
||
|
+ }
|
||
|
+ }
|
||
|
+ packetdataserializer.b( gamemode );
|
||
|
+ packetdataserializer.b( ping );
|
||
|
+ packetdataserializer.writeBoolean( username != null );
|
||
|
+ if ( username != null )
|
||
|
+ {
|
||
|
+ packetdataserializer.a( ChatSerializer.a( CraftChatMessage.fromString( username )[0] ) );
|
||
|
+ }
|
||
|
+ break;
|
||
|
+ case UPDATE_GAMEMODE:
|
||
|
+ packetdataserializer.b( gamemode );
|
||
|
+ break;
|
||
|
+ case UPDATE_LATENCY:
|
||
|
+ packetdataserializer.b( ping );
|
||
|
+ break;
|
||
|
+ case UPDATE_DISPLAY_NAME:
|
||
|
+ packetdataserializer.writeBoolean( username != null );
|
||
|
+ if ( username != null )
|
||
|
+ {
|
||
|
+ packetdataserializer.a( ChatSerializer.a( CraftChatMessage.fromString( username )[0] ) );
|
||
|
+ }
|
||
|
+ break;
|
||
|
+ case REMOVE_PLAYER:
|
||
|
+ break;
|
||
|
+
|
||
|
+ }
|
||
|
+ } else {
|
||
|
+ packetdataserializer.a( username );
|
||
|
+ packetdataserializer.writeBoolean( action != REMOVE_PLAYER );
|
||
|
+ packetdataserializer.writeShort( ping );
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
@@ -36,3 +143,4 @@ public class PacketPlayOutPlayerInfo extends Packet {
|
||
|
this.a((PacketPlayOutListener) packetlistener);
|
||
|
}
|
||
|
}
|
||
|
+// Spigot end
|
||
|
\ No newline at end of file
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutPosition.java b/src/main/java/net/minecraft/server/PacketPlayOutPosition.java
|
||
|
index f2234f0..b3c0ccf 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutPosition.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutPosition.java
|
||
|
@@ -30,12 +30,20 @@ public class PacketPlayOutPosition extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
+ // Spigot start - protocol patch
|
||
|
packetdataserializer.writeDouble(this.a);
|
||
|
- packetdataserializer.writeDouble(this.b);
|
||
|
+ packetdataserializer.writeDouble(this.b - (packetdataserializer.version >= 16 ? 1.62 : 0));
|
||
|
packetdataserializer.writeDouble(this.c);
|
||
|
packetdataserializer.writeFloat(this.d);
|
||
|
packetdataserializer.writeFloat(this.e);
|
||
|
- packetdataserializer.writeBoolean(this.f);
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeBoolean( this.f );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writeByte( 0 );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutRelEntityMove.java b/src/main/java/net/minecraft/server/PacketPlayOutRelEntityMove.java
|
||
|
index d83ae7b..7394b72 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutRelEntityMove.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutRelEntityMove.java
|
||
|
@@ -23,6 +23,12 @@ public class PacketPlayOutRelEntityMove extends PacketPlayOutEntity {
|
||
|
packetdataserializer.writeByte(this.b);
|
||
|
packetdataserializer.writeByte(this.c);
|
||
|
packetdataserializer.writeByte(this.d);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version >= 22 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeBoolean( true );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public String b() {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutRelEntityMoveLook.java b/src/main/java/net/minecraft/server/PacketPlayOutRelEntityMoveLook.java
|
||
|
index 9155c96..165320c 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutRelEntityMoveLook.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutRelEntityMoveLook.java
|
||
|
@@ -32,6 +32,12 @@ public class PacketPlayOutRelEntityMoveLook extends PacketPlayOutEntity {
|
||
|
packetdataserializer.writeByte(this.d);
|
||
|
packetdataserializer.writeByte(this.e);
|
||
|
packetdataserializer.writeByte(this.f);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version >= 22 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeBoolean( true );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public String b() {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutRemoveEntityEffect.java b/src/main/java/net/minecraft/server/PacketPlayOutRemoveEntityEffect.java
|
||
|
index 9041f82..f2c38c5 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutRemoveEntityEffect.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutRemoveEntityEffect.java
|
||
|
@@ -18,7 +18,14 @@ public class PacketPlayOutRemoveEntityEffect extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ } else {
|
||
|
+ packetdataserializer.b( a );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeByte(this.b);
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutScoreboardObjective.java b/src/main/java/net/minecraft/server/PacketPlayOutScoreboardObjective.java
|
||
|
index 7403dbd..a976436 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutScoreboardObjective.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutScoreboardObjective.java
|
||
|
@@ -23,9 +23,22 @@ public class PacketPlayOutScoreboardObjective extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
- packetdataserializer.a(this.a);
|
||
|
- packetdataserializer.a(this.b);
|
||
|
- packetdataserializer.writeByte(this.c);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.a( this.a );
|
||
|
+ packetdataserializer.a( this.b );
|
||
|
+ packetdataserializer.writeByte( this.c );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.a( a );
|
||
|
+ packetdataserializer.writeByte( c );
|
||
|
+ if ( c == 0 || c == 2 ) {
|
||
|
+ packetdataserializer.a( b );
|
||
|
+ packetdataserializer.a( "hearts" );
|
||
|
+ }
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutScoreboardScore.java b/src/main/java/net/minecraft/server/PacketPlayOutScoreboardScore.java
|
||
|
index f50851b..446e308 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutScoreboardScore.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutScoreboardScore.java
|
||
|
@@ -35,12 +35,25 @@ public class PacketPlayOutScoreboardScore extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
- packetdataserializer.a(this.a);
|
||
|
- packetdataserializer.writeByte(this.d);
|
||
|
- if (this.d != 1) {
|
||
|
- packetdataserializer.a(this.b);
|
||
|
- packetdataserializer.writeInt(this.c);
|
||
|
+ packetdataserializer.a( this.a );
|
||
|
+ packetdataserializer.writeByte( this.d );
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ if ( this.d != 1 )
|
||
|
+ {
|
||
|
+ packetdataserializer.a( this.b );
|
||
|
+ packetdataserializer.writeInt( this.c );
|
||
|
+ }
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.a( this.b );
|
||
|
+ if ( this.d != 1 )
|
||
|
+ {
|
||
|
+ packetdataserializer.b( c );
|
||
|
+ }
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java b/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java
|
||
|
index e8f0971..abba46c 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java
|
||
|
@@ -71,10 +71,25 @@ public class PacketPlayOutScoreboardTeam extends Packet {
|
||
|
packetdataserializer.a(this.c);
|
||
|
packetdataserializer.a(this.d);
|
||
|
packetdataserializer.writeByte(this.g);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version >= 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.a( "always" );
|
||
|
+ packetdataserializer.writeByte( EnumChatFormat.WHITE.ordinal() );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
if (this.f == 0 || this.f == 3 || this.f == 4) {
|
||
|
- packetdataserializer.writeShort(this.e.size());
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeShort( this.e.size() );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( e.size() );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
Iterator iterator = this.e.iterator();
|
||
|
|
||
|
while (iterator.hasNext()) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSetSlot.java b/src/main/java/net/minecraft/server/PacketPlayOutSetSlot.java
|
||
|
index 5aeb4e3..8893b61 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutSetSlot.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutSetSlot.java
|
||
|
@@ -2,8 +2,8 @@ package net.minecraft.server;
|
||
|
|
||
|
public class PacketPlayOutSetSlot extends Packet {
|
||
|
|
||
|
- private int a;
|
||
|
- private int b;
|
||
|
+ public int a; // Spigot
|
||
|
+ public int b; // Spigot
|
||
|
private ItemStack c;
|
||
|
|
||
|
public PacketPlayOutSetSlot() {}
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java
|
||
|
index 17302e0..dcf1204 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java
|
||
|
@@ -84,6 +84,39 @@ public class PacketPlayOutSpawnEntity extends Packet {
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
packetdataserializer.b(this.a);
|
||
|
packetdataserializer.writeByte(this.j);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( j == 71 && packetdataserializer.version >= 28 )
|
||
|
+ {
|
||
|
+ // North: 0 256
|
||
|
+ // West: 64 192
|
||
|
+ // South: 128 128
|
||
|
+ // East: 192 320
|
||
|
+ switch ( k ) {
|
||
|
+ case 0:
|
||
|
+ d += 32;
|
||
|
+ i = 0;
|
||
|
+ break;
|
||
|
+ case 1:
|
||
|
+ b -= 32;
|
||
|
+ i = 64;
|
||
|
+ break;
|
||
|
+ case 2:
|
||
|
+ d -= 32;
|
||
|
+ i = 128;
|
||
|
+ break;
|
||
|
+ case 3:
|
||
|
+ b += 32;
|
||
|
+ i = 192;
|
||
|
+ break;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ if ( j == 70 && packetdataserializer.version >= 36 )
|
||
|
+ {
|
||
|
+ int id = k & 0xFFFF;
|
||
|
+ int data = k >> 16;
|
||
|
+ k = id | ( data << 12 );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeInt(this.b);
|
||
|
packetdataserializer.writeInt(this.c);
|
||
|
packetdataserializer.writeInt(this.d);
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java
|
||
|
index 435fe8d..98b4d97 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java
|
||
|
@@ -91,7 +91,7 @@ public class PacketPlayOutSpawnEntityLiving extends Packet {
|
||
|
packetdataserializer.writeShort(this.f);
|
||
|
packetdataserializer.writeShort(this.g);
|
||
|
packetdataserializer.writeShort(this.h);
|
||
|
- this.l.a(packetdataserializer);
|
||
|
+ this.l.a(packetdataserializer, packetdataserializer.version); // Spigot
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityPainting.java b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityPainting.java
|
||
|
index 2c86b81..47efb16 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityPainting.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityPainting.java
|
||
|
@@ -34,10 +34,40 @@ public class PacketPlayOutSpawnEntityPainting extends Packet {
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
packetdataserializer.b(this.a);
|
||
|
packetdataserializer.a(this.f);
|
||
|
- packetdataserializer.writeInt(this.b);
|
||
|
- packetdataserializer.writeInt(this.c);
|
||
|
- packetdataserializer.writeInt(this.d);
|
||
|
- packetdataserializer.writeInt(this.e);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version >= 28 )
|
||
|
+ {
|
||
|
+ // North: 0 256
|
||
|
+ // West: 64 192
|
||
|
+ // South: 128 128
|
||
|
+ // East: 192 320
|
||
|
+ switch ( e ) {
|
||
|
+ case 0:
|
||
|
+ d += 1;
|
||
|
+ break;
|
||
|
+ case 1:
|
||
|
+ b -= 1;
|
||
|
+ break;
|
||
|
+ case 2:
|
||
|
+ d -= 1;
|
||
|
+ break;
|
||
|
+ case 3:
|
||
|
+ b += 1;
|
||
|
+ break;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.b );
|
||
|
+ packetdataserializer.writeInt( this.c );
|
||
|
+ packetdataserializer.writeInt( this.d );
|
||
|
+ packetdataserializer.writeInt( this.e );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writePosition( b, c, d );
|
||
|
+ packetdataserializer.writeByte( e );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java b/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java
|
||
|
index 92e4036..191d213 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java
|
||
|
@@ -21,9 +21,16 @@ public class PacketPlayOutSpawnPosition extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.x);
|
||
|
- packetdataserializer.writeInt(this.y);
|
||
|
- packetdataserializer.writeInt(this.z);
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.x );
|
||
|
+ packetdataserializer.writeInt( this.y );
|
||
|
+ packetdataserializer.writeInt( this.z );
|
||
|
+
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writePosition( x, y, z );
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutTileEntityData.java b/src/main/java/net/minecraft/server/PacketPlayOutTileEntityData.java
|
||
|
index 3887d15..ed54ddd 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutTileEntityData.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutTileEntityData.java
|
||
|
@@ -27,9 +27,17 @@ public class PacketPlayOutTileEntityData extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
- packetdataserializer.writeShort(this.b);
|
||
|
- packetdataserializer.writeInt(this.c);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ packetdataserializer.writeShort( this.b );
|
||
|
+ packetdataserializer.writeInt( this.c );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writePosition( a, b, c );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeByte((byte) this.d);
|
||
|
packetdataserializer.a(this.e);
|
||
|
}
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutUpdateAttributes.java b/src/main/java/net/minecraft/server/PacketPlayOutUpdateAttributes.java
|
||
|
index 7b288ad..0c38297 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutUpdateAttributes.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutUpdateAttributes.java
|
||
|
@@ -46,7 +46,15 @@ public class PacketPlayOutUpdateAttributes extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
- packetdataserializer.writeInt(this.a);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16)
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.a );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( a );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeInt(this.b.size());
|
||
|
Iterator iterator = this.b.iterator();
|
||
|
|
||
|
@@ -55,7 +63,14 @@ public class PacketPlayOutUpdateAttributes extends Packet {
|
||
|
|
||
|
packetdataserializer.a(attributesnapshot.a());
|
||
|
packetdataserializer.writeDouble(attributesnapshot.b());
|
||
|
- packetdataserializer.writeShort(attributesnapshot.c().size());
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeShort( attributesnapshot.c().size() );
|
||
|
+ } else {
|
||
|
+ packetdataserializer.b( attributesnapshot.c().size() );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
Iterator iterator1 = attributesnapshot.c().iterator();
|
||
|
|
||
|
while (iterator1.hasNext()) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutUpdateHealth.java b/src/main/java/net/minecraft/server/PacketPlayOutUpdateHealth.java
|
||
|
index 72b3219..37ede05 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutUpdateHealth.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutUpdateHealth.java
|
||
|
@@ -22,7 +22,15 @@ public class PacketPlayOutUpdateHealth extends Packet {
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
packetdataserializer.writeFloat(this.a);
|
||
|
- packetdataserializer.writeShort(this.b);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeShort( this.b );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.b( this.b );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeFloat(this.c);
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutUpdateSign.java b/src/main/java/net/minecraft/server/PacketPlayOutUpdateSign.java
|
||
|
index 7c5d2eb..e68fc18 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutUpdateSign.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutUpdateSign.java
|
||
|
@@ -2,6 +2,8 @@ package net.minecraft.server;
|
||
|
|
||
|
import java.io.IOException;
|
||
|
|
||
|
+import org.bukkit.craftbukkit.util.CraftChatMessage; // Spigot - protocol patch
|
||
|
+
|
||
|
public class PacketPlayOutUpdateSign extends Packet {
|
||
|
|
||
|
private int x;
|
||
|
@@ -30,13 +32,28 @@ public class PacketPlayOutUpdateSign extends Packet {
|
||
|
}
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
- packetdataserializer.writeInt(this.x);
|
||
|
- packetdataserializer.writeShort(this.y);
|
||
|
- packetdataserializer.writeInt(this.z);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.x );
|
||
|
+ packetdataserializer.writeShort( this.y );
|
||
|
+ packetdataserializer.writeInt( this.z );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writePosition( x, y, z );
|
||
|
+ }
|
||
|
|
||
|
for (int i = 0; i < 4; ++i) {
|
||
|
- packetdataserializer.a(this.lines[i]);
|
||
|
+ if ( packetdataserializer.version < 21 )
|
||
|
+ {
|
||
|
+ packetdataserializer.a( this.lines[ i ] );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ String line = ChatSerializer.a( CraftChatMessage.fromString( this.lines[ i ] )[ 0 ] );
|
||
|
+ packetdataserializer.a( line );
|
||
|
+ }
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java b/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java
|
||
|
index 7ea6702..2a96e2d 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java
|
||
|
@@ -4,8 +4,8 @@ import java.util.List;
|
||
|
|
||
|
public class PacketPlayOutWindowItems extends Packet {
|
||
|
|
||
|
- private int a;
|
||
|
- private ItemStack[] b;
|
||
|
+ public int a; // Spigot
|
||
|
+ public ItemStack[] b; // Spigot
|
||
|
|
||
|
public PacketPlayOutWindowItems() {}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutWorldEvent.java b/src/main/java/net/minecraft/server/PacketPlayOutWorldEvent.java
|
||
|
index f1001c6..a9577b8 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutWorldEvent.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutWorldEvent.java
|
||
|
@@ -31,9 +31,17 @@ public class PacketPlayOutWorldEvent extends Packet {
|
||
|
|
||
|
public void b(PacketDataSerializer packetdataserializer) {
|
||
|
packetdataserializer.writeInt(this.a);
|
||
|
- packetdataserializer.writeInt(this.c);
|
||
|
- packetdataserializer.writeByte(this.d & 255);
|
||
|
- packetdataserializer.writeInt(this.e);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( packetdataserializer.version < 16 )
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( this.c );
|
||
|
+ packetdataserializer.writeByte( this.d & 255 );
|
||
|
+ packetdataserializer.writeInt( this.e );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writePosition( c, d, e );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
packetdataserializer.writeInt(this.b);
|
||
|
packetdataserializer.writeBoolean(this.f);
|
||
|
}
|
||
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutWorldParticles.java b/src/main/java/net/minecraft/server/PacketPlayOutWorldParticles.java
|
||
|
index 29f0c99..d708000 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutWorldParticles.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutWorldParticles.java
|
||
|
@@ -1,6 +1,7 @@
|
||
|
package net.minecraft.server;
|
||
|
|
||
|
import java.io.IOException;
|
||
|
+import java.util.HashMap; // Spigot
|
||
|
|
||
|
public class PacketPlayOutWorldParticles extends Packet {
|
||
|
|
||
|
@@ -40,8 +41,19 @@ public class PacketPlayOutWorldParticles extends Packet {
|
||
|
this.i = packetdataserializer.readInt();
|
||
|
}
|
||
|
|
||
|
+ // Spigot start - protocol patch
|
||
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||
|
- packetdataserializer.a(this.a);
|
||
|
+ String[] parts = this.a.split( "_" );
|
||
|
+ Particle particle = Particle.find( parts[ 0 ] );
|
||
|
+ if (particle == null) particle = Particle.CRIT;
|
||
|
+ if ( packetdataserializer.version < 17 )
|
||
|
+ {
|
||
|
+ packetdataserializer.a( this.a );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ packetdataserializer.writeInt( particle.ordinal() );
|
||
|
+ packetdataserializer.writeBoolean( false );
|
||
|
+ }
|
||
|
packetdataserializer.writeFloat(this.b);
|
||
|
packetdataserializer.writeFloat(this.c);
|
||
|
packetdataserializer.writeFloat(this.d);
|
||
|
@@ -50,7 +62,31 @@ public class PacketPlayOutWorldParticles extends Packet {
|
||
|
packetdataserializer.writeFloat(this.g);
|
||
|
packetdataserializer.writeFloat(this.h);
|
||
|
packetdataserializer.writeInt(this.i);
|
||
|
+ if ( packetdataserializer.version >= 17 )
|
||
|
+ {
|
||
|
+ for ( int i = 0; i < particle.extra; i++ )
|
||
|
+ {
|
||
|
+ int toWrite = 0;
|
||
|
+ if ( parts.length - 1 > i )
|
||
|
+ {
|
||
|
+ try
|
||
|
+ {
|
||
|
+ toWrite = Integer.parseInt( parts[i + 1] );
|
||
|
+ if ( particle.extra == 1 && parts.length == 3 )
|
||
|
+ {
|
||
|
+ i++;
|
||
|
+ toWrite = toWrite | (Integer.parseInt( parts[i + 1] ) << 12);
|
||
|
+ }
|
||
|
+ } catch ( NumberFormatException e )
|
||
|
+ {
|
||
|
+
|
||
|
+ }
|
||
|
+ }
|
||
|
+ packetdataserializer.b( toWrite );
|
||
|
+ }
|
||
|
+ }
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
|
||
|
public void a(PacketPlayOutListener packetplayoutlistener) {
|
||
|
packetplayoutlistener.a(this);
|
||
|
@@ -59,4 +95,79 @@ public class PacketPlayOutWorldParticles extends Packet {
|
||
|
public void handle(PacketListener packetlistener) {
|
||
|
this.a((PacketPlayOutListener) packetlistener);
|
||
|
}
|
||
|
+
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ private enum Particle
|
||
|
+ {
|
||
|
+ EXPLOSION_NORMAL( "explode" ),
|
||
|
+ EXPLOSION_LARGE( "largeexplode" ),
|
||
|
+ EXPLOSION_HUGE( "hugeexplosion" ),
|
||
|
+ FIREWORKS_SPARK( "fireworksSpark" ),
|
||
|
+ WATER_BUBBLE( "bubble" ),
|
||
|
+ WATER_SPLASH( "splash" ),
|
||
|
+ WATER_WAKE( "wake" ),
|
||
|
+ SUSPENDED( "suspended" ),
|
||
|
+ SUSPENDED_DEPTH( "depthsuspend" ),
|
||
|
+ CRIT( "crit" ),
|
||
|
+ CRIT_MAGIC( "magicCrit" ),
|
||
|
+ SMOKE_NORMAL( "smoke" ),
|
||
|
+ SMOKE_LARGE( "largesmoke" ),
|
||
|
+ SPELL( "spell" ),
|
||
|
+ SPELL_INSTANT( "instantSpell" ),
|
||
|
+ SPELL_MOB( "mobSpell" ),
|
||
|
+ SPELL_MOB_AMBIENT( "mobSpellAmbient" ),
|
||
|
+ SPELL_WITCH( "witchMagic" ),
|
||
|
+ DRIP_WATER( "dripWater" ),
|
||
|
+ DRIP_LAVA( "dripLava" ),
|
||
|
+ VILLAGER_ANGRY( "angryVillager" ),
|
||
|
+ VILLAGER_HAPPY( "happyVillager" ),
|
||
|
+ TOWN_AURA( "townaura" ),
|
||
|
+ NOTE( "note" ),
|
||
|
+ PORTAL( "portal" ),
|
||
|
+ ENCHANTMENT_TABLE( "enchantmenttable" ),
|
||
|
+ FLAME( "flame" ),
|
||
|
+ LAVA( "lava" ),
|
||
|
+ FOOTSTEP( "footstep" ),
|
||
|
+ CLOUD( "cloud" ),
|
||
|
+ REDSTONE( "reddust" ),
|
||
|
+ SNOWBALL( "snowballpoof" ),
|
||
|
+ SNOW_SHOVEL( "snowshovel" ),
|
||
|
+ SLIME( "slime" ),
|
||
|
+ HEART( "heart" ),
|
||
|
+ BARRIER( "barrier" ),
|
||
|
+ ICON_CRACK( "iconcrack", 1 ),
|
||
|
+ BLOCK_CRACK( "blockcrack", 1 ),
|
||
|
+ BLOCK_DUST( "blockdust", 2 ),
|
||
|
+ WATER_DROP( "droplet" ),
|
||
|
+ ITEM_TAKE( "take" );
|
||
|
+
|
||
|
+ public final String name;
|
||
|
+ public final int extra;
|
||
|
+ private final static HashMap<String, Particle> particleMap = new HashMap<String, Particle>();
|
||
|
+
|
||
|
+ Particle(String name)
|
||
|
+ {
|
||
|
+ this( name, 0 );
|
||
|
+ }
|
||
|
+
|
||
|
+ Particle(String name, int extra)
|
||
|
+ {
|
||
|
+ this.name = name;
|
||
|
+ this.extra = extra;
|
||
|
+ }
|
||
|
+
|
||
|
+ public static Particle find(String part)
|
||
|
+ {
|
||
|
+ return particleMap.get( part );
|
||
|
+ }
|
||
|
+
|
||
|
+ static
|
||
|
+ {
|
||
|
+ for ( Particle particle : values() )
|
||
|
+ {
|
||
|
+ particleMap.put( particle.name, particle );
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunk.java b/src/main/java/net/minecraft/server/PlayerChunk.java
|
||
|
index f5afcb7..07b9d35 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PlayerChunk.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PlayerChunk.java
|
||
|
@@ -85,7 +85,7 @@ class PlayerChunk {
|
||
|
Chunk chunk = PlayerChunkMap.a(this.playerChunkMap).getChunkAt(this.location.x, this.location.z);
|
||
|
|
||
|
if (chunk.isReady()) {
|
||
|
- entityplayer.playerConnection.sendPacket(new PacketPlayOutMapChunk(chunk, true, 0));
|
||
|
+ entityplayer.playerConnection.sendPacket(new PacketPlayOutMapChunk(chunk, true, 0, entityplayer.playerConnection.networkManager.getVersion())); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
this.players.remove(entityplayer); // CraftBukkit
|
||
|
@@ -164,8 +164,21 @@ class PlayerChunk {
|
||
|
if (this.dirtyCount == 64) {
|
||
|
i = this.location.x * 16;
|
||
|
j = this.location.z * 16;
|
||
|
- this.sendAll(new PacketPlayOutMapChunk(PlayerChunkMap.a(this.playerChunkMap).getChunkAt(this.location.x, this.location.z), (this.f == 0xFFFF), this.f)); // CraftBukkit - send everything (including biome) if all sections flagged
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ //this.sendAll(new PacketPlayOutMapChunk(PlayerChunkMap.a(this.playerChunkMap).getChunkAt(this.location.x, this.location.z), (this.f == 0xFFFF), this.f)); // CraftBukkit - send everything (including biome) if all sections flagged
|
||
|
|
||
|
+ Chunk chunk = PlayerChunkMap.a( this.playerChunkMap ).getChunkAt( this.location.x, this.location.z );
|
||
|
+ for (int idx = 0; idx < this.b.size(); ++idx) {
|
||
|
+ EntityPlayer entityplayer = (EntityPlayer) this.b.get(idx);
|
||
|
+
|
||
|
+ if (!entityplayer.chunkCoordIntPairQueue.contains(this.location)) {
|
||
|
+ entityplayer.playerConnection.sendPacket(
|
||
|
+ new PacketPlayOutMapChunk( chunk, (this.f == 0xFFFF), this.f, entityplayer.playerConnection.networkManager.getVersion())
|
||
|
+ );
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ // Spigot end - protocol patch
|
||
|
for (k = 0; k < 16; ++k) {
|
||
|
if ((this.f & 1 << k) != 0) {
|
||
|
l = k << 4;
|
||
|
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||
|
index 188393c..10faa8c 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||
|
@@ -747,6 +747,36 @@ public class PlayerConnection implements PacketPlayInListener {
|
||
|
}
|
||
|
|
||
|
public void sendPacket(Packet packet) {
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( NetworkManager.a( networkManager ).attr( NetworkManager.protocolVersion ).get() >= 17 )
|
||
|
+ {
|
||
|
+ if ( packet instanceof PacketPlayOutWindowItems )
|
||
|
+ {
|
||
|
+ PacketPlayOutWindowItems items = (PacketPlayOutWindowItems) packet;
|
||
|
+ if ( player.activeContainer instanceof ContainerEnchantTable
|
||
|
+ && player.activeContainer.windowId == items.a )
|
||
|
+ {
|
||
|
+ ItemStack[] old = items.b;
|
||
|
+ items.b = new ItemStack[ old.length + 1 ];
|
||
|
+ items.b[ 0 ] = old[ 0 ];
|
||
|
+ System.arraycopy( old, 1, items.b, 2, old.length - 1 );
|
||
|
+ items.b[ 1 ] = new ItemStack( Items.INK_SACK, 3, 4 );
|
||
|
+
|
||
|
+ }
|
||
|
+ } else if ( packet instanceof PacketPlayOutSetSlot )
|
||
|
+ {
|
||
|
+ PacketPlayOutSetSlot items = (PacketPlayOutSetSlot) packet;
|
||
|
+ if ( player.activeContainer instanceof ContainerEnchantTable
|
||
|
+ && player.activeContainer.windowId == items.a )
|
||
|
+ {
|
||
|
+ if ( items.b >= 1 )
|
||
|
+ {
|
||
|
+ items.b++;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
if (packet instanceof PacketPlayOutChat) {
|
||
|
PacketPlayOutChat packetplayoutchat = (PacketPlayOutChat) packet;
|
||
|
EnumChatVisibility enumchatvisibility = this.player.getChatFlags();
|
||
|
@@ -1108,6 +1138,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||
|
}
|
||
|
|
||
|
public void a(PacketPlayInUseEntity packetplayinuseentity) {
|
||
|
+ if ( packetplayinuseentity.c() == null ) return; // Spigot - protocol patch
|
||
|
if (this.player.dead) return; // CraftBukkit
|
||
|
WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension);
|
||
|
Entity entity = packetplayinuseentity.a((World) worldserver);
|
||
|
@@ -1237,6 +1268,21 @@ public class PlayerConnection implements PacketPlayInListener {
|
||
|
}
|
||
|
|
||
|
InventoryView inventory = this.player.activeContainer.getBukkitView();
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( NetworkManager.a( networkManager ).attr( NetworkManager.protocolVersion ).get() >= 17 )
|
||
|
+ {
|
||
|
+ if ( player.activeContainer instanceof ContainerEnchantTable )
|
||
|
+ {
|
||
|
+ if ( packetplayinwindowclick.slot == 1 )
|
||
|
+ {
|
||
|
+ return;
|
||
|
+ } else if ( packetplayinwindowclick.slot > 1 )
|
||
|
+ {
|
||
|
+ packetplayinwindowclick.slot--;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
SlotType type = CraftInventoryView.getSlotType(inventory, packetplayinwindowclick.d());
|
||
|
|
||
|
InventoryClickEvent event = null;
|
||
|
@@ -1587,7 +1633,20 @@ public class PlayerConnection implements PacketPlayInListener {
|
||
|
if (entityitem != null) {
|
||
|
entityitem.e();
|
||
|
}
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ if ( flag1 )
|
||
|
+ {
|
||
|
+ player.playerConnection.sendPacket(
|
||
|
+ new PacketPlayOutSetSlot( 0,
|
||
|
+ packetplayinsetcreativeslot.c(),
|
||
|
+ player.defaultContainer.getSlot( packetplayinsetcreativeslot.c() ).getItem()
|
||
|
+ )
|
||
|
+ );
|
||
|
+ }
|
||
|
}
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@@ -1721,7 +1780,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||
|
// CraftBukkit end
|
||
|
|
||
|
if ("MC|BEdit".equals(packetplayincustompayload.c())) {
|
||
|
- packetdataserializer = new PacketDataSerializer(Unpooled.wrappedBuffer(packetplayincustompayload.e()));
|
||
|
+ packetdataserializer = new PacketDataSerializer(Unpooled.wrappedBuffer(packetplayincustompayload.e()), networkManager.getVersion()); // Spigot - protocol patch
|
||
|
|
||
|
try {
|
||
|
itemstack = packetdataserializer.c();
|
||
|
@@ -1753,7 +1812,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||
|
|
||
|
return;
|
||
|
} else if ("MC|BSign".equals(packetplayincustompayload.c())) {
|
||
|
- packetdataserializer = new PacketDataSerializer(Unpooled.wrappedBuffer(packetplayincustompayload.e()));
|
||
|
+ packetdataserializer = new PacketDataSerializer(Unpooled.wrappedBuffer(packetplayincustompayload.e()), networkManager.getVersion()); // Spigot - protocol patch
|
||
|
|
||
|
try {
|
||
|
itemstack = packetdataserializer.c();
|
||
|
diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
||
|
index b4461b9..036be30 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
||
|
@@ -328,6 +328,13 @@ public class PlayerInteractManager {
|
||
|
int j = itemstack.getData();
|
||
|
ItemStack itemstack1 = itemstack.a(world, entityhuman);
|
||
|
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ if ( itemstack1 != null && itemstack1.getItem() == Items.WRITTEN_BOOK )
|
||
|
+ {
|
||
|
+ player.playerConnection.sendPacket( new PacketPlayOutCustomPayload( "MC|BOpen", new byte[0] ) );
|
||
|
+ }
|
||
|
+ // Spigot end
|
||
|
+
|
||
|
if (itemstack1 == itemstack && (itemstack1 == null || itemstack1.count == i && itemstack1.n() <= 0 && itemstack1.getData() == j)) {
|
||
|
return false;
|
||
|
} else {
|
||
|
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
||
|
index 75ea5c9..0359cb3 100644
|
||
|
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
||
|
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
||
|
@@ -284,7 +284,7 @@ public abstract class PlayerList {
|
||
|
// CraftBukkit end
|
||
|
|
||
|
// CraftBukkit start - sendAll above replaced with this loop
|
||
|
- PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(entityplayer.listName, true, 1000);
|
||
|
+ PacketPlayOutPlayerInfo packet = PacketPlayOutPlayerInfo.addPlayer( entityplayer ); // Spigot - protocol patch
|
||
|
for (int i = 0; i < this.players.size(); ++i) {
|
||
|
EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i);
|
||
|
|
||
|
@@ -302,7 +302,7 @@ public abstract class PlayerList {
|
||
|
continue;
|
||
|
}
|
||
|
// .name -> .listName
|
||
|
- entityplayer.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(entityplayer1.listName, true, entityplayer1.ping));
|
||
|
+ entityplayer.playerConnection.sendPacket(PacketPlayOutPlayerInfo.addPlayer( entityplayer1 )); // Spigot - protocol patch
|
||
|
// CraftBukkit end
|
||
|
}
|
||
|
}
|
||
|
@@ -338,7 +338,7 @@ public abstract class PlayerList {
|
||
|
|
||
|
// CraftBukkit start - .name -> .listName, replace sendAll with loop
|
||
|
// this.sendAll(new PacketPlayOutPlayerInfo(entityplayer.getName(), false, 9999));
|
||
|
- PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(entityplayer.listName, false, 9999);
|
||
|
+ PacketPlayOutPlayerInfo packet = PacketPlayOutPlayerInfo.removePlayer( entityplayer ); // Spigot - protocol patch
|
||
|
for (int i = 0; i < this.players.size(); ++i) {
|
||
|
EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i);
|
||
|
|
||
|
@@ -830,7 +830,7 @@ public abstract class PlayerList {
|
||
|
EntityPlayer player = (EntityPlayer) this.players.get( currentPing );
|
||
|
if ( player.lastPing == -1 || Math.abs( player.ping - player.lastPing ) > 20 )
|
||
|
{
|
||
|
- Packet packet = new PacketPlayOutPlayerInfo( player.listName, true, player.ping );
|
||
|
+ Packet packet = PacketPlayOutPlayerInfo.updatePing( player ); // Spigot - protocol patch
|
||
|
for ( EntityPlayer splayer : (List<EntityPlayer>) this.players )
|
||
|
{
|
||
|
if ( splayer.getBukkitEntity().canSee( player.getBukkitEntity() ) )
|
||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||
|
index e5f73fc..0c4976d 100644
|
||
|
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
|
||
|
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||
|
@@ -1,13 +1,16 @@
|
||
|
package org.bukkit.craftbukkit;
|
||
|
|
||
|
-import java.io.BufferedReader;
|
||
|
import java.io.File;
|
||
|
import java.io.IOException;
|
||
|
-import java.io.InputStreamReader;
|
||
|
+import java.net.URL;
|
||
|
import java.text.SimpleDateFormat;
|
||
|
import java.util.Arrays;
|
||
|
+import java.util.Calendar;
|
||
|
+import java.util.Date;
|
||
|
+import java.util.Enumeration;
|
||
|
import java.util.List;
|
||
|
import java.util.concurrent.TimeUnit;
|
||
|
+import java.util.jar.Manifest;
|
||
|
import java.util.logging.Level;
|
||
|
import java.util.logging.Logger;
|
||
|
import joptsimple.OptionParser;
|
||
|
@@ -18,7 +21,7 @@ public class Main {
|
||
|
public static boolean useJline = true;
|
||
|
public static boolean useConsole = true;
|
||
|
|
||
|
- public static void main(String[] args) throws IOException {
|
||
|
+ public static void main(String[] args) throws Exception {
|
||
|
// Spigot Start
|
||
|
File lock = new File( ".update-lock" );
|
||
|
if ( !new File( "update-lock" ).exists() && !lock.exists() && System.getProperty( "IReallyKnowWhatIAmDoingThisUpdate" ) == null )
|
||
|
@@ -39,6 +42,32 @@ public class Main {
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
+
|
||
|
+ System.err.println( "This Spigot build supports Minecraft clients both of versions 1.7.x and of 1.8.x.\n"
|
||
|
+ + "*** It is imperative that backups be taken before running this build on your server! ***\n"
|
||
|
+ + "Please report any such issues to http://www.spigotmc.org/, stating your client, server, and if applicable BungeeCord versions.\n"
|
||
|
+ + "*** Any bug reports not running the very latest versions of these softwares will be ignored ***\n\n" );
|
||
|
+
|
||
|
+ Enumeration<URL> resources = Main.class.getClassLoader().getResources( "META-INF/MANIFEST.MF" );
|
||
|
+ while ( resources.hasMoreElements() )
|
||
|
+ {
|
||
|
+ Manifest manifest = new Manifest( resources.nextElement().openStream() );
|
||
|
+ String ts = manifest.getMainAttributes().getValue( "Timestamp" );
|
||
|
+ if ( ts != null )
|
||
|
+ {
|
||
|
+ Date buildDate = new SimpleDateFormat( "yyyyMMdd-hhmm" ).parse( ts );
|
||
|
+
|
||
|
+ Calendar cal = Calendar.getInstance();
|
||
|
+ cal.add( Calendar.DAY_OF_YEAR, -2 );
|
||
|
+ if ( buildDate.before(cal.getTime() ) )
|
||
|
+ {
|
||
|
+ System.err.println( "WARNING: This build is more than 2 days old and there are likely updates available!" );
|
||
|
+ System.err.println( "You will get no support with this build unless you update from http://ci.md-5.net/job/Spigot/" );
|
||
|
+ System.err.println( "The server will start in 10 seconds!" );
|
||
|
+ Thread.sleep( TimeUnit.SECONDS.toMillis( 10 ) );
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
// Spigot End
|
||
|
// Todo: Installation script
|
||
|
OptionParser parser = new OptionParser() {
|
||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||
|
index e7569c6..35f2bfa 100644
|
||
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||
|
@@ -203,17 +203,29 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||
|
getHandle().listName = name;
|
||
|
|
||
|
// Change the name on the client side
|
||
|
- PacketPlayOutPlayerInfo oldpacket = new PacketPlayOutPlayerInfo(oldName, false, 9999);
|
||
|
- PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(name, true, getHandle().ping);
|
||
|
+ // Spigot start - protocol patch
|
||
|
+ String temp = getHandle().listName;
|
||
|
+ getHandle().listName = oldName;
|
||
|
+ PacketPlayOutPlayerInfo oldpacket = PacketPlayOutPlayerInfo.removePlayer(getHandle());
|
||
|
+ getHandle().listName = temp;
|
||
|
+ PacketPlayOutPlayerInfo packet = PacketPlayOutPlayerInfo.addPlayer(getHandle());
|
||
|
+ PacketPlayOutPlayerInfo newPacket = PacketPlayOutPlayerInfo.updateDisplayName(getHandle());
|
||
|
for (int i = 0; i < server.getHandle().players.size(); ++i) {
|
||
|
EntityPlayer entityplayer = (EntityPlayer) server.getHandle().players.get(i);
|
||
|
if (entityplayer.playerConnection == null) continue;
|
||
|
|
||
|
if (entityplayer.getBukkitEntity().canSee(this)) {
|
||
|
- entityplayer.playerConnection.sendPacket(oldpacket);
|
||
|
- entityplayer.playerConnection.sendPacket(packet);
|
||
|
+ if (entityplayer.playerConnection.networkManager.getVersion() < 28)
|
||
|
+ {
|
||
|
+ entityplayer.playerConnection.sendPacket( oldpacket );
|
||
|
+ entityplayer.playerConnection.sendPacket( packet );
|
||
|
+ } else {
|
||
|
+ entityplayer.playerConnection.sendPacket( newPacket );
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
+
|
||
|
+ // Spigot end
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
@@ -442,7 +454,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||
|
for (int y = 0; y < 128; ++y) {
|
||
|
bytes[y + 3] = data.buffer[y * 128 + x];
|
||
|
}
|
||
|
- PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), bytes);
|
||
|
+ PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), bytes, map.getScale().getValue()); // Spigot - protocol patch
|
||
|
getHandle().playerConnection.sendPacket(packet);
|
||
|
}
|
||
|
}
|
||
|
@@ -894,7 +906,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||
|
}
|
||
|
|
||
|
//remove the hidden player from this player user list
|
||
|
- getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(player.getPlayerListName(), false, 9999));
|
||
|
+ getHandle().playerConnection.sendPacket(PacketPlayOutPlayerInfo.removePlayer( ( (CraftPlayer) player ).getHandle ())); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public void showPlayer(Player player) {
|
||
|
@@ -911,7 +923,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||
|
entry.updatePlayer(getHandle());
|
||
|
}
|
||
|
|
||
|
- getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(player.getPlayerListName(), true, getHandle().ping));
|
||
|
+ getHandle().playerConnection.sendPacket(PacketPlayOutPlayerInfo.addPlayer( ( (CraftPlayer) player ).getHandle ())); // Spigot - protocol patch
|
||
|
}
|
||
|
|
||
|
public void removeDisconnectingPlayer(Player player) {
|
||
|
diff --git a/src/main/java/org/spigotmc/AntiXray.java b/src/main/java/org/spigotmc/AntiXray.java
|
||
|
index fad22e2..80e538c 100644
|
||
|
--- a/src/main/java/org/spigotmc/AntiXray.java
|
||
|
+++ b/src/main/java/org/spigotmc/AntiXray.java
|
||
|
@@ -65,7 +65,7 @@ public class AntiXray
|
||
|
if ( world.spigotConfig.antiXray )
|
||
|
{
|
||
|
obfuscate.startTiming();
|
||
|
- obfuscate( chunkX, chunkY, bitmask, buffer, world );
|
||
|
+ obfuscate( chunkX, chunkY, bitmask, buffer, world, false );
|
||
|
obfuscate.stopTiming();
|
||
|
}
|
||
|
}
|
||
|
@@ -73,7 +73,7 @@ public class AntiXray
|
||
|
/**
|
||
|
* Removes all non exposed ores from the chunk buffer.
|
||
|
*/
|
||
|
- public void obfuscate(int chunkX, int chunkY, int bitmask, byte[] buffer, World world)
|
||
|
+ public void obfuscate(int chunkX, int chunkY, int bitmask, byte[] buffer, World world, boolean newFormat)
|
||
|
{
|
||
|
// If the world is marked as obfuscated
|
||
|
if ( world.spigotConfig.antiXray )
|
||
|
@@ -120,11 +120,22 @@ public class AntiXray
|
||
|
if ( index >= buffer.length )
|
||
|
{
|
||
|
index++;
|
||
|
+ if ( newFormat ) index++;
|
||
|
continue;
|
||
|
}
|
||
|
// Grab the block ID in the buffer.
|
||
|
// TODO: extended IDs are not yet supported
|
||
|
- int blockId = buffer[index] & 0xFF;
|
||
|
+ int blockId;
|
||
|
+ int data = 0;
|
||
|
+ if ( newFormat )
|
||
|
+ {
|
||
|
+ blockId = (buffer[ index ] & 0xFF) | ( ( buffer[ index + 1 ] & 0xFF ) << 8 );
|
||
|
+ data = blockId & 0xF;
|
||
|
+ blockId >>>= 4; // Remove data value
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ blockId = buffer[ index ] & 0xFF;
|
||
|
+ }
|
||
|
// Check if the block should be obfuscated
|
||
|
if ( obfuscateBlocks[blockId] )
|
||
|
{
|
||
|
@@ -132,6 +143,7 @@ public class AntiXray
|
||
|
if ( !isLoaded( world, startX + x, ( i << 4 ) + y, startZ + z, initialRadius ) )
|
||
|
{
|
||
|
index++;
|
||
|
+ if ( newFormat ) index++;
|
||
|
continue;
|
||
|
}
|
||
|
// On the otherhand, if radius is 0, or the nearby blocks are all non air, we can obfuscate
|
||
|
@@ -141,7 +153,15 @@ public class AntiXray
|
||
|
{
|
||
|
case 1:
|
||
|
// Replace with replacement material
|
||
|
- buffer[index] = replaceWithTypeId;
|
||
|
+ if ( newFormat )
|
||
|
+ {
|
||
|
+ char replace = (char) ((replaceWithTypeId << 4) | data);
|
||
|
+ buffer[ index ] = (byte) ( replace & 0xFF );
|
||
|
+ buffer[ index + 1 ] = (byte) ( ( replace >> 8 ) & 0xFF );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ buffer[ index ] = replaceWithTypeId;
|
||
|
+ }
|
||
|
break;
|
||
|
case 2:
|
||
|
// Replace with random ore.
|
||
|
@@ -149,13 +169,23 @@ public class AntiXray
|
||
|
{
|
||
|
randomOre = 0;
|
||
|
}
|
||
|
- buffer[index] = replacementOres[randomOre++];
|
||
|
+ if ( newFormat )
|
||
|
+ {
|
||
|
+ char replace = (char) (replacementOres[ randomOre++ ] & 0xFF);
|
||
|
+ replace = (char) ((replace << 4) | data);
|
||
|
+ buffer[ index ] = (byte) ( replace & 0xFF );
|
||
|
+ buffer[ index + 1 ] = (byte) ( ( replace >> 8 ) & 0xFF );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ buffer[ index ] = replacementOres[ randomOre++ ];
|
||
|
+ }
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
index++;
|
||
|
+ if (newFormat) index++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
diff --git a/src/main/java/org/spigotmc/ProtocolData.java b/src/main/java/org/spigotmc/ProtocolData.java
|
||
|
new file mode 100644
|
||
|
index 0000000..ff93cbe
|
||
|
--- /dev/null
|
||
|
+++ b/src/main/java/org/spigotmc/ProtocolData.java
|
||
|
@@ -0,0 +1,190 @@
|
||
|
+package org.spigotmc;
|
||
|
+
|
||
|
+public class ProtocolData
|
||
|
+{
|
||
|
+ public static class ByteShort extends Number
|
||
|
+ {
|
||
|
+
|
||
|
+ private short value;
|
||
|
+
|
||
|
+ public ByteShort(short value)
|
||
|
+ {
|
||
|
+ this.value = value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public int intValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public long longValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public float floatValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public double doubleValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ public static class DualByte extends Number
|
||
|
+ {
|
||
|
+
|
||
|
+ public byte value;
|
||
|
+ public byte value2;
|
||
|
+
|
||
|
+ public DualByte(byte value, byte value2)
|
||
|
+ {
|
||
|
+ this.value = value;
|
||
|
+ this.value2 = value2;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public int intValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public long longValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public float floatValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public double doubleValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ public static class HiddenByte extends Number
|
||
|
+ {
|
||
|
+
|
||
|
+ private byte value;
|
||
|
+
|
||
|
+ public HiddenByte(byte value)
|
||
|
+ {
|
||
|
+ this.value = value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public int intValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public long longValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public float floatValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public double doubleValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ public static class IntByte extends Number
|
||
|
+ {
|
||
|
+
|
||
|
+ public int value;
|
||
|
+ public byte value2;
|
||
|
+
|
||
|
+ public IntByte(int value, byte value2)
|
||
|
+ {
|
||
|
+ this.value = value;
|
||
|
+ this.value2 = value2;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public byte byteValue()
|
||
|
+ {
|
||
|
+ return value2;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public int intValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public long longValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public float floatValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public double doubleValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ public static class DualInt extends Number
|
||
|
+ {
|
||
|
+
|
||
|
+ public int value;
|
||
|
+ public int value2;
|
||
|
+
|
||
|
+ public DualInt(int value, int value2)
|
||
|
+ {
|
||
|
+ this.value = value;
|
||
|
+ this.value2 = value2;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public int intValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public long longValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public float floatValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public double doubleValue()
|
||
|
+ {
|
||
|
+ return value;
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
diff --git a/src/main/java/org/spigotmc/ProtocolInjector.java b/src/main/java/org/spigotmc/ProtocolInjector.java
|
||
|
new file mode 100644
|
||
|
index 0000000..0e30463
|
||
|
--- /dev/null
|
||
|
+++ b/src/main/java/org/spigotmc/ProtocolInjector.java
|
||
|
@@ -0,0 +1,129 @@
|
||
|
+package org.spigotmc;
|
||
|
+
|
||
|
+import net.minecraft.server.EnumProtocol;
|
||
|
+import net.minecraft.server.Packet;
|
||
|
+import net.minecraft.server.PacketDataSerializer;
|
||
|
+import net.minecraft.server.PacketListener;
|
||
|
+import net.minecraft.util.com.google.common.collect.BiMap;
|
||
|
+
|
||
|
+import java.io.IOException;
|
||
|
+import java.lang.reflect.Field;
|
||
|
+import java.util.Map;
|
||
|
+
|
||
|
+public class ProtocolInjector
|
||
|
+{
|
||
|
+ public static void inject()
|
||
|
+ {
|
||
|
+ try
|
||
|
+ {
|
||
|
+ addPacket( EnumProtocol.LOGIN, true, 0x3, PacketLoginCompression.class );
|
||
|
+
|
||
|
+ addPacket( EnumProtocol.PLAY, true, 0x48, PacketPlayResourcePackSend.class );
|
||
|
+ addPacket( EnumProtocol.PLAY, false, 0x19, PacketPlayResourcePackStatus.class );
|
||
|
+ } catch ( NoSuchFieldException e )
|
||
|
+ {
|
||
|
+ e.printStackTrace();
|
||
|
+ } catch ( IllegalAccessException e )
|
||
|
+ {
|
||
|
+ e.printStackTrace();
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ private static void addPacket(EnumProtocol protocol, boolean clientbound, int id, Class<? extends Packet> packet) throws NoSuchFieldException, IllegalAccessException
|
||
|
+ {
|
||
|
+ Field packets;
|
||
|
+ if (!clientbound) {
|
||
|
+ packets = EnumProtocol.class.getDeclaredField( "h" );
|
||
|
+ } else {
|
||
|
+ packets = EnumProtocol.class.getDeclaredField( "i" );
|
||
|
+ }
|
||
|
+ packets.setAccessible( true );
|
||
|
+ BiMap<Integer, Class<? extends Packet>> pMap = (BiMap<Integer, Class<? extends Packet>>) packets.get( protocol );
|
||
|
+ pMap.put( id, packet );
|
||
|
+ Field map = EnumProtocol.class.getDeclaredField( "f" );
|
||
|
+ map.setAccessible( true );
|
||
|
+ Map<Class<? extends Packet>, EnumProtocol> protocolMap = (Map<Class<? extends Packet>, EnumProtocol>) map.get( null );
|
||
|
+ protocolMap.put( packet, protocol );
|
||
|
+ }
|
||
|
+
|
||
|
+ public static class PacketPlayResourcePackStatus extends Packet {
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public void a(PacketDataSerializer packetdataserializer) throws IOException
|
||
|
+ {
|
||
|
+ packetdataserializer.c( 255 ); // Hash
|
||
|
+ packetdataserializer.a(); // Result
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public void b(PacketDataSerializer packetdataserializer) throws IOException
|
||
|
+ {
|
||
|
+
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public void handle(PacketListener packetlistener)
|
||
|
+ {
|
||
|
+
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ public static class PacketPlayResourcePackSend extends Packet {
|
||
|
+
|
||
|
+ private String url;
|
||
|
+ private String hash;
|
||
|
+
|
||
|
+ public PacketPlayResourcePackSend(String url, String hash)
|
||
|
+ {
|
||
|
+ this.url = url;
|
||
|
+ this.hash = hash;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public void a(PacketDataSerializer packetdataserializer) throws IOException
|
||
|
+ {
|
||
|
+
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public void b(PacketDataSerializer packetdataserializer) throws IOException
|
||
|
+ {
|
||
|
+ packetdataserializer.a( url );
|
||
|
+ packetdataserializer.a( hash );
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public void handle(PacketListener packetlistener)
|
||
|
+ {
|
||
|
+
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ public static class PacketLoginCompression extends Packet {
|
||
|
+
|
||
|
+ private int threshold;
|
||
|
+
|
||
|
+ public PacketLoginCompression(int threshold)
|
||
|
+ {
|
||
|
+ this.threshold = threshold;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public void a(PacketDataSerializer packetdataserializer) throws IOException
|
||
|
+ {
|
||
|
+
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public void b(PacketDataSerializer packetdataserializer) throws IOException
|
||
|
+ {
|
||
|
+ packetdataserializer.b( threshold );
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public void handle(PacketListener packetlistener)
|
||
|
+ {
|
||
|
+
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
diff --git a/src/main/java/org/spigotmc/SpigotBlockDebreakifier.java b/src/main/java/org/spigotmc/SpigotBlockDebreakifier.java
|
||
|
new file mode 100644
|
||
|
index 0000000..8479c09
|
||
|
--- /dev/null
|
||
|
+++ b/src/main/java/org/spigotmc/SpigotBlockDebreakifier.java
|
||
|
@@ -0,0 +1,60 @@
|
||
|
+package org.spigotmc;
|
||
|
+
|
||
|
+import com.google.common.base.Charsets;
|
||
|
+import com.google.gson.JsonArray;
|
||
|
+import com.google.gson.JsonElement;
|
||
|
+import com.google.gson.JsonParser;
|
||
|
+
|
||
|
+import java.io.IOException;
|
||
|
+import java.io.InputStream;
|
||
|
+import java.io.InputStreamReader;
|
||
|
+import java.util.Arrays;
|
||
|
+
|
||
|
+public class SpigotBlockDebreakifier
|
||
|
+{
|
||
|
+
|
||
|
+ private static final boolean[] validBlocks = new boolean[ 198 << 4 ];
|
||
|
+ private static final int[] correctedValues = new int[ 198 ];
|
||
|
+
|
||
|
+ static
|
||
|
+ {
|
||
|
+ Arrays.fill( correctedValues, -1 );
|
||
|
+ InputStream in = SpigotBlockDebreakifier.class.getResourceAsStream( "/blocks.json" );
|
||
|
+ try
|
||
|
+ {
|
||
|
+ JsonArray e = new JsonParser().parse( new InputStreamReader( in, Charsets.UTF_8 ) ).getAsJsonArray();
|
||
|
+ for ( JsonElement entry : e )
|
||
|
+ {
|
||
|
+ String[] parts = entry.getAsString().split( ":" );
|
||
|
+ int id = Integer.parseInt( parts[ 0 ] );
|
||
|
+ int data = Integer.parseInt( parts[ 1 ] );
|
||
|
+ validBlocks[ ( id << 4 ) | data ] = true;
|
||
|
+ if ( correctedValues[ id ] == -1 || data < correctedValues[ id ] )
|
||
|
+ {
|
||
|
+ correctedValues[ id ] = data;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ } finally
|
||
|
+ {
|
||
|
+ try
|
||
|
+ {
|
||
|
+ in.close();
|
||
|
+ } catch ( IOException e )
|
||
|
+ {
|
||
|
+ throw new RuntimeException( e );
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ public static int getCorrectedData(int id, int data)
|
||
|
+ {
|
||
|
+ if ( id > 197 ) return data;
|
||
|
+ if ( validBlocks[ ( id << 4 ) | data ] )
|
||
|
+ {
|
||
|
+ return data;
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ return correctedValues[ id ] & 0xF;
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
diff --git a/src/main/java/org/spigotmc/SpigotComponentReverter.java b/src/main/java/org/spigotmc/SpigotComponentReverter.java
|
||
|
new file mode 100644
|
||
|
index 0000000..6093d62
|
||
|
--- /dev/null
|
||
|
+++ b/src/main/java/org/spigotmc/SpigotComponentReverter.java
|
||
|
@@ -0,0 +1,105 @@
|
||
|
+package org.spigotmc;
|
||
|
+
|
||
|
+import net.minecraft.server.ChatComponentText;
|
||
|
+import net.minecraft.server.ChatModifier;
|
||
|
+import net.minecraft.server.EnumChatFormat;
|
||
|
+import net.minecraft.server.IChatBaseComponent;
|
||
|
+import org.bukkit.ChatColor;
|
||
|
+
|
||
|
+import java.util.Iterator;
|
||
|
+import java.util.List;
|
||
|
+
|
||
|
+public class SpigotComponentReverter
|
||
|
+{
|
||
|
+ public static String toLegacy(IChatBaseComponent s)
|
||
|
+ {
|
||
|
+ StringBuilder builder = new StringBuilder();
|
||
|
+ legacy( builder, s );
|
||
|
+ return builder.toString();
|
||
|
+ }
|
||
|
+
|
||
|
+ private static void legacy(StringBuilder builder, IChatBaseComponent s)
|
||
|
+ {
|
||
|
+ ChatModifier modifier = s.getChatModifier();
|
||
|
+ colorize( builder, modifier );
|
||
|
+ if ( s instanceof ChatComponentText )
|
||
|
+ {
|
||
|
+ builder.append( s.e() );
|
||
|
+ } else {
|
||
|
+ throw new RuntimeException( "Unhandled type: " + s.getClass().getSimpleName() );
|
||
|
+ }
|
||
|
+
|
||
|
+ for ( IChatBaseComponent c : getExtra( s ) ) {
|
||
|
+ legacy( builder, c );
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ private static void colorize(StringBuilder builder, ChatModifier modifier)
|
||
|
+ {
|
||
|
+ if ( modifier == null ) return;
|
||
|
+ // Color first
|
||
|
+ EnumChatFormat color = getColor( modifier );
|
||
|
+ if ( color == null )
|
||
|
+ {
|
||
|
+ color = EnumChatFormat.BLACK;
|
||
|
+ }
|
||
|
+ builder.append( color.toString() );
|
||
|
+
|
||
|
+ if ( isBold( modifier ) )
|
||
|
+ {
|
||
|
+ builder.append( ChatColor.BOLD );
|
||
|
+ }
|
||
|
+ if ( isItalic( modifier ) )
|
||
|
+ {
|
||
|
+ builder.append( ChatColor.ITALIC );
|
||
|
+ }
|
||
|
+ if ( isRandom( modifier ) )
|
||
|
+ {
|
||
|
+ builder.append( ChatColor.MAGIC );
|
||
|
+ }
|
||
|
+ if ( isStrikethrough( modifier ) )
|
||
|
+ {
|
||
|
+ builder.append( ChatColor.STRIKETHROUGH );
|
||
|
+ }
|
||
|
+ if ( isUnderline( modifier ) )
|
||
|
+ {
|
||
|
+ builder.append( ChatColor.UNDERLINE );
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ // Helpers
|
||
|
+ private static List<IChatBaseComponent> getExtra(IChatBaseComponent c)
|
||
|
+ {
|
||
|
+ return c.a();
|
||
|
+ }
|
||
|
+
|
||
|
+ private static EnumChatFormat getColor(ChatModifier c)
|
||
|
+ {
|
||
|
+ return c.a();
|
||
|
+ }
|
||
|
+
|
||
|
+ private static boolean isBold(ChatModifier c)
|
||
|
+ {
|
||
|
+ return c.b();
|
||
|
+ }
|
||
|
+
|
||
|
+ private static boolean isItalic(ChatModifier c)
|
||
|
+ {
|
||
|
+ return c.c();
|
||
|
+ }
|
||
|
+
|
||
|
+ private static boolean isStrikethrough(ChatModifier c)
|
||
|
+ {
|
||
|
+ return c.d();
|
||
|
+ }
|
||
|
+
|
||
|
+ private static boolean isUnderline(ChatModifier c)
|
||
|
+ {
|
||
|
+ return c.e();
|
||
|
+ }
|
||
|
+
|
||
|
+ private static boolean isRandom(ChatModifier c)
|
||
|
+ {
|
||
|
+ return c.f();
|
||
|
+ }
|
||
|
+}
|
||
|
diff --git a/src/main/java/org/spigotmc/SpigotCompressor.java b/src/main/java/org/spigotmc/SpigotCompressor.java
|
||
|
new file mode 100644
|
||
|
index 0000000..2e0857e
|
||
|
--- /dev/null
|
||
|
+++ b/src/main/java/org/spigotmc/SpigotCompressor.java
|
||
|
@@ -0,0 +1,43 @@
|
||
|
+package org.spigotmc;
|
||
|
+
|
||
|
+import net.minecraft.server.PacketDataSerializer;
|
||
|
+import net.minecraft.util.io.netty.buffer.ByteBuf;
|
||
|
+import net.minecraft.util.io.netty.channel.ChannelHandlerContext;
|
||
|
+import net.minecraft.util.io.netty.handler.codec.MessageToByteEncoder;
|
||
|
+
|
||
|
+import java.util.zip.Deflater;
|
||
|
+
|
||
|
+public class SpigotCompressor extends MessageToByteEncoder
|
||
|
+{
|
||
|
+
|
||
|
+ private final byte[] buffer = new byte[8192];
|
||
|
+ private final Deflater deflater = new Deflater();
|
||
|
+
|
||
|
+ @Override
|
||
|
+ protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception
|
||
|
+ {
|
||
|
+ ByteBuf in = (ByteBuf) msg;
|
||
|
+ int origSize = in.readableBytes();
|
||
|
+ PacketDataSerializer serializer = new PacketDataSerializer( out );
|
||
|
+
|
||
|
+ if ( origSize < 256 )
|
||
|
+ {
|
||
|
+ serializer.b( 0 );
|
||
|
+ serializer.writeBytes( in );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ byte[] data = new byte[ origSize ];
|
||
|
+ in.readBytes( data );
|
||
|
+
|
||
|
+ serializer.b( data.length );
|
||
|
+
|
||
|
+ deflater.setInput( data );
|
||
|
+ deflater.finish();
|
||
|
+ while (!deflater.finished()) {
|
||
|
+ int count = deflater.deflate( buffer );
|
||
|
+ serializer.writeBytes( buffer, 0, count );
|
||
|
+ }
|
||
|
+ deflater.reset();
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
diff --git a/src/main/java/org/spigotmc/SpigotDecompressor.java b/src/main/java/org/spigotmc/SpigotDecompressor.java
|
||
|
new file mode 100644
|
||
|
index 0000000..ffebf5d
|
||
|
--- /dev/null
|
||
|
+++ b/src/main/java/org/spigotmc/SpigotDecompressor.java
|
||
|
@@ -0,0 +1,42 @@
|
||
|
+package org.spigotmc;
|
||
|
+
|
||
|
+import net.minecraft.server.PacketDataSerializer;
|
||
|
+import net.minecraft.util.io.netty.buffer.ByteBuf;
|
||
|
+import net.minecraft.util.io.netty.buffer.Unpooled;
|
||
|
+import net.minecraft.util.io.netty.channel.ChannelHandlerContext;
|
||
|
+import net.minecraft.util.io.netty.handler.codec.ByteToMessageDecoder;
|
||
|
+
|
||
|
+import java.util.List;
|
||
|
+import java.util.zip.Inflater;
|
||
|
+
|
||
|
+public class SpigotDecompressor extends ByteToMessageDecoder
|
||
|
+{
|
||
|
+
|
||
|
+ private final Inflater inflater = new Inflater();
|
||
|
+
|
||
|
+ @Override
|
||
|
+ protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> objects) throws Exception
|
||
|
+ {
|
||
|
+ if ( byteBuf.readableBytes() == 0 )
|
||
|
+ {
|
||
|
+ return;
|
||
|
+ }
|
||
|
+
|
||
|
+ PacketDataSerializer serializer = new PacketDataSerializer( byteBuf );
|
||
|
+ int size = serializer.a();
|
||
|
+ if ( size == 0 )
|
||
|
+ {
|
||
|
+ objects.add( serializer.readBytes( serializer.readableBytes() ) );
|
||
|
+ } else
|
||
|
+ {
|
||
|
+ byte[] compressedData = new byte[ serializer.readableBytes() ];
|
||
|
+ serializer.readBytes( compressedData );
|
||
|
+ inflater.setInput( compressedData );
|
||
|
+
|
||
|
+ byte[] data = new byte[ size ];
|
||
|
+ inflater.inflate( data );
|
||
|
+ objects.add( Unpooled.wrappedBuffer( data ) );
|
||
|
+ inflater.reset();
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
diff --git a/src/main/resources/blocks.json b/src/main/resources/blocks.json
|
||
|
new file mode 100644
|
||
|
index 0000000..8dd484d
|
||
|
--- /dev/null
|
||
|
+++ b/src/main/resources/blocks.json
|
||
|
@@ -0,0 +1 @@
|
||
|
+["0:0","1:0","1:1","1:2","1:3","1:4","1:5","1:6","2:0","3:0","3:1","3:2","4:0","5:0","5:1","5:2","5:3","5:4","5:5","6:0","6:1","6:2","6:3","6:4","6:5","6:8","6:9","6:10","6:11","6:12","6:13","7:0","8:0","8:1","8:2","8:3","8:4","8:5","8:6","8:7","8:8","8:9","8:10","8:11","8:12","8:13","8:14","8:15","9:0","9:1","9:2","9:3","9:4","9:5","9:6","9:7","9:8","9:9","9:10","9:11","9:12","9:13","9:14","9:15","10:0","10:1","10:2","10:3","10:4","10:5","10:6","10:7","10:8","10:9","10:10","10:11","10:12","10:13","10:14","10:15","11:0","11:1","11:2","11:3","11:4","11:5","11:6","11:7","11:8","11:9","11:10","11:11","11:12","11:13","11:14","11:15","12:0","12:1","13:0","14:0","15:0","16:0","17:0","17:1","17:2","17:3","17:4","17:5","17:6","17:7","17:8","17:9","17:10","17:11","17:12","17:13","17:14","17:15","18:0","18:1","18:2","18:3","18:4","18:5","18:6","18:7","18:8","18:9","18:10","18:11","18:12","18:13","18:14","18:15","19:0","19:1","20:0","21:0","22:0","23:0","23:1","23:2","23:3","23:4","23:5","23:8","23:9","23:10","23:11","23:12","23:13","24:0","24:1","24:2","25:0","26:0","26:1","26:2","26:3","26:8","26:9","26:10","26:11","26:12","26:13","26:14","26:15","27:0","27:1","27:2","27:3","27:4","27:5","27:8","27:9","27:10","27:11","27:12","27:13","28:0","28:1","28:2","28:3","28:4","28:5","28:8","28:9","28:10","28:11","28:12","28:13","29:0","29:1","29:2","29:3","29:4","29:5","29:8","29:9","29:10","29:11","29:12","29:13","30:0","31:0","31:1","31:2","32:0","33:0","33:1","33:2","33:3","33:4","33:5","33:8","33:9","33:10","33:11","33:12","33:13","34:0","34:1","34:2","34:3","34:4","34:5","34:8","34:9","34:10","34:11","34:12","34:13","35:0","35:1","35:2","35:3","35:4","35:5","35:6","35:7","35:8","35:9","35:10","35:11","35:12","35:13","35:14","35:15","36:0","36:1","36:2","36:3","36:4","36:5","36:8","36:9","36:10","36:11","36:12","36:13","37:0","38:0","38:1","38:2","38:3","38:4","38:5","38:6","38:7","38:8","39:0","40:0","41:0","42:0","43:0","43:1","43:2","43:3","43:4","43:5","43:6","43:7","43:8","43:9","43:10","43:11","43:12","43:13","43:14","43:15","44:0","44:1","44:2","44:3","44:4","44:5","44:6","44:7","44:8","44:9","44:10","44:11","44:12","44:13","44:14","44:15","45:0","46:0","46:1","47:0","48:0","49:0","50:1","50:2","50:3","50:4","50:5","51:0","51:1","51:2","51:3","51:4","51:5","51:6","51:7","51:8","51:9","51:10","51:11","51:12","51:13","51:14","51:15","52:0","53:0","53:1","53:2","53:3","53:4","53:5","53:6","53:7","54:2","54:3","54:4","54:5","55:0","55:1","55:2","55:3","55:4","55:5","55:6","55:7","55:8","55:9","55:10","55:11","55:12","55:13","55:14","55:15","56:0","57:0","58:0","59:0","59:1","59:2","59:3","59:4","59:5","59:6","59:7","60:0","60:1","60:2","60:3","60:4","60:5","60:6","60:7","61:2","61:3","61:4","61:5","62:2","62:3","62:4","62:5","63:0","63:1","63:2","63:3","63:4","63:5","63:6","63:7","63:8","63:9","63:10","63:11","63:12","63:13","63:14","63:15","64:0","64:1","64:2","64:3","64:4","64:5","64:6","64:7","64:8","64:9","64:10","64:11","65:2","65:3","65:4","65:5","66:0","66:1","66:2","66:3","66:4","66:5","66:6","66:7","66:8","66:9","67:0","67:1","67:2","67:3","67:4","67:5","67:6","67:7","68:2","68:3","68:4","68:5","69:0","69:1","69:2","69:3","69:4","69:5","69:6","69:7","69:8","69:9","69:10","69:11","69:12","69:13","69:14","69:15","70:0","70:1","71:0","71:1","71:2","71:3","71:4","71:5","71:6","71:7","71:8","71:9","71:10","71:11","72:0","72:1","73:0","74:0","75:1","75:2","75:3","75:4","75:5","76:1","76:2","76:3","76:4","76:5","77:0","77:1","77:2","77:3","77:4","77:5","77:8","77:9","77:10","77:11","77:12","77:13","78:0","78:1","78:2","78:3","78:4","78:5","78:6","78:7","79:0","80:0","81:0","81:1","81:2","81:3","81:4","81:5","81:6","81:7","81:8","81:9","81:10","81:11","81:12","81:13","81:14","81:15","82:0","83:0","83:1","83:2","83:3","83:4","83:5","83:6","83:7","83:8","83:9","83:10","83:11","83:12","83:13","83:14","83:15","84:0","84:1","85:0","86:0","86:1","86:2","86:3","87:0","88:0","89:0","90:1","90:2","91:0","91:1","91:2","91:3","92:0","92:1","92:2","92:3","92:4","92:5","92:6","93:0","93:1","93:2","93:3","93:4","93:5","93:6","93:7","93:8","93
|
||
|
--
|
||
|
1.9.1
|
||
|
|