mirror of
https://hub.spigotmc.org/stash/scm/spigot/spigot.git
synced 2025-09-18 21:33:01 +00:00

This commit allows Spigot to support Minecraft clients both of versions 1.7.x and of 1.8.x. *** It is imperative that backups be taken before installing this build on your server! *** Please note that this commit is NOT a fully functioning 1.8 server and does not contain all aspects of 1.8 support. Many months of time and effort have gone into ensuring that this patch is as complete, bug free and reliable as possible, however it is highly likely there will be as of yet undiscovered bugs and glitches. Please report any such issues to the bug report forum, stating your client, server, and if applicable BungeeCord versions. *** Any bug reports not running the very latest versions of these softwares will be ignored ***
4114 lines
178 KiB
Diff
4114 lines
178 KiB
Diff
From e27f4123e1565607643089e400ecf05282f69571 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..f24c809 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java
|
|
@@ -27,11 +27,20 @@ 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 );
|
|
+ packetdataserializer.b( (Block.getId( this.block ) << 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..c483b31 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java
|
|
@@ -13,26 +13,41 @@ 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 id = ( Block.getId( chunk.getType( l, j1, i1 ) ) & 4095 ) << 4 | chunk.getData( l, j1, i1 ) & 15;
|
|
+ dataoutputstream.writeShort((short) id);
|
|
+ blocks[k] = id;
|
|
}
|
|
+ // Spigot end
|
|
|
|
this.c = bytearrayoutputstream.toByteArray();
|
|
if (this.c.length != j) {
|
|
@@ -56,15 +71,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:9","93:10","93:11","93:12","93:13","93:14","93:15","94:0","94:1","94:2","94:3","94:4","94:5","94:6","94:7","94:8","94:9","94:10","94:11","94:12","94:13","94:14","94:15","95:0","95:1","95:2","95:3","95:4","95:5","95:6","95:7","95:8","95:9","95:10","95:11","95:12","95:13","95:14","95:15","96:0","96:1","96:2","96:3","96:4","96:5","96:6","96:7","96:8","96:9","96:10","96:11","96:12","96:13","96:14","96:15","97:0","97:1","97:2","97:3","97:4","97:5","98:0","98:1","98:2","98:3","99:0","99:1","99:2","99:3","99:4","99:5","99:6","99:7","99:8","99:9","99:10","99:14","99:15","100:0","100:1","100:2","100:3","100:4","100:5","100:6","100:7","100:8","100:9","100:10","100:14","100:15","101:0","102:0","103:0","104:0","104:1","104:2","104:3","104:4","104:5","104:6","104:7","105:0","105:1","105:2","105:3","105:4","105:5","105:6","105:7","106:0","106:1","106:2","106:3","106:4","106:5","106:6","106:7","106:8","106:9","106:10","106:11","106:12","106:13","106:14","106:15","107:0","107:1","107:2","107:3","107:4","107:5","107:6","107:7","107:8","107:9","107:10","107:11","107:12","107:13","107:14","107:15","108:0","108:1","108:2","108:3","108:4","108:5","108:6","108:7","109:0","109:1","109:2","109:3","109:4","109:5","109:6","109:7","110:0","111:0","112:0","113:0","114:0","114:1","114:2","114:3","114:4","114:5","114:6","114:7","115:0","115:1","115:2","115:3","116:0","117:0","117:1","117:2","117:3","117:4","117:5","117:6","117:7","118:0","118:1","118:2","118:3","119:0","120:0","120:1","120:2","120:3","120:4","120:5","120:6","120:7","121:0","122:0","123:0","124:0","125:0","125:1","125:2","125:3","125:4","125:5","126:0","126:1","126:2","126:3","126:4","126:5","126:8","126:9","126:10","126:11","126:12","126:13","127:0","127:1","127:2","127:3","127:4","127:5","127:6","127:7","127:8","127:9","127:10","127:11","128:0","128:1","128:2","128:3","128:4","128:5","128:6","128:7","129:0","130:2","130:3","130:4","130:5","131:0","131:1","131:2","131:3","131:4","131:5","131:6","131:7","131:8","131:9","131:10","131:11","131:12","131:13","131:14","131:15","132:0","132:1","132:2","132:3","132:4","132:5","132:6","132:7","132:8","132:9","132:10","132:11","132:12","132:13","132:14","132:15","133:0","134:0","134:1","134:2","134:3","134:4","134:5","134:6","134:7","135:0","135:1","135:2","135:3","135:4","135:5","135:6","135:7","136:0","136:1","136:2","136:3","136:4","136:5","136:6","136:7","137:0","137:1","138:0","139:0","139:1","140:0","140:1","140:2","140:3","140:4","140:5","140:6","140:7","140:8","140:9","140:10","140:11","140:12","140:13","140:14","140:15","141:0","141:1","141:2","141:3","141:4","141:5","141:6","141:7","142:0","142:1","142:2","142:3","142:4","142:5","142:6","142:7","143:0","143:1","143:2","143:3","143:4","143:5","143:8","143:9","143:10","143:11","143:12","143:13","144:0","144:1","144:2","144:3","144:4","144:5","144:8","144:9","144:10","144:11","144:12","144:13","145:0","145:1","145:2","145:3","145:4","145:5","145:6","145:7","145:8","145:9","145:10","145:11","146:2","146:3","146:4","146:5","147:0","147:1","147:2","147:3","147:4","147:5","147:6","147:7","147:8","147:9","147:10","147:11","147:12","147:13","147:14","147:15","148:0","148:1","148:2","148:3","148:4","148:5","148:6","148:7","148:8","148:9","148:10","148:11","148:12","148:13","148:14","148:15","149:0","149:1","149:2","149:3","149:4","149:5","149:6","149:7","149:8","149:9","149:10","149:11","149:12","149:13","149:14","149:15","150:0","150:1","150:2","150:3","150:4","150:5","150:6","150:7","150:8","150:9","150:10","150:11","150:12","150:13","150:14","150:15","151:0","151:1","151:2","151:3","151:4","151:5","151:6","151:7","151:8","151:9","151:10","151:11","151:12","151:13","151:14","151:15","152:0","153:0","154:0","154:2","154:3","154:4","154:5","154:8","154:10","154:11","154:12","154:13","155:0","155:1","155:2","155:3","155:4","156:0","156:1","156:2","156:3","156:4","156:5","156:6","156:7","157:0","157:1","157:2","157:3","157:4","157:5","157:8","157:9","157:10","157:11","157:12","157:13","158:0","158:1","158:2","158:3","158:4","158:5","158:8","158:9","158:10","158:11","158:12","158:13","159:0","159:1","159:2","159:3","159:4","159:5","159:6","159:7","159:8","159:9","159:10","159:11","159:12","159:13","159:14","159:15","160:0","160:1","160:2","160:3","160:4","160:5","160:6","160:7","160:8","160:9","160:10","160:11","160:12","160:13","160:14","160:15","161:0","161:1","161:4","161:5","161:8","161:9","161:12","161:13","162:0","162:1","162:4","162:5","162:8","162:9","162:12","162:13","163:0","163:1","163:2","163:3","163:4","163:5","163:6","163:7","164:0","164:1","164:2","164:3","164:4","164:5","164:6","164:7","165:0","166:0","167:0","167:1","167:2","167:3","167:4","167:5","167:6","167:7","167:8","167:9","167:10","167:11","167:12","167:13","167:14","167:15","168:0","168:1","168:2","169:0","170:0","170:4","170:8","171:0","171:1","171:2","171:3","171:4","171:5","171:6","171:7","171:8","171:9","171:10","171:11","171:12","171:13","171:14","171:15","172:0","173:0","174:0","175:0","175:1","175:2","175:3","175:4","175:5","175:8","176:0","176:1","176:2","176:3","176:4","176:5","176:6","176:7","176:8","176:9","176:10","176:11","176:12","176:13","176:14","176:15","177:2","177:3","177:4","177:5","178:0","178:1","178:2","178:3","178:4","178:5","178:6","178:7","178:8","178:9","178:10","178:11","178:12","178:13","178:14","178:15","179:0","179:1","179:2","180:0","180:1","180:2","180:3","180:4","180:5","180:6","180:7","181:0","181:8","182:0","182:8","183:0","183:1","183:2","183:3","183:4","183:5","183:6","183:7","183:8","183:9","183:10","183:11","183:12","183:13","183:14","183:15","184:0","184:1","184:2","184:3","184:4","184:5","184:6","184:7","184:8","184:9","184:10","184:11","184:12","184:13","184:14","184:15","185:0","185:1","185:2","185:3","185:4","185:5","185:6","185:7","185:8","185:9","185:10","185:11","185:12","185:13","185:14","185:15","186:0","186:1","186:2","186:3","186:4","186:5","186:6","186:7","186:8","186:9","186:10","186:11","186:12","186:13","186:14","186:15","187:0","187:1","187:2","187:3","187:4","187:5","187:6","187:7","187:8","187:9","187:10","187:11","187:12","187:13","187:14","187:15","188:0","189:0","190:0","191:0","192:0","193:0","193:1","193:2","193:3","193:4","193:5","193:6","193:7","193:8","193:9","193:10","193:11","194:0","194:1","194:2","194:3","194:4","194:5","194:6","194:7","194:8","194:9","194:10","194:11","195:0","195:1","195:2","195:3","195:4","195:5","195:6","195:7","195:8","195:9","195:10","195:11","196:0","196:1","196:2","196:3","196:4","196:5","196:6","196:7","196:8","196:9","196:10","196:11","197:0","197:1","197:2","197:3","197:4","197:5","197:6","197:7","197:8","197:9","197:10","197:11"]
|
|
--
|
|
1.9.1
|
|
|