From f90c694774b01f4ee2d567f4d4a66c7c879c1fb9 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Tue, 21 Apr 2015 19:48:02 -0400 Subject: [PATCH] Mineplex - Packet Changes diff --git a/src/main/java/com/mineplex/spigot/IPacketVerifier.java b/src/main/java/com/mineplex/spigot/IPacketVerifier.java new file mode 100644 index 0000000..4ada0b2 --- /dev/null +++ b/src/main/java/com/mineplex/spigot/IPacketVerifier.java @@ -0,0 +1,8 @@ +package com.mineplex.spigot; + +import net.minecraft.server.Packet; + +public interface IPacketVerifier +{ + public boolean verify(Packet packet); +} diff --git a/src/main/java/com/mineplex/spigot/PacketProcessor.java b/src/main/java/com/mineplex/spigot/PacketProcessor.java new file mode 100644 index 0000000..e372c4f --- /dev/null +++ b/src/main/java/com/mineplex/spigot/PacketProcessor.java @@ -0,0 +1,42 @@ +package com.mineplex.spigot; + +import net.minecraft.server.NetworkManager; +import net.minecraft.server.Packet; + +import java.util.ArrayList; +import java.util.List; + +public class PacketProcessor +{ + private List _packetVerifiers; + + public PacketProcessor() + { + _packetVerifiers = new ArrayList(); + } + + public void addPacketVerifier(IPacketVerifier verifier) + { + _packetVerifiers.add(verifier); + } + + public void processPacket(Packet packet, NetworkManager networkManager) + { + boolean addDefaultPacket = true; + + for (IPacketVerifier verifier : _packetVerifiers) + { + if (!verifier.verify(packet)) + addDefaultPacket = false; + } + + if (addDefaultPacket) + networkManager.handle(packet); + } + + public void clearVerifiers() + { + _packetVerifiers.clear(); + } + +} diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java index 01c09b1..5d36e16 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java @@ -325,7 +325,7 @@ public class NetworkManager extends SimpleChannelInboundHandler { this.a(channelhandlercontext, (Packet) object); } - static class QueuedPacket { + public static class QueuedPacket { private final Packet a; private final GenericFutureListener>[] b; diff --git a/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java b/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java index 4dfb6c0..05c88a6 100644 --- a/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java +++ b/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java @@ -4,7 +4,7 @@ import java.io.IOException; public class PacketPlayInCloseWindow implements Packet { - private int id; + public int id; public PacketPlayInCloseWindow() {} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java b/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java new file mode 100644 index 0000000..b5fdd87 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutAnimation implements Packet { + + public int a; + public int b; + + public PacketPlayOutAnimation() {} + + public PacketPlayOutAnimation(Entity entity, int i) { + this.a = entity.getId(); + this.b = i; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readUnsignedByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeByte(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java new file mode 100644 index 0000000..6e17e4b --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java @@ -0,0 +1,41 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutAttachEntity implements Packet +{ + + public int a; + public int b; + public int c; + + public PacketPlayOutAttachEntity() + { + } + + public PacketPlayOutAttachEntity(int i, Entity entity, Entity entity1) + { + this.a = i; + this.b = entity.getId(); + this.c = entity1 != null ? entity1.getId() : -1; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException + { + this.b = packetdataserializer.readInt(); + this.c = packetdataserializer.readInt(); + this.a = packetdataserializer.readUnsignedByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException + { + packetdataserializer.writeInt(this.b); + packetdataserializer.writeInt(this.c); + packetdataserializer.writeByte(this.a); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) + { + packetlistenerplayout.a(this); + } +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/PacketPlayOutChat.java b/src/main/java/net/minecraft/server/PacketPlayOutChat.java index 6cd5df2..5acec91 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutChat.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutChat.java @@ -4,9 +4,9 @@ import java.io.IOException; public class PacketPlayOutChat implements Packet { - private IChatBaseComponent a; + public IChatBaseComponent a; public net.md_5.bungee.api.chat.BaseComponent[] components; // Spigot - private byte b; + public byte b; public PacketPlayOutChat() {} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java new file mode 100644 index 0000000..702d33d --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java @@ -0,0 +1,134 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntity implements Packet { + + public int a; + public byte b; + public byte c; + public byte d; + public byte e; + public byte f; + public boolean g; + public boolean h; + + public PacketPlayOutEntity() {} + + public PacketPlayOutEntity(int i) { + this.a = i; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public String toString() { + return "Entity_" + super.toString(); + } + + public static class PacketPlayOutEntityLook extends PacketPlayOutEntity { + + public PacketPlayOutEntityLook() { + this.h = true; + } + + public PacketPlayOutEntityLook(int i, byte b0, byte b1, boolean flag) { + super(i); + this.e = b0; + this.f = b1; + this.h = true; + this.g = flag; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + super.a(packetdataserializer); + this.e = packetdataserializer.readByte(); + this.f = packetdataserializer.readByte(); + this.g = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + super.b(packetdataserializer); + packetdataserializer.writeByte(this.e); + packetdataserializer.writeByte(this.f); + packetdataserializer.writeBoolean(this.g); + } + + } + + public static class PacketPlayOutRelEntityMove extends PacketPlayOutEntity { + + public PacketPlayOutRelEntityMove() {} + + public PacketPlayOutRelEntityMove(int i, byte b0, byte b1, byte b2, boolean flag) { + super(i); + this.b = b0; + this.c = b1; + this.d = b2; + this.g = flag; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + super.a(packetdataserializer); + this.b = packetdataserializer.readByte(); + this.c = packetdataserializer.readByte(); + this.d = packetdataserializer.readByte(); + this.g = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + super.b(packetdataserializer); + packetdataserializer.writeByte(this.b); + packetdataserializer.writeByte(this.c); + packetdataserializer.writeByte(this.d); + packetdataserializer.writeBoolean(this.g); + } + } + + public static class PacketPlayOutRelEntityMoveLook extends PacketPlayOutEntity { + + public PacketPlayOutRelEntityMoveLook() { + this.h = true; + } + + public PacketPlayOutRelEntityMoveLook(int i, byte b0, byte b1, byte b2, byte b3, byte b4, boolean flag) { + super(i); + this.b = b0; + this.c = b1; + this.d = b2; + this.e = b3; + this.f = b4; + this.g = flag; + this.h = true; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + super.a(packetdataserializer); + this.b = packetdataserializer.readByte(); + this.c = packetdataserializer.readByte(); + this.d = packetdataserializer.readByte(); + this.e = packetdataserializer.readByte(); + this.f = packetdataserializer.readByte(); + this.g = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + super.b(packetdataserializer); + packetdataserializer.writeByte(this.b); + packetdataserializer.writeByte(this.c); + packetdataserializer.writeByte(this.d); + packetdataserializer.writeByte(this.e); + packetdataserializer.writeByte(this.f); + packetdataserializer.writeBoolean(this.g); + } + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java new file mode 100644 index 0000000..ecc2e78 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java @@ -0,0 +1,35 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntityEquipment implements Packet { + + public int a; + public int b; + public ItemStack c; + + public PacketPlayOutEntityEquipment() {} + + public PacketPlayOutEntityEquipment(int i, int j, ItemStack itemstack) { + this.a = i; + this.b = j; + this.c = itemstack == null ? null : itemstack.cloneItemStack(); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readShort(); + this.c = packetdataserializer.i(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeShort(this.b); + packetdataserializer.a(this.c); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java new file mode 100644 index 0000000..dbfcc3c --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java @@ -0,0 +1,37 @@ +package net.minecraft.server; + +import java.io.IOException; +import java.util.List; + +public class PacketPlayOutEntityMetadata implements Packet { + + public int a; + public List b; + + public PacketPlayOutEntityMetadata() {} + + public PacketPlayOutEntityMetadata(int i, DataWatcher datawatcher, boolean flag) { + this.a = i; + if (flag) { + this.b = datawatcher.c(); + } else { + this.b = datawatcher.b(); + } + + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = DataWatcher.b(packetdataserializer); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + DataWatcher.a(this.b, packetdataserializer); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java new file mode 100644 index 0000000..786047c --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java @@ -0,0 +1,58 @@ +package net.minecraft.server; + +public class PacketPlayOutEntityTeleport implements Packet { + + public int a; + public int b; + public int c; + public int d; + public byte e; + public byte f; + public boolean g; + + public PacketPlayOutEntityTeleport() {} + + public PacketPlayOutEntityTeleport(Entity entity) { + this.a = entity.getId(); + this.b = MathHelper.floor(entity.locX * 32.0D); + this.c = MathHelper.floor(entity.locY * 32.0D); + this.d = MathHelper.floor(entity.locZ * 32.0D); + this.e = (byte) ((int) (entity.yaw * 256.0F / 360.0F)); + this.f = (byte) ((int) (entity.pitch * 256.0F / 360.0F)); + this.g = entity.onGround; + } + + public PacketPlayOutEntityTeleport(int i, int j, int k, int l, byte b0, byte b1, boolean flag) { + this.a = i; + this.b = j; + this.c = k; + this.d = l; + this.e = b0; + this.f = b1; + this.g = flag; + } + + public void a(PacketDataSerializer packetdataserializer) { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readInt(); + this.c = packetdataserializer.readInt(); + this.d = packetdataserializer.readInt(); + this.e = packetdataserializer.readByte(); + this.f = packetdataserializer.readByte(); + this.g = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) { + packetdataserializer.b(this.a); + packetdataserializer.writeInt(this.b); + packetdataserializer.writeInt(this.c); + packetdataserializer.writeInt(this.d); + packetdataserializer.writeByte(this.e); + packetdataserializer.writeByte(this.f); + packetdataserializer.writeBoolean(this.g); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java new file mode 100644 index 0000000..6c8dbbc --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java @@ -0,0 +1,69 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntityVelocity implements Packet { + + public int a; + public int b; + public int c; + public int d; + + public PacketPlayOutEntityVelocity() {} + + public PacketPlayOutEntityVelocity(Entity entity) { + this(entity.getId(), entity.motX, entity.motY, entity.motZ); + } + + public PacketPlayOutEntityVelocity(int i, double d0, double d1, double d2) { + this.a = i; + double d3 = 3.9D; + + if (d0 < -d3) { + d0 = -d3; + } + + if (d1 < -d3) { + d1 = -d3; + } + + if (d2 < -d3) { + d2 = -d3; + } + + if (d0 > d3) { + d0 = d3; + } + + if (d1 > d3) { + d1 = d3; + } + + if (d2 > d3) { + d2 = d3; + } + + this.b = (int) (d0 * 8000.0D); + this.c = (int) (d1 * 8000.0D); + this.d = (int) (d2 * 8000.0D); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readShort(); + this.c = packetdataserializer.readShort(); + this.d = packetdataserializer.readShort(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeShort(this.b); + packetdataserializer.writeShort(this.c); + packetdataserializer.writeShort(this.d); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java b/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java new file mode 100644 index 0000000..23fa49d --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java @@ -0,0 +1,64 @@ +package net.minecraft.server; + +import java.io.IOException; +import java.util.List; +import java.util.UUID; + +public class PacketPlayOutNamedEntitySpawn implements Packet { + + public int a; + public UUID b; + public int c; + public int d; + public int e; + public byte f; + public byte g; + public int h; + public DataWatcher i; + public List j; + + public PacketPlayOutNamedEntitySpawn() {} + + public PacketPlayOutNamedEntitySpawn(EntityHuman entityhuman) { + this.a = entityhuman.getId(); + this.b = entityhuman.getProfile().getId(); + this.c = MathHelper.floor(entityhuman.locX * 32.0D); + this.d = MathHelper.floor(entityhuman.locY * 32.0D); + this.e = MathHelper.floor(entityhuman.locZ * 32.0D); + this.f = (byte) ((int) (entityhuman.yaw * 256.0F / 360.0F)); + this.g = (byte) ((int) (entityhuman.pitch * 256.0F / 360.0F)); + ItemStack itemstack = entityhuman.inventory.getItemInHand(); + + this.h = itemstack == null ? 0 : Item.getId(itemstack.getItem()); + this.i = entityhuman.getDataWatcher(); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.g(); + this.c = packetdataserializer.readInt(); + this.d = packetdataserializer.readInt(); + this.e = packetdataserializer.readInt(); + this.f = packetdataserializer.readByte(); + this.g = packetdataserializer.readByte(); + this.h = packetdataserializer.readShort(); + this.j = DataWatcher.b(packetdataserializer); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.a(this.b); + packetdataserializer.writeInt(this.c); + packetdataserializer.writeInt(this.d); + packetdataserializer.writeInt(this.e); + packetdataserializer.writeByte(this.f); + packetdataserializer.writeByte(this.g); + packetdataserializer.writeShort(this.h); + this.i.a(packetdataserializer); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java b/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java new file mode 100644 index 0000000..99809cd --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java @@ -0,0 +1,254 @@ +package net.minecraft.server; + +import com.google.common.base.Objects; +import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import java.io.IOException; +import java.util.Iterator; +import java.util.List; + +public class PacketPlayOutPlayerInfo implements Packet { + + public PacketPlayOutPlayerInfo.EnumPlayerInfoAction a; + public final List b = Lists.newArrayList(); + + public PacketPlayOutPlayerInfo() {} + + public PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction packetplayoutplayerinfo_enumplayerinfoaction, EntityPlayer... aentityplayer) { + this.a = packetplayoutplayerinfo_enumplayerinfoaction; + EntityPlayer[] aentityplayer1 = aentityplayer; + int i = aentityplayer.length; + + for (int j = 0; j < i; ++j) { + EntityPlayer entityplayer = aentityplayer1[j]; + + this.b.add(new PacketPlayOutPlayerInfo.PlayerInfoData(entityplayer.getProfile(), entityplayer.ping, entityplayer.playerInteractManager.getGameMode(), entityplayer.getPlayerListName())); + } + + } + + public PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction packetplayoutplayerinfo_enumplayerinfoaction, Iterable iterable) { + this.a = packetplayoutplayerinfo_enumplayerinfoaction; + Iterator iterator = iterable.iterator(); + + while (iterator.hasNext()) { + EntityPlayer entityplayer = (EntityPlayer) iterator.next(); + + this.b.add(new PacketPlayOutPlayerInfo.PlayerInfoData(entityplayer.getProfile(), entityplayer.ping, entityplayer.playerInteractManager.getGameMode(), entityplayer.getPlayerListName())); + } + + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = (PacketPlayOutPlayerInfo.EnumPlayerInfoAction) packetdataserializer.a(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.class); + int i = packetdataserializer.e(); + + for (int j = 0; j < i; ++j) { + GameProfile gameprofile = null; + int k = 0; + WorldSettings.EnumGamemode worldsettings_enumgamemode = null; + IChatBaseComponent ichatbasecomponent = null; + + switch (PacketPlayOutPlayerInfo.SyntheticClass_1.a[this.a.ordinal()]) { + case 1: + gameprofile = new GameProfile(packetdataserializer.g(), packetdataserializer.c(16)); + int l = packetdataserializer.e(); + + for (int i1 = 0; i1 < l; ++i1) { + String s = packetdataserializer.c(32767); + String s1 = packetdataserializer.c(32767); + + if (packetdataserializer.readBoolean()) { + gameprofile.getProperties().put(s, new Property(s, s1, packetdataserializer.c(32767))); + } else { + gameprofile.getProperties().put(s, new Property(s, s1)); + } + } + + worldsettings_enumgamemode = WorldSettings.EnumGamemode.getById(packetdataserializer.e()); + k = packetdataserializer.e(); + if (packetdataserializer.readBoolean()) { + ichatbasecomponent = packetdataserializer.d(); + } + break; + + case 2: + gameprofile = new GameProfile(packetdataserializer.g(), (String) null); + worldsettings_enumgamemode = WorldSettings.EnumGamemode.getById(packetdataserializer.e()); + break; + + case 3: + gameprofile = new GameProfile(packetdataserializer.g(), (String) null); + k = packetdataserializer.e(); + break; + + case 4: + gameprofile = new GameProfile(packetdataserializer.g(), (String) null); + if (packetdataserializer.readBoolean()) { + ichatbasecomponent = packetdataserializer.d(); + } + break; + + case 5: + gameprofile = new GameProfile(packetdataserializer.g(), (String) null); + } + + this.b.add(new PacketPlayOutPlayerInfo.PlayerInfoData(gameprofile, k, worldsettings_enumgamemode, ichatbasecomponent)); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a((Enum) this.a); + packetdataserializer.b(this.b.size()); + Iterator iterator = this.b.iterator(); + + while (iterator.hasNext()) { + PacketPlayOutPlayerInfo.PlayerInfoData packetplayoutplayerinfo_playerinfodata = (PacketPlayOutPlayerInfo.PlayerInfoData) iterator.next(); + + switch (PacketPlayOutPlayerInfo.SyntheticClass_1.a[this.a.ordinal()]) { + case 1: + packetdataserializer.a(packetplayoutplayerinfo_playerinfodata.a().getId()); + packetdataserializer.a(packetplayoutplayerinfo_playerinfodata.a().getName()); + packetdataserializer.b(packetplayoutplayerinfo_playerinfodata.a().getProperties().size()); + Iterator iterator1 = packetplayoutplayerinfo_playerinfodata.a().getProperties().values().iterator(); + + while (iterator1.hasNext()) { + Property property = (Property) iterator1.next(); + + packetdataserializer.a(property.getName()); + packetdataserializer.a(property.getValue()); + if (property.hasSignature()) { + packetdataserializer.writeBoolean(true); + packetdataserializer.a(property.getSignature()); + } else { + packetdataserializer.writeBoolean(false); + } + } + + packetdataserializer.b(packetplayoutplayerinfo_playerinfodata.c().getId()); + packetdataserializer.b(packetplayoutplayerinfo_playerinfodata.b()); + if (packetplayoutplayerinfo_playerinfodata.d() == null) { + packetdataserializer.writeBoolean(false); + } else { + packetdataserializer.writeBoolean(true); + packetdataserializer.a(packetplayoutplayerinfo_playerinfodata.d()); + } + break; + + case 2: + packetdataserializer.a(packetplayoutplayerinfo_playerinfodata.a().getId()); + packetdataserializer.b(packetplayoutplayerinfo_playerinfodata.c().getId()); + break; + + case 3: + packetdataserializer.a(packetplayoutplayerinfo_playerinfodata.a().getId()); + packetdataserializer.b(packetplayoutplayerinfo_playerinfodata.b()); + break; + + case 4: + packetdataserializer.a(packetplayoutplayerinfo_playerinfodata.a().getId()); + if (packetplayoutplayerinfo_playerinfodata.d() == null) { + packetdataserializer.writeBoolean(false); + } else { + packetdataserializer.writeBoolean(true); + packetdataserializer.a(packetplayoutplayerinfo_playerinfodata.d()); + } + break; + + case 5: + packetdataserializer.a(packetplayoutplayerinfo_playerinfodata.a().getId()); + } + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public String toString() { + return Objects.toStringHelper(this).add("action", this.a).add("entries", this.b).toString(); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[PacketPlayOutPlayerInfo.EnumPlayerInfoAction.values().length]; + + static { + try { + PacketPlayOutPlayerInfo.SyntheticClass_1.a[PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + PacketPlayOutPlayerInfo.SyntheticClass_1.a[PacketPlayOutPlayerInfo.EnumPlayerInfoAction.UPDATE_GAME_MODE.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + PacketPlayOutPlayerInfo.SyntheticClass_1.a[PacketPlayOutPlayerInfo.EnumPlayerInfoAction.UPDATE_LATENCY.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + PacketPlayOutPlayerInfo.SyntheticClass_1.a[PacketPlayOutPlayerInfo.EnumPlayerInfoAction.UPDATE_DISPLAY_NAME.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + try { + PacketPlayOutPlayerInfo.SyntheticClass_1.a[PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER.ordinal()] = 5; + } catch (NoSuchFieldError nosuchfielderror4) { + ; + } + + } + } + + public class PlayerInfoData { + + public final int b; + public final WorldSettings.EnumGamemode c; + public final GameProfile d; + public final IChatBaseComponent e; + + public PlayerInfoData(GameProfile gameprofile, int i, WorldSettings.EnumGamemode worldsettings_enumgamemode, IChatBaseComponent ichatbasecomponent) { + this.d = gameprofile; + this.b = i; + this.c = worldsettings_enumgamemode; + this.e = ichatbasecomponent; + } + + public GameProfile a() { + return this.d; + } + + public int b() { + return this.b; + } + + public WorldSettings.EnumGamemode c() { + return this.c; + } + + public IChatBaseComponent d() { + return this.e; + } + + public String toString() { + return Objects.toStringHelper(this).add("latency", this.b).add("gameMode", this.c).add("profile", this.d).add("displayName", this.e == null ? null : IChatBaseComponent.ChatSerializer.a(this.e)).toString(); + } + } + + public static enum EnumPlayerInfoAction { + + ADD_PLAYER, UPDATE_GAME_MODE, UPDATE_LATENCY, UPDATE_DISPLAY_NAME, REMOVE_PLAYER; + + private EnumPlayerInfoAction() {} + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java new file mode 100644 index 0000000..d34f59b --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java @@ -0,0 +1,133 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutSpawnEntity implements Packet { + + public int a; + public int b; + public int c; + public int d; + public int e; + public int f; + public int g; + public int h; + public int i; + public int j; + public int k; + + public PacketPlayOutSpawnEntity() {} + + public PacketPlayOutSpawnEntity(Entity entity, int i) { + this(entity, i, 0); + } + + public PacketPlayOutSpawnEntity(Entity entity, int i, int j) { + this.a = entity.getId(); + this.b = MathHelper.floor(entity.locX * 32.0D); + this.c = MathHelper.floor(entity.locY * 32.0D); + this.d = MathHelper.floor(entity.locZ * 32.0D); + this.h = MathHelper.d(entity.pitch * 256.0F / 360.0F); + this.i = MathHelper.d(entity.yaw * 256.0F / 360.0F); + this.j = i; + this.k = j; + if (j > 0) { + double d0 = entity.motX; + double d1 = entity.motY; + double d2 = entity.motZ; + double d3 = 3.9D; + + if (d0 < -d3) { + d0 = -d3; + } + + if (d1 < -d3) { + d1 = -d3; + } + + if (d2 < -d3) { + d2 = -d3; + } + + if (d0 > d3) { + d0 = d3; + } + + if (d1 > d3) { + d1 = d3; + } + + if (d2 > d3) { + d2 = d3; + } + + this.e = (int) (d0 * 8000.0D); + this.f = (int) (d1 * 8000.0D); + this.g = (int) (d2 * 8000.0D); + } + + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.j = packetdataserializer.readByte(); + this.b = packetdataserializer.readInt(); + this.c = packetdataserializer.readInt(); + this.d = packetdataserializer.readInt(); + this.h = packetdataserializer.readByte(); + this.i = packetdataserializer.readByte(); + this.k = packetdataserializer.readInt(); + if (this.k > 0) { + this.e = packetdataserializer.readShort(); + this.f = packetdataserializer.readShort(); + this.g = packetdataserializer.readShort(); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeByte(this.j); + packetdataserializer.writeInt(this.b); + packetdataserializer.writeInt(this.c); + packetdataserializer.writeInt(this.d); + packetdataserializer.writeByte(this.h); + packetdataserializer.writeByte(this.i); + packetdataserializer.writeInt(this.k); + if (this.k > 0) { + packetdataserializer.writeShort(this.e); + packetdataserializer.writeShort(this.f); + packetdataserializer.writeShort(this.g); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public void a(int i) { + this.b = i; + } + + public void b(int i) { + this.c = i; + } + + public void c(int i) { + this.d = i; + } + + public void d(int i) { + this.e = i; + } + + public void e(int i) { + this.f = i; + } + + public void f(int i) { + this.g = i; + } + +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java new file mode 100644 index 0000000..61aa281 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java @@ -0,0 +1,102 @@ +package net.minecraft.server; + +import java.io.IOException; +import java.util.List; + +public class PacketPlayOutSpawnEntityLiving implements Packet { + + public int a; + public int b; + public int c; + public int d; + public int e; + public int f; + public int g; + public int h; + public byte i; + public byte j; + public byte k; + public DataWatcher l; + public List m; + + public PacketPlayOutSpawnEntityLiving() {} + + public PacketPlayOutSpawnEntityLiving(EntityLiving entityliving) { + this.a = entityliving.getId(); + this.b = (byte) EntityTypes.a(entityliving); + this.c = MathHelper.floor(entityliving.locX * 32.0D); + this.d = MathHelper.floor(entityliving.locY * 32.0D); + this.e = MathHelper.floor(entityliving.locZ * 32.0D); + this.i = (byte) ((int) (entityliving.yaw * 256.0F / 360.0F)); + this.j = (byte) ((int) (entityliving.pitch * 256.0F / 360.0F)); + this.k = (byte) ((int) (entityliving.aK * 256.0F / 360.0F)); + double d0 = 3.9D; + double d1 = entityliving.motX; + double d2 = entityliving.motY; + double d3 = entityliving.motZ; + + if (d1 < -d0) { + d1 = -d0; + } + + if (d2 < -d0) { + d2 = -d0; + } + + if (d3 < -d0) { + d3 = -d0; + } + + if (d1 > d0) { + d1 = d0; + } + + if (d2 > d0) { + d2 = d0; + } + + if (d3 > d0) { + d3 = d0; + } + + this.f = (int) (d1 * 8000.0D); + this.g = (int) (d2 * 8000.0D); + this.h = (int) (d3 * 8000.0D); + this.l = entityliving.getDataWatcher(); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readByte() & 255; + this.c = packetdataserializer.readInt(); + this.d = packetdataserializer.readInt(); + this.e = packetdataserializer.readInt(); + this.i = packetdataserializer.readByte(); + this.j = packetdataserializer.readByte(); + this.k = packetdataserializer.readByte(); + this.f = packetdataserializer.readShort(); + this.g = packetdataserializer.readShort(); + this.h = packetdataserializer.readShort(); + this.m = DataWatcher.b(packetdataserializer); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeByte(this.b & 255); + packetdataserializer.writeInt(this.c); + packetdataserializer.writeInt(this.d); + packetdataserializer.writeInt(this.e); + packetdataserializer.writeByte(this.i); + packetdataserializer.writeByte(this.j); + packetdataserializer.writeByte(this.k); + packetdataserializer.writeShort(this.f); + packetdataserializer.writeShort(this.g); + packetdataserializer.writeShort(this.h); + this.l.a(packetdataserializer); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + +} diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index 3108938..69f4762 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -2,6 +2,7 @@ package net.minecraft.server; import com.google.common.collect.Lists; import com.google.common.util.concurrent.Futures; +import com.mineplex.spigot.PacketProcessor; import io.netty.buffer.Unpooled; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; @@ -84,6 +85,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList private boolean checkMovement = true; private boolean processedDisconnect; // CraftBukkit - added + public PacketProcessor PacketVerifier; + public PlayerConnection(MinecraftServer minecraftserver, NetworkManager networkmanager, EntityPlayer entityplayer) { this.minecraftServer = minecraftserver; this.networkManager = networkmanager; @@ -91,6 +94,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList this.player = entityplayer; entityplayer.playerConnection = this; + PacketVerifier = new PacketProcessor(); + // CraftBukkit start - add fields and methods this.server = minecraftserver.server; } @@ -881,7 +886,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList // CraftBukkit end try { - this.networkManager.handle(packet); + PacketVerifier.processPacket(packet, networkManager); } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Sending packet"); CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Packet being sent"); @@ -1398,9 +1403,13 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList if (this.player.dead) return; // CraftBukkit PlayerConnectionUtils.ensureMainThread(packetplayinclosewindow, this, this.player.u()); - CraftEventFactory.handleInventoryCloseEvent(this.player); // CraftBukkit + if (packetplayinclosewindow.id == player.activeContainer.windowId) + { + CraftEventFactory.handleInventoryCloseEvent(this.player); // CraftBukkit + + this.player.p(); + } - this.player.p(); } public void a(PacketPlayInWindowClick packetplayinwindowclick) { -- 2.3.5