From 7e301fc3e827aaaf14c6eb9afe4b50cc8470ac81 Mon Sep 17 00:00:00 2001 From: Final Child Date: Sun, 15 May 2016 15:39:09 +0900 Subject: [PATCH 1/8] Bump version to 1.9.4-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 13fb6770..86b1ac63 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.spacehq mcprotocollib - 1.9.2-SNAPSHOT + 1.9.4-SNAPSHOT jar MCProtocolLib From 01d7ed04b3671151885e405fa1608574940f7aa8 Mon Sep 17 00:00:00 2001 From: Final Child Date: Sun, 15 May 2016 15:40:11 +0900 Subject: [PATCH 2/8] Protocol version 110 --- src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java b/src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java index ed521fe0..d0f81b7a 100644 --- a/src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java +++ b/src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java @@ -2,8 +2,8 @@ package org.spacehq.mc.protocol; public class MinecraftConstants { // General Constants - public static final String GAME_VERSION = "1.9.2"; - public static final int PROTOCOL_VERSION = 109; + public static final String GAME_VERSION = "1.9.4"; + public static final int PROTOCOL_VERSION = 110; // General Key Constants public static final String PROFILE_KEY = "profile"; From 0817147b1a04c613a749b5d3c9484d6cf7fc9f63 Mon Sep 17 00:00:00 2001 From: Final Child Date: Sun, 15 May 2016 15:44:54 +0900 Subject: [PATCH 3/8] Add TODO to Column --- .../java/org/spacehq/mc/protocol/data/game/chunk/Column.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/chunk/Column.java b/src/main/java/org/spacehq/mc/protocol/data/game/chunk/Column.java index ce604702..af7d1cb1 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/game/chunk/Column.java +++ b/src/main/java/org/spacehq/mc/protocol/data/game/chunk/Column.java @@ -1,5 +1,6 @@ package org.spacehq.mc.protocol.data.game.chunk; +//TODO: Chunk Data (0x20) now also sends all tile entities in the chunk (at the end of the packet) public class Column { private int x; private int z; From 56002e21677355f735de7de3005025407b9e78bd Mon Sep 17 00:00:00 2001 From: Final Child Date: Sun, 15 May 2016 15:55:28 +0900 Subject: [PATCH 4/8] Removed Update Sign (clientbound) (0x46); Update Block Entity with action 9 should be used instead --- .../mc/protocol/MinecraftProtocol.java | 166 +++++++++--------- .../spacehq/mc/protocol/data/MagicValues.java | 1 + .../game/world/block/UpdatedTileType.java | 3 +- 3 files changed, 85 insertions(+), 85 deletions(-) diff --git a/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java b/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java index 89320fab..bfcaa4a7 100644 --- a/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java +++ b/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java @@ -385,13 +385,12 @@ public class MinecraftProtocol extends PacketProtocol { this.registerIncoming(67, ServerSpawnPositionPacket.class); this.registerIncoming(68, ServerUpdateTimePacket.class); this.registerIncoming(69, ServerTitlePacket.class); - this.registerIncoming(70, ServerUpdateSignPacket.class); - this.registerIncoming(71, ServerPlayBuiltinSoundPacket.class); - this.registerIncoming(72, ServerPlayerListDataPacket.class); - this.registerIncoming(73, ServerEntityCollectItemPacket.class); - this.registerIncoming(74, ServerEntityTeleportPacket.class); - this.registerIncoming(75, ServerEntityPropertiesPacket.class); - this.registerIncoming(76, ServerEntityEffectPacket.class); + this.registerIncoming(70, ServerPlayBuiltinSoundPacket.class); + this.registerIncoming(71, ServerPlayerListDataPacket.class); + this.registerIncoming(72, ServerEntityCollectItemPacket.class); + this.registerIncoming(73, ServerEntityTeleportPacket.class); + this.registerIncoming(74, ServerEntityPropertiesPacket.class); + this.registerIncoming(75, ServerEntityEffectPacket.class); this.registerOutgoing(0, ClientTeleportConfirmPacket.class); this.registerOutgoing(1, ClientTabCompletePacket.class); @@ -457,83 +456,82 @@ public class MinecraftProtocol extends PacketProtocol { this.registerIncoming(28, ClientPlayerPlaceBlockPacket.class); this.registerIncoming(29, ClientPlayerUseItemPacket.class); - this.registerOutgoing(0, ServerSpawnObjectPacket.class); - this.registerOutgoing(1, ServerSpawnExpOrbPacket.class); - this.registerOutgoing(2, ServerSpawnGlobalEntityPacket.class); - this.registerOutgoing(3, ServerSpawnMobPacket.class); - this.registerOutgoing(4, ServerSpawnPaintingPacket.class); - this.registerOutgoing(5, ServerSpawnPlayerPacket.class); - this.registerOutgoing(6, ServerEntityAnimationPacket.class); - this.registerOutgoing(7, ServerStatisticsPacket.class); - this.registerOutgoing(8, ServerBlockBreakAnimPacket.class); - this.registerOutgoing(9, ServerUpdateTileEntityPacket.class); - this.registerOutgoing(10, ServerBlockValuePacket.class); - this.registerOutgoing(11, ServerBlockChangePacket.class); - this.registerOutgoing(12, ServerBossBarPacket.class); - this.registerOutgoing(13, ServerDifficultyPacket.class); - this.registerOutgoing(14, ServerTabCompletePacket.class); - this.registerOutgoing(15, ServerChatPacket.class); - this.registerOutgoing(16, ServerMultiBlockChangePacket.class); - this.registerOutgoing(17, ServerConfirmTransactionPacket.class); - this.registerOutgoing(18, ServerCloseWindowPacket.class); - this.registerOutgoing(19, ServerOpenWindowPacket.class); - this.registerOutgoing(20, ServerWindowItemsPacket.class); - this.registerOutgoing(21, ServerWindowPropertyPacket.class); - this.registerOutgoing(22, ServerSetSlotPacket.class); - this.registerOutgoing(23, ServerSetCooldownPacket.class); - this.registerOutgoing(24, ServerPluginMessagePacket.class); - this.registerOutgoing(25, ServerPlaySoundPacket.class); - this.registerOutgoing(26, ServerDisconnectPacket.class); - this.registerOutgoing(27, ServerEntityStatusPacket.class); - this.registerOutgoing(28, ServerExplosionPacket.class); - this.registerOutgoing(29, ServerUnloadChunkPacket.class); - this.registerOutgoing(30, ServerNotifyClientPacket.class); - this.registerOutgoing(31, ServerKeepAlivePacket.class); - this.registerOutgoing(32, ServerChunkDataPacket.class); - this.registerOutgoing(33, ServerPlayEffectPacket.class); - this.registerOutgoing(34, ServerSpawnParticlePacket.class); - this.registerOutgoing(35, ServerJoinGamePacket.class); - this.registerOutgoing(36, ServerMapDataPacket.class); - this.registerOutgoing(37, ServerEntityPositionPacket.class); - this.registerOutgoing(38, ServerEntityPositionRotationPacket.class); - this.registerOutgoing(39, ServerEntityRotationPacket.class); - this.registerOutgoing(40, ServerEntityMovementPacket.class); - this.registerOutgoing(41, ServerVehicleMovePacket.class); - this.registerOutgoing(42, ServerOpenTileEntityEditorPacket.class); - this.registerOutgoing(43, ServerPlayerAbilitiesPacket.class); - this.registerOutgoing(44, ServerCombatPacket.class); - this.registerOutgoing(45, ServerPlayerListEntryPacket.class); - this.registerOutgoing(46, ServerPlayerPositionRotationPacket.class); - this.registerOutgoing(47, ServerPlayerUseBedPacket.class); - this.registerOutgoing(48, ServerEntityDestroyPacket.class); - this.registerOutgoing(49, ServerEntityRemoveEffectPacket.class); - this.registerOutgoing(50, ServerResourcePackSendPacket.class); - this.registerOutgoing(51, ServerRespawnPacket.class); - this.registerOutgoing(52, ServerEntityHeadLookPacket.class); - this.registerOutgoing(53, ServerWorldBorderPacket.class); - this.registerOutgoing(54, ServerSwitchCameraPacket.class); - this.registerOutgoing(55, ServerPlayerChangeHeldItemPacket.class); - this.registerOutgoing(56, ServerDisplayScoreboardPacket.class); - this.registerOutgoing(57, ServerEntityMetadataPacket.class); - this.registerOutgoing(58, ServerEntityAttachPacket.class); - this.registerOutgoing(59, ServerEntityVelocityPacket.class); - this.registerOutgoing(60, ServerEntityEquipmentPacket.class); - this.registerOutgoing(61, ServerPlayerSetExperiencePacket.class); - this.registerOutgoing(62, ServerPlayerHealthPacket.class); - this.registerOutgoing(63, ServerScoreboardObjectivePacket.class); - this.registerOutgoing(64, ServerEntitySetPassengersPacket.class); - this.registerOutgoing(65, ServerTeamPacket.class); - this.registerOutgoing(66, ServerUpdateScorePacket.class); - this.registerOutgoing(67, ServerSpawnPositionPacket.class); - this.registerOutgoing(68, ServerUpdateTimePacket.class); - this.registerOutgoing(69, ServerTitlePacket.class); - this.registerOutgoing(70, ServerUpdateSignPacket.class); - this.registerOutgoing(71, ServerPlayBuiltinSoundPacket.class); - this.registerOutgoing(72, ServerPlayerListDataPacket.class); - this.registerOutgoing(73, ServerEntityCollectItemPacket.class); - this.registerOutgoing(74, ServerEntityTeleportPacket.class); - this.registerOutgoing(75, ServerEntityPropertiesPacket.class); - this.registerOutgoing(76, ServerEntityEffectPacket.class); + this.registerOutgoing(0x00, ServerSpawnObjectPacket.class); + this.registerOutgoing(0x01, ServerSpawnExpOrbPacket.class); + this.registerOutgoing(0x02, ServerSpawnGlobalEntityPacket.class); + this.registerOutgoing(0x03, ServerSpawnMobPacket.class); + this.registerOutgoing(0x04, ServerSpawnPaintingPacket.class); + this.registerOutgoing(0x05, ServerSpawnPlayerPacket.class); + this.registerOutgoing(0x06, ServerEntityAnimationPacket.class); + this.registerOutgoing(0x07, ServerStatisticsPacket.class); + this.registerOutgoing(0x08, ServerBlockBreakAnimPacket.class); + this.registerOutgoing(0x09, ServerUpdateTileEntityPacket.class); + this.registerOutgoing(0x0A, ServerBlockValuePacket.class); + this.registerOutgoing(0x0B, ServerBlockChangePacket.class); + this.registerOutgoing(0x0C, ServerBossBarPacket.class); + this.registerOutgoing(0x0D, ServerDifficultyPacket.class); + this.registerOutgoing(0x0E, ServerTabCompletePacket.class); + this.registerOutgoing(0x0F, ServerChatPacket.class); + this.registerOutgoing(0x10, ServerMultiBlockChangePacket.class); + this.registerOutgoing(0x11, ServerConfirmTransactionPacket.class); + this.registerOutgoing(0x12, ServerCloseWindowPacket.class); + this.registerOutgoing(0x13, ServerOpenWindowPacket.class); + this.registerOutgoing(0x14, ServerWindowItemsPacket.class); + this.registerOutgoing(0x15, ServerWindowPropertyPacket.class); + this.registerOutgoing(0x16, ServerSetSlotPacket.class); + this.registerOutgoing(0x17, ServerSetCooldownPacket.class); + this.registerOutgoing(0x18, ServerPluginMessagePacket.class); + this.registerOutgoing(0x19, ServerPlaySoundPacket.class); + this.registerOutgoing(0x1A, ServerDisconnectPacket.class); + this.registerOutgoing(0x1B, ServerEntityStatusPacket.class); + this.registerOutgoing(0x1C, ServerExplosionPacket.class); + this.registerOutgoing(0x1D, ServerUnloadChunkPacket.class); + this.registerOutgoing(0x1E, ServerNotifyClientPacket.class); + this.registerOutgoing(0x1F, ServerKeepAlivePacket.class); + this.registerOutgoing(0x20, ServerChunkDataPacket.class); + this.registerOutgoing(0x21, ServerPlayEffectPacket.class); + this.registerOutgoing(0x22, ServerSpawnParticlePacket.class); + this.registerOutgoing(0x23, ServerJoinGamePacket.class); + this.registerOutgoing(0x24, ServerMapDataPacket.class); + this.registerOutgoing(0x25, ServerEntityPositionPacket.class); + this.registerOutgoing(0x26, ServerEntityPositionRotationPacket.class); + this.registerOutgoing(0x27, ServerEntityRotationPacket.class); + this.registerOutgoing(0x28, ServerEntityMovementPacket.class); + this.registerOutgoing(0x29, ServerVehicleMovePacket.class); + this.registerOutgoing(0x2A, ServerOpenTileEntityEditorPacket.class); + this.registerOutgoing(0x2B, ServerPlayerAbilitiesPacket.class); + this.registerOutgoing(0x2C, ServerCombatPacket.class); + this.registerOutgoing(0x2D, ServerPlayerListEntryPacket.class); + this.registerOutgoing(0x2E, ServerPlayerPositionRotationPacket.class); + this.registerOutgoing(0x2F, ServerPlayerUseBedPacket.class); + this.registerOutgoing(0x30, ServerEntityDestroyPacket.class); + this.registerOutgoing(0x31, ServerEntityRemoveEffectPacket.class); + this.registerOutgoing(0x32, ServerResourcePackSendPacket.class); + this.registerOutgoing(0x33, ServerRespawnPacket.class); + this.registerOutgoing(0x34, ServerEntityHeadLookPacket.class); + this.registerOutgoing(0x35, ServerWorldBorderPacket.class); + this.registerOutgoing(0x36, ServerSwitchCameraPacket.class); + this.registerOutgoing(0x37, ServerPlayerChangeHeldItemPacket.class); + this.registerOutgoing(0x38, ServerDisplayScoreboardPacket.class); + this.registerOutgoing(0x39, ServerEntityMetadataPacket.class); + this.registerOutgoing(0x3A, ServerEntityAttachPacket.class); + this.registerOutgoing(0x3B, ServerEntityVelocityPacket.class); + this.registerOutgoing(0x3C, ServerEntityEquipmentPacket.class); + this.registerOutgoing(0x3D, ServerPlayerSetExperiencePacket.class); + this.registerOutgoing(0x3E, ServerPlayerHealthPacket.class); + this.registerOutgoing(0x3F, ServerScoreboardObjectivePacket.class); + this.registerOutgoing(0x40, ServerEntitySetPassengersPacket.class); + this.registerOutgoing(0x41, ServerTeamPacket.class); + this.registerOutgoing(0x42, ServerUpdateScorePacket.class); + this.registerOutgoing(0x43, ServerSpawnPositionPacket.class); + this.registerOutgoing(0x44, ServerUpdateTimePacket.class); + this.registerOutgoing(0x45, ServerTitlePacket.class); + this.registerOutgoing(0x46, ServerPlayBuiltinSoundPacket.class); + this.registerOutgoing(0x47, ServerPlayerListDataPacket.class); + this.registerOutgoing(0x48, ServerEntityCollectItemPacket.class); + this.registerOutgoing(0x49, ServerEntityTeleportPacket.class); + this.registerOutgoing(0x4A, ServerEntityPropertiesPacket.class); + this.registerOutgoing(0x4B, ServerEntityEffectPacket.class); } private void initClientStatus(Session session) { diff --git a/src/main/java/org/spacehq/mc/protocol/data/MagicValues.java b/src/main/java/org/spacehq/mc/protocol/data/MagicValues.java index 73da7d2d..d124567f 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/MagicValues.java +++ b/src/main/java/org/spacehq/mc/protocol/data/MagicValues.java @@ -492,6 +492,7 @@ public class MagicValues { register(UpdatedTileType.BANNER, 6); register(UpdatedTileType.STRUCTURE_BLOCK, 7); register(UpdatedTileType.END_GATEWAY, 8); + register(UpdatedTileType.SIGN, 9); register(ClientNotification.INVALID_BED, 0); register(ClientNotification.START_RAIN, 2); diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/world/block/UpdatedTileType.java b/src/main/java/org/spacehq/mc/protocol/data/game/world/block/UpdatedTileType.java index 695a24da..dd6facb8 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/game/world/block/UpdatedTileType.java +++ b/src/main/java/org/spacehq/mc/protocol/data/game/world/block/UpdatedTileType.java @@ -8,5 +8,6 @@ public enum UpdatedTileType { FLOWER_POT, BANNER, STRUCTURE_BLOCK, - END_GATEWAY; + END_GATEWAY, + SIGN; } From bc5d6f49e46926e6047ba91f9e97d961439e38ff Mon Sep 17 00:00:00 2001 From: Final Child Date: Sun, 15 May 2016 15:56:17 +0900 Subject: [PATCH 5/8] Yep --- .../server/world/ServerUpdateSignPacket.java | 77 ------------------- 1 file changed, 77 deletions(-) delete mode 100644 src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerUpdateSignPacket.java diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerUpdateSignPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerUpdateSignPacket.java deleted file mode 100644 index 6944d17f..00000000 --- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerUpdateSignPacket.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.spacehq.mc.protocol.packet.ingame.server.world; - -import org.spacehq.mc.protocol.data.game.entity.metadata.Position; -import org.spacehq.mc.protocol.data.message.Message; -import org.spacehq.mc.protocol.util.NetUtil; -import org.spacehq.mc.protocol.util.ReflectionToString; -import org.spacehq.packetlib.io.NetInput; -import org.spacehq.packetlib.io.NetOutput; -import org.spacehq.packetlib.packet.Packet; - -import java.io.IOException; - -public class ServerUpdateSignPacket implements Packet { - private Position position; - private Message lines[]; - - @SuppressWarnings("unused") - private ServerUpdateSignPacket() { - } - - public ServerUpdateSignPacket(Position position, String lines[]) { - this(position, toMessages(lines)); - } - - public ServerUpdateSignPacket(Position position, Message lines[]) { - if(lines.length != 4) { - throw new IllegalArgumentException("Lines must contain exactly 4 strings!"); - } - - this.position = position; - this.lines = lines; - } - - public Position getPosition() { - return this.position; - } - - public Message[] getLines() { - return this.lines; - } - - @Override - public void read(NetInput in) throws IOException { - this.position = NetUtil.readPosition(in); - this.lines = new Message[4]; - for(int count = 0; count < this.lines.length; count++) { - this.lines[count] = Message.fromString(in.readString()); - } - } - - @Override - public void write(NetOutput out) throws IOException { - NetUtil.writePosition(out, this.position); - for(Message line : this.lines) { - out.writeString(line.toJsonString()); - } - } - - @Override - public boolean isPriority() { - return false; - } - - private static Message[] toMessages(String lines[]) { - Message messages[] = new Message[lines.length]; - for(int index = 0; index < lines.length; index++) { - messages[index] = Message.fromString(lines[index]); - } - - return messages; - } - - @Override - public String toString() { - return ReflectionToString.toString(this); - } -} From a1571ed0cbb9613bffc34f2fd3899453f3fce5f7 Mon Sep 17 00:00:00 2001 From: Final Child Date: Sun, 15 May 2016 16:30:51 +0900 Subject: [PATCH 6/8] Change decs of packet IDs to hexs --- .../mc/protocol/MinecraftProtocol.java | 425 +++++++----------- 1 file changed, 166 insertions(+), 259 deletions(-) diff --git a/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java b/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java index bfcaa4a7..125a2d36 100644 --- a/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java +++ b/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java @@ -5,113 +5,20 @@ import org.spacehq.mc.auth.exception.request.RequestException; import org.spacehq.mc.auth.service.AuthenticationService; import org.spacehq.mc.protocol.data.SubProtocol; import org.spacehq.mc.protocol.packet.handshake.client.HandshakePacket; -import org.spacehq.mc.protocol.packet.ingame.client.ClientChatPacket; -import org.spacehq.mc.protocol.packet.ingame.client.ClientKeepAlivePacket; -import org.spacehq.mc.protocol.packet.ingame.client.ClientPluginMessagePacket; -import org.spacehq.mc.protocol.packet.ingame.client.ClientRequestPacket; -import org.spacehq.mc.protocol.packet.ingame.client.ClientResourcePackStatusPacket; -import org.spacehq.mc.protocol.packet.ingame.client.ClientSettingsPacket; -import org.spacehq.mc.protocol.packet.ingame.client.ClientTabCompletePacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerAbilitiesPacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerActionPacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerChangeHeldItemPacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerInteractEntityPacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPlaceBlockPacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPositionPacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerRotationPacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerStatePacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerSwingArmPacket; -import org.spacehq.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket; -import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerUseItemPacket; -import org.spacehq.mc.protocol.packet.ingame.client.window.ClientCloseWindowPacket; -import org.spacehq.mc.protocol.packet.ingame.client.window.ClientConfirmTransactionPacket; -import org.spacehq.mc.protocol.packet.ingame.client.window.ClientCreativeInventoryActionPacket; -import org.spacehq.mc.protocol.packet.ingame.client.window.ClientEnchantItemPacket; -import org.spacehq.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket; -import org.spacehq.mc.protocol.packet.ingame.client.world.ClientSpectatePacket; -import org.spacehq.mc.protocol.packet.ingame.client.world.ClientSteerBoatPacket; -import org.spacehq.mc.protocol.packet.ingame.client.world.ClientSteerVehiclePacket; -import org.spacehq.mc.protocol.packet.ingame.client.world.ClientUpdateSignPacket; -import org.spacehq.mc.protocol.packet.ingame.client.world.ClientVehicleMovePacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerBossBarPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerChatPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerCombatPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerDifficultyPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerDisconnectPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerJoinGamePacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerKeepAlivePacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerPlayerListDataPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerPlayerListEntryPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerPluginMessagePacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerResourcePackSendPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerRespawnPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerSetCooldownPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerStatisticsPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerSwitchCameraPacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerTabCompletePacket; -import org.spacehq.mc.protocol.packet.ingame.server.ServerTitlePacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityAnimationPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityAttachPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityCollectItemPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityDestroyPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityEffectPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityEquipmentPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityHeadLookPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityMetadataPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityMovementPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPositionPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPositionRotationPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPropertiesPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityRemoveEffectPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityRotationPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntitySetPassengersPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityStatusPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityTeleportPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityVelocityPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerVehicleMovePacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerAbilitiesPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerChangeHeldItemPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerHealthPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerSetExperiencePacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerUseBedPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnExpOrbPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnGlobalEntityPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnMobPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnObjectPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPaintingPacket; -import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket; +import org.spacehq.mc.protocol.packet.ingame.client.*; +import org.spacehq.mc.protocol.packet.ingame.client.player.*; +import org.spacehq.mc.protocol.packet.ingame.client.window.*; +import org.spacehq.mc.protocol.packet.ingame.client.world.*; +import org.spacehq.mc.protocol.packet.ingame.server.*; +import org.spacehq.mc.protocol.packet.ingame.server.entity.*; +import org.spacehq.mc.protocol.packet.ingame.server.entity.player.*; +import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.*; import org.spacehq.mc.protocol.packet.ingame.server.scoreboard.ServerDisplayScoreboardPacket; import org.spacehq.mc.protocol.packet.ingame.server.scoreboard.ServerScoreboardObjectivePacket; import org.spacehq.mc.protocol.packet.ingame.server.scoreboard.ServerTeamPacket; import org.spacehq.mc.protocol.packet.ingame.server.scoreboard.ServerUpdateScorePacket; -import org.spacehq.mc.protocol.packet.ingame.server.window.ServerCloseWindowPacket; -import org.spacehq.mc.protocol.packet.ingame.server.window.ServerConfirmTransactionPacket; -import org.spacehq.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket; -import org.spacehq.mc.protocol.packet.ingame.server.window.ServerSetSlotPacket; -import org.spacehq.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket; -import org.spacehq.mc.protocol.packet.ingame.server.window.ServerWindowPropertyPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerBlockBreakAnimPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerBlockChangePacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerBlockValuePacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerChunkDataPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerExplosionPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerMapDataPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerMultiBlockChangePacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerNotifyClientPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerOpenTileEntityEditorPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerPlayEffectPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerPlayBuiltinSoundPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerPlaySoundPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerSpawnParticlePacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerSpawnPositionPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerUnloadChunkPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerUpdateSignPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerUpdateTileEntityPacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerUpdateTimePacket; -import org.spacehq.mc.protocol.packet.ingame.server.world.ServerWorldBorderPacket; +import org.spacehq.mc.protocol.packet.ingame.server.window.*; +import org.spacehq.mc.protocol.packet.ingame.server.world.*; import org.spacehq.mc.protocol.packet.login.client.EncryptionResponsePacket; import org.spacehq.mc.protocol.packet.login.client.LoginStartPacket; import org.spacehq.mc.protocol.packet.login.server.EncryptionRequestPacket; @@ -295,166 +202,166 @@ public class MinecraftProtocol extends PacketProtocol { } private void initClientLogin(Session session) { - this.registerIncoming(0, LoginDisconnectPacket.class); - this.registerIncoming(1, EncryptionRequestPacket.class); - this.registerIncoming(2, LoginSuccessPacket.class); - this.registerIncoming(3, LoginSetCompressionPacket.class); + this.registerIncoming(0x00, LoginDisconnectPacket.class); + this.registerIncoming(0x01, EncryptionRequestPacket.class); + this.registerIncoming(0x02, LoginSuccessPacket.class); + this.registerIncoming(0x03, LoginSetCompressionPacket.class); - this.registerOutgoing(0, LoginStartPacket.class); - this.registerOutgoing(1, EncryptionResponsePacket.class); + this.registerOutgoing(0x00, LoginStartPacket.class); + this.registerOutgoing(0x01, EncryptionResponsePacket.class); } private void initServerLogin(Session session) { - this.registerIncoming(0, LoginStartPacket.class); - this.registerIncoming(1, EncryptionResponsePacket.class); + this.registerIncoming(0x00, LoginStartPacket.class); + this.registerIncoming(0x01, EncryptionResponsePacket.class); - this.registerOutgoing(0, LoginDisconnectPacket.class); - this.registerOutgoing(1, EncryptionRequestPacket.class); - this.registerOutgoing(2, LoginSuccessPacket.class); - this.registerOutgoing(3, LoginSetCompressionPacket.class); + this.registerOutgoing(0x00, LoginDisconnectPacket.class); + this.registerOutgoing(0x01, EncryptionRequestPacket.class); + this.registerOutgoing(0x02, LoginSuccessPacket.class); + this.registerOutgoing(0x03, LoginSetCompressionPacket.class); } private void initClientGame(Session session) { - this.registerIncoming(0, ServerSpawnObjectPacket.class); - this.registerIncoming(1, ServerSpawnExpOrbPacket.class); - this.registerIncoming(2, ServerSpawnGlobalEntityPacket.class); - this.registerIncoming(3, ServerSpawnMobPacket.class); - this.registerIncoming(4, ServerSpawnPaintingPacket.class); - this.registerIncoming(5, ServerSpawnPlayerPacket.class); - this.registerIncoming(6, ServerEntityAnimationPacket.class); - this.registerIncoming(7, ServerStatisticsPacket.class); - this.registerIncoming(8, ServerBlockBreakAnimPacket.class); - this.registerIncoming(9, ServerUpdateTileEntityPacket.class); - this.registerIncoming(10, ServerBlockValuePacket.class); - this.registerIncoming(11, ServerBlockChangePacket.class); - this.registerIncoming(12, ServerBossBarPacket.class); - this.registerIncoming(13, ServerDifficultyPacket.class); - this.registerIncoming(14, ServerTabCompletePacket.class); - this.registerIncoming(15, ServerChatPacket.class); - this.registerIncoming(16, ServerMultiBlockChangePacket.class); - this.registerIncoming(17, ServerConfirmTransactionPacket.class); - this.registerIncoming(18, ServerCloseWindowPacket.class); - this.registerIncoming(19, ServerOpenWindowPacket.class); - this.registerIncoming(20, ServerWindowItemsPacket.class); - this.registerIncoming(21, ServerWindowPropertyPacket.class); - this.registerIncoming(22, ServerSetSlotPacket.class); - this.registerIncoming(23, ServerSetCooldownPacket.class); - this.registerIncoming(24, ServerPluginMessagePacket.class); - this.registerIncoming(25, ServerPlaySoundPacket.class); - this.registerIncoming(26, ServerDisconnectPacket.class); - this.registerIncoming(27, ServerEntityStatusPacket.class); - this.registerIncoming(28, ServerExplosionPacket.class); - this.registerIncoming(29, ServerUnloadChunkPacket.class); - this.registerIncoming(30, ServerNotifyClientPacket.class); - this.registerIncoming(31, ServerKeepAlivePacket.class); - this.registerIncoming(32, ServerChunkDataPacket.class); - this.registerIncoming(33, ServerPlayEffectPacket.class); - this.registerIncoming(34, ServerSpawnParticlePacket.class); - this.registerIncoming(35, ServerJoinGamePacket.class); - this.registerIncoming(36, ServerMapDataPacket.class); - this.registerIncoming(37, ServerEntityPositionPacket.class); - this.registerIncoming(38, ServerEntityPositionRotationPacket.class); - this.registerIncoming(39, ServerEntityRotationPacket.class); - this.registerIncoming(40, ServerEntityMovementPacket.class); - this.registerIncoming(41, ServerVehicleMovePacket.class); - this.registerIncoming(42, ServerOpenTileEntityEditorPacket.class); - this.registerIncoming(43, ServerPlayerAbilitiesPacket.class); - this.registerIncoming(44, ServerCombatPacket.class); - this.registerIncoming(45, ServerPlayerListEntryPacket.class); - this.registerIncoming(46, ServerPlayerPositionRotationPacket.class); - this.registerIncoming(47, ServerPlayerUseBedPacket.class); - this.registerIncoming(48, ServerEntityDestroyPacket.class); - this.registerIncoming(49, ServerEntityRemoveEffectPacket.class); - this.registerIncoming(50, ServerResourcePackSendPacket.class); - this.registerIncoming(51, ServerRespawnPacket.class); - this.registerIncoming(52, ServerEntityHeadLookPacket.class); - this.registerIncoming(53, ServerWorldBorderPacket.class); - this.registerIncoming(54, ServerSwitchCameraPacket.class); - this.registerIncoming(55, ServerPlayerChangeHeldItemPacket.class); - this.registerIncoming(56, ServerDisplayScoreboardPacket.class); - this.registerIncoming(57, ServerEntityMetadataPacket.class); - this.registerIncoming(58, ServerEntityAttachPacket.class); - this.registerIncoming(59, ServerEntityVelocityPacket.class); - this.registerIncoming(60, ServerEntityEquipmentPacket.class); - this.registerIncoming(61, ServerPlayerSetExperiencePacket.class); - this.registerIncoming(62, ServerPlayerHealthPacket.class); - this.registerIncoming(63, ServerScoreboardObjectivePacket.class); - this.registerIncoming(64, ServerEntitySetPassengersPacket.class); - this.registerIncoming(65, ServerTeamPacket.class); - this.registerIncoming(66, ServerUpdateScorePacket.class); - this.registerIncoming(67, ServerSpawnPositionPacket.class); - this.registerIncoming(68, ServerUpdateTimePacket.class); - this.registerIncoming(69, ServerTitlePacket.class); - this.registerIncoming(70, ServerPlayBuiltinSoundPacket.class); - this.registerIncoming(71, ServerPlayerListDataPacket.class); - this.registerIncoming(72, ServerEntityCollectItemPacket.class); - this.registerIncoming(73, ServerEntityTeleportPacket.class); - this.registerIncoming(74, ServerEntityPropertiesPacket.class); - this.registerIncoming(75, ServerEntityEffectPacket.class); + this.registerIncoming(0x00, ServerSpawnObjectPacket.class); + this.registerIncoming(0x01, ServerSpawnExpOrbPacket.class); + this.registerIncoming(0x02, ServerSpawnGlobalEntityPacket.class); + this.registerIncoming(0x03, ServerSpawnMobPacket.class); + this.registerIncoming(0x04, ServerSpawnPaintingPacket.class); + this.registerIncoming(0x05, ServerSpawnPlayerPacket.class); + this.registerIncoming(0x06, ServerEntityAnimationPacket.class); + this.registerIncoming(0x07, ServerStatisticsPacket.class); + this.registerIncoming(0x08, ServerBlockBreakAnimPacket.class); + this.registerIncoming(0x09, ServerUpdateTileEntityPacket.class); + this.registerIncoming(0x0A, ServerBlockValuePacket.class); + this.registerIncoming(0x0B, ServerBlockChangePacket.class); + this.registerIncoming(0x0C, ServerBossBarPacket.class); + this.registerIncoming(0x0D, ServerDifficultyPacket.class); + this.registerIncoming(0x0E, ServerTabCompletePacket.class); + this.registerIncoming(0x0F, ServerChatPacket.class); + this.registerIncoming(0x10, ServerMultiBlockChangePacket.class); + this.registerIncoming(0x11, ServerConfirmTransactionPacket.class); + this.registerIncoming(0x12, ServerCloseWindowPacket.class); + this.registerIncoming(0x13, ServerOpenWindowPacket.class); + this.registerIncoming(0x14, ServerWindowItemsPacket.class); + this.registerIncoming(0x15, ServerWindowPropertyPacket.class); + this.registerIncoming(0x16, ServerSetSlotPacket.class); + this.registerIncoming(0x17, ServerSetCooldownPacket.class); + this.registerIncoming(0x18, ServerPluginMessagePacket.class); + this.registerIncoming(0x19, ServerPlaySoundPacket.class); + this.registerIncoming(0x1A, ServerDisconnectPacket.class); + this.registerIncoming(0x1B, ServerEntityStatusPacket.class); + this.registerIncoming(0x1C, ServerExplosionPacket.class); + this.registerIncoming(0x1D, ServerUnloadChunkPacket.class); + this.registerIncoming(0x1E, ServerNotifyClientPacket.class); + this.registerIncoming(0x1F, ServerKeepAlivePacket.class); + this.registerIncoming(0x20, ServerChunkDataPacket.class); + this.registerIncoming(0x21, ServerPlayEffectPacket.class); + this.registerIncoming(0x22, ServerSpawnParticlePacket.class); + this.registerIncoming(0x23, ServerJoinGamePacket.class); + this.registerIncoming(0x24, ServerMapDataPacket.class); + this.registerIncoming(0x25, ServerEntityPositionPacket.class); + this.registerIncoming(0x26, ServerEntityPositionRotationPacket.class); + this.registerIncoming(0x27, ServerEntityRotationPacket.class); + this.registerIncoming(0x28, ServerEntityMovementPacket.class); + this.registerIncoming(0x29, ServerVehicleMovePacket.class); + this.registerIncoming(0x2A, ServerOpenTileEntityEditorPacket.class); + this.registerIncoming(0x2B, ServerPlayerAbilitiesPacket.class); + this.registerIncoming(0x2C, ServerCombatPacket.class); + this.registerIncoming(0x2D, ServerPlayerListEntryPacket.class); + this.registerIncoming(0x2E, ServerPlayerPositionRotationPacket.class); + this.registerIncoming(0x2F, ServerPlayerUseBedPacket.class); + this.registerIncoming(0x30, ServerEntityDestroyPacket.class); + this.registerIncoming(0x31, ServerEntityRemoveEffectPacket.class); + this.registerIncoming(0x32, ServerResourcePackSendPacket.class); + this.registerIncoming(0x33, ServerRespawnPacket.class); + this.registerIncoming(0x34, ServerEntityHeadLookPacket.class); + this.registerIncoming(0x35, ServerWorldBorderPacket.class); + this.registerIncoming(0x36, ServerSwitchCameraPacket.class); + this.registerIncoming(0x37, ServerPlayerChangeHeldItemPacket.class); + this.registerIncoming(0x38, ServerDisplayScoreboardPacket.class); + this.registerIncoming(0x39, ServerEntityMetadataPacket.class); + this.registerIncoming(0x3A, ServerEntityAttachPacket.class); + this.registerIncoming(0x3B, ServerEntityVelocityPacket.class); + this.registerIncoming(0x3C, ServerEntityEquipmentPacket.class); + this.registerIncoming(0x3D, ServerPlayerSetExperiencePacket.class); + this.registerIncoming(0x3E, ServerPlayerHealthPacket.class); + this.registerIncoming(0x3F, ServerScoreboardObjectivePacket.class); + this.registerIncoming(0x40, ServerEntitySetPassengersPacket.class); + this.registerIncoming(0x41, ServerTeamPacket.class); + this.registerIncoming(0x42, ServerUpdateScorePacket.class); + this.registerIncoming(0x43, ServerSpawnPositionPacket.class); + this.registerIncoming(0x44, ServerUpdateTimePacket.class); + this.registerIncoming(0x45, ServerTitlePacket.class); + this.registerIncoming(0x46, ServerPlayBuiltinSoundPacket.class); + this.registerIncoming(0x47, ServerPlayerListDataPacket.class); + this.registerIncoming(0x48, ServerEntityCollectItemPacket.class); + this.registerIncoming(0x49, ServerEntityTeleportPacket.class); + this.registerIncoming(0x4A, ServerEntityPropertiesPacket.class); + this.registerIncoming(0x4B, ServerEntityEffectPacket.class); - this.registerOutgoing(0, ClientTeleportConfirmPacket.class); - this.registerOutgoing(1, ClientTabCompletePacket.class); - this.registerOutgoing(2, ClientChatPacket.class); - this.registerOutgoing(3, ClientRequestPacket.class); - this.registerOutgoing(4, ClientSettingsPacket.class); - this.registerOutgoing(5, ClientConfirmTransactionPacket.class); - this.registerOutgoing(6, ClientEnchantItemPacket.class); - this.registerOutgoing(7, ClientWindowActionPacket.class); - this.registerOutgoing(8, ClientCloseWindowPacket.class); - this.registerOutgoing(9, ClientPluginMessagePacket.class); - this.registerOutgoing(10, ClientPlayerInteractEntityPacket.class); - this.registerOutgoing(11, ClientKeepAlivePacket.class); - this.registerOutgoing(12, ClientPlayerPositionPacket.class); - this.registerOutgoing(13, ClientPlayerPositionRotationPacket.class); - this.registerOutgoing(14, ClientPlayerRotationPacket.class); - this.registerOutgoing(15, ClientPlayerMovementPacket.class); - this.registerOutgoing(16, ClientVehicleMovePacket.class); - this.registerOutgoing(17, ClientSteerBoatPacket.class); - this.registerOutgoing(18, ClientPlayerAbilitiesPacket.class); - this.registerOutgoing(19, ClientPlayerActionPacket.class); - this.registerOutgoing(20, ClientPlayerStatePacket.class); - this.registerOutgoing(21, ClientSteerVehiclePacket.class); - this.registerOutgoing(22, ClientResourcePackStatusPacket.class); - this.registerOutgoing(23, ClientPlayerChangeHeldItemPacket.class); - this.registerOutgoing(24, ClientCreativeInventoryActionPacket.class); - this.registerOutgoing(25, ClientUpdateSignPacket.class); - this.registerOutgoing(26, ClientPlayerSwingArmPacket.class); - this.registerOutgoing(27, ClientSpectatePacket.class); - this.registerOutgoing(28, ClientPlayerPlaceBlockPacket.class); - this.registerOutgoing(29, ClientPlayerUseItemPacket.class); + this.registerOutgoing(0x00, ClientTeleportConfirmPacket.class); + this.registerOutgoing(0x01, ClientTabCompletePacket.class); + this.registerOutgoing(0x02, ClientChatPacket.class); + this.registerOutgoing(0x03, ClientRequestPacket.class); + this.registerOutgoing(0x04, ClientSettingsPacket.class); + this.registerOutgoing(0x05, ClientConfirmTransactionPacket.class); + this.registerOutgoing(0x06, ClientEnchantItemPacket.class); + this.registerOutgoing(0x07, ClientWindowActionPacket.class); + this.registerOutgoing(0x08, ClientCloseWindowPacket.class); + this.registerOutgoing(0x09, ClientPluginMessagePacket.class); + this.registerOutgoing(0x0A, ClientPlayerInteractEntityPacket.class); + this.registerOutgoing(0x0B, ClientKeepAlivePacket.class); + this.registerOutgoing(0x0C, ClientPlayerPositionPacket.class); + this.registerOutgoing(0x0D, ClientPlayerPositionRotationPacket.class); + this.registerOutgoing(0x0E, ClientPlayerRotationPacket.class); + this.registerOutgoing(0x0F, ClientPlayerMovementPacket.class); + this.registerOutgoing(0x10, ClientVehicleMovePacket.class); + this.registerOutgoing(0x11, ClientSteerBoatPacket.class); + this.registerOutgoing(0x12, ClientPlayerAbilitiesPacket.class); + this.registerOutgoing(0x13, ClientPlayerActionPacket.class); + this.registerOutgoing(0x14, ClientPlayerStatePacket.class); + this.registerOutgoing(0x15, ClientSteerVehiclePacket.class); + this.registerOutgoing(0x16, ClientResourcePackStatusPacket.class); + this.registerOutgoing(0x17, ClientPlayerChangeHeldItemPacket.class); + this.registerOutgoing(0x18, ClientCreativeInventoryActionPacket.class); + this.registerOutgoing(0x19, ClientUpdateSignPacket.class); + this.registerOutgoing(0x1A, ClientPlayerSwingArmPacket.class); + this.registerOutgoing(0x1B, ClientSpectatePacket.class); + this.registerOutgoing(0x1C, ClientPlayerPlaceBlockPacket.class); + this.registerOutgoing(0x1D, ClientPlayerUseItemPacket.class); } private void initServerGame(Session session) { - this.registerIncoming(0, ClientTeleportConfirmPacket.class); - this.registerIncoming(1, ClientTabCompletePacket.class); - this.registerIncoming(2, ClientChatPacket.class); - this.registerIncoming(3, ClientRequestPacket.class); - this.registerIncoming(4, ClientSettingsPacket.class); - this.registerIncoming(5, ClientConfirmTransactionPacket.class); - this.registerIncoming(6, ClientEnchantItemPacket.class); - this.registerIncoming(7, ClientWindowActionPacket.class); - this.registerIncoming(8, ClientCloseWindowPacket.class); - this.registerIncoming(9, ClientPluginMessagePacket.class); - this.registerIncoming(10, ClientPlayerInteractEntityPacket.class); - this.registerIncoming(11, ClientKeepAlivePacket.class); - this.registerIncoming(12, ClientPlayerPositionPacket.class); - this.registerIncoming(13, ClientPlayerPositionRotationPacket.class); - this.registerIncoming(14, ClientPlayerRotationPacket.class); - this.registerIncoming(15, ClientPlayerMovementPacket.class); - this.registerIncoming(16, ClientVehicleMovePacket.class); - this.registerIncoming(17, ClientSteerBoatPacket.class); - this.registerIncoming(18, ClientPlayerAbilitiesPacket.class); - this.registerIncoming(19, ClientPlayerActionPacket.class); - this.registerIncoming(20, ClientPlayerStatePacket.class); - this.registerIncoming(21, ClientSteerVehiclePacket.class); - this.registerIncoming(22, ClientResourcePackStatusPacket.class); - this.registerIncoming(23, ClientPlayerChangeHeldItemPacket.class); - this.registerIncoming(24, ClientCreativeInventoryActionPacket.class); - this.registerIncoming(25, ClientUpdateSignPacket.class); - this.registerIncoming(26, ClientPlayerSwingArmPacket.class); - this.registerIncoming(27, ClientSpectatePacket.class); - this.registerIncoming(28, ClientPlayerPlaceBlockPacket.class); - this.registerIncoming(29, ClientPlayerUseItemPacket.class); + this.registerIncoming(0x00, ClientTeleportConfirmPacket.class); + this.registerIncoming(0x01, ClientTabCompletePacket.class); + this.registerIncoming(0x02, ClientChatPacket.class); + this.registerIncoming(0x03, ClientRequestPacket.class); + this.registerIncoming(0x04, ClientSettingsPacket.class); + this.registerIncoming(0x05, ClientConfirmTransactionPacket.class); + this.registerIncoming(0x06, ClientEnchantItemPacket.class); + this.registerIncoming(0x07, ClientWindowActionPacket.class); + this.registerIncoming(0x08, ClientCloseWindowPacket.class); + this.registerIncoming(0x09, ClientPluginMessagePacket.class); + this.registerIncoming(0x0A, ClientPlayerInteractEntityPacket.class); + this.registerIncoming(0x0B, ClientKeepAlivePacket.class); + this.registerIncoming(0x0C, ClientPlayerPositionPacket.class); + this.registerIncoming(0x0D, ClientPlayerPositionRotationPacket.class); + this.registerIncoming(0x0E, ClientPlayerRotationPacket.class); + this.registerIncoming(0x0F, ClientPlayerMovementPacket.class); + this.registerIncoming(0x10, ClientVehicleMovePacket.class); + this.registerIncoming(0x11, ClientSteerBoatPacket.class); + this.registerIncoming(0x12, ClientPlayerAbilitiesPacket.class); + this.registerIncoming(0x13, ClientPlayerActionPacket.class); + this.registerIncoming(0x14, ClientPlayerStatePacket.class); + this.registerIncoming(0x15, ClientSteerVehiclePacket.class); + this.registerIncoming(0x16, ClientResourcePackStatusPacket.class); + this.registerIncoming(0x17, ClientPlayerChangeHeldItemPacket.class); + this.registerIncoming(0x18, ClientCreativeInventoryActionPacket.class); + this.registerIncoming(0x19, ClientUpdateSignPacket.class); + this.registerIncoming(0x1A, ClientPlayerSwingArmPacket.class); + this.registerIncoming(0x1B, ClientSpectatePacket.class); + this.registerIncoming(0x1C, ClientPlayerPlaceBlockPacket.class); + this.registerIncoming(0x1D, ClientPlayerUseItemPacket.class); this.registerOutgoing(0x00, ServerSpawnObjectPacket.class); this.registerOutgoing(0x01, ServerSpawnExpOrbPacket.class); @@ -535,18 +442,18 @@ public class MinecraftProtocol extends PacketProtocol { } private void initClientStatus(Session session) { - this.registerIncoming(0, StatusResponsePacket.class); - this.registerIncoming(1, StatusPongPacket.class); + this.registerIncoming(0x00, StatusResponsePacket.class); + this.registerIncoming(0x01, StatusPongPacket.class); - this.registerOutgoing(0, StatusQueryPacket.class); - this.registerOutgoing(1, StatusPingPacket.class); + this.registerOutgoing(0x00, StatusQueryPacket.class); + this.registerOutgoing(0x01, StatusPingPacket.class); } private void initServerStatus(Session session) { - this.registerIncoming(0, StatusQueryPacket.class); - this.registerIncoming(1, StatusPingPacket.class); + this.registerIncoming(0x00, StatusQueryPacket.class); + this.registerIncoming(0x01, StatusPingPacket.class); - this.registerOutgoing(0, StatusResponsePacket.class); - this.registerOutgoing(1, StatusPongPacket.class); + this.registerOutgoing(0x00, StatusResponsePacket.class); + this.registerOutgoing(0x01, StatusPongPacket.class); } } From 8ac2ac9a0ff16ed98afe567c3638ef90284ce585 Mon Sep 17 00:00:00 2001 From: Final Child Date: Sun, 15 May 2016 17:30:23 +0900 Subject: [PATCH 7/8] I think this is enough. --- .../mc/protocol/MinecraftProtocol.java | 20 +++++++++--------- .../mc/protocol/data/game/chunk/Column.java | 21 ++++++++++++------- .../server/world/ServerChunkDataPacket.java | 14 ++++++++++++- .../org/spacehq/mc/protocol/util/NetUtil.java | 13 +++++++++--- 4 files changed, 47 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java b/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java index 125a2d36..a399fe58 100644 --- a/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java +++ b/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java @@ -56,12 +56,12 @@ public class MinecraftProtocol extends PacketProtocol { } public MinecraftProtocol(SubProtocol subProtocol) { - if(subProtocol != SubProtocol.LOGIN && subProtocol != SubProtocol.STATUS) { + if (subProtocol != SubProtocol.LOGIN && subProtocol != SubProtocol.STATUS) { throw new IllegalArgumentException("Only login and status modes are permitted."); } this.subProtocol = subProtocol; - if(subProtocol == SubProtocol.LOGIN) { + if (subProtocol == SubProtocol.LOGIN) { this.profile = new GameProfile((UUID) null, "Player"); } } @@ -84,7 +84,7 @@ public class MinecraftProtocol extends PacketProtocol { String clientToken = UUID.randomUUID().toString(); AuthenticationService auth = new AuthenticationService(clientToken, authProxy); auth.setUsername(username); - if(token) { + if (token) { auth.setAccessToken(using); } else { auth.setPassword(using); @@ -126,7 +126,7 @@ public class MinecraftProtocol extends PacketProtocol { @Override public void newClientSession(Client client, Session session) { - if(this.profile != null) { + if (this.profile != null) { session.setFlag(MinecraftConstants.PROFILE_KEY, this.profile); session.setFlag(MinecraftConstants.ACCESS_TOKEN_KEY, this.accessToken); } @@ -144,7 +144,7 @@ public class MinecraftProtocol extends PacketProtocol { protected void enableEncryption(Key key) { try { this.encrypt = new AESEncryption(key); - } catch(GeneralSecurityException e) { + } catch (GeneralSecurityException e) { throw new Error("Failed to enable protocol encryption.", e); } } @@ -155,9 +155,9 @@ public class MinecraftProtocol extends PacketProtocol { protected void setSubProtocol(SubProtocol subProtocol, boolean client, Session session) { this.clearPackets(); - switch(subProtocol) { + switch (subProtocol) { case HANDSHAKE: - if(client) { + if (client) { this.initClientHandshake(session); } else { this.initServerHandshake(session); @@ -165,7 +165,7 @@ public class MinecraftProtocol extends PacketProtocol { break; case LOGIN: - if(client) { + if (client) { this.initClientLogin(session); } else { this.initServerLogin(session); @@ -173,7 +173,7 @@ public class MinecraftProtocol extends PacketProtocol { break; case GAME: - if(client) { + if (client) { this.initClientGame(session); } else { this.initServerGame(session); @@ -181,7 +181,7 @@ public class MinecraftProtocol extends PacketProtocol { break; case STATUS: - if(client) { + if (client) { this.initClientStatus(session); } else { this.initServerStatus(session); diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/chunk/Column.java b/src/main/java/org/spacehq/mc/protocol/data/game/chunk/Column.java index af7d1cb1..5dae6223 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/game/chunk/Column.java +++ b/src/main/java/org/spacehq/mc/protocol/data/game/chunk/Column.java @@ -1,19 +1,21 @@ package org.spacehq.mc.protocol.data.game.chunk; -//TODO: Chunk Data (0x20) now also sends all tile entities in the chunk (at the end of the packet) +import org.spacehq.opennbt.tag.builtin.CompoundTag; + public class Column { private int x; private int z; private Chunk chunks[]; private byte biomeData[]; + private CompoundTag tileEntities[]; private boolean skylight; - public Column(int x, int z, Chunk chunks[]) { - this(x, z, chunks, null); + public Column(int x, int z, Chunk chunks[], CompoundTag tileEntities[]) { + this(x, z, chunks, null, tileEntities); } - public Column(int x, int z, Chunk chunks[], byte biomeData[]) { + public Column(int x, int z, Chunk chunks[], byte biomeData[], CompoundTag tileEntities[]) { if(chunks.length != 16) { throw new IllegalArgumentException("Chunk array length must be 16."); } @@ -24,9 +26,9 @@ public class Column { this.skylight = false; boolean noSkylight = false; - for(int index = 0; index < chunks.length; index++) { - if(chunks[index] != null) { - if(chunks[index].getSkyLight() == null) { + for (Chunk chunk : chunks) { + if (chunk != null) { + if (chunk.getSkyLight() == null) { noSkylight = true; } else { this.skylight = true; @@ -42,6 +44,7 @@ public class Column { this.z = z; this.chunks = chunks; this.biomeData = biomeData; + this.tileEntities = tileEntities; } public int getX() { @@ -64,6 +67,10 @@ public class Column { return this.biomeData; } + public CompoundTag[] getTileEntities() { + return this.tileEntities; + } + public boolean hasSkylight() { return this.skylight; } diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerChunkDataPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerChunkDataPacket.java index a67ad4a6..81a6c8ae 100644 --- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerChunkDataPacket.java +++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerChunkDataPacket.java @@ -3,6 +3,7 @@ package org.spacehq.mc.protocol.packet.ingame.server.world; import org.spacehq.mc.protocol.data.game.chunk.Column; import org.spacehq.mc.protocol.util.NetUtil; import org.spacehq.mc.protocol.util.ReflectionToString; +import org.spacehq.opennbt.tag.builtin.CompoundTag; import org.spacehq.packetlib.io.NetInput; import org.spacehq.packetlib.io.NetOutput; import org.spacehq.packetlib.io.stream.StreamNetOutput; @@ -33,8 +34,9 @@ public class ServerChunkDataPacket implements Packet { boolean fullChunk = in.readBoolean(); int chunkMask = in.readVarInt(); byte data[] = in.readBytes(in.readVarInt()); + byte tileEntityData[] = in.readBytes(in.readVarInt()); - this.column = NetUtil.readColumn(data, x, z, fullChunk, false, chunkMask); + this.column = NetUtil.readColumn(data, x, z, fullChunk, false, chunkMask, tileEntityData); } @Override @@ -49,6 +51,16 @@ public class ServerChunkDataPacket implements Packet { out.writeVarInt(mask); out.writeVarInt(byteOut.size()); out.writeBytes(byteOut.toByteArray(), byteOut.size()); + + ByteArrayOutputStream tileEntitiesByteOut = new ByteArrayOutputStream(); + NetOutput tileEntitiesNetOut = new StreamNetOutput(tileEntitiesByteOut); + + for (CompoundTag compoundTag : column.getTileEntities()) { + NetUtil.writeNBT(tileEntitiesNetOut, compoundTag); + } + out.writeVarInt(tileEntitiesByteOut.size()); + out.writeBytes(tileEntitiesByteOut.toByteArray(), tileEntitiesByteOut.size()); + } @Override diff --git a/src/main/java/org/spacehq/mc/protocol/util/NetUtil.java b/src/main/java/org/spacehq/mc/protocol/util/NetUtil.java index d678ce6f..a771452f 100644 --- a/src/main/java/org/spacehq/mc/protocol/util/NetUtil.java +++ b/src/main/java/org/spacehq/mc/protocol/util/NetUtil.java @@ -236,8 +236,9 @@ public class NetUtil { out.writeByte(255); } - public static Column readColumn(byte data[], int x, int z, boolean fullChunk, boolean hasSkylight, int mask) throws IOException { + public static Column readColumn(byte data[], int x, int z, boolean fullChunk, boolean hasSkylight, int mask, byte tileEntityData[]) throws IOException { NetInput in = new StreamNetInput(new ByteArrayInputStream(data)); + NetInput tileEntityIn = new StreamNetInput(new ByteArrayInputStream(tileEntityData)); Exception ex = null; Column column = null; try { @@ -256,14 +257,20 @@ public class NetUtil { biomeData = in.readBytes(256); } - column = new Column(x, z, chunks, biomeData); + int available = tileEntityIn.available(); + List tileEntities = new ArrayList(); + while (available > 0) { + tileEntities.add(NetUtil.readNBT(tileEntityIn)); + available = tileEntityIn.available(); + } + column = new Column(x, z, chunks, biomeData, tileEntities.toArray(new CompoundTag[tileEntities.size()])); } catch(Exception e) { ex = e; } // Unfortunately, this is needed to detect whether the chunks contain skylight or not. if((in.available() > 0 || ex != null) && !hasSkylight) { - return readColumn(data, x, z, fullChunk, true, mask); + return readColumn(data, x, z, fullChunk, true, mask, tileEntityData); } else if(ex != null) { throw new IOException("Failed to read chunk data.", ex); } From c36ab6b76ebcdefa43cf639c466808c150c5fe5a Mon Sep 17 00:00:00 2001 From: Final Child Date: Sat, 21 May 2016 16:18:35 +0900 Subject: [PATCH 8/8] Fix ServerChunkDataPacket --- .../ingame/server/world/ServerChunkDataPacket.java | 10 ++++++---- .../java/org/spacehq/mc/protocol/util/NetUtil.java | 14 +++----------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerChunkDataPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerChunkDataPacket.java index 81a6c8ae..7d3606e1 100644 --- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerChunkDataPacket.java +++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerChunkDataPacket.java @@ -34,9 +34,11 @@ public class ServerChunkDataPacket implements Packet { boolean fullChunk = in.readBoolean(); int chunkMask = in.readVarInt(); byte data[] = in.readBytes(in.readVarInt()); - byte tileEntityData[] = in.readBytes(in.readVarInt()); - - this.column = NetUtil.readColumn(data, x, z, fullChunk, false, chunkMask, tileEntityData); + CompoundTag[] tileEntities = new CompoundTag[in.readVarInt()]; + for (int i = 0; i < tileEntities.length; i++) { + tileEntities[i] = NetUtil.readNBT(in); + } + this.column = NetUtil.readColumn(data, x, z, fullChunk, false, chunkMask, tileEntities); } @Override @@ -58,7 +60,7 @@ public class ServerChunkDataPacket implements Packet { for (CompoundTag compoundTag : column.getTileEntities()) { NetUtil.writeNBT(tileEntitiesNetOut, compoundTag); } - out.writeVarInt(tileEntitiesByteOut.size()); + out.writeVarInt(column.getTileEntities().length); out.writeBytes(tileEntitiesByteOut.toByteArray(), tileEntitiesByteOut.size()); } diff --git a/src/main/java/org/spacehq/mc/protocol/util/NetUtil.java b/src/main/java/org/spacehq/mc/protocol/util/NetUtil.java index a771452f..910ee4ea 100644 --- a/src/main/java/org/spacehq/mc/protocol/util/NetUtil.java +++ b/src/main/java/org/spacehq/mc/protocol/util/NetUtil.java @@ -236,9 +236,8 @@ public class NetUtil { out.writeByte(255); } - public static Column readColumn(byte data[], int x, int z, boolean fullChunk, boolean hasSkylight, int mask, byte tileEntityData[]) throws IOException { + public static Column readColumn(byte data[], int x, int z, boolean fullChunk, boolean hasSkylight, int mask, CompoundTag[] tileEntities) throws IOException { NetInput in = new StreamNetInput(new ByteArrayInputStream(data)); - NetInput tileEntityIn = new StreamNetInput(new ByteArrayInputStream(tileEntityData)); Exception ex = null; Column column = null; try { @@ -256,21 +255,14 @@ public class NetUtil { if(fullChunk) { biomeData = in.readBytes(256); } - - int available = tileEntityIn.available(); - List tileEntities = new ArrayList(); - while (available > 0) { - tileEntities.add(NetUtil.readNBT(tileEntityIn)); - available = tileEntityIn.available(); - } - column = new Column(x, z, chunks, biomeData, tileEntities.toArray(new CompoundTag[tileEntities.size()])); + column = new Column(x, z, chunks, biomeData, tileEntities); } catch(Exception e) { ex = e; } // Unfortunately, this is needed to detect whether the chunks contain skylight or not. if((in.available() > 0 || ex != null) && !hasSkylight) { - return readColumn(data, x, z, fullChunk, true, mask, tileEntityData); + return readColumn(data, x, z, fullChunk, true, mask, tileEntities); } else if(ex != null) { throw new IOException("Failed to read chunk data.", ex); }