diff --git a/pom.xml b/pom.xml
index d1e47c26..1b586b18 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.github.steveice10
mcprotocollib
- 1.12.2-3-SNAPSHOT
+ 1.13-1-SNAPSHOT
jar
MCProtocolLib
diff --git a/src/main/java/com/github/steveice10/mc/protocol/MinecraftConstants.java b/src/main/java/com/github/steveice10/mc/protocol/MinecraftConstants.java
index ea7db1a6..4118f9ef 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/MinecraftConstants.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/MinecraftConstants.java
@@ -2,8 +2,8 @@ package com.github.steveice10.mc.protocol;
public class MinecraftConstants {
// General Constants
- public static final String GAME_VERSION = "1.12.2";
- public static final int PROTOCOL_VERSION = 340;
+ public static final String GAME_VERSION = "1.13";
+ public static final int PROTOCOL_VERSION = 393;
// General Key Constants
public static final String PROFILE_KEY = "profile";
diff --git a/src/main/java/com/github/steveice10/mc/protocol/MinecraftProtocol.java b/src/main/java/com/github/steveice10/mc/protocol/MinecraftProtocol.java
index d7e34e62..cddac185 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/MinecraftProtocol.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/MinecraftProtocol.java
@@ -26,16 +26,26 @@ import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlaye
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerUseItemPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientAdvancementTabPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientCloseWindowPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientUpdateCommandBlockPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientConfirmTransactionPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientCraftingBookDataPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientCreativeInventoryActionPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientEditBookPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientEnchantItemPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientMoveItemToHotbarPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientPrepareCraftingGridPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientRenameItemPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientSelectTradePacket;
+import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientSetBeaconEffectPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientUpdateStructureBlockPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientBlockNBTRequestPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientEntityNBTRequestPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientSpectatePacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientSteerBoatPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientSteerVehiclePacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientUpdateCommandBlockMinecartPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientUpdateSignPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientVehicleMovePacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerAdvancementTabPacket;
@@ -43,6 +53,9 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.ServerAdvancements
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerBossBarPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerChatPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerCombatPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.server.ServerDeclareCommandsPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.server.ServerDeclareRecipesPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.server.ServerDeclareTagsPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerDifficultyPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerDisconnectPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
@@ -54,6 +67,7 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.ServerResourcePack
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerRespawnPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerSetCooldownPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerStatisticsPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.server.ServerStopSoundPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerSwitchCameraPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerTabCompletePacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerTitlePacket;
@@ -79,6 +93,7 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.entity.ServerEntit
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.ServerVehicleMovePacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerAbilitiesPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerChangeHeldItemPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerFacingPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerHealthPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerSetExperiencePacket;
@@ -107,6 +122,7 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerChunkD
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerExplosionPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerMapDataPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerMultiBlockChangePacket;
+import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerNBTResponsePacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerNotifyClientPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerOpenTileEntityEditorPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerPlayBuiltinSoundPacket;
@@ -119,9 +135,11 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdate
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateTimePacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerWorldBorderPacket;
import com.github.steveice10.mc.protocol.packet.login.client.EncryptionResponsePacket;
+import com.github.steveice10.mc.protocol.packet.login.client.LoginPluginResponsePacket;
import com.github.steveice10.mc.protocol.packet.login.client.LoginStartPacket;
import com.github.steveice10.mc.protocol.packet.login.server.EncryptionRequestPacket;
import com.github.steveice10.mc.protocol.packet.login.server.LoginDisconnectPacket;
+import com.github.steveice10.mc.protocol.packet.login.server.LoginPluginRequestPacket;
import com.github.steveice10.mc.protocol.packet.login.server.LoginSetCompressionPacket;
import com.github.steveice10.mc.protocol.packet.login.server.LoginSuccessPacket;
import com.github.steveice10.mc.protocol.packet.status.client.StatusPingPacket;
@@ -320,19 +338,23 @@ public class MinecraftProtocol extends PacketProtocol {
this.registerIncoming(0x01, EncryptionRequestPacket.class);
this.registerIncoming(0x02, LoginSuccessPacket.class);
this.registerIncoming(0x03, LoginSetCompressionPacket.class);
+ this.registerIncoming(0x04, LoginPluginRequestPacket.class);
this.registerOutgoing(0x00, LoginStartPacket.class);
this.registerOutgoing(0x01, EncryptionResponsePacket.class);
+ this.registerOutgoing(0x02, LoginPluginResponsePacket.class);
}
private void initServerLogin(Session session) {
this.registerIncoming(0x00, LoginStartPacket.class);
this.registerIncoming(0x01, EncryptionResponsePacket.class);
+ this.registerIncoming(0x02, LoginPluginResponsePacket.class);
this.registerOutgoing(0x00, LoginDisconnectPacket.class);
this.registerOutgoing(0x01, EncryptionRequestPacket.class);
this.registerOutgoing(0x02, LoginSuccessPacket.class);
this.registerOutgoing(0x03, LoginSetCompressionPacket.class);
+ this.registerOutgoing(0x04, LoginPluginRequestPacket.class);
}
private void initClientGame(Session session) {
@@ -350,142 +372,168 @@ public class MinecraftProtocol extends PacketProtocol {
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, ServerEntityMovementPacket.class);
- this.registerIncoming(0x26, ServerEntityPositionPacket.class);
- this.registerIncoming(0x27, ServerEntityPositionRotationPacket.class);
- this.registerIncoming(0x28, ServerEntityRotationPacket.class);
- this.registerIncoming(0x29, ServerVehicleMovePacket.class);
- this.registerIncoming(0x2A, ServerOpenTileEntityEditorPacket.class);
- this.registerIncoming(0x2B, ServerPreparedCraftingGridPacket.class);
- this.registerIncoming(0x2C, ServerPlayerAbilitiesPacket.class);
- this.registerIncoming(0x2D, ServerCombatPacket.class);
- this.registerIncoming(0x2E, ServerPlayerListEntryPacket.class);
- this.registerIncoming(0x2F, ServerPlayerPositionRotationPacket.class);
- this.registerIncoming(0x30, ServerPlayerUseBedPacket.class);
- this.registerIncoming(0x31, ServerUnlockRecipesPacket.class);
- this.registerIncoming(0x32, ServerEntityDestroyPacket.class);
- this.registerIncoming(0x33, ServerEntityRemoveEffectPacket.class);
- this.registerIncoming(0x34, ServerResourcePackSendPacket.class);
- this.registerIncoming(0x35, ServerRespawnPacket.class);
- this.registerIncoming(0x36, ServerEntityHeadLookPacket.class);
- this.registerIncoming(0x37, ServerAdvancementTabPacket.class);
- this.registerIncoming(0x38, ServerWorldBorderPacket.class);
- this.registerIncoming(0x39, ServerSwitchCameraPacket.class);
- this.registerIncoming(0x3A, ServerPlayerChangeHeldItemPacket.class);
- this.registerIncoming(0x3B, ServerDisplayScoreboardPacket.class);
- this.registerIncoming(0x3C, ServerEntityMetadataPacket.class);
- this.registerIncoming(0x3D, ServerEntityAttachPacket.class);
- this.registerIncoming(0x3E, ServerEntityVelocityPacket.class);
- this.registerIncoming(0x3F, ServerEntityEquipmentPacket.class);
- this.registerIncoming(0x40, ServerPlayerSetExperiencePacket.class);
- this.registerIncoming(0x41, ServerPlayerHealthPacket.class);
- this.registerIncoming(0x42, ServerScoreboardObjectivePacket.class);
- this.registerIncoming(0x43, ServerEntitySetPassengersPacket.class);
- this.registerIncoming(0x44, ServerTeamPacket.class);
- this.registerIncoming(0x45, ServerUpdateScorePacket.class);
- this.registerIncoming(0x46, ServerSpawnPositionPacket.class);
- this.registerIncoming(0x47, ServerUpdateTimePacket.class);
- this.registerIncoming(0x48, ServerTitlePacket.class);
- this.registerIncoming(0x49, ServerPlayBuiltinSoundPacket.class);
- this.registerIncoming(0x4A, ServerPlayerListDataPacket.class);
- this.registerIncoming(0x4B, ServerEntityCollectItemPacket.class);
- this.registerIncoming(0x4C, ServerEntityTeleportPacket.class);
- this.registerIncoming(0x4D, ServerAdvancementsPacket.class);
- this.registerIncoming(0x4E, ServerEntityPropertiesPacket.class);
- this.registerIncoming(0x4F, ServerEntityEffectPacket.class);
+ this.registerIncoming(0x0E, ServerChatPacket.class);
+ this.registerIncoming(0x0F, ServerMultiBlockChangePacket.class);
+ this.registerIncoming(0x10, ServerTabCompletePacket.class);
+ this.registerIncoming(0x11, ServerDeclareCommandsPacket.class);
+ this.registerIncoming(0x12, ServerConfirmTransactionPacket.class);
+ this.registerIncoming(0x13, ServerCloseWindowPacket.class);
+ this.registerIncoming(0x14, ServerOpenWindowPacket.class);
+ this.registerIncoming(0x15, ServerWindowItemsPacket.class);
+ this.registerIncoming(0x16, ServerWindowPropertyPacket.class);
+ this.registerIncoming(0x17, ServerSetSlotPacket.class);
+ this.registerIncoming(0x18, ServerSetCooldownPacket.class);
+ this.registerIncoming(0x19, ServerPluginMessagePacket.class);
+ this.registerIncoming(0x1A, ServerPlaySoundPacket.class);
+ this.registerIncoming(0x1B, ServerDisconnectPacket.class);
+ this.registerIncoming(0x1C, ServerEntityStatusPacket.class);
+ this.registerIncoming(0x1D, ServerNBTResponsePacket.class);
+ this.registerIncoming(0x1E, ServerExplosionPacket.class);
+ this.registerIncoming(0x1F, ServerUnloadChunkPacket.class);
+ this.registerIncoming(0x20, ServerNotifyClientPacket.class);
+ this.registerIncoming(0x21, ServerKeepAlivePacket.class);
+ this.registerIncoming(0x22, ServerChunkDataPacket.class);
+ this.registerIncoming(0x23, ServerPlayEffectPacket.class);
+ this.registerIncoming(0x24, ServerSpawnParticlePacket.class);
+ this.registerIncoming(0x25, ServerJoinGamePacket.class);
+ this.registerIncoming(0x26, ServerMapDataPacket.class);
+ this.registerIncoming(0x27, ServerEntityMovementPacket.class);
+ this.registerIncoming(0x28, ServerEntityPositionPacket.class);
+ this.registerIncoming(0x29, ServerEntityPositionRotationPacket.class);
+ this.registerIncoming(0x2A, ServerEntityRotationPacket.class);
+ this.registerIncoming(0x2B, ServerVehicleMovePacket.class);
+ this.registerIncoming(0x2C, ServerOpenTileEntityEditorPacket.class);
+ this.registerIncoming(0x2D, ServerPreparedCraftingGridPacket.class);
+ this.registerIncoming(0x2E, ServerPlayerAbilitiesPacket.class);
+ this.registerIncoming(0x2F, ServerCombatPacket.class);
+ this.registerIncoming(0x30, ServerPlayerListEntryPacket.class);
+ this.registerIncoming(0x31, ServerPlayerFacingPacket.class);
+ this.registerIncoming(0x32, ServerPlayerPositionRotationPacket.class);
+ this.registerIncoming(0x33, ServerPlayerUseBedPacket.class);
+ this.registerIncoming(0x34, ServerUnlockRecipesPacket.class);
+ this.registerIncoming(0x35, ServerEntityDestroyPacket.class);
+ this.registerIncoming(0x36, ServerEntityRemoveEffectPacket.class);
+ this.registerIncoming(0x37, ServerResourcePackSendPacket.class);
+ this.registerIncoming(0x38, ServerRespawnPacket.class);
+ this.registerIncoming(0x39, ServerEntityHeadLookPacket.class);
+ this.registerIncoming(0x3A, ServerAdvancementTabPacket.class);
+ this.registerIncoming(0x3B, ServerWorldBorderPacket.class);
+ this.registerIncoming(0x3C, ServerSwitchCameraPacket.class);
+ this.registerIncoming(0x3D, ServerPlayerChangeHeldItemPacket.class);
+ this.registerIncoming(0x3E, ServerDisplayScoreboardPacket.class);
+ this.registerIncoming(0x3F, ServerEntityMetadataPacket.class);
+ this.registerIncoming(0x40, ServerEntityAttachPacket.class);
+ this.registerIncoming(0x41, ServerEntityVelocityPacket.class);
+ this.registerIncoming(0x42, ServerEntityEquipmentPacket.class);
+ this.registerIncoming(0x43, ServerPlayerSetExperiencePacket.class);
+ this.registerIncoming(0x44, ServerPlayerHealthPacket.class);
+ this.registerIncoming(0x45, ServerScoreboardObjectivePacket.class);
+ this.registerIncoming(0x46, ServerEntitySetPassengersPacket.class);
+ this.registerIncoming(0x47, ServerTeamPacket.class);
+ this.registerIncoming(0x48, ServerUpdateScorePacket.class);
+ this.registerIncoming(0x49, ServerSpawnPositionPacket.class);
+ this.registerIncoming(0x4A, ServerUpdateTimePacket.class);
+ this.registerIncoming(0x4B, ServerTitlePacket.class);
+ this.registerIncoming(0x4C, ServerStopSoundPacket.class);
+ this.registerIncoming(0x4D, ServerPlayBuiltinSoundPacket.class);
+ this.registerIncoming(0x4E, ServerPlayerListDataPacket.class);
+ this.registerIncoming(0x4F, ServerEntityCollectItemPacket.class);
+ this.registerIncoming(0x50, ServerEntityTeleportPacket.class);
+ this.registerIncoming(0x51, ServerAdvancementsPacket.class);
+ this.registerIncoming(0x52, ServerEntityPropertiesPacket.class);
+ this.registerIncoming(0x53, ServerEntityEffectPacket.class);
+ this.registerIncoming(0x54, ServerDeclareRecipesPacket.class);
+ this.registerIncoming(0x55, ServerDeclareTagsPacket.class);
this.registerOutgoing(0x00, ClientTeleportConfirmPacket.class);
- this.registerOutgoing(0x01, ClientTabCompletePacket.class);
+ this.registerOutgoing(0x01, ClientBlockNBTRequestPacket.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, ClientPlayerMovementPacket.class);
- this.registerOutgoing(0x0D, ClientPlayerPositionPacket.class);
- this.registerOutgoing(0x0E, ClientPlayerPositionRotationPacket.class);
- this.registerOutgoing(0x0F, ClientPlayerRotationPacket.class);
- this.registerOutgoing(0x10, ClientVehicleMovePacket.class);
- this.registerOutgoing(0x11, ClientSteerBoatPacket.class);
- this.registerOutgoing(0x12, ClientPrepareCraftingGridPacket.class);
- this.registerOutgoing(0x13, ClientPlayerAbilitiesPacket.class);
- this.registerOutgoing(0x14, ClientPlayerActionPacket.class);
- this.registerOutgoing(0x15, ClientPlayerStatePacket.class);
- this.registerOutgoing(0x16, ClientSteerVehiclePacket.class);
- this.registerOutgoing(0x17, ClientCraftingBookDataPacket.class);
- this.registerOutgoing(0x18, ClientResourcePackStatusPacket.class);
- this.registerOutgoing(0x19, ClientAdvancementTabPacket.class);
- this.registerOutgoing(0x1A, ClientPlayerChangeHeldItemPacket.class);
- this.registerOutgoing(0x1B, ClientCreativeInventoryActionPacket.class);
- this.registerOutgoing(0x1C, ClientUpdateSignPacket.class);
- this.registerOutgoing(0x1D, ClientPlayerSwingArmPacket.class);
- this.registerOutgoing(0x1E, ClientSpectatePacket.class);
- this.registerOutgoing(0x1F, ClientPlayerPlaceBlockPacket.class);
- this.registerOutgoing(0x20, ClientPlayerUseItemPacket.class);
+ this.registerOutgoing(0x05, ClientTabCompletePacket.class);
+ this.registerOutgoing(0x06, ClientConfirmTransactionPacket.class);
+ this.registerOutgoing(0x07, ClientEnchantItemPacket.class);
+ this.registerOutgoing(0x08, ClientWindowActionPacket.class);
+ this.registerOutgoing(0x09, ClientCloseWindowPacket.class);
+ this.registerOutgoing(0x0A, ClientPluginMessagePacket.class);
+ this.registerOutgoing(0x0B, ClientEditBookPacket.class);
+ this.registerOutgoing(0x0C, ClientEntityNBTRequestPacket.class);
+ this.registerOutgoing(0x0D, ClientPlayerInteractEntityPacket.class);
+ this.registerOutgoing(0x0E, ClientKeepAlivePacket.class);
+ this.registerOutgoing(0x0F, ClientPlayerMovementPacket.class);
+ this.registerOutgoing(0x10, ClientPlayerPositionPacket.class);
+ this.registerOutgoing(0x11, ClientPlayerPositionRotationPacket.class);
+ this.registerOutgoing(0x12, ClientPlayerRotationPacket.class);
+ this.registerOutgoing(0x13, ClientVehicleMovePacket.class);
+ this.registerOutgoing(0x14, ClientSteerBoatPacket.class);
+ this.registerOutgoing(0x15, ClientMoveItemToHotbarPacket.class);
+ this.registerOutgoing(0x16, ClientPrepareCraftingGridPacket.class);
+ this.registerOutgoing(0x17, ClientPlayerAbilitiesPacket.class);
+ this.registerOutgoing(0x18, ClientPlayerActionPacket.class);
+ this.registerOutgoing(0x19, ClientPlayerStatePacket.class);
+ this.registerOutgoing(0x1A, ClientSteerVehiclePacket.class);
+ this.registerOutgoing(0x1B, ClientCraftingBookDataPacket.class);
+ this.registerOutgoing(0x1C, ClientRenameItemPacket.class);
+ this.registerOutgoing(0x1D, ClientResourcePackStatusPacket.class);
+ this.registerOutgoing(0x1E, ClientAdvancementTabPacket.class);
+ this.registerOutgoing(0x1F, ClientSelectTradePacket.class);
+ this.registerOutgoing(0x20, ClientSetBeaconEffectPacket.class);
+ this.registerOutgoing(0x21, ClientPlayerChangeHeldItemPacket.class);
+ this.registerOutgoing(0x22, ClientUpdateCommandBlockPacket.class);
+ this.registerOutgoing(0x23, ClientUpdateCommandBlockMinecartPacket.class);
+ this.registerOutgoing(0x24, ClientCreativeInventoryActionPacket.class);
+ this.registerOutgoing(0x25, ClientUpdateStructureBlockPacket.class);
+ this.registerOutgoing(0x26, ClientUpdateSignPacket.class);
+ this.registerOutgoing(0x27, ClientPlayerSwingArmPacket.class);
+ this.registerOutgoing(0x28, ClientSpectatePacket.class);
+ this.registerOutgoing(0x29, ClientPlayerPlaceBlockPacket.class);
+ this.registerOutgoing(0x2A, ClientPlayerUseItemPacket.class);
}
private void initServerGame(Session session) {
this.registerIncoming(0x00, ClientTeleportConfirmPacket.class);
- this.registerIncoming(0x01, ClientTabCompletePacket.class);
+ this.registerIncoming(0x01, ClientBlockNBTRequestPacket.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, ClientPlayerMovementPacket.class);
- this.registerIncoming(0x0D, ClientPlayerPositionPacket.class);
- this.registerIncoming(0x0E, ClientPlayerPositionRotationPacket.class);
- this.registerIncoming(0x0F, ClientPlayerRotationPacket.class);
- this.registerIncoming(0x10, ClientVehicleMovePacket.class);
- this.registerIncoming(0x11, ClientSteerBoatPacket.class);
- this.registerIncoming(0x12, ClientPrepareCraftingGridPacket.class);
- this.registerIncoming(0x13, ClientPlayerAbilitiesPacket.class);
- this.registerIncoming(0x14, ClientPlayerActionPacket.class);
- this.registerIncoming(0x15, ClientPlayerStatePacket.class);
- this.registerIncoming(0x16, ClientSteerVehiclePacket.class);
- this.registerIncoming(0x17, ClientCraftingBookDataPacket.class);
- this.registerIncoming(0x18, ClientResourcePackStatusPacket.class);
- this.registerIncoming(0x19, ClientAdvancementTabPacket.class);
- this.registerIncoming(0x1A, ClientPlayerChangeHeldItemPacket.class);
- this.registerIncoming(0x1B, ClientCreativeInventoryActionPacket.class);
- this.registerIncoming(0x1C, ClientUpdateSignPacket.class);
- this.registerIncoming(0x1D, ClientPlayerSwingArmPacket.class);
- this.registerIncoming(0x1E, ClientSpectatePacket.class);
- this.registerIncoming(0x1F, ClientPlayerPlaceBlockPacket.class);
- this.registerIncoming(0x20, ClientPlayerUseItemPacket.class);
+ this.registerIncoming(0x05, ClientTabCompletePacket.class);
+ this.registerIncoming(0x06, ClientConfirmTransactionPacket.class);
+ this.registerIncoming(0x07, ClientEnchantItemPacket.class);
+ this.registerIncoming(0x08, ClientWindowActionPacket.class);
+ this.registerIncoming(0x09, ClientCloseWindowPacket.class);
+ this.registerIncoming(0x0A, ClientPluginMessagePacket.class);
+ this.registerIncoming(0x0B, ClientEditBookPacket.class);
+ this.registerIncoming(0x0C, ClientEntityNBTRequestPacket.class);
+ this.registerIncoming(0x0D, ClientPlayerInteractEntityPacket.class);
+ this.registerIncoming(0x0E, ClientKeepAlivePacket.class);
+ this.registerIncoming(0x0F, ClientPlayerMovementPacket.class);
+ this.registerIncoming(0x10, ClientPlayerPositionPacket.class);
+ this.registerIncoming(0x11, ClientPlayerPositionRotationPacket.class);
+ this.registerIncoming(0x12, ClientPlayerRotationPacket.class);
+ this.registerIncoming(0x13, ClientVehicleMovePacket.class);
+ this.registerIncoming(0x14, ClientSteerBoatPacket.class);
+ this.registerIncoming(0x15, ClientMoveItemToHotbarPacket.class);
+ this.registerIncoming(0x16, ClientPrepareCraftingGridPacket.class);
+ this.registerIncoming(0x17, ClientPlayerAbilitiesPacket.class);
+ this.registerIncoming(0x18, ClientPlayerActionPacket.class);
+ this.registerIncoming(0x19, ClientPlayerStatePacket.class);
+ this.registerIncoming(0x1A, ClientSteerVehiclePacket.class);
+ this.registerIncoming(0x1B, ClientCraftingBookDataPacket.class);
+ this.registerIncoming(0x1C, ClientRenameItemPacket.class);
+ this.registerIncoming(0x1D, ClientResourcePackStatusPacket.class);
+ this.registerIncoming(0x1E, ClientAdvancementTabPacket.class);
+ this.registerIncoming(0x1F, ClientSelectTradePacket.class);
+ this.registerIncoming(0x20, ClientSetBeaconEffectPacket.class);
+ this.registerIncoming(0x21, ClientPlayerChangeHeldItemPacket.class);
+ this.registerIncoming(0x22, ClientUpdateCommandBlockPacket.class);
+ this.registerIncoming(0x23, ClientUpdateCommandBlockMinecartPacket.class);
+ this.registerIncoming(0x24, ClientCreativeInventoryActionPacket.class);
+ this.registerIncoming(0x25, ClientUpdateStructureBlockPacket.class);
+ this.registerIncoming(0x26, ClientUpdateSignPacket.class);
+ this.registerIncoming(0x27, ClientPlayerSwingArmPacket.class);
+ this.registerIncoming(0x28, ClientSpectatePacket.class);
+ this.registerIncoming(0x29, ClientPlayerPlaceBlockPacket.class);
+ this.registerIncoming(0x2A, ClientPlayerUseItemPacket.class);
this.registerOutgoing(0x00, ServerSpawnObjectPacket.class);
this.registerOutgoing(0x01, ServerSpawnExpOrbPacket.class);
@@ -501,72 +549,78 @@ public class MinecraftProtocol extends PacketProtocol {
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, ServerEntityMovementPacket.class);
- this.registerOutgoing(0x26, ServerEntityPositionPacket.class);
- this.registerOutgoing(0x27, ServerEntityPositionRotationPacket.class);
- this.registerOutgoing(0x28, ServerEntityRotationPacket.class);
- this.registerOutgoing(0x29, ServerVehicleMovePacket.class);
- this.registerOutgoing(0x2A, ServerOpenTileEntityEditorPacket.class);
- this.registerOutgoing(0x2B, ServerPreparedCraftingGridPacket.class);
- this.registerOutgoing(0x2C, ServerPlayerAbilitiesPacket.class);
- this.registerOutgoing(0x2D, ServerCombatPacket.class);
- this.registerOutgoing(0x2E, ServerPlayerListEntryPacket.class);
- this.registerOutgoing(0x2F, ServerPlayerPositionRotationPacket.class);
- this.registerOutgoing(0x30, ServerPlayerUseBedPacket.class);
- this.registerOutgoing(0x31, ServerUnlockRecipesPacket.class);
- this.registerOutgoing(0x32, ServerEntityDestroyPacket.class);
- this.registerOutgoing(0x33, ServerEntityRemoveEffectPacket.class);
- this.registerOutgoing(0x34, ServerResourcePackSendPacket.class);
- this.registerOutgoing(0x35, ServerRespawnPacket.class);
- this.registerOutgoing(0x36, ServerEntityHeadLookPacket.class);
- this.registerOutgoing(0x37, ServerAdvancementTabPacket.class);
- this.registerOutgoing(0x38, ServerWorldBorderPacket.class);
- this.registerOutgoing(0x39, ServerSwitchCameraPacket.class);
- this.registerOutgoing(0x3A, ServerPlayerChangeHeldItemPacket.class);
- this.registerOutgoing(0x3B, ServerDisplayScoreboardPacket.class);
- this.registerOutgoing(0x3C, ServerEntityMetadataPacket.class);
- this.registerOutgoing(0x3D, ServerEntityAttachPacket.class);
- this.registerOutgoing(0x3E, ServerEntityVelocityPacket.class);
- this.registerOutgoing(0x3F, ServerEntityEquipmentPacket.class);
- this.registerOutgoing(0x40, ServerPlayerSetExperiencePacket.class);
- this.registerOutgoing(0x41, ServerPlayerHealthPacket.class);
- this.registerOutgoing(0x42, ServerScoreboardObjectivePacket.class);
- this.registerOutgoing(0x43, ServerEntitySetPassengersPacket.class);
- this.registerOutgoing(0x44, ServerTeamPacket.class);
- this.registerOutgoing(0x45, ServerUpdateScorePacket.class);
- this.registerOutgoing(0x46, ServerSpawnPositionPacket.class);
- this.registerOutgoing(0x47, ServerUpdateTimePacket.class);
- this.registerOutgoing(0x48, ServerTitlePacket.class);
- this.registerOutgoing(0x49, ServerPlayBuiltinSoundPacket.class);
- this.registerOutgoing(0x4A, ServerPlayerListDataPacket.class);
- this.registerOutgoing(0x4B, ServerEntityCollectItemPacket.class);
- this.registerOutgoing(0x4C, ServerEntityTeleportPacket.class);
- this.registerOutgoing(0x4D, ServerAdvancementsPacket.class);
- this.registerOutgoing(0x4E, ServerEntityPropertiesPacket.class);
- this.registerOutgoing(0x4F, ServerEntityEffectPacket.class);
+ this.registerOutgoing(0x0E, ServerChatPacket.class);
+ this.registerOutgoing(0x0F, ServerMultiBlockChangePacket.class);
+ this.registerOutgoing(0x10, ServerTabCompletePacket.class);
+ this.registerOutgoing(0x11, ServerDeclareCommandsPacket.class);
+ this.registerOutgoing(0x12, ServerConfirmTransactionPacket.class);
+ this.registerOutgoing(0x13, ServerCloseWindowPacket.class);
+ this.registerOutgoing(0x14, ServerOpenWindowPacket.class);
+ this.registerOutgoing(0x15, ServerWindowItemsPacket.class);
+ this.registerOutgoing(0x16, ServerWindowPropertyPacket.class);
+ this.registerOutgoing(0x17, ServerSetSlotPacket.class);
+ this.registerOutgoing(0x18, ServerSetCooldownPacket.class);
+ this.registerOutgoing(0x19, ServerPluginMessagePacket.class);
+ this.registerOutgoing(0x1A, ServerPlaySoundPacket.class);
+ this.registerOutgoing(0x1B, ServerDisconnectPacket.class);
+ this.registerOutgoing(0x1C, ServerEntityStatusPacket.class);
+ this.registerOutgoing(0x1D, ServerNBTResponsePacket.class);
+ this.registerOutgoing(0x1E, ServerExplosionPacket.class);
+ this.registerOutgoing(0x1F, ServerUnloadChunkPacket.class);
+ this.registerOutgoing(0x20, ServerNotifyClientPacket.class);
+ this.registerOutgoing(0x21, ServerKeepAlivePacket.class);
+ this.registerOutgoing(0x22, ServerChunkDataPacket.class);
+ this.registerOutgoing(0x23, ServerPlayEffectPacket.class);
+ this.registerOutgoing(0x24, ServerSpawnParticlePacket.class);
+ this.registerOutgoing(0x25, ServerJoinGamePacket.class);
+ this.registerOutgoing(0x26, ServerMapDataPacket.class);
+ this.registerOutgoing(0x27, ServerEntityMovementPacket.class);
+ this.registerOutgoing(0x28, ServerEntityPositionPacket.class);
+ this.registerOutgoing(0x29, ServerEntityPositionRotationPacket.class);
+ this.registerOutgoing(0x2A, ServerEntityRotationPacket.class);
+ this.registerOutgoing(0x2B, ServerVehicleMovePacket.class);
+ this.registerOutgoing(0x2C, ServerOpenTileEntityEditorPacket.class);
+ this.registerOutgoing(0x2D, ServerPreparedCraftingGridPacket.class);
+ this.registerOutgoing(0x2E, ServerPlayerAbilitiesPacket.class);
+ this.registerOutgoing(0x2F, ServerCombatPacket.class);
+ this.registerOutgoing(0x30, ServerPlayerListEntryPacket.class);
+ this.registerOutgoing(0x31, ServerPlayerFacingPacket.class);
+ this.registerOutgoing(0x32, ServerPlayerPositionRotationPacket.class);
+ this.registerOutgoing(0x33, ServerPlayerUseBedPacket.class);
+ this.registerOutgoing(0x34, ServerUnlockRecipesPacket.class);
+ this.registerOutgoing(0x35, ServerEntityDestroyPacket.class);
+ this.registerOutgoing(0x36, ServerEntityRemoveEffectPacket.class);
+ this.registerOutgoing(0x37, ServerResourcePackSendPacket.class);
+ this.registerOutgoing(0x38, ServerRespawnPacket.class);
+ this.registerOutgoing(0x39, ServerEntityHeadLookPacket.class);
+ this.registerOutgoing(0x3A, ServerAdvancementTabPacket.class);
+ this.registerOutgoing(0x3B, ServerWorldBorderPacket.class);
+ this.registerOutgoing(0x3C, ServerSwitchCameraPacket.class);
+ this.registerOutgoing(0x3D, ServerPlayerChangeHeldItemPacket.class);
+ this.registerOutgoing(0x3E, ServerDisplayScoreboardPacket.class);
+ this.registerOutgoing(0x3F, ServerEntityMetadataPacket.class);
+ this.registerOutgoing(0x40, ServerEntityAttachPacket.class);
+ this.registerOutgoing(0x41, ServerEntityVelocityPacket.class);
+ this.registerOutgoing(0x42, ServerEntityEquipmentPacket.class);
+ this.registerOutgoing(0x43, ServerPlayerSetExperiencePacket.class);
+ this.registerOutgoing(0x44, ServerPlayerHealthPacket.class);
+ this.registerOutgoing(0x45, ServerScoreboardObjectivePacket.class);
+ this.registerOutgoing(0x46, ServerEntitySetPassengersPacket.class);
+ this.registerOutgoing(0x47, ServerTeamPacket.class);
+ this.registerOutgoing(0x48, ServerUpdateScorePacket.class);
+ this.registerOutgoing(0x49, ServerSpawnPositionPacket.class);
+ this.registerOutgoing(0x4A, ServerUpdateTimePacket.class);
+ this.registerOutgoing(0x4B, ServerTitlePacket.class);
+ this.registerOutgoing(0x4C, ServerStopSoundPacket.class);
+ this.registerOutgoing(0x4D, ServerPlayBuiltinSoundPacket.class);
+ this.registerOutgoing(0x4E, ServerPlayerListDataPacket.class);
+ this.registerOutgoing(0x4F, ServerEntityCollectItemPacket.class);
+ this.registerOutgoing(0x50, ServerEntityTeleportPacket.class);
+ this.registerOutgoing(0x51, ServerAdvancementsPacket.class);
+ this.registerOutgoing(0x52, ServerEntityPropertiesPacket.class);
+ this.registerOutgoing(0x53, ServerEntityEffectPacket.class);
+ this.registerOutgoing(0x54, ServerDeclareRecipesPacket.class);
+ this.registerOutgoing(0x55, ServerDeclareTagsPacket.class);
}
private void initClientStatus(Session session) {
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/MagicValues.java b/src/main/java/com/github/steveice10/mc/protocol/data/MagicValues.java
index 273d3795..ca9a35d7 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/MagicValues.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/MagicValues.java
@@ -13,6 +13,7 @@ import com.github.steveice10.mc.protocol.data.game.advancement.Advancement;
import com.github.steveice10.mc.protocol.data.game.entity.Effect;
import com.github.steveice10.mc.protocol.data.game.entity.EntityStatus;
import com.github.steveice10.mc.protocol.data.game.entity.EquipmentSlot;
+import com.github.steveice10.mc.protocol.data.game.entity.FeetOrEyes;
import com.github.steveice10.mc.protocol.data.game.entity.attribute.AttributeType;
import com.github.steveice10.mc.protocol.data.game.entity.attribute.ModifierOperation;
import com.github.steveice10.mc.protocol.data.game.entity.attribute.ModifierType;
@@ -43,6 +44,7 @@ import com.github.steveice10.mc.protocol.data.game.scoreboard.TeamColor;
import com.github.steveice10.mc.protocol.data.game.setting.ChatVisibility;
import com.github.steveice10.mc.protocol.data.game.setting.Difficulty;
import com.github.steveice10.mc.protocol.data.game.statistic.GenericStatistic;
+import com.github.steveice10.mc.protocol.data.game.statistic.StatisticCategory;
import com.github.steveice10.mc.protocol.data.game.window.AdvancementTabAction;
import com.github.steveice10.mc.protocol.data.game.window.ClickItemParam;
import com.github.steveice10.mc.protocol.data.game.window.CraftingBookDataType;
@@ -52,13 +54,18 @@ import com.github.steveice10.mc.protocol.data.game.window.FillStackParam;
import com.github.steveice10.mc.protocol.data.game.window.MoveToHotbarParam;
import com.github.steveice10.mc.protocol.data.game.window.ShiftClickItemParam;
import com.github.steveice10.mc.protocol.data.game.window.SpreadItemParam;
+import com.github.steveice10.mc.protocol.data.game.window.UpdateStructureBlockAction;
+import com.github.steveice10.mc.protocol.data.game.window.UpdateStructureBlockMode;
import com.github.steveice10.mc.protocol.data.game.window.WindowAction;
import com.github.steveice10.mc.protocol.data.game.window.WindowType;
import com.github.steveice10.mc.protocol.data.game.window.property.AnvilProperty;
import com.github.steveice10.mc.protocol.data.game.window.property.BrewingStandProperty;
import com.github.steveice10.mc.protocol.data.game.window.property.EnchantmentTableProperty;
import com.github.steveice10.mc.protocol.data.game.window.property.FurnaceProperty;
-import com.github.steveice10.mc.protocol.data.game.world.Particle;
+import com.github.steveice10.mc.protocol.data.game.world.block.StructureMirror;
+import com.github.steveice10.mc.protocol.data.game.world.block.StructureRotation;
+import com.github.steveice10.mc.protocol.data.game.world.block.CommandBlockMode;
+import com.github.steveice10.mc.protocol.data.game.world.particle.ParticleType;
import com.github.steveice10.mc.protocol.data.game.world.WorldBorderAction;
import com.github.steveice10.mc.protocol.data.game.world.WorldType;
import com.github.steveice10.mc.protocol.data.game.world.block.BlockFace;
@@ -136,15 +143,17 @@ public class MagicValues {
register(MetadataType.FLOAT, 2);
register(MetadataType.STRING, 3);
register(MetadataType.CHAT, 4);
- register(MetadataType.ITEM, 5);
- register(MetadataType.BOOLEAN, 6);
- register(MetadataType.ROTATION, 7);
- register(MetadataType.POSITION, 8);
- register(MetadataType.OPTIONAL_POSITION, 9);
- register(MetadataType.BLOCK_FACE, 10);
- register(MetadataType.OPTIONAL_UUID, 11);
- register(MetadataType.BLOCK_STATE, 12);
- register(MetadataType.NBT_TAG, 13);
+ register(MetadataType.OPTIONAL_CHAT, 5);
+ register(MetadataType.ITEM, 6);
+ register(MetadataType.BOOLEAN, 7);
+ register(MetadataType.ROTATION, 8);
+ register(MetadataType.POSITION, 9);
+ register(MetadataType.OPTIONAL_POSITION, 10);
+ register(MetadataType.BLOCK_FACE, 11);
+ register(MetadataType.OPTIONAL_UUID, 12);
+ register(MetadataType.BLOCK_STATE, 13);
+ register(MetadataType.NBT_TAG, 14);
+ register(MetadataType.PARTICLE, 15);
register(HandshakeIntent.STATUS, 1);
register(HandshakeIntent.LOGIN, 2);
@@ -417,32 +426,32 @@ public class MagicValues {
register(HangingDirection.NORTH, 2);
register(HangingDirection.EAST, 3);
- register(PaintingType.KEBAB, "Kebab");
- register(PaintingType.AZTEC, "Aztec");
- register(PaintingType.ALBAN, "Alban");
- register(PaintingType.AZTEC2, "Aztec2");
- register(PaintingType.BOMB, "Bomb");
- register(PaintingType.PLANT, "Plant");
- register(PaintingType.WASTELAND, "Wasteland");
- register(PaintingType.POOL, "Pool");
- register(PaintingType.COURBET, "Courbet");
- register(PaintingType.SEA, "Sea");
- register(PaintingType.SUNSET, "Sunset");
- register(PaintingType.CREEBET, "Creebet");
- register(PaintingType.WANDERER, "Wanderer");
- register(PaintingType.GRAHAM, "Graham");
- register(PaintingType.MATCH, "Match");
- register(PaintingType.BUST, "Bust");
- register(PaintingType.STAGE, "Stage");
- register(PaintingType.VOID, "Void");
- register(PaintingType.SKULL_AND_ROSES, "SkullAndRoses");
- register(PaintingType.WITHER, "Wither");
- register(PaintingType.FIGHTERS, "Fighters");
- register(PaintingType.POINTER, "Pointer");
- register(PaintingType.PIG_SCENE, "Pigscene");
- register(PaintingType.BURNING_SKULL, "BurningSkull");
- register(PaintingType.SKELETON, "Skeleton");
- register(PaintingType.DONKEY_KONG, "DonkeyKong");
+ register(PaintingType.KEBAB, 0);
+ register(PaintingType.AZTEC, 1);
+ register(PaintingType.ALBAN, 2);
+ register(PaintingType.AZTEC2, 3);
+ register(PaintingType.BOMB, 4);
+ register(PaintingType.PLANT, 5);
+ register(PaintingType.WASTELAND, 6);
+ register(PaintingType.POOL, 7);
+ register(PaintingType.COURBET, 8);
+ register(PaintingType.SEA, 9);
+ register(PaintingType.SUNSET, 10);
+ register(PaintingType.CREEBET, 11);
+ register(PaintingType.WANDERER, 12);
+ register(PaintingType.GRAHAM, 13);
+ register(PaintingType.MATCH, 14);
+ register(PaintingType.BUST, 15);
+ register(PaintingType.STAGE, 16);
+ register(PaintingType.VOID, 17);
+ register(PaintingType.SKULL_AND_ROSES, 18);
+ register(PaintingType.WITHER, 19);
+ register(PaintingType.FIGHTERS, 20);
+ register(PaintingType.POINTER, 21);
+ register(PaintingType.PIG_SCENE, 22);
+ register(PaintingType.BURNING_SKULL, 23);
+ register(PaintingType.SKELETON, 24);
+ register(PaintingType.DONKEY_KONG, 25);
register(ScoreboardPosition.PLAYER_LIST, 0);
register(ScoreboardPosition.SIDEBAR, 1);
@@ -487,12 +496,23 @@ public class MagicValues {
register(MapIconType.SMALL_WHITE_CIRCLE, 7);
register(MapIconType.MANSION, 8);
register(MapIconType.TEMPLE, 9);
- register(MapIconType.UNUSED_10, 10);
- register(MapIconType.UNUSED_11, 11);
- register(MapIconType.UNUSED_12, 12);
- register(MapIconType.UNUSED_13, 13);
- register(MapIconType.UNUSED_14, 14);
- register(MapIconType.UNUSED_15, 15);
+ register(MapIconType.WHITE_BANNER, 10);
+ register(MapIconType.ORANGE_BANNER, 11);
+ register(MapIconType.MAGENTA_BANNER, 12);
+ register(MapIconType.LIGHT_BLUE_BANNER, 13);
+ register(MapIconType.YELLOW_BANNER, 14);
+ register(MapIconType.LIME_BANNER, 15);
+ register(MapIconType.PINK_BANNER, 16);
+ register(MapIconType.GRAY_BANNER, 17);
+ register(MapIconType.LIGHT_GRAY_BANNER, 18);
+ register(MapIconType.CYAN_BANNER, 19);
+ register(MapIconType.PURPLE_BANNER, 20);
+ register(MapIconType.BLUE_BANNER, 21);
+ register(MapIconType.BROWN_BANNER, 22);
+ register(MapIconType.GREEN_BANNER, 23);
+ register(MapIconType.RED_BANNER, 24);
+ register(MapIconType.BLACK_BANNER, 25);
+ register(MapIconType.TREASURE_MARKER, 26);
register(WindowType.GENERIC_INVENTORY, "minecraft:container");
register(WindowType.ANVIL, "minecraft:anvil");
@@ -543,7 +563,7 @@ public class MagicValues {
register(UpdatedTileType.COMMAND_BLOCK, 2);
register(UpdatedTileType.BEACON, 3);
register(UpdatedTileType.SKULL, 4);
- register(UpdatedTileType.FLOWER_POT, 5);
+ register(UpdatedTileType.CONDUIT, 5);
register(UpdatedTileType.BANNER, 6);
register(UpdatedTileType.STRUCTURE_BLOCK, 7);
register(UpdatedTileType.END_GATEWAY, 8);
@@ -562,6 +582,29 @@ public class MagicValues {
register(ClientNotification.THUNDER_STRENGTH, 8);
register(ClientNotification.AFFECTED_BY_ELDER_GUARDIAN, 10);
+ register(CommandBlockMode.SEQUENCE, 0);
+ register(CommandBlockMode.AUTO, 1);
+ register(CommandBlockMode.REDSTONE, 2);
+
+ register(UpdateStructureBlockAction.UPDATE_DATA, 0);
+ register(UpdateStructureBlockAction.SAVE_STRUCTURE, 1);
+ register(UpdateStructureBlockAction.LOAD_STRUCTURE, 2);
+ register(UpdateStructureBlockAction.DETECT_SIZE, 3);
+
+ register(UpdateStructureBlockMode.SAVE, 0);
+ register(UpdateStructureBlockMode.LOAD, 1);
+ register(UpdateStructureBlockMode.CORNER, 2);
+ register(UpdateStructureBlockMode.DATA, 3);
+
+ register(StructureRotation.NONE, 0);
+ register(StructureRotation.CLOCKWISE_90, 1);
+ register(StructureRotation.CLOCKWISE_180, 2);
+ register(StructureRotation.COUNTERCLOCKWISE_90, 3);
+
+ register(StructureMirror.NONE, 0);
+ register(StructureMirror.LEFT_RIGHT, 1);
+ register(StructureMirror.FRONT_BACK, 2);
+
register(DemoMessageValue.WELCOME, 0);
register(DemoMessageValue.MOVEMENT_CONTROLS, 101);
register(DemoMessageValue.JUMP_CONTROL, 102);
@@ -570,106 +613,117 @@ public class MagicValues {
register(EnterCreditsValue.SEEN_BEFORE, 0);
register(EnterCreditsValue.FIRST_TIME, 1);
- register(GenericStatistic.CAKE_SLICES_EATEN, "stat.cakeSlicesEaten");
- register(GenericStatistic.TIMES_CAULDRON_FILLED, "stat.cauldronFilled");
- register(GenericStatistic.TIMES_CAULDRON_USED, "stat.cauldronUsed");
- register(GenericStatistic.TIMES_ARMOR_CLEANED, "stat.armorCleaned");
- register(GenericStatistic.TIMES_BANNER_CLEANED, "stat.bannerCleaned");
- register(GenericStatistic.TIMES_BREWING_STAND_GUI_OPENED, "stat.brewingstandInteraction");
- register(GenericStatistic.TIMES_BEACON_GUI_OPENED, "stat.beaconInteraction");
- register(GenericStatistic.TIMES_CRAFTING_TABLE_GUI_OPENED, "stat.craftingTableInteraction");
- register(GenericStatistic.TIMES_FURNACE_GUI_OPENED, "stat.furnaceInteraction");
- register(GenericStatistic.TIMES_DISPENSER_GUI_OPENED, "stat.dispenserInteraction");
- register(GenericStatistic.TIMES_DROPPER_GUI_OPENED, "stat.dropperInteraction");
- register(GenericStatistic.TIMES_HOPPER_GUI_OPENED, "stat.hopperInteraction");
- register(GenericStatistic.TIMES_CHEST_GUI_OPENED, "stat.chestInteraction");
- register(GenericStatistic.TIMES_SHULKER_BOX_GUI_OPENED, "stat.shulkerBoxOpened");
- register(GenericStatistic.TIMES_TRAPPED_CHEST_GUI_OPENED, "stat.trappedChestInteraction");
- register(GenericStatistic.TIMES_ENDER_CHEST_GUI_OPENED, "stat.enderchestInteraction");
- register(GenericStatistic.TIMES_NOTEBLOCK_PLAYED, "stat.noteblockPlayed");
- register(GenericStatistic.TIMES_NOTEBLOCK_TUNED, "stat.noteblockTuned");
- register(GenericStatistic.TIMES_PLANT_POTTED, "stat.flowerPotted");
- register(GenericStatistic.TIMES_RECORD_PLAYED, "stat.recordPlayed");
- register(GenericStatistic.TIMES_BED_ENTERED, "stat.sleepInBed");
- register(GenericStatistic.TIMES_LEFT_GAME, "stat.leaveGame");
- register(GenericStatistic.TICKS_PLAYED, "stat.playOneMinute");
- register(GenericStatistic.TICKS_SINCE_DEATH, "stat.timeSinceDeath");
- register(GenericStatistic.TICKS_SNEAKED, "stat.sneakTime");
- register(GenericStatistic.CENTIMETERS_WALKED, "stat.walkOneCm");
- register(GenericStatistic.CENTIMETERS_CROUCHED, "stat.crouchOneCm");
- register(GenericStatistic.CENTIMETERS_SPRINTED, "stat.sprintOneCm");
- register(GenericStatistic.CENTIMETERS_SWAM, "stat.swimOneCm");
- register(GenericStatistic.CENTIMETERS_FALLEN, "stat.fallOneCm");
- register(GenericStatistic.CENTIMETERS_CLIMBED, "stat.climbOneCm");
- register(GenericStatistic.CENTIMETERS_FLOWN, "stat.flyOneCm");
- register(GenericStatistic.CENTIMETERS_FLOWN_WITH_ELYTRA, "stat.aviateOneCm");
- register(GenericStatistic.CENTIMETERS_DOVE, "stat.diveOneCm");
- register(GenericStatistic.CENTIMETERS_TRAVELLED_IN_MINECART, "stat.minecartOneCm");
- register(GenericStatistic.CENTIMETERS_TRAVELLED_IN_BOAT, "stat.boatOneCm");
- register(GenericStatistic.CENTIMETERS_RODE_ON_PIG, "stat.pigOneCm");
- register(GenericStatistic.CENTIMETERS_RODE_ON_HORSE, "stat.horseOneCm");
- register(GenericStatistic.TIMES_JUMPED, "stat.jump");
- register(GenericStatistic.TIMES_DROPPED_ITEMS, "stat.drop");
- register(GenericStatistic.TIMES_ENCHANTED_ITEMS, "stat.itemEnchanted");
- register(GenericStatistic.TIMES_TALKED_TO_VILLAGERS, "stat.talkedToVillager");
- register(GenericStatistic.TIMES_TRADED_WITH_VILLAGERS, "stat.tradedWithVillager");
- register(GenericStatistic.DAMAGE_DEALT, "stat.damageDealt");
- register(GenericStatistic.DAMAGE_TAKEN, "stat.damageTaken");
- register(GenericStatistic.DEATHS, "stat.deaths");
- register(GenericStatistic.MOB_KILLS, "stat.mobKills");
- register(GenericStatistic.ANIMALS_BRED, "stat.animalsBred");
- register(GenericStatistic.PLAYERS_KILLED, "stat.playerKills");
- register(GenericStatistic.FISH_CAUGHT, "stat.fishCaught");
+ register(GenericStatistic.TIMES_LEFT_GAME, 0);
+ register(GenericStatistic.TICKS_PLAYED, 1);
+ register(GenericStatistic.TICKS_SINCE_DEATH, 2);
+ register(GenericStatistic.TICKS_SNEAKED, 3);
+ register(GenericStatistic.CENTIMETERS_WALKED, 4);
+ register(GenericStatistic.CENTIMETERS_CROUCHED, 5);
+ register(GenericStatistic.CENTIMETERS_SPRINTED, 6);
+ register(GenericStatistic.CENTIMETERS_SWAM, 7);
+ register(GenericStatistic.CENTIMETERS_FALLEN, 8);
+ register(GenericStatistic.CENTIMETERS_CLIMBED, 9);
+ register(GenericStatistic.CENTIMETERS_FLOWN, 10);
+ register(GenericStatistic.CENTIMETERS_DOVE, 11);
+ register(GenericStatistic.CENTIMETERS_TRAVELLED_IN_MINECART, 12);
+ register(GenericStatistic.CENTIMETERS_TRAVELLED_IN_BOAT, 13);
+ register(GenericStatistic.CENTIMETERS_RODE_ON_PIG, 14);
+ register(GenericStatistic.CENTIMETERS_RODE_ON_HORSE, 15);
+ register(GenericStatistic.CENTIMETERS_FLOWN_WITH_ELYTRA, 16);
+ register(GenericStatistic.TIMES_JUMPED, 17);
+ register(GenericStatistic.TIMES_DROPPED_ITEMS, 18);
+ register(GenericStatistic.DAMAGE_DEALT, 19);
+ register(GenericStatistic.DAMAGE_TAKEN, 20);
+ register(GenericStatistic.DEATHS, 21);
+ register(GenericStatistic.MOB_KILLS, 22);
+ register(GenericStatistic.ANIMALS_BRED, 23);
+ register(GenericStatistic.PLAYERS_KILLED, 24);
+ register(GenericStatistic.FISH_CAUGHT, 25);
+ register(GenericStatistic.TIMES_TALKED_TO_VILLAGERS, 26);
+ register(GenericStatistic.TIMES_TRADED_WITH_VILLAGERS, 27);
+ register(GenericStatistic.CAKE_SLICES_EATEN, 28);
+ register(GenericStatistic.TIMES_CAULDRON_FILLED, 29);
+ register(GenericStatistic.TIMES_CAULDRON_USED, 30);
+ register(GenericStatistic.TIMES_ARMOR_CLEANED, 31);
+ register(GenericStatistic.TIMES_BANNER_CLEANED, 32);
+ register(GenericStatistic.TIMES_BREWING_STAND_GUI_OPENED, 33);
+ register(GenericStatistic.TIMES_BEACON_GUI_OPENED, 34);
+ register(GenericStatistic.TIMES_DROPPER_GUI_OPENED, 35);
+ register(GenericStatistic.TIMES_HOPPER_GUI_OPENED, 36);
+ register(GenericStatistic.TIMES_DISPENSER_GUI_OPENED, 37);
+ register(GenericStatistic.TIMES_NOTEBLOCK_PLAYED, 38);
+ register(GenericStatistic.TIMES_NOTEBLOCK_TUNED, 39);
+ register(GenericStatistic.TIMES_PLANT_POTTED, 40);
+ register(GenericStatistic.TIMES_TRAPPED_CHEST_GUI_OPENED, 41);
+ register(GenericStatistic.TIMES_ENDER_CHEST_GUI_OPENED, 42);
+ register(GenericStatistic.TIMES_ENCHANTED_ITEMS, 43);
+ register(GenericStatistic.TIMES_RECORD_PLAYED, 44);
+ register(GenericStatistic.TIMES_FURNACE_GUI_OPENED, 45);
+ register(GenericStatistic.TIMES_CRAFTING_TABLE_GUI_OPENED, 46);
+ register(GenericStatistic.TIMES_CHEST_GUI_OPENED, 47);
+ register(GenericStatistic.TIMES_BED_ENTERED, 48);
+ register(GenericStatistic.TIMES_SHULKER_BOX_GUI_OPENED, 49);
- register(Particle.EXPLOSION_NORMAL, 0);
- register(Particle.EXPLOSION_LARGE, 1);
- register(Particle.EXPLOSION_HUGE, 2);
- register(Particle.FIREWORKS_SPARK, 3);
- register(Particle.WATER_BUBBLE, 4);
- register(Particle.WATER_SPLASH, 5);
- register(Particle.WATER_WAKE, 6);
- register(Particle.SUSPENDED, 7);
- register(Particle.SUSPENDED_DEPTH, 8);
- register(Particle.CRIT, 9);
- register(Particle.CRIT_MAGIC, 10);
- register(Particle.SMOKE_NORMAL, 11);
- register(Particle.SMOKE_LARGE, 12);
- register(Particle.SPELL, 13);
- register(Particle.SPELL_INSTANT, 14);
- register(Particle.SPELL_MOB, 15);
- register(Particle.SPELL_MOB_AMBIENT, 16);
- register(Particle.SPELL_WITCH, 17);
- register(Particle.DRIP_WATER, 18);
- register(Particle.DRIP_LAVA, 19);
- register(Particle.VILLAGER_ANGRY, 20);
- register(Particle.VILLAGER_HAPPY, 21);
- register(Particle.TOWN_AURA, 22);
- register(Particle.NOTE, 23);
- register(Particle.PORTAL, 24);
- register(Particle.ENCHANTMENT_TABLE, 25);
- register(Particle.FLAME, 26);
- register(Particle.LAVA, 27);
- register(Particle.FOOTSTEP, 28);
- register(Particle.CLOUD, 29);
- register(Particle.REDSTONE, 30);
- register(Particle.SNOWBALL, 31);
- register(Particle.SNOW_SHOVEL, 32);
- register(Particle.SLIME, 33);
- register(Particle.HEART, 34);
- register(Particle.BARRIER, 35);
- register(Particle.ITEM_CRACK, 36);
- register(Particle.BLOCK_CRACK, 37);
- register(Particle.BLOCK_DUST, 38);
- register(Particle.WATER_DROP, 39);
- register(Particle.ITEM_TAKE, 40);
- register(Particle.MOB_APPEARANCE, 41);
- register(Particle.DRAGON_BREATH, 42);
- register(Particle.END_ROD, 43);
- register(Particle.DAMAGE_INDICATOR, 44);
- register(Particle.SWEEP_ATTACK, 45);
- register(Particle.FALLING_DUST, 46);
- register(Particle.TOTEM, 47);
- register(Particle.SPIT, 48);
+ register(StatisticCategory.BREAK_BLOCK, 0);
+ register(StatisticCategory.CRAFT_ITEM, 1);
+ register(StatisticCategory.USE_ITEM, 2);
+ register(StatisticCategory.BREAK_ITEM, 3);
+ register(StatisticCategory.PICKED_UP_ITEM, 4);
+ register(StatisticCategory.DROP_ITEM, 5);
+ register(StatisticCategory.KILL_ENTITY, 6);
+ register(StatisticCategory.KILLED_BY_ENTITY, 7);
+ register(StatisticCategory.GENERIC, 8);
+
+ register(ParticleType.AMBIENT_ENTITY_EFFECT, 0);
+ register(ParticleType.ANGRY_VILLAGER, 1);
+ register(ParticleType.BARRIER, 2);
+ register(ParticleType.BLOCK, 3);
+ register(ParticleType.BUBBLE, 4);
+ register(ParticleType.CLOUD, 5);
+ register(ParticleType.CRIT, 6);
+ register(ParticleType.DAMAGE_INDICATOR, 7);
+ register(ParticleType.DRAGON_BREATH, 8);
+ register(ParticleType.DRIPPING_LAVA, 9);
+ register(ParticleType.DRIPPING_WATER, 10);
+ register(ParticleType.DUST, 11);
+ register(ParticleType.EFFECT, 12);
+ register(ParticleType.ELDER_GUARDIAN, 13);
+ register(ParticleType.ENCHANTED_HIT, 14);
+ register(ParticleType.ENCHANT, 15);
+ register(ParticleType.END_ROD, 16);
+ register(ParticleType.ENTITY_EFFECT, 17);
+ register(ParticleType.EXPLOSION_EMITTER, 18);
+ register(ParticleType.EXPLOSION, 19);
+ register(ParticleType.FALLING_DUST, 20);
+ register(ParticleType.FIREWORK, 21);
+ register(ParticleType.FISHING, 22);
+ register(ParticleType.FLAME, 23);
+ register(ParticleType.HAPPY_VILLAGER, 24);
+ register(ParticleType.HEART, 25);
+ register(ParticleType.INSTANT_EFFECT, 26);
+ register(ParticleType.ITEM, 27);
+ register(ParticleType.ITEM_SLIME, 28);
+ register(ParticleType.ITEM_SNOWBALL, 29);
+ register(ParticleType.LARGE_SMOKE, 30);
+ register(ParticleType.LAVA, 31);
+ register(ParticleType.MYCELIUM, 32);
+ register(ParticleType.NOTE, 33);
+ register(ParticleType.POOF, 34);
+ register(ParticleType.PORTAL, 35);
+ register(ParticleType.RAIN, 36);
+ register(ParticleType.SMOKE, 37);
+ register(ParticleType.SPIT, 38);
+ register(ParticleType.SQUID_INK, 39);
+ register(ParticleType.SWEEP_ATTACK, 40);
+ register(ParticleType.TOTEM_OF_UNDYING, 41);
+ register(ParticleType.UNDERWATER, 42);
+ register(ParticleType.SPLASH, 43);
+ register(ParticleType.WITCH, 44);
+ register(ParticleType.BUBBLE_POP, 45);
+ register(ParticleType.CURRENT_DOWN, 46);
+ register(ParticleType.BUBBLE_COLUMN_UP, 47);
+ register(ParticleType.NAUTILUS, 48);
+ register(ParticleType.DOLPHIN, 49);
register(NoteBlockValueType.HARP, 0);
register(NoteBlockValueType.DOUBLE_BASS, 1);
@@ -770,7 +824,6 @@ public class MagicValues {
register(CollisionRule.PUSH_OTHER_TEAMS, "pushOtherTeams");
register(CollisionRule.PUSH_OWN_TEAM, "pushOwnTeam");
- register(TeamColor.NONE, -1);
register(TeamColor.BLACK, 0);
register(TeamColor.DARK_BLUE, 1);
register(TeamColor.DARK_GREEN, 2);
@@ -787,9 +840,15 @@ public class MagicValues {
register(TeamColor.LIGHT_PURPLE, 13);
register(TeamColor.YELLOW, 14);
register(TeamColor.WHITE, 15);
+ register(TeamColor.OBFUSCATED, 16);
+ register(TeamColor.BOLD, 17);
+ register(TeamColor.STRIKETHROUGH, 18);
+ register(TeamColor.UNDERLINED, 19);
+ register(TeamColor.ITALIC, 20);
+ register(TeamColor.NONE, 21);
- register(ScoreType.INTEGER, "integer");
- register(ScoreType.HEARTS, "hearts");
+ register(ScoreType.INTEGER, 0);
+ register(ScoreType.HEARTS, 1);
register(Advancement.DisplayData.FrameType.TASK, 0);
register(Advancement.DisplayData.FrameType.CHALLENGE, 1);
@@ -869,6 +928,9 @@ public class MagicValues {
register(EquipmentSlot.CHESTPLATE, 4);
register(EquipmentSlot.HELMET, 5);
+ register(FeetOrEyes.FEET, 0);
+ register(FeetOrEyes.EYES, 1);
+
register(SoundCategory.MASTER, 0);
register(SoundCategory.MUSIC, 1);
register(SoundCategory.RECORD, 2);
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/chunk/BlockStorage.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/chunk/BlockStorage.java
index 2b8134b8..d0a81ed4 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/chunk/BlockStorage.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/chunk/BlockStorage.java
@@ -13,7 +13,7 @@ import java.util.List;
import java.util.Objects;
public class BlockStorage {
- private static final BlockState AIR = new BlockState(0, 0);
+ private static final BlockState AIR = new BlockState(0);
private int bitsPerEntry;
@@ -33,7 +33,7 @@ public class BlockStorage {
this.bitsPerEntry = in.readUnsignedByte();
this.states = new ArrayList();
- int stateCount = in.readVarInt();
+ int stateCount = this.bitsPerEntry > 8 ? 0 : in.readVarInt();
for(int i = 0; i < stateCount; i++) {
this.states.add(NetUtil.readBlockState(in));
}
@@ -46,19 +46,21 @@ public class BlockStorage {
}
private static BlockState rawToState(int raw) {
- return new BlockState(raw >> 4, raw & 0xF);
+ return new BlockState(raw);
}
private static int stateToRaw(BlockState state) {
- return (state.getId() << 4) | (state.getData() & 0xF);
+ return state.getId();
}
public void write(NetOutput out) throws IOException {
out.writeByte(this.bitsPerEntry);
- out.writeVarInt(this.states.size());
- for(BlockState state : this.states) {
- NetUtil.writeBlockState(out, state);
+ if (this.bitsPerEntry <= 8) {
+ out.writeVarInt(this.states.size());
+ for (BlockState state : this.states) {
+ NetUtil.writeBlockState(out, state);
+ }
}
long[] data = this.storage.getData();
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/chunk/Column.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/chunk/Column.java
index cc62fd51..565e66c6 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/chunk/Column.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/chunk/Column.java
@@ -9,7 +9,7 @@ public class Column {
private int x;
private int z;
private Chunk chunks[];
- private byte biomeData[];
+ private int biomeData[];
private CompoundTag tileEntities[];
private boolean skylight;
@@ -18,7 +18,7 @@ public class Column {
this(x, z, chunks, null, tileEntities);
}
- public Column(int x, int z, Chunk chunks[], byte biomeData[], CompoundTag[] tileEntities) {
+ public Column(int x, int z, Chunk chunks[], int biomeData[], CompoundTag[] tileEntities) {
if(chunks.length != 16) {
throw new IllegalArgumentException("Chunk array length must be 16.");
}
@@ -66,7 +66,7 @@ public class Column {
return this.biomeData != null;
}
- public byte[] getBiomeData() {
+ public int[] getBiomeData() {
return this.biomeData;
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/FeetOrEyes.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/FeetOrEyes.java
new file mode 100644
index 00000000..68eb1130
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/FeetOrEyes.java
@@ -0,0 +1,6 @@
+package com.github.steveice10.mc.protocol.data.game.entity;
+
+public enum FeetOrEyes {
+ FEET,
+ EYES;
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/metadata/ItemStack.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/metadata/ItemStack.java
index 247c4362..d08d253b 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/metadata/ItemStack.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/metadata/ItemStack.java
@@ -8,7 +8,6 @@ import java.util.Objects;
public class ItemStack {
private int id;
private int amount;
- private int data;
private CompoundTag nbt;
public ItemStack(int id) {
@@ -16,17 +15,12 @@ public class ItemStack {
}
public ItemStack(int id, int amount) {
- this(id, amount, 0);
+ this(id, amount, null);
}
- public ItemStack(int id, int amount, int data) {
- this(id, amount, data, null);
- }
-
- public ItemStack(int id, int amount, int data, CompoundTag nbt) {
+ public ItemStack(int id, int amount, CompoundTag nbt) {
this.id = id;
this.amount = amount;
- this.data = data;
this.nbt = nbt;
}
@@ -38,10 +32,6 @@ public class ItemStack {
return this.amount;
}
- public int getData() {
- return this.data;
- }
-
public CompoundTag getNBT() {
return this.nbt;
}
@@ -54,13 +44,12 @@ public class ItemStack {
ItemStack that = (ItemStack) o;
return this.id == that.id &&
this.amount == that.amount &&
- this.data == that.data &&
Objects.equals(this.nbt, that.nbt);
}
@Override
public int hashCode() {
- return ObjectUtil.hashCode(this.id, this.amount, this.data, this.nbt);
+ return ObjectUtil.hashCode(this.id, this.amount, this.nbt);
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/metadata/MetadataType.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/metadata/MetadataType.java
index 9ab15fd9..1dbc687d 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/metadata/MetadataType.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/entity/metadata/MetadataType.java
@@ -6,6 +6,7 @@ public enum MetadataType {
FLOAT,
STRING,
CHAT,
+ OPTIONAL_CHAT,
ITEM,
BOOLEAN,
ROTATION,
@@ -14,5 +15,6 @@ public enum MetadataType {
BLOCK_FACE,
OPTIONAL_UUID,
BLOCK_STATE,
- NBT_TAG;
+ NBT_TAG,
+ PARTICLE;
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/scoreboard/TeamColor.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/scoreboard/TeamColor.java
index d90fc4d3..94c16dde 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/scoreboard/TeamColor.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/scoreboard/TeamColor.java
@@ -17,5 +17,10 @@ public enum TeamColor {
RED,
LIGHT_PURPLE,
YELLOW,
- WHITE;
+ WHITE,
+ OBFUSCATED,
+ BOLD,
+ STRIKETHROUGH,
+ UNDERLINED,
+ ITALIC;
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/BreakBlockStatistic.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/BreakBlockStatistic.java
index 2484d939..84c7a2e9 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/BreakBlockStatistic.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/BreakBlockStatistic.java
@@ -2,16 +2,14 @@ package com.github.steveice10.mc.protocol.data.game.statistic;
import com.github.steveice10.mc.protocol.util.ObjectUtil;
-import java.util.Objects;
-
public class BreakBlockStatistic implements Statistic {
- private String id;
+ private int id;
- public BreakBlockStatistic(String id) {
+ public BreakBlockStatistic(int id) {
this.id = id;
}
- public String getId() {
+ public int getId() {
return this.id;
}
@@ -21,7 +19,7 @@ public class BreakBlockStatistic implements Statistic {
if(!(o instanceof BreakBlockStatistic)) return false;
BreakBlockStatistic that = (BreakBlockStatistic) o;
- return Objects.equals(this.id, that.id);
+ return this.id == that.id;
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/BreakItemStatistic.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/BreakItemStatistic.java
index ea95fa7d..cdafc278 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/BreakItemStatistic.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/BreakItemStatistic.java
@@ -2,16 +2,14 @@ package com.github.steveice10.mc.protocol.data.game.statistic;
import com.github.steveice10.mc.protocol.util.ObjectUtil;
-import java.util.Objects;
-
public class BreakItemStatistic implements Statistic {
- private String id;
+ private int id;
- public BreakItemStatistic(String id) {
+ public BreakItemStatistic(int id) {
this.id = id;
}
- public String getId() {
+ public int getId() {
return this.id;
}
@@ -21,7 +19,7 @@ public class BreakItemStatistic implements Statistic {
if(!(o instanceof BreakItemStatistic)) return false;
BreakItemStatistic that = (BreakItemStatistic) o;
- return Objects.equals(this.id, that.id);
+ return this.id == that.id;
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/CraftItemStatistic.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/CraftItemStatistic.java
index 1b469edb..03cfdbae 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/CraftItemStatistic.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/CraftItemStatistic.java
@@ -2,16 +2,14 @@ package com.github.steveice10.mc.protocol.data.game.statistic;
import com.github.steveice10.mc.protocol.util.ObjectUtil;
-import java.util.Objects;
-
public class CraftItemStatistic implements Statistic {
- private String id;
+ private int id;
- public CraftItemStatistic(String id) {
+ public CraftItemStatistic(int id) {
this.id = id;
}
- public String getId() {
+ public int getId() {
return this.id;
}
@@ -21,7 +19,7 @@ public class CraftItemStatistic implements Statistic {
if(!(o instanceof CraftItemStatistic)) return false;
CraftItemStatistic that = (CraftItemStatistic) o;
- return Objects.equals(this.id, that.id);
+ return this.id == that.id;
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/CustomStatistic.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/CustomStatistic.java
index 1cb7efb9..c877ecef 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/CustomStatistic.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/CustomStatistic.java
@@ -1,18 +1,27 @@
package com.github.steveice10.mc.protocol.data.game.statistic;
+import com.github.steveice10.mc.protocol.data.MagicValues;
import com.github.steveice10.mc.protocol.util.ObjectUtil;
-import java.util.Objects;
-
public class CustomStatistic implements Statistic {
- private String name;
+ private int category;
+ private int id;
- public CustomStatistic(String name) {
- this.name = name;
+ public CustomStatistic(int id) {
+ this(MagicValues.value(Integer.class, StatisticCategory.GENERIC), id);
}
- public String getName() {
- return this.name;
+ public CustomStatistic(int category, int id) {
+ this.category = category;
+ this.id = id;
+ }
+
+ public int getId() {
+ return this.id;
+ }
+
+ public int getCategory() {
+ return this.category;
}
@Override
@@ -21,12 +30,13 @@ public class CustomStatistic implements Statistic {
if(!(o instanceof CustomStatistic)) return false;
CustomStatistic that = (CustomStatistic) o;
- return Objects.equals(this.name, that.name);
+ return this.category == that.category
+ && this.id == that.id;
}
@Override
public int hashCode() {
- return ObjectUtil.hashCode(this.name);
+ return ObjectUtil.hashCode(this.id, this.category);
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/DropItemStatistic.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/DropItemStatistic.java
index 3693c94e..7f94b7b1 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/DropItemStatistic.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/DropItemStatistic.java
@@ -2,16 +2,14 @@ package com.github.steveice10.mc.protocol.data.game.statistic;
import com.github.steveice10.mc.protocol.util.ObjectUtil;
-import java.util.Objects;
-
public class DropItemStatistic implements Statistic {
- private String id;
+ private int id;
- public DropItemStatistic(String id) {
+ public DropItemStatistic(int id) {
this.id = id;
}
- public String getId() {
+ public int getId() {
return this.id;
}
@@ -21,7 +19,7 @@ public class DropItemStatistic implements Statistic {
if(!(o instanceof DropItemStatistic)) return false;
DropItemStatistic that = (DropItemStatistic) o;
- return Objects.equals(this.id, that.id);
+ return this.id == that.id;
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/KillEntityStatistic.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/KillEntityStatistic.java
index 5c5f116d..badf3d3b 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/KillEntityStatistic.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/KillEntityStatistic.java
@@ -2,16 +2,14 @@ package com.github.steveice10.mc.protocol.data.game.statistic;
import com.github.steveice10.mc.protocol.util.ObjectUtil;
-import java.util.Objects;
-
public class KillEntityStatistic implements Statistic {
- private String id;
+ private int id;
- public KillEntityStatistic(String id) {
+ public KillEntityStatistic(int id) {
this.id = id;
}
- public String getId() {
+ public int getId() {
return this.id;
}
@@ -21,7 +19,7 @@ public class KillEntityStatistic implements Statistic {
if(!(o instanceof KillEntityStatistic)) return false;
KillEntityStatistic that = (KillEntityStatistic) o;
- return Objects.equals(this.id, that.id);
+ return this.id == that.id;
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/KilledByEntityStatistic.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/KilledByEntityStatistic.java
index 49a0f5be..a6dfb066 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/KilledByEntityStatistic.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/KilledByEntityStatistic.java
@@ -2,16 +2,14 @@ package com.github.steveice10.mc.protocol.data.game.statistic;
import com.github.steveice10.mc.protocol.util.ObjectUtil;
-import java.util.Objects;
-
public class KilledByEntityStatistic implements Statistic {
- private String id;
+ private int id;
- public KilledByEntityStatistic(String id) {
+ public KilledByEntityStatistic(int id) {
this.id = id;
}
- public String getId() {
+ public int getId() {
return this.id;
}
@@ -21,7 +19,7 @@ public class KilledByEntityStatistic implements Statistic {
if(!(o instanceof KilledByEntityStatistic)) return false;
KilledByEntityStatistic that = (KilledByEntityStatistic) o;
- return Objects.equals(this.id, that.id);
+ return this.id == that.id;
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/PickupItemStatistic.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/PickupItemStatistic.java
index ae0b8046..dbe4f377 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/PickupItemStatistic.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/PickupItemStatistic.java
@@ -2,16 +2,14 @@ package com.github.steveice10.mc.protocol.data.game.statistic;
import com.github.steveice10.mc.protocol.util.ObjectUtil;
-import java.util.Objects;
-
public class PickupItemStatistic implements Statistic {
- private String id;
+ private int id;
- public PickupItemStatistic(String id) {
+ public PickupItemStatistic(int id) {
this.id = id;
}
- public String getId() {
+ public int getId() {
return this.id;
}
@@ -21,7 +19,7 @@ public class PickupItemStatistic implements Statistic {
if(!(o instanceof PickupItemStatistic)) return false;
PickupItemStatistic that = (PickupItemStatistic) o;
- return Objects.equals(this.id, that.id);
+ return this.id == that.id;
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/StatisticCategory.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/StatisticCategory.java
new file mode 100644
index 00000000..b1f0afe6
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/StatisticCategory.java
@@ -0,0 +1,13 @@
+package com.github.steveice10.mc.protocol.data.game.statistic;
+
+public enum StatisticCategory {
+ BREAK_BLOCK,
+ CRAFT_ITEM,
+ USE_ITEM,
+ BREAK_ITEM,
+ PICKED_UP_ITEM,
+ DROP_ITEM,
+ KILL_ENTITY,
+ KILLED_BY_ENTITY,
+ GENERIC;
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/UseItemStatistic.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/UseItemStatistic.java
index 428b759e..4232ed1a 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/UseItemStatistic.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/statistic/UseItemStatistic.java
@@ -2,16 +2,14 @@ package com.github.steveice10.mc.protocol.data.game.statistic;
import com.github.steveice10.mc.protocol.util.ObjectUtil;
-import java.util.Objects;
-
public class UseItemStatistic implements Statistic {
- private String id;
+ private int id;
- public UseItemStatistic(String id) {
+ public UseItemStatistic(int id) {
this.id = id;
}
- public String getId() {
+ public int getId() {
return this.id;
}
@@ -21,7 +19,7 @@ public class UseItemStatistic implements Statistic {
if(!(o instanceof UseItemStatistic)) return false;
UseItemStatistic that = (UseItemStatistic) o;
- return Objects.equals(this.id, that.id);
+ return this.id == that.id;
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/window/UpdateStructureBlockAction.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/window/UpdateStructureBlockAction.java
new file mode 100644
index 00000000..de2b4dd2
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/window/UpdateStructureBlockAction.java
@@ -0,0 +1,8 @@
+package com.github.steveice10.mc.protocol.data.game.window;
+
+public enum UpdateStructureBlockAction {
+ UPDATE_DATA,
+ SAVE_STRUCTURE,
+ LOAD_STRUCTURE,
+ DETECT_SIZE;
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/window/UpdateStructureBlockMode.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/window/UpdateStructureBlockMode.java
new file mode 100644
index 00000000..9d093ce0
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/window/UpdateStructureBlockMode.java
@@ -0,0 +1,8 @@
+package com.github.steveice10.mc.protocol.data.game.window;
+
+public enum UpdateStructureBlockMode {
+ SAVE,
+ LOAD,
+ CORNER,
+ DATA;
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/Particle.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/Particle.java
deleted file mode 100644
index 753a05a6..00000000
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/Particle.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.github.steveice10.mc.protocol.data.game.world;
-
-public enum Particle {
- EXPLOSION_NORMAL,
- EXPLOSION_LARGE,
- EXPLOSION_HUGE,
- FIREWORKS_SPARK,
- WATER_BUBBLE,
- WATER_SPLASH,
- WATER_WAKE,
- SUSPENDED,
- SUSPENDED_DEPTH,
- CRIT,
- CRIT_MAGIC,
- SMOKE_NORMAL,
- SMOKE_LARGE,
- SPELL,
- SPELL_INSTANT,
- SPELL_MOB,
- SPELL_MOB_AMBIENT,
- SPELL_WITCH,
- DRIP_WATER,
- DRIP_LAVA,
- VILLAGER_ANGRY,
- VILLAGER_HAPPY,
- TOWN_AURA,
- NOTE,
- PORTAL,
- ENCHANTMENT_TABLE,
- FLAME,
- LAVA,
- FOOTSTEP,
- CLOUD,
- REDSTONE,
- SNOWBALL,
- SNOW_SHOVEL,
- SLIME,
- HEART,
- BARRIER,
- ITEM_CRACK(2),
- BLOCK_CRACK(1),
- BLOCK_DUST(1),
- WATER_DROP,
- ITEM_TAKE,
- MOB_APPEARANCE,
- DRAGON_BREATH,
- END_ROD,
- DAMAGE_INDICATOR,
- SWEEP_ATTACK,
- FALLING_DUST,
- SPIT,
- TOTEM;
-
- private int dataLength;
-
- private Particle() {
- this(0);
- }
-
- private Particle(int dataLength) {
- this.dataLength = dataLength;
- }
-
- public int getDataLength() {
- return this.dataLength;
- }
-}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/BlockState.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/BlockState.java
index 9a981aef..cf339eae 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/BlockState.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/BlockState.java
@@ -4,34 +4,27 @@ import com.github.steveice10.mc.protocol.util.ObjectUtil;
public class BlockState {
private int id;
- private int data;
- public BlockState(int id, int data) {
+ public BlockState(int id) {
this.id = id;
- this.data = data;
}
public int getId() {
return this.id;
}
- public int getData() {
- return this.data;
- }
-
@Override
public boolean equals(Object o) {
if(this == o) return true;
if(!(o instanceof BlockState)) return false;
BlockState that = (BlockState) o;
- return this.id == that.id &&
- this.data == that.data;
+ return this.id == that.id;
}
@Override
public int hashCode() {
- return ObjectUtil.hashCode(this.id, this.data);
+ return ObjectUtil.hashCode(this.id);
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/CommandBlockMode.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/CommandBlockMode.java
new file mode 100644
index 00000000..1f2cc159
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/CommandBlockMode.java
@@ -0,0 +1,7 @@
+package com.github.steveice10.mc.protocol.data.game.world.block;
+
+public enum CommandBlockMode {
+ SEQUENCE,
+ AUTO,
+ REDSTONE;
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/StructureMirror.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/StructureMirror.java
new file mode 100644
index 00000000..a41d6fe3
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/StructureMirror.java
@@ -0,0 +1,7 @@
+package com.github.steveice10.mc.protocol.data.game.world.block;
+
+public enum StructureMirror {
+ NONE,
+ LEFT_RIGHT,
+ FRONT_BACK;
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/StructureRotation.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/StructureRotation.java
new file mode 100644
index 00000000..0623cfd9
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/StructureRotation.java
@@ -0,0 +1,8 @@
+package com.github.steveice10.mc.protocol.data.game.world.block;
+
+public enum StructureRotation {
+ NONE,
+ CLOCKWISE_90,
+ CLOCKWISE_180,
+ COUNTERCLOCKWISE_90;
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/UpdatedTileType.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/UpdatedTileType.java
index c2d2cc68..61db5261 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/UpdatedTileType.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/block/UpdatedTileType.java
@@ -5,7 +5,7 @@ public enum UpdatedTileType {
COMMAND_BLOCK,
BEACON,
SKULL,
- FLOWER_POT,
+ CONDUIT,
BANNER,
STRUCTURE_BLOCK,
END_GATEWAY,
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/map/MapIcon.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/map/MapIcon.java
index 8cc7d093..2fa0f754 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/map/MapIcon.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/map/MapIcon.java
@@ -1,18 +1,23 @@
package com.github.steveice10.mc.protocol.data.game.world.map;
+import com.github.steveice10.mc.protocol.data.message.Message;
import com.github.steveice10.mc.protocol.util.ObjectUtil;
+import java.util.Objects;
+
public class MapIcon {
private int centerX;
private int centerZ;
private MapIconType iconType;
private int iconRotation;
+ private Message displayName;
- public MapIcon(int centerX, int centerZ, MapIconType iconType, int iconRotation) {
+ public MapIcon(int centerX, int centerZ, MapIconType iconType, int iconRotation, Message displayName) {
this.centerX = centerX;
this.centerZ = centerZ;
this.iconType = iconType;
this.iconRotation = iconRotation;
+ this.displayName = displayName;
}
public int getCenterX() {
@@ -31,6 +36,10 @@ public class MapIcon {
return this.iconRotation;
}
+ public Message getDisplayName() {
+ return this.displayName;
+ }
+
@Override
public boolean equals(Object o) {
if(this == o) return true;
@@ -40,12 +49,13 @@ public class MapIcon {
return this.centerX == that.centerX &&
this.centerZ == that.centerZ &&
this.iconType == that.iconType &&
- this.iconRotation == that.iconRotation;
+ this.iconRotation == that.iconRotation &&
+ Objects.equals(this.displayName, that.displayName);
}
@Override
public int hashCode() {
- return ObjectUtil.hashCode(this.centerX, this.centerZ, this.iconType, this.iconRotation);
+ return ObjectUtil.hashCode(this.centerX, this.centerZ, this.iconType, this.iconRotation, this.displayName);
}
@Override
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/map/MapIconType.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/map/MapIconType.java
index 3dae58d5..d7ec1ea9 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/map/MapIconType.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/map/MapIconType.java
@@ -11,10 +11,21 @@ public enum MapIconType {
SMALL_WHITE_CIRCLE,
MANSION,
TEMPLE,
- UNUSED_10,
- UNUSED_11,
- UNUSED_12,
- UNUSED_13,
- UNUSED_14,
- UNUSED_15;
+ WHITE_BANNER,
+ ORANGE_BANNER,
+ MAGENTA_BANNER,
+ LIGHT_BLUE_BANNER,
+ YELLOW_BANNER,
+ LIME_BANNER,
+ PINK_BANNER,
+ GRAY_BANNER,
+ LIGHT_GRAY_BANNER,
+ CYAN_BANNER,
+ PURPLE_BANNER,
+ BLUE_BANNER,
+ BROWN_BANNER,
+ GREEN_BANNER,
+ RED_BANNER,
+ BLACK_BANNER,
+ TREASURE_MARKER;
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/BlockParticleData.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/BlockParticleData.java
new file mode 100644
index 00000000..bd2b0de6
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/BlockParticleData.java
@@ -0,0 +1,37 @@
+package com.github.steveice10.mc.protocol.data.game.world.particle;
+
+import com.github.steveice10.mc.protocol.data.game.world.block.BlockState;
+import com.github.steveice10.mc.protocol.util.ObjectUtil;
+
+import java.util.Objects;
+
+public class BlockParticleData implements ParticleData {
+ private final BlockState blockState;
+
+ public BlockParticleData(BlockState blockState) {
+ this.blockState = blockState;
+ }
+
+ public BlockState getBlockState() {
+ return this.blockState;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if(!(o instanceof BlockParticleData)) return false;
+
+ BlockParticleData that = (BlockParticleData) o;
+ return Objects.equals(this.blockState, that.blockState);
+ }
+
+ @Override
+ public int hashCode() {
+ return ObjectUtil.hashCode(this.blockState);
+ }
+
+ @Override
+ public String toString() {
+ return ObjectUtil.toString(this);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/DustParticleData.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/DustParticleData.java
new file mode 100644
index 00000000..4f9e1568
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/DustParticleData.java
@@ -0,0 +1,55 @@
+package com.github.steveice10.mc.protocol.data.game.world.particle;
+
+import com.github.steveice10.mc.protocol.util.ObjectUtil;
+
+public class DustParticleData implements ParticleData {
+ private final float red; // 0 - 1
+ private final float green; // 0 - 1
+ private final float blue; // 0 - 1
+ private final float scale; // clamped between 0.01 and 4
+
+ public DustParticleData(float red, float green, float blue, float scale) {
+ this.red = red;
+ this.green = green;
+ this.blue = blue;
+ this.scale = scale;
+ }
+
+ public float getRed() {
+ return this.red;
+ }
+
+ public float getGreen() {
+ return this.green;
+ }
+
+ public float getBlue() {
+ return this.blue;
+ }
+
+ public float getScale() {
+ return this.scale;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof DustParticleData)) return false;
+
+ DustParticleData that = (DustParticleData) o;
+ return Float.compare(that.red, this.red) == 0 &&
+ Float.compare(that.green, this.green) == 0 &&
+ Float.compare(that.blue, this.blue) == 0 &&
+ Float.compare(that.scale, this.scale) == 0;
+ }
+
+ @Override
+ public int hashCode() {
+ return ObjectUtil.hashCode(this.red, this.green, this.blue, this.scale);
+ }
+
+ @Override
+ public String toString() {
+ return ObjectUtil.toString(this);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/FallingDustParticleData.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/FallingDustParticleData.java
new file mode 100644
index 00000000..13cdd029
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/FallingDustParticleData.java
@@ -0,0 +1,37 @@
+package com.github.steveice10.mc.protocol.data.game.world.particle;
+
+import com.github.steveice10.mc.protocol.data.game.world.block.BlockState;
+import com.github.steveice10.mc.protocol.util.ObjectUtil;
+
+import java.util.Objects;
+
+public class FallingDustParticleData implements ParticleData {
+ private final BlockState blockState;
+
+ public FallingDustParticleData(BlockState blockState) {
+ this.blockState = blockState;
+ }
+
+ public BlockState getBlockState() {
+ return this.blockState;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if(!(o instanceof FallingDustParticleData)) return false;
+
+ FallingDustParticleData that = (FallingDustParticleData) o;
+ return Objects.equals(this.blockState, that.blockState);
+ }
+
+ @Override
+ public int hashCode() {
+ return ObjectUtil.hashCode(this.blockState);
+ }
+
+ @Override
+ public String toString() {
+ return ObjectUtil.toString(this);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/ItemParticleData.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/ItemParticleData.java
new file mode 100644
index 00000000..232c2aae
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/ItemParticleData.java
@@ -0,0 +1,37 @@
+package com.github.steveice10.mc.protocol.data.game.world.particle;
+
+import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
+import com.github.steveice10.mc.protocol.util.ObjectUtil;
+
+import java.util.Objects;
+
+public class ItemParticleData implements ParticleData {
+ private final ItemStack itemStack;
+
+ public ItemParticleData(ItemStack itemStack) {
+ this.itemStack = itemStack;
+ }
+
+ public ItemStack getItemStack() {
+ return this.itemStack;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if(!(o instanceof ItemParticleData)) return false;
+
+ ItemParticleData that = (ItemParticleData) o;
+ return Objects.equals(this.itemStack, that.itemStack);
+ }
+
+ @Override
+ public int hashCode() {
+ return ObjectUtil.hashCode(this.itemStack);
+ }
+
+ @Override
+ public String toString() {
+ return ObjectUtil.toString(this);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/Particle.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/Particle.java
new file mode 100644
index 00000000..c010fbcb
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/Particle.java
@@ -0,0 +1,43 @@
+package com.github.steveice10.mc.protocol.data.game.world.particle;
+
+import com.github.steveice10.mc.protocol.util.ObjectUtil;
+
+import java.util.Objects;
+
+public class Particle {
+ private final ParticleType type;
+ private final ParticleData data;
+
+ public Particle(ParticleType type, ParticleData data) {
+ this.type = type;
+ this.data = data;
+ }
+
+ public ParticleType getType() {
+ return this.type;
+ }
+
+ public ParticleData getData() {
+ return this.data;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if(!(o instanceof Particle)) return false;
+
+ Particle that = (Particle) o;
+ return Objects.equals(this.type, that.type)
+ && Objects.equals(this.data, that.data);
+ }
+
+ @Override
+ public int hashCode() {
+ return ObjectUtil.hashCode(this.type, this.data);
+ }
+
+ @Override
+ public String toString() {
+ return ObjectUtil.toString(this);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/ParticleData.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/ParticleData.java
new file mode 100644
index 00000000..aa222ceb
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/ParticleData.java
@@ -0,0 +1,4 @@
+package com.github.steveice10.mc.protocol.data.game.world.particle;
+
+public interface ParticleData {
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/ParticleType.java b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/ParticleType.java
new file mode 100644
index 00000000..f62cda42
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/data/game/world/particle/ParticleType.java
@@ -0,0 +1,54 @@
+package com.github.steveice10.mc.protocol.data.game.world.particle;
+
+public enum ParticleType {
+ AMBIENT_ENTITY_EFFECT,
+ ANGRY_VILLAGER,
+ BARRIER,
+ BLOCK,
+ BUBBLE,
+ CLOUD,
+ CRIT,
+ DAMAGE_INDICATOR,
+ DRAGON_BREATH,
+ DRIPPING_LAVA,
+ DRIPPING_WATER,
+ DUST,
+ EFFECT,
+ ELDER_GUARDIAN,
+ ENCHANTED_HIT,
+ ENCHANT,
+ END_ROD,
+ ENTITY_EFFECT,
+ EXPLOSION_EMITTER,
+ EXPLOSION,
+ FALLING_DUST,
+ FIREWORK,
+ FISHING,
+ FLAME,
+ HAPPY_VILLAGER,
+ HEART,
+ INSTANT_EFFECT,
+ ITEM,
+ ITEM_SLIME,
+ ITEM_SNOWBALL,
+ LARGE_SMOKE,
+ LAVA,
+ MYCELIUM,
+ NOTE,
+ POOF,
+ PORTAL,
+ RAIN,
+ SMOKE,
+ SPIT,
+ SQUID_INK,
+ SWEEP_ATTACK,
+ TOTEM_OF_UNDYING,
+ UNDERWATER,
+ SPLASH,
+ WITCH,
+ BUBBLE_POP,
+ CURRENT_DOWN,
+ BUBBLE_COLUMN_UP,
+ NAUTILUS,
+ DOLPHIN;
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/ClientTabCompletePacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/ClientTabCompletePacket.java
index af3c356f..0cbcac5b 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/ClientTabCompletePacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/ClientTabCompletePacket.java
@@ -1,58 +1,41 @@
package com.github.steveice10.mc.protocol.packet.ingame.client;
-import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
-import com.github.steveice10.mc.protocol.util.NetUtil;
import com.github.steveice10.packetlib.io.NetInput;
import com.github.steveice10.packetlib.io.NetOutput;
import java.io.IOException;
public class ClientTabCompletePacket extends MinecraftPacket {
+ private int transactionId;
private String text;
- private boolean assumeCommand;
- private Position lookingAt;
@SuppressWarnings("unused")
private ClientTabCompletePacket() {
}
- public ClientTabCompletePacket(String text, boolean assumeCommand) {
- this(text, assumeCommand, null);
+ public ClientTabCompletePacket(int transactionId, String text) {
+ this.transactionId = transactionId;
+ this.text = text;
}
- public ClientTabCompletePacket(String text, boolean assumeCommand, Position lookingAt) {
- this.text = text;
- this.assumeCommand = assumeCommand;
- this.lookingAt = lookingAt;
+ public int getTransactionId() {
+ return this.transactionId;
}
public String getText() {
return this.text;
}
- public boolean getAssumeCommand() {
- return this.assumeCommand;
- }
-
- public Position getLookingAt() {
- return this.lookingAt;
- }
-
@Override
public void read(NetInput in) throws IOException {
+ this.transactionId = in.readVarInt();
this.text = in.readString();
- this.assumeCommand = in.readBoolean();
- this.lookingAt = in.readBoolean() ? NetUtil.readPosition(in) : null;
}
@Override
public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.transactionId);
out.writeString(this.text);
- out.writeBoolean(this.assumeCommand);
- out.writeBoolean(this.lookingAt != null);
- if(this.lookingAt != null) {
- NetUtil.writePosition(out, this.lookingAt);
- }
}
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientCraftingBookDataPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientCraftingBookDataPacket.java
index aab4960b..7c5bbb51 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientCraftingBookDataPacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientCraftingBookDataPacket.java
@@ -10,23 +10,26 @@ import java.io.IOException;
public class ClientCraftingBookDataPacket extends MinecraftPacket {
private CraftingBookDataType type;
- private int recipeId;
+ private String recipeId;
private boolean craftingBookOpen;
- private boolean filterActive;
+ private boolean filterCraftingActive;
+ private boolean smeltingBookOpen;
+ private boolean filterSmeltingActive;
@SuppressWarnings("unused")
private ClientCraftingBookDataPacket() {
}
- public ClientCraftingBookDataPacket(int recipeId) {
+ public ClientCraftingBookDataPacket(String recipeId) {
this.type = CraftingBookDataType.DISPLAYED_RECIPE;
this.recipeId = recipeId;
}
- public ClientCraftingBookDataPacket(boolean craftingBookOpen, boolean filterActive) {
+ public ClientCraftingBookDataPacket(boolean craftingBookOpen, boolean filterCraftingActive,
+ boolean smeltingBookOpen, boolean filterSmeltingActive) {
this.type = CraftingBookDataType.CRAFTING_BOOK_STATUS;
this.craftingBookOpen = craftingBookOpen;
- this.filterActive = filterActive;
+ this.filterCraftingActive = filterCraftingActive;
}
public CraftingBookDataType getType() {
@@ -39,7 +42,7 @@ public class ClientCraftingBookDataPacket extends MinecraftPacket {
}
}
- public int getRecipeId() {
+ public String getRecipeId() {
ensureType(CraftingBookDataType.DISPLAYED_RECIPE, "recipeId");
return recipeId;
}
@@ -49,20 +52,32 @@ public class ClientCraftingBookDataPacket extends MinecraftPacket {
return craftingBookOpen;
}
- public boolean isFilterActive() {
- ensureType(CraftingBookDataType.CRAFTING_BOOK_STATUS, "filterActive");
- return filterActive;
+ public boolean isFilterCraftingActive() {
+ ensureType(CraftingBookDataType.CRAFTING_BOOK_STATUS, "filterCraftingActive");
+ return filterCraftingActive;
+ }
+
+ public boolean isSmeltingBookOpen() {
+ ensureType(CraftingBookDataType.CRAFTING_BOOK_STATUS, "smeltingBookOpen");
+ return smeltingBookOpen;
+ }
+
+ public boolean isFilterSmeltingActive() {
+ ensureType(CraftingBookDataType.CRAFTING_BOOK_STATUS, "filterSmeltingActive");
+ return filterSmeltingActive;
}
@Override
public void read(NetInput in) throws IOException {
switch(this.type = MagicValues.key(CraftingBookDataType.class, in.readVarInt())) {
case DISPLAYED_RECIPE:
- this.recipeId = in.readInt();
+ this.recipeId = in.readString();
break;
case CRAFTING_BOOK_STATUS:
this.craftingBookOpen = in.readBoolean();
- this.filterActive = in.readBoolean();
+ this.filterCraftingActive = in.readBoolean();
+ this.smeltingBookOpen = in.readBoolean();
+ this.filterSmeltingActive = in.readBoolean();
break;
default:
throw new IOException("Unknown crafting book data type: " + this.type);
@@ -74,11 +89,13 @@ public class ClientCraftingBookDataPacket extends MinecraftPacket {
out.writeVarInt(MagicValues.value(Integer.class, this.type));
switch(this.type) {
case DISPLAYED_RECIPE:
- out.writeInt(this.recipeId);
+ out.writeString(this.recipeId);
break;
case CRAFTING_BOOK_STATUS:
out.writeBoolean(this.craftingBookOpen);
- out.writeBoolean(this.filterActive);
+ out.writeBoolean(this.filterCraftingActive);
+ out.writeBoolean(this.smeltingBookOpen);
+ out.writeBoolean(this.filterSmeltingActive);
break;
default:
throw new IOException("Unknown crafting book data type: " + this.type);
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientEditBookPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientEditBookPacket.java
new file mode 100644
index 00000000..1ec3f48c
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientEditBookPacket.java
@@ -0,0 +1,43 @@
+package com.github.steveice10.mc.protocol.packet.ingame.client.window;
+
+import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.mc.protocol.util.NetUtil;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ClientEditBookPacket extends MinecraftPacket {
+ private ItemStack book;
+ private boolean isSigning;
+
+ @SuppressWarnings("unused")
+ private ClientEditBookPacket() {
+ }
+
+ public ClientEditBookPacket(ItemStack book, boolean isSigning) {
+ this.book = book;
+ this.isSigning = isSigning;
+ }
+
+ public ItemStack getBook() {
+ return this.book;
+ }
+
+ public boolean getIsSigning() {
+ return this.isSigning;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.book = NetUtil.readItem(in);
+ this.isSigning = in.readBoolean();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ NetUtil.writeItem(out, this.book);
+ out.writeBoolean(this.isSigning);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientMoveItemToHotbarPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientMoveItemToHotbarPacket.java
new file mode 100644
index 00000000..cf3fd28b
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientMoveItemToHotbarPacket.java
@@ -0,0 +1,33 @@
+package com.github.steveice10.mc.protocol.packet.ingame.client.window;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ClientMoveItemToHotbarPacket extends MinecraftPacket {
+ private int slot;
+
+ @SuppressWarnings("unused")
+ private ClientMoveItemToHotbarPacket() {
+ }
+
+ public ClientMoveItemToHotbarPacket(int slot) {
+ this.slot = slot;
+ }
+
+ public int getSlot() {
+ return this.slot;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.slot = in.readVarInt();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.slot);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientPrepareCraftingGridPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientPrepareCraftingGridPacket.java
index 6bdf2dd6..523338cc 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientPrepareCraftingGridPacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientPrepareCraftingGridPacket.java
@@ -8,14 +8,14 @@ import java.io.IOException;
public class ClientPrepareCraftingGridPacket extends MinecraftPacket {
private int windowId;
- private int recipeId;
+ private String recipeId;
private boolean makeAll;
@SuppressWarnings("unused")
private ClientPrepareCraftingGridPacket() {
}
- public ClientPrepareCraftingGridPacket(int windowId, int recipeId, boolean makeAll) {
+ public ClientPrepareCraftingGridPacket(int windowId, String recipeId, boolean makeAll) {
this.windowId = windowId;
this.recipeId = recipeId;
this.makeAll = makeAll;
@@ -25,7 +25,7 @@ public class ClientPrepareCraftingGridPacket extends MinecraftPacket {
return this.windowId;
}
- public int getRecipeId() {
+ public String getRecipeId() {
return this.recipeId;
}
@@ -36,14 +36,14 @@ public class ClientPrepareCraftingGridPacket extends MinecraftPacket {
@Override
public void read(NetInput in) throws IOException {
this.windowId = in.readByte();
- this.recipeId = in.readVarInt();
+ this.recipeId = in.readString();
this.makeAll = in.readBoolean();
}
@Override
public void write(NetOutput out) throws IOException {
out.writeByte(this.windowId);
- out.writeVarInt(this.recipeId);
+ out.writeString(this.recipeId);
out.writeBoolean(this.makeAll);
}
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientRenameItemPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientRenameItemPacket.java
new file mode 100644
index 00000000..9888204a
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientRenameItemPacket.java
@@ -0,0 +1,33 @@
+package com.github.steveice10.mc.protocol.packet.ingame.client.window;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ClientRenameItemPacket extends MinecraftPacket {
+ private String name;
+
+ @SuppressWarnings("unused")
+ private ClientRenameItemPacket() {
+ }
+
+ public ClientRenameItemPacket(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.name = in.readString();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeString(this.name);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientSelectTradePacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientSelectTradePacket.java
new file mode 100644
index 00000000..1f392145
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientSelectTradePacket.java
@@ -0,0 +1,33 @@
+package com.github.steveice10.mc.protocol.packet.ingame.client.window;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ClientSelectTradePacket extends MinecraftPacket {
+ private int slot;
+
+ @SuppressWarnings("unused")
+ private ClientSelectTradePacket() {
+ }
+
+ public ClientSelectTradePacket(int slot) {
+ this.slot = slot;
+ }
+
+ public int getSlot() {
+ return this.slot;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.slot = in.readVarInt();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.slot);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientSetBeaconEffectPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientSetBeaconEffectPacket.java
new file mode 100644
index 00000000..48f87a9d
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientSetBeaconEffectPacket.java
@@ -0,0 +1,41 @@
+package com.github.steveice10.mc.protocol.packet.ingame.client.window;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ClientSetBeaconEffectPacket extends MinecraftPacket {
+ private int primaryEffect;
+ private int secondaryEffect;
+
+ @SuppressWarnings("unused")
+ private ClientSetBeaconEffectPacket() {
+ }
+
+ public ClientSetBeaconEffectPacket(int primaryEffect, int secondaryEffect) {
+ this.primaryEffect = primaryEffect;
+ this.secondaryEffect = secondaryEffect;
+ }
+
+ public int getPrimaryEffect() {
+ return this.primaryEffect;
+ }
+
+ public int getSecondaryEffect() {
+ return this.secondaryEffect;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.primaryEffect = in.readVarInt();
+ this.secondaryEffect = in.readVarInt();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.primaryEffect);
+ out.writeVarInt(this.secondaryEffect);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientUpdateCommandBlockMinecartPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientUpdateCommandBlockMinecartPacket.java
new file mode 100644
index 00000000..51867aed
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientUpdateCommandBlockMinecartPacket.java
@@ -0,0 +1,49 @@
+package com.github.steveice10.mc.protocol.packet.ingame.client.window;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ClientUpdateCommandBlockMinecartPacket extends MinecraftPacket {
+ private int entityId;
+ private String command;
+ private boolean doesTrackOutput;
+
+ @SuppressWarnings("unused")
+ private ClientUpdateCommandBlockMinecartPacket() {
+ }
+
+ public ClientUpdateCommandBlockMinecartPacket(int entityId, String command, boolean doesTrackOutput) {
+ this.entityId = entityId;
+ this.command = command;
+ this.doesTrackOutput = doesTrackOutput;
+ }
+
+ public int getEntityId() {
+ return this.entityId;
+ }
+
+ public String getCommand() {
+ return this.command;
+ }
+
+ public boolean isDoesTrackOutput() {
+ return this.doesTrackOutput;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.entityId = in.readVarInt();
+ this.command = in.readString();
+ this.doesTrackOutput = in.readBoolean();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.entityId);
+ out.writeString(this.command);
+ out.writeBoolean(this.doesTrackOutput);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientUpdateCommandBlockPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientUpdateCommandBlockPacket.java
new file mode 100644
index 00000000..899bcfdb
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientUpdateCommandBlockPacket.java
@@ -0,0 +1,81 @@
+package com.github.steveice10.mc.protocol.packet.ingame.client.window;
+
+import com.github.steveice10.mc.protocol.data.MagicValues;
+import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
+import com.github.steveice10.mc.protocol.data.game.world.block.CommandBlockMode;
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.mc.protocol.util.NetUtil;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ClientUpdateCommandBlockPacket extends MinecraftPacket {
+ private Position position;
+ private String command;
+ private CommandBlockMode mode;
+ private boolean doesTrackOutput;
+ private boolean isConditional;
+ private boolean isAutomatic;
+
+ @SuppressWarnings("unused")
+ private ClientUpdateCommandBlockPacket() {
+ }
+
+ public ClientUpdateCommandBlockPacket(Position position, String command, CommandBlockMode mode,
+ boolean doesTrackOutput, boolean isConditional, boolean isAutomatic) {
+ this.position = position;
+ this.command = command;
+ this.mode = mode;
+ this.doesTrackOutput = doesTrackOutput;
+ this.isConditional = isConditional;
+ this.isAutomatic = isAutomatic;
+ }
+
+ public Position getPosition() {
+ return this.position;
+ }
+
+ public String getCommand() {
+ return this.command;
+ }
+
+ public CommandBlockMode getMode() {
+ return this.mode;
+ }
+
+ public boolean isDoesTrackOutput() {
+ return this.doesTrackOutput;
+ }
+
+ public boolean isConditional() {
+ return this.isConditional;
+ }
+
+ public boolean isAutomatic() {
+ return this.isAutomatic;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.position = NetUtil.readPosition(in);
+ this.command = in.readString();
+ this.mode = MagicValues.key(CommandBlockMode.class, in.readVarInt());
+ int flags = in.readUnsignedByte();
+ this.doesTrackOutput = (flags & 0x01) != 0;
+ this.isConditional = (flags & 0x02) != 0;
+ this.isAutomatic = (flags & 0x04) != 0;
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ NetUtil.writePosition(out, this.position);
+ out.writeString(this.command);
+ out.writeVarInt(MagicValues.value(Integer.class, this.mode));
+ int flags = 0;
+ if (this.doesTrackOutput) flags |= 0x01;
+ if (this.isConditional) flags |= 0x02;
+ if (this.isAutomatic) flags |= 0x04;
+ out.writeByte(flags);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientUpdateStructureBlockPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientUpdateStructureBlockPacket.java
new file mode 100644
index 00000000..795f4bf0
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/window/ClientUpdateStructureBlockPacket.java
@@ -0,0 +1,156 @@
+package com.github.steveice10.mc.protocol.packet.ingame.client.window;
+
+import com.github.steveice10.mc.protocol.data.MagicValues;
+import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
+import com.github.steveice10.mc.protocol.data.game.window.UpdateStructureBlockAction;
+import com.github.steveice10.mc.protocol.data.game.window.UpdateStructureBlockMode;
+import com.github.steveice10.mc.protocol.data.game.world.block.StructureMirror;
+import com.github.steveice10.mc.protocol.data.game.world.block.StructureRotation;
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.mc.protocol.util.NetUtil;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ClientUpdateStructureBlockPacket extends MinecraftPacket {
+ private Position position;
+ private UpdateStructureBlockAction action;
+ private UpdateStructureBlockMode mode;
+ private String name;
+ private Position offset;
+ private Position size;
+ private StructureMirror mirror;
+ private StructureRotation rotation;
+ private String metadata;
+ private float integrity;
+ private long seed;
+ private boolean ignoreEntities;
+ private boolean showAir;
+ private boolean showBoundingBox;
+
+ @SuppressWarnings("unused")
+ private ClientUpdateStructureBlockPacket() {
+ }
+
+ public ClientUpdateStructureBlockPacket(Position position,
+ UpdateStructureBlockAction action, UpdateStructureBlockMode mode,
+ String name, Position offset, Position size,
+ StructureMirror mirror, StructureRotation rotation,
+ String metadata, float integrity, long seed,
+ boolean ignoreEntities, boolean showAir, boolean showBoundingBox) {
+ this.position = position;
+ this.action = action;
+ this.mode = mode;
+ this.name = name;
+ this.offset = offset;
+ this.size = size;
+ this.mirror = mirror;
+ this.rotation = rotation;
+ this.metadata = metadata;
+ this.integrity = integrity;
+ this.seed = seed;
+ this.ignoreEntities = ignoreEntities;
+ this.showAir = showAir;
+ this.showBoundingBox = showBoundingBox;
+ }
+
+ public Position getPosition() {
+ return this.position;
+ }
+
+ public UpdateStructureBlockAction getAction() {
+ return this.action;
+ }
+
+ public UpdateStructureBlockMode getMode() {
+ return this.mode;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public Position getOffset() {
+ return this.offset;
+ }
+
+ public Position getSize() {
+ return this.size;
+ }
+
+ public StructureMirror getMirror() {
+ return this.mirror;
+ }
+
+ public StructureRotation getRotation() {
+ return this.rotation;
+ }
+
+ public String getMetadata() {
+ return this.metadata;
+ }
+
+ public float getIntegrity() {
+ return this.integrity;
+ }
+
+ public long getSeed() {
+ return this.seed;
+ }
+
+ public boolean isIgnoreEntities() {
+ return this.ignoreEntities;
+ }
+
+ public boolean isShowAir() {
+ return this.showAir;
+ }
+
+ public boolean isShowBoundingBox() {
+ return this.showBoundingBox;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.position = NetUtil.readPosition(in);
+ this.action = MagicValues.key(UpdateStructureBlockAction.class, in.readVarInt());
+ this.mode = MagicValues.key(UpdateStructureBlockMode.class, in.readVarInt());
+ this.name = in.readString();
+ this.offset = new Position(in.readByte(), in.readByte(), in.readByte());
+ this.size = new Position(in.readUnsignedByte(), in.readUnsignedByte(), in.readUnsignedByte());
+ this.mirror = MagicValues.key(StructureMirror.class, in.readVarInt());
+ this.rotation = MagicValues.key(StructureRotation.class, in.readVarInt());
+ this.metadata = in.readString();
+ this.integrity = in.readFloat();
+ this.seed = in.readVarLong();
+ int flags = in.readUnsignedByte();
+ this.ignoreEntities = (flags & 0x01) != 0;
+ this.showAir = (flags & 0x02) != 0;
+ this.showBoundingBox = (flags & 0x04) != 0;
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ NetUtil.writePosition(out, this.position);
+ out.writeVarInt(MagicValues.value(Integer.class, this.action));
+ out.writeVarInt(MagicValues.value(Integer.class, this.mode));
+ out.writeString(this.name);
+ out.writeByte(this.offset.getX());
+ out.writeByte(this.offset.getY());
+ out.writeByte(this.offset.getZ());
+ out.writeByte(this.size.getX());
+ out.writeByte(this.size.getY());
+ out.writeByte(this.size.getZ());
+ out.writeVarInt(MagicValues.value(Integer.class, this.mirror));
+ out.writeVarInt(MagicValues.value(Integer.class, this.rotation));
+ out.writeString(this.metadata);
+ out.writeFloat(this.integrity);
+ out.writeVarLong(this.seed);
+ int flags = 0;
+ if (this.ignoreEntities) flags |= 0x01;
+ if (this.showAir) flags |= 0x02;
+ if (this.showBoundingBox) flags |= 0x04;
+ out.writeByte(flags);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/world/ClientBlockNBTRequestPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/world/ClientBlockNBTRequestPacket.java
new file mode 100644
index 00000000..2de6c4c6
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/world/ClientBlockNBTRequestPacket.java
@@ -0,0 +1,43 @@
+package com.github.steveice10.mc.protocol.packet.ingame.client.world;
+
+import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.mc.protocol.util.NetUtil;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ClientBlockNBTRequestPacket extends MinecraftPacket {
+ private int transactionId;
+ private Position position;
+
+ @SuppressWarnings("unused")
+ private ClientBlockNBTRequestPacket() {
+ }
+
+ public ClientBlockNBTRequestPacket(int transactionId, Position position) {
+ this.transactionId = transactionId;
+ this.position = position;
+ }
+
+ public int getTransactionId() {
+ return this.transactionId;
+ }
+
+ public Position getPosition() {
+ return this.position;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.transactionId = in.readVarInt();
+ this.position = NetUtil.readPosition(in);
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.transactionId);
+ NetUtil.writePosition(out, this.position);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/world/ClientEntityNBTRequestPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/world/ClientEntityNBTRequestPacket.java
new file mode 100644
index 00000000..66a4fcf6
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/client/world/ClientEntityNBTRequestPacket.java
@@ -0,0 +1,41 @@
+package com.github.steveice10.mc.protocol.packet.ingame.client.world;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ClientEntityNBTRequestPacket extends MinecraftPacket {
+ private int transactionId;
+ private int entityId;
+
+ @SuppressWarnings("unused")
+ private ClientEntityNBTRequestPacket() {
+ }
+
+ public ClientEntityNBTRequestPacket(int transactionId, int entityId) {
+ this.transactionId = transactionId;
+ this.entityId = entityId;
+ }
+
+ public int getTransactionId() {
+ return this.transactionId;
+ }
+
+ public int getEntityId() {
+ return this.entityId;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.transactionId = in.readVarInt();
+ this.entityId = in.readVarInt();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.transactionId);
+ out.writeVarInt(this.entityId);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerDeclareCommandsPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerDeclareCommandsPacket.java
new file mode 100644
index 00000000..516fc584
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerDeclareCommandsPacket.java
@@ -0,0 +1,35 @@
+package com.github.steveice10.mc.protocol.packet.ingame.server;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ServerDeclareCommandsPacket extends MinecraftPacket {
+ private byte[] data;
+
+ @SuppressWarnings("unused")
+ private ServerDeclareCommandsPacket() {
+ }
+
+ @Deprecated // This packet isn't fully implemented, please send a PR if you need to use it
+ public ServerDeclareCommandsPacket(byte[] data) {
+ this.data = data;
+ }
+
+ @Deprecated // This packet isn't fully implemented, please send a PR if you need to use it
+ public byte[] getData() {
+ return data;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.data = in.readBytes(in.available());
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeBytes(this.data);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerDeclareRecipesPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerDeclareRecipesPacket.java
new file mode 100644
index 00000000..06b90338
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerDeclareRecipesPacket.java
@@ -0,0 +1,35 @@
+package com.github.steveice10.mc.protocol.packet.ingame.server;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ServerDeclareRecipesPacket extends MinecraftPacket {
+ private byte[] data;
+
+ @SuppressWarnings("unused")
+ private ServerDeclareRecipesPacket() {
+ }
+
+ @Deprecated // This packet isn't fully implemented, please send a PR if you need to use it
+ public ServerDeclareRecipesPacket(byte[] data) {
+ this.data = data;
+ }
+
+ @Deprecated // This packet isn't fully implemented, please send a PR if you need to use it
+ public byte[] getData() {
+ return data;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.data = in.readBytes(in.available());
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeBytes(this.data);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerDeclareTagsPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerDeclareTagsPacket.java
new file mode 100644
index 00000000..2015b544
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerDeclareTagsPacket.java
@@ -0,0 +1,71 @@
+package com.github.steveice10.mc.protocol.packet.ingame.server;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ServerDeclareTagsPacket extends MinecraftPacket {
+ private Map blockTags;
+ private Map itemTags;
+ private Map fluidTags;
+
+ @SuppressWarnings("unused")
+ private ServerDeclareTagsPacket() {
+ }
+
+ public ServerDeclareTagsPacket(Map blockTags, Map itemTags, Map fluidTags) {
+ this.blockTags = blockTags;
+ this.itemTags = itemTags;
+ this.fluidTags = fluidTags;
+ }
+
+ public Map getBlockTags() {
+ return this.blockTags;
+ }
+
+ public Map getItemTags() {
+ return this.itemTags;
+ }
+
+ public Map getFluidTags() {
+ return this.fluidTags;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ blockTags = new HashMap<>();
+ itemTags = new HashMap<>();
+ fluidTags = new HashMap<>();
+ for(Map tags : Arrays.asList(blockTags, itemTags, fluidTags)) {
+ int tagsCount = in.readVarInt();
+ for(int i = 0; i < tagsCount; i++) {
+ String name = in.readString();
+ int entriesCount = in.readVarInt();
+ int[] entries = new int[entriesCount];
+ for(int index = 0; index < entriesCount; index++) {
+ entries[index] = in.readVarInt();
+ }
+ tags.put(name, entries);
+ }
+ }
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ for(Map tags : Arrays.asList(blockTags, itemTags, fluidTags)) {
+ out.writeVarInt(tags.size());
+ for (Map.Entry tag : tags.entrySet()) {
+ out.writeString(tag.getKey());
+ out.writeVarInt(tag.getValue().length);
+ for (int id : tag.getValue()) {
+ out.writeVarInt(id);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerStatisticsPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerStatisticsPacket.java
index 0bdef4bb..89457545 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerStatisticsPacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerStatisticsPacket.java
@@ -11,6 +11,7 @@ import com.github.steveice10.mc.protocol.data.game.statistic.KillEntityStatistic
import com.github.steveice10.mc.protocol.data.game.statistic.KilledByEntityStatistic;
import com.github.steveice10.mc.protocol.data.game.statistic.PickupItemStatistic;
import com.github.steveice10.mc.protocol.data.game.statistic.Statistic;
+import com.github.steveice10.mc.protocol.data.game.statistic.StatisticCategory;
import com.github.steveice10.mc.protocol.data.game.statistic.UseItemStatistic;
import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
import com.github.steveice10.packetlib.io.NetInput;
@@ -21,15 +22,6 @@ import java.util.HashMap;
import java.util.Map;
public class ServerStatisticsPacket extends MinecraftPacket {
- private static final String CRAFT_ITEM_PREFIX = "stat.craftItem.";
- private static final String BREAK_BLOCK_PREFIX = "stat.mineBlock.";
- private static final String USE_ITEM_PREFIX = "stat.useItem.";
- private static final String BREAK_ITEM_PREFIX = "stat.breakItem.";
- private static final String KILL_ENTITY_PREFIX = "stat.killEntity.";
- private static final String KILLED_BY_ENTITY_PREFIX = "stat.entityKilledBy.";
- private static final String DROP_ITEM_PREFIX = "stat.drop.";
- private static final String PICKUP_ITEM_PREFIX = "stat.pickup.";
-
private Map statistics = new HashMap();
@SuppressWarnings("unused")
@@ -48,32 +40,44 @@ public class ServerStatisticsPacket extends MinecraftPacket {
public void read(NetInput in) throws IOException {
int length = in.readVarInt();
for(int index = 0; index < length; index++) {
- String value = in.readString();
- Statistic statistic = null;
- if(value.startsWith(CRAFT_ITEM_PREFIX)) {
- statistic = new CraftItemStatistic(value.substring(CRAFT_ITEM_PREFIX.length()));
- } else if(value.startsWith(BREAK_BLOCK_PREFIX)) {
- statistic = new BreakBlockStatistic(value.substring(BREAK_BLOCK_PREFIX.length()));
- } else if(value.startsWith(USE_ITEM_PREFIX)) {
- statistic = new UseItemStatistic(value.substring(USE_ITEM_PREFIX.length()));
- } else if(value.startsWith(BREAK_ITEM_PREFIX)) {
- statistic = new BreakItemStatistic(value.substring(BREAK_ITEM_PREFIX.length()));
- } else if(value.startsWith(KILL_ENTITY_PREFIX)) {
- statistic = new KillEntityStatistic(value.substring(KILL_ENTITY_PREFIX.length()));
- } else if(value.startsWith(KILLED_BY_ENTITY_PREFIX)) {
- statistic = new KilledByEntityStatistic(value.substring(KILLED_BY_ENTITY_PREFIX.length()));
- } else if(value.startsWith(DROP_ITEM_PREFIX)) {
- statistic = new DropItemStatistic(value.substring(DROP_ITEM_PREFIX.length()));
- } else if(value.startsWith(PICKUP_ITEM_PREFIX)) {
- statistic = new PickupItemStatistic(value.substring(PICKUP_ITEM_PREFIX.length()));
- } else {
- try {
- statistic = MagicValues.key(GenericStatistic.class, value);
- } catch(IllegalArgumentException e) {
- statistic = new CustomStatistic(value);
+ int categoryId = in.readVarInt();
+ int statisticId = in.readVarInt();
+ Statistic statistic;
+ try {
+ switch (MagicValues.key(StatisticCategory.class, categoryId)) {
+ case BREAK_BLOCK:
+ statistic = new BreakBlockStatistic(statisticId);
+ break;
+ case CRAFT_ITEM:
+ statistic = new CraftItemStatistic(statisticId);
+ break;
+ case USE_ITEM:
+ statistic = new UseItemStatistic(statisticId);
+ break;
+ case BREAK_ITEM:
+ statistic = new BreakItemStatistic(statisticId);
+ break;
+ case PICKED_UP_ITEM:
+ statistic = new PickupItemStatistic(statisticId);
+ break;
+ case DROP_ITEM:
+ statistic = new DropItemStatistic(statisticId);
+ break;
+ case KILL_ENTITY:
+ statistic = new KillEntityStatistic(statisticId);
+ break;
+ case KILLED_BY_ENTITY:
+ statistic = new KilledByEntityStatistic(statisticId);
+ break;
+ case GENERIC:
+ statistic = MagicValues.key(GenericStatistic.class, statisticId);
+ break;
+ default:
+ throw new IllegalArgumentException();
}
+ } catch (IllegalArgumentException e) {
+ statistic = new CustomStatistic(categoryId, statisticId);
}
-
this.statistics.put(statistic, in.readVarInt());
}
}
@@ -82,28 +86,47 @@ public class ServerStatisticsPacket extends MinecraftPacket {
public void write(NetOutput out) throws IOException {
out.writeVarInt(this.statistics.size());
for(Statistic statistic : this.statistics.keySet()) {
- String value = "";
- if(statistic instanceof CraftItemStatistic) {
- value = CRAFT_ITEM_PREFIX + ((CraftItemStatistic) statistic).getId();
- } else if(statistic instanceof BreakBlockStatistic) {
- value = BREAK_BLOCK_PREFIX + ((BreakBlockStatistic) statistic).getId();
- } else if(statistic instanceof UseItemStatistic) {
- value = USE_ITEM_PREFIX + ((UseItemStatistic) statistic).getId();
- } else if(statistic instanceof BreakItemStatistic) {
- value = BREAK_ITEM_PREFIX + ((BreakItemStatistic) statistic).getId();
- } else if(statistic instanceof KillEntityStatistic) {
- value = KILL_ENTITY_PREFIX + ((KillEntityStatistic) statistic).getId();
- } else if(statistic instanceof KilledByEntityStatistic) {
- value = KILLED_BY_ENTITY_PREFIX + ((KilledByEntityStatistic) statistic).getId();
- } else if(statistic instanceof DropItemStatistic) {
- value = DROP_ITEM_PREFIX + ((DropItemStatistic) statistic).getId();
- } else if(statistic instanceof PickupItemStatistic) {
- value = PICKUP_ITEM_PREFIX + ((PickupItemStatistic) statistic).getId();
- } else if(statistic instanceof GenericStatistic) {
- value = MagicValues.value(String.class, (GenericStatistic) statistic);
+ int categoryId;
+ int statisticId;
+ if(statistic instanceof CustomStatistic) {
+ categoryId = ((CustomStatistic) statistic).getCategory();
+ statisticId = ((CustomStatistic) statistic).getId();
+ } else {
+ StatisticCategory category;
+ if(statistic instanceof CraftItemStatistic) {
+ category = StatisticCategory.CRAFT_ITEM;
+ statisticId = ((CraftItemStatistic) statistic).getId();
+ } else if(statistic instanceof BreakBlockStatistic) {
+ category = StatisticCategory.BREAK_BLOCK;
+ statisticId = ((BreakBlockStatistic) statistic).getId();
+ } else if(statistic instanceof UseItemStatistic) {
+ category = StatisticCategory.USE_ITEM;
+ statisticId = ((UseItemStatistic) statistic).getId();
+ } else if(statistic instanceof BreakItemStatistic) {
+ category = StatisticCategory.BREAK_ITEM;
+ statisticId = ((BreakItemStatistic) statistic).getId();
+ } else if(statistic instanceof KillEntityStatistic) {
+ category = StatisticCategory.KILL_ENTITY;
+ statisticId = ((KillEntityStatistic) statistic).getId();
+ } else if(statistic instanceof KilledByEntityStatistic) {
+ category = StatisticCategory.KILLED_BY_ENTITY;
+ statisticId = ((KilledByEntityStatistic) statistic).getId();
+ } else if(statistic instanceof DropItemStatistic) {
+ category = StatisticCategory.DROP_ITEM;
+ statisticId = ((DropItemStatistic) statistic).getId();
+ } else if(statistic instanceof PickupItemStatistic) {
+ category = StatisticCategory.PICKED_UP_ITEM;
+ statisticId = ((PickupItemStatistic) statistic).getId();
+ } else if(statistic instanceof GenericStatistic) {
+ category = StatisticCategory.GENERIC;
+ statisticId = MagicValues.value(Integer.class, statistic);
+ } else {
+ throw new IllegalArgumentException(statistic.getClass().getName());
+ }
+ categoryId = MagicValues.value(Integer.class, category);
}
-
- out.writeString(value);
+ out.writeVarInt(categoryId);
+ out.writeVarInt(statisticId);
out.writeVarInt(this.statistics.get(statistic));
}
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerStopSoundPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerStopSoundPacket.java
new file mode 100644
index 00000000..0156ebeb
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerStopSoundPacket.java
@@ -0,0 +1,71 @@
+package com.github.steveice10.mc.protocol.packet.ingame.server;
+
+import com.github.steveice10.mc.protocol.data.MagicValues;
+import com.github.steveice10.mc.protocol.data.game.world.sound.BuiltinSound;
+import com.github.steveice10.mc.protocol.data.game.world.sound.CustomSound;
+import com.github.steveice10.mc.protocol.data.game.world.sound.Sound;
+import com.github.steveice10.mc.protocol.data.game.world.sound.SoundCategory;
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ServerStopSoundPacket extends MinecraftPacket {
+ private SoundCategory category;
+ private Sound sound;
+
+ @SuppressWarnings("unused")
+ private ServerStopSoundPacket() {
+ }
+
+ public ServerStopSoundPacket(SoundCategory category, Sound sound) {
+ this.category = category;
+ this.sound = sound;
+ }
+
+ public SoundCategory getCategory() {
+ return this.category;
+ }
+
+ public Sound getSound() {
+ return sound;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ int flags = in.readByte();
+ if((flags & 0x1) != 0) {
+ this.category = MagicValues.key(SoundCategory.class, in.readVarInt());
+ } else {
+ this.category = null;
+ }
+ if((flags & 0x2) != 0) {
+ String value = in.readString();
+ try {
+ this.sound = MagicValues.key(BuiltinSound.class, value);
+ } catch(IllegalArgumentException e) {
+ this.sound = new CustomSound(value);
+ }
+ } else {
+ this.sound = null;
+ }
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeByte((this.category != null ? 0x1 : 0) | (this.sound != null ? 0x2 : 0));
+ if (this.category != null) {
+ out.writeByte(MagicValues.value(Integer.class, this.category));
+ }
+ if (this.sound != null) {
+ String value = "";
+ if (this.sound instanceof CustomSound) {
+ value = ((CustomSound) this.sound).getName();
+ } else if (this.sound instanceof BuiltinSound) {
+ value = MagicValues.value(String.class, this.sound);
+ }
+ out.writeString(value);
+ }
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerTabCompletePacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerTabCompletePacket.java
index 5fad49de..811600a7 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerTabCompletePacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerTabCompletePacket.java
@@ -1,5 +1,7 @@
package com.github.steveice10.mc.protocol.packet.ingame.server;
+import com.github.steveice10.mc.protocol.data.message.Message;
+import com.github.steveice10.mc.protocol.data.message.TextMessage;
import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
import com.github.steveice10.packetlib.io.NetInput;
import com.github.steveice10.packetlib.io.NetOutput;
@@ -7,33 +9,71 @@ import com.github.steveice10.packetlib.io.NetOutput;
import java.io.IOException;
public class ServerTabCompletePacket extends MinecraftPacket {
+ private int transactionId;
+ private int start;
+ private int length;
private String matches[];
+ private Message tooltips[];
@SuppressWarnings("unused")
private ServerTabCompletePacket() {
}
- public ServerTabCompletePacket(String matches[]) {
+ public ServerTabCompletePacket(int transactionId, int start, int length, String matches[], Message tooltips[]) {
+ if (tooltips.length != matches.length) {
+ throw new IllegalArgumentException("Length of matches and tooltips must be equal.");
+ }
+ this.transactionId = transactionId;
+ this.start = start;
+ this.length = length;
this.matches = matches;
+ this.tooltips = tooltips;
+ }
+
+ public int getTransactionId() {
+ return this.transactionId;
+ }
+
+ public int getStart() {
+ return this.start;
+ }
+
+ public int getLength() {
+ return this.length;
}
public String[] getMatches() {
return this.matches;
}
+ public Message[] getTooltips() {
+ return this.tooltips;
+ }
+
@Override
public void read(NetInput in) throws IOException {
this.matches = new String[in.readVarInt()];
+ this.tooltips = new TextMessage[this.matches.length];
for(int index = 0; index < this.matches.length; index++) {
this.matches[index] = in.readString();
+ if (in.readBoolean()) {
+ this.tooltips[index] = Message.fromString(in.readString());
+ }
}
}
@Override
public void write(NetOutput out) throws IOException {
out.writeVarInt(this.matches.length);
- for(String match : this.matches) {
- out.writeString(match);
+ for(int index = 0; index < this.matches.length; index++) {
+ out.writeString(this.matches[index]);
+ Message tooltip = this.tooltips[index];
+ if (tooltip != null) {
+ out.writeBoolean(true);
+ out.writeString(tooltip.toJsonString());
+ } else {
+ out.writeBoolean(false);
+ }
}
}
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerUnlockRecipesPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerUnlockRecipesPacket.java
index 047b0dba..c82541f4 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerUnlockRecipesPacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/ServerUnlockRecipesPacket.java
@@ -13,30 +13,40 @@ import java.util.List;
public class ServerUnlockRecipesPacket extends MinecraftPacket {
private UnlockRecipesAction action;
- private List recipes;
- private List alreadyKnownRecipes;
+ private List recipes;
+ private List alreadyKnownRecipes;
private boolean openCraftingBook;
- private boolean activateFiltering;
+ private boolean activateCraftingFiltering;
+ private boolean openSmeltingBook;
+ private boolean activateSmeltingFiltering;
@SuppressWarnings("unused")
private ServerUnlockRecipesPacket() {
}
- private ServerUnlockRecipesPacket(boolean openCraftingBook, boolean activateFiltering, List recipes) {
+ private ServerUnlockRecipesPacket(boolean openCraftingBook, boolean activateCraftingFiltering,
+ boolean openSmeltingBook, boolean activateSmeltingFiltering,
+ List recipes) {
this.openCraftingBook = openCraftingBook;
- this.activateFiltering = activateFiltering;
+ this.activateCraftingFiltering = activateCraftingFiltering;
+ this.openSmeltingBook = openSmeltingBook;
+ this.activateSmeltingFiltering = activateSmeltingFiltering;
this.recipes = recipes;
}
- public ServerUnlockRecipesPacket(boolean openCraftingBook, boolean activateFiltering, List recipes, List alreadyKnownRecipes) {
- this(openCraftingBook, activateFiltering, recipes);
+ public ServerUnlockRecipesPacket(boolean openCraftingBook, boolean activateCraftingFiltering,
+ boolean openSmeltingBook, boolean activateSmeltingFiltering,
+ List recipes, List alreadyKnownRecipes) {
+ this(openCraftingBook, activateCraftingFiltering, openSmeltingBook, activateSmeltingFiltering, recipes);
this.action = UnlockRecipesAction.INIT;
this.alreadyKnownRecipes = alreadyKnownRecipes;
}
- public ServerUnlockRecipesPacket(boolean openCraftingBook, boolean activateFiltering, List recipes, UnlockRecipesAction action) {
- this(openCraftingBook, activateFiltering, recipes);
+ public ServerUnlockRecipesPacket(boolean openCraftingBook, boolean activateCraftingFiltering,
+ boolean openSmeltingBook, boolean activateSmeltingFiltering,
+ List recipes, UnlockRecipesAction action) {
+ this(openCraftingBook, activateCraftingFiltering, openSmeltingBook, activateSmeltingFiltering, recipes);
if(action != UnlockRecipesAction.ADD && action != UnlockRecipesAction.REMOVE) {
throw new IllegalArgumentException("action must be ADD or REMOVE");
}
@@ -47,11 +57,11 @@ public class ServerUnlockRecipesPacket extends MinecraftPacket {
return this.action;
}
- public List getRecipes() {
+ public List getRecipes() {
return this.recipes;
}
- public List getAlreadyKnownRecipes() {
+ public List getAlreadyKnownRecipes() {
if(this.action != UnlockRecipesAction.INIT) {
throw new IllegalStateException("alreadyKnownRecipes is only set if action is " + UnlockRecipesAction.INIT
+ " but it was " + this.action);
@@ -63,8 +73,16 @@ public class ServerUnlockRecipesPacket extends MinecraftPacket {
return this.openCraftingBook;
}
- public boolean getActivateFiltering() {
- return this.activateFiltering;
+ public boolean getActivateCraftingFiltering() {
+ return this.activateCraftingFiltering;
+ }
+
+ public boolean getOpenSmeltingBook() {
+ return this.openSmeltingBook;
+ }
+
+ public boolean getActivateSmeltingFiltering() {
+ return this.activateSmeltingFiltering;
}
@Override
@@ -72,20 +90,22 @@ public class ServerUnlockRecipesPacket extends MinecraftPacket {
this.action = MagicValues.key(UnlockRecipesAction.class, in.readVarInt());
this.openCraftingBook = in.readBoolean();
- this.activateFiltering = in.readBoolean();
+ this.activateCraftingFiltering = in.readBoolean();
+ this.openSmeltingBook = in.readBoolean();
+ this.activateSmeltingFiltering = in.readBoolean();
if(this.action == UnlockRecipesAction.INIT) {
int size = in.readVarInt();
this.alreadyKnownRecipes = new ArrayList<>(size);
for(int i = 0; i < size; i++) {
- this.alreadyKnownRecipes.add(in.readVarInt());
+ this.alreadyKnownRecipes.add(in.readString());
}
}
int size = in.readVarInt();
this.recipes = new ArrayList<>(size);
for(int i = 0; i < size; i++) {
- this.recipes.add(in.readVarInt());
+ this.recipes.add(in.readString());
}
}
@@ -94,18 +114,20 @@ public class ServerUnlockRecipesPacket extends MinecraftPacket {
out.writeVarInt(MagicValues.value(Integer.class, this.action));
out.writeBoolean(this.openCraftingBook);
- out.writeBoolean(this.activateFiltering);
+ out.writeBoolean(this.activateCraftingFiltering);
+ out.writeBoolean(this.openSmeltingBook);
+ out.writeBoolean(this.activateSmeltingFiltering);
if(this.action == UnlockRecipesAction.INIT) {
out.writeVarInt(this.alreadyKnownRecipes.size());
- for(Integer recipeId : this.alreadyKnownRecipes) {
- out.writeVarInt(recipeId);
+ for(String recipeId : this.alreadyKnownRecipes) {
+ out.writeString(recipeId);
}
}
out.writeVarInt(this.recipes.size());
- for(Integer recipeId : this.recipes) {
- out.writeVarInt(recipeId);
+ for(String recipeId : this.recipes) {
+ out.writeString(recipeId);
}
}
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/entity/player/ServerPlayerFacingPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/entity/player/ServerPlayerFacingPacket.java
new file mode 100644
index 00000000..31e8bb14
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/entity/player/ServerPlayerFacingPacket.java
@@ -0,0 +1,86 @@
+package com.github.steveice10.mc.protocol.packet.ingame.server.entity.player;
+
+import com.github.steveice10.mc.protocol.data.MagicValues;
+import com.github.steveice10.mc.protocol.data.game.entity.FeetOrEyes;
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ServerPlayerFacingPacket extends MinecraftPacket {
+ private FeetOrEyes origin; // presumably the origin from which pitch is calculated at
+ private double x;
+ private double y;
+ private double z;
+ private Integer targetEntityId;
+ private FeetOrEyes targetEntityFeetOrEyes;
+
+ @SuppressWarnings("unused")
+ private ServerPlayerFacingPacket() {
+ }
+
+ public ServerPlayerFacingPacket(FeetOrEyes origin, double x, double y, double z) {
+ this.origin = origin;
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ public ServerPlayerFacingPacket(FeetOrEyes origin, int targetEntityId, FeetOrEyes lookAt) {
+ this.origin = origin;
+ this.targetEntityId = targetEntityId;
+ this.targetEntityFeetOrEyes = lookAt;
+ }
+
+ public FeetOrEyes getOrigin() {
+ return origin;
+ }
+
+ public double getX() {
+ return this.x;
+ }
+
+ public double getY() {
+ return this.y;
+ }
+
+ public double getZ() {
+ return this.z;
+ }
+
+ public Integer getTargetEntityId() {
+ return targetEntityId;
+ }
+
+ public FeetOrEyes getTargetEntityFeetOrEyes() {
+ return targetEntityFeetOrEyes;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.origin = MagicValues.key(FeetOrEyes.class, in.readVarInt());
+ this.x = in.readDouble();
+ this.y = in.readDouble();
+ this.z = in.readDouble();
+ if (in.readBoolean()) {
+ this.targetEntityId = in.readVarInt();
+ this.targetEntityFeetOrEyes = MagicValues.key(FeetOrEyes.class, in.readVarInt());
+ }
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(MagicValues.value(Integer.class, this.origin));
+ out.writeDouble(this.x);
+ out.writeDouble(this.y);
+ out.writeDouble(this.z);
+ if (this.targetEntityId != null) {
+ out.writeBoolean(true);
+ out.writeVarInt(this.targetEntityId);
+ out.writeVarInt(MagicValues.value(Integer.class, this.targetEntityFeetOrEyes));
+ } else {
+ out.writeBoolean(false);
+ }
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPaintingPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPaintingPacket.java
index 7f94d488..1c633290 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPaintingPacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPaintingPacket.java
@@ -55,7 +55,7 @@ public class ServerSpawnPaintingPacket extends MinecraftPacket {
public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt();
this.uuid = in.readUUID();
- this.paintingType = MagicValues.key(PaintingType.class, in.readString());
+ this.paintingType = MagicValues.key(PaintingType.class, in.readVarInt());
this.position = NetUtil.readPosition(in);
this.direction = MagicValues.key(HangingDirection.class, in.readUnsignedByte());
}
@@ -64,7 +64,7 @@ public class ServerSpawnPaintingPacket extends MinecraftPacket {
public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId);
out.writeUUID(this.uuid);
- out.writeString(MagicValues.value(String.class, this.paintingType));
+ out.writeVarInt(MagicValues.value(Integer.class, this.paintingType));
NetUtil.writePosition(out, this.position);
out.writeByte(MagicValues.value(Integer.class, this.direction));
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/scoreboard/ServerScoreboardObjectivePacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/scoreboard/ServerScoreboardObjectivePacket.java
index ea54c171..5bc6c15e 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/scoreboard/ServerScoreboardObjectivePacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/scoreboard/ServerScoreboardObjectivePacket.java
@@ -3,6 +3,7 @@ package com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard;
import com.github.steveice10.mc.protocol.data.MagicValues;
import com.github.steveice10.mc.protocol.data.game.scoreboard.ObjectiveAction;
import com.github.steveice10.mc.protocol.data.game.scoreboard.ScoreType;
+import com.github.steveice10.mc.protocol.data.message.Message;
import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
import com.github.steveice10.packetlib.io.NetInput;
import com.github.steveice10.packetlib.io.NetOutput;
@@ -12,7 +13,7 @@ import java.io.IOException;
public class ServerScoreboardObjectivePacket extends MinecraftPacket {
private String name;
private ObjectiveAction action;
- private String displayName;
+ private Message displayName;
private ScoreType type;
@SuppressWarnings("unused")
@@ -24,7 +25,7 @@ public class ServerScoreboardObjectivePacket extends MinecraftPacket {
this.action = ObjectiveAction.REMOVE;
}
- public ServerScoreboardObjectivePacket(String name, ObjectiveAction action, String displayName, ScoreType type) {
+ public ServerScoreboardObjectivePacket(String name, ObjectiveAction action, Message displayName, ScoreType type) {
if(action != ObjectiveAction.ADD && action != ObjectiveAction.UPDATE) {
throw new IllegalArgumentException("(name, action, displayName) constructor only valid for adding and updating objectives.");
}
@@ -43,7 +44,7 @@ public class ServerScoreboardObjectivePacket extends MinecraftPacket {
return this.action;
}
- public String getDisplayName() {
+ public Message getDisplayName() {
return this.displayName;
}
@@ -56,8 +57,8 @@ public class ServerScoreboardObjectivePacket extends MinecraftPacket {
this.name = in.readString();
this.action = MagicValues.key(ObjectiveAction.class, in.readByte());
if(this.action == ObjectiveAction.ADD || this.action == ObjectiveAction.UPDATE) {
- this.displayName = in.readString();
- this.type = MagicValues.key(ScoreType.class, in.readString());
+ this.displayName = Message.fromString(in.readString());
+ this.type = MagicValues.key(ScoreType.class, in.readVarInt());
}
}
@@ -66,8 +67,8 @@ public class ServerScoreboardObjectivePacket extends MinecraftPacket {
out.writeString(this.name);
out.writeByte(MagicValues.value(Integer.class, this.action));
if(this.action == ObjectiveAction.ADD || this.action == ObjectiveAction.UPDATE) {
- out.writeString(this.displayName);
- out.writeString(MagicValues.value(String.class, this.type));
+ out.writeString(this.displayName.toJsonString());
+ out.writeVarInt(MagicValues.value(Integer.class, this.type));
}
}
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/scoreboard/ServerTeamPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/scoreboard/ServerTeamPacket.java
index 2107e3e7..b7aba755 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/scoreboard/ServerTeamPacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/scoreboard/ServerTeamPacket.java
@@ -5,6 +5,7 @@ import com.github.steveice10.mc.protocol.data.game.scoreboard.CollisionRule;
import com.github.steveice10.mc.protocol.data.game.scoreboard.NameTagVisibility;
import com.github.steveice10.mc.protocol.data.game.scoreboard.TeamAction;
import com.github.steveice10.mc.protocol.data.game.scoreboard.TeamColor;
+import com.github.steveice10.mc.protocol.data.message.Message;
import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
import com.github.steveice10.packetlib.io.NetInput;
import com.github.steveice10.packetlib.io.NetOutput;
@@ -14,9 +15,9 @@ import java.io.IOException;
public class ServerTeamPacket extends MinecraftPacket {
private String name;
private TeamAction action;
- private String displayName;
- private String prefix;
- private String suffix;
+ private Message displayName;
+ private Message prefix;
+ private Message suffix;
private boolean friendlyFire;
private boolean seeFriendlyInvisibles;
private NameTagVisibility nameTagVisibility;
@@ -43,7 +44,7 @@ public class ServerTeamPacket extends MinecraftPacket {
this.players = players;
}
- public ServerTeamPacket(String name, String displayName, String prefix, String suffix, boolean friendlyFire, boolean seeFriendlyInvisibles, NameTagVisibility nameTagVisibility, CollisionRule collisionRule, TeamColor color) {
+ public ServerTeamPacket(String name, Message displayName, Message prefix, Message suffix, boolean friendlyFire, boolean seeFriendlyInvisibles, NameTagVisibility nameTagVisibility, CollisionRule collisionRule, TeamColor color) {
this.name = name;
this.displayName = displayName;
this.prefix = prefix;
@@ -56,7 +57,7 @@ public class ServerTeamPacket extends MinecraftPacket {
this.action = TeamAction.UPDATE;
}
- public ServerTeamPacket(String name, String displayName, String prefix, String suffix, boolean friendlyFire, boolean seeFriendlyInvisibles, NameTagVisibility nameTagVisibility, CollisionRule collisionRule, TeamColor color, String players[]) {
+ public ServerTeamPacket(String name, Message displayName, Message prefix, Message suffix, boolean friendlyFire, boolean seeFriendlyInvisibles, NameTagVisibility nameTagVisibility, CollisionRule collisionRule, TeamColor color, String players[]) {
this.name = name;
this.displayName = displayName;
this.prefix = prefix;
@@ -78,15 +79,15 @@ public class ServerTeamPacket extends MinecraftPacket {
return this.action;
}
- public String getDisplayName() {
+ public Message getDisplayName() {
return this.displayName;
}
- public String getPrefix() {
+ public Message getPrefix() {
return this.prefix;
}
- public String getSuffix() {
+ public Message getSuffix() {
return this.suffix;
}
@@ -119,9 +120,7 @@ public class ServerTeamPacket extends MinecraftPacket {
this.name = in.readString();
this.action = MagicValues.key(TeamAction.class, in.readByte());
if(this.action == TeamAction.CREATE || this.action == TeamAction.UPDATE) {
- this.displayName = in.readString();
- this.prefix = in.readString();
- this.suffix = in.readString();
+ this.displayName = Message.fromString(in.readString());
byte flags = in.readByte();
this.friendlyFire = (flags & 0x1) != 0;
this.seeFriendlyInvisibles = (flags & 0x2) != 0;
@@ -129,10 +128,13 @@ public class ServerTeamPacket extends MinecraftPacket {
this.collisionRule = MagicValues.key(CollisionRule.class, in.readString());
try {
- this.color = MagicValues.key(TeamColor.class, in.readByte());
+ this.color = MagicValues.key(TeamColor.class, in.readVarInt());
} catch(IllegalArgumentException e) {
this.color = TeamColor.NONE;
}
+
+ this.prefix = Message.fromString(in.readString());
+ this.suffix = Message.fromString(in.readString());
}
if(this.action == TeamAction.CREATE || this.action == TeamAction.ADD_PLAYER || this.action == TeamAction.REMOVE_PLAYER) {
@@ -148,13 +150,13 @@ public class ServerTeamPacket extends MinecraftPacket {
out.writeString(this.name);
out.writeByte(MagicValues.value(Integer.class, this.action));
if(this.action == TeamAction.CREATE || this.action == TeamAction.UPDATE) {
- out.writeString(this.displayName);
- out.writeString(this.prefix);
- out.writeString(this.suffix);
+ out.writeString(this.displayName.toJsonString());
out.writeByte((this.friendlyFire ? 0x1 : 0x0) | (this.seeFriendlyInvisibles ? 0x2 : 0x0));
out.writeString(MagicValues.value(String.class, this.nameTagVisibility));
out.writeString(MagicValues.value(String.class, this.collisionRule));
- out.writeByte(MagicValues.value(Integer.class, this.color));
+ out.writeVarInt(MagicValues.value(Integer.class, this.color));
+ out.writeString(this.prefix.toJsonString());
+ out.writeString(this.suffix.toJsonString());
}
if(this.action == TeamAction.CREATE || this.action == TeamAction.ADD_PLAYER || this.action == TeamAction.REMOVE_PLAYER) {
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/window/ServerPreparedCraftingGridPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/window/ServerPreparedCraftingGridPacket.java
index 1b52b1ce..243bf3f5 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/window/ServerPreparedCraftingGridPacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/window/ServerPreparedCraftingGridPacket.java
@@ -8,13 +8,13 @@ import java.io.IOException;
public class ServerPreparedCraftingGridPacket extends MinecraftPacket {
private int windowId;
- private int recipeId;
+ private String recipeId;
@SuppressWarnings("unused")
private ServerPreparedCraftingGridPacket() {
}
- public ServerPreparedCraftingGridPacket(int windowId, int recipeId) {
+ public ServerPreparedCraftingGridPacket(int windowId, String recipeId) {
this.windowId = windowId;
this.recipeId = recipeId;
}
@@ -23,19 +23,19 @@ public class ServerPreparedCraftingGridPacket extends MinecraftPacket {
return this.windowId;
}
- public int getRecipeId() {
+ public String getRecipeId() {
return this.recipeId;
}
@Override
public void read(NetInput in) throws IOException {
this.windowId = in.readByte();
- this.recipeId = in.readVarInt();
+ this.recipeId = in.readString();
}
@Override
public void write(NetOutput out) throws IOException {
out.writeByte(this.windowId);
- out.writeVarInt(this.recipeId);
+ out.writeString(this.recipeId);
}
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerMapDataPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerMapDataPacket.java
index 4646e4d3..fbc3430a 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerMapDataPacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerMapDataPacket.java
@@ -4,6 +4,7 @@ import com.github.steveice10.mc.protocol.data.MagicValues;
import com.github.steveice10.mc.protocol.data.game.world.map.MapData;
import com.github.steveice10.mc.protocol.data.game.world.map.MapIcon;
import com.github.steveice10.mc.protocol.data.game.world.map.MapIconType;
+import com.github.steveice10.mc.protocol.data.message.Message;
import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
import com.github.steveice10.packetlib.io.NetInput;
import com.github.steveice10.packetlib.io.NetOutput;
@@ -61,12 +62,15 @@ public class ServerMapDataPacket extends MinecraftPacket {
this.trackingPosition = in.readBoolean();
this.icons = new MapIcon[in.readVarInt()];
for(int index = 0; index < this.icons.length; index++) {
- int data = in.readUnsignedByte();
- int type = (data >> 4) & 15;
- int rotation = data & 15;
+ int type = in.readVarInt();
int x = in.readUnsignedByte();
int z = in.readUnsignedByte();
- this.icons[index] = new MapIcon(x, z, MagicValues.key(MapIconType.class, type), rotation);
+ int rotation = in.readUnsignedByte();
+ Message displayName = null;
+ if (in.readBoolean()) {
+ displayName = Message.fromString(in.readString());
+ }
+ this.icons[index] = new MapIcon(x, z, MagicValues.key(MapIconType.class, type), rotation, displayName);
}
int columns = in.readUnsignedByte();
@@ -88,9 +92,16 @@ public class ServerMapDataPacket extends MinecraftPacket {
for(int index = 0; index < this.icons.length; index++) {
MapIcon icon = this.icons[index];
int type = MagicValues.value(Integer.class, icon.getIconType());
- out.writeByte((type & 15) << 4 | icon.getIconRotation() & 15);
+ out.writeVarInt(type);
out.writeByte(icon.getCenterX());
out.writeByte(icon.getCenterZ());
+ out.writeByte(icon.getIconRotation());
+ if (icon.getDisplayName() != null) {
+ out.writeBoolean(false);
+ out.writeString(icon.getDisplayName().toJsonString());
+ } else {
+ out.writeBoolean(true);
+ }
}
if(this.data != null && this.data.getColumns() != 0) {
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerNBTResponsePacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerNBTResponsePacket.java
new file mode 100644
index 00000000..acaad4db
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerNBTResponsePacket.java
@@ -0,0 +1,43 @@
+package com.github.steveice10.mc.protocol.packet.ingame.server.world;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.mc.protocol.util.NetUtil;
+import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class ServerNBTResponsePacket extends MinecraftPacket {
+ private int transactionId;
+ private CompoundTag nbt;
+
+ @SuppressWarnings("unused")
+ private ServerNBTResponsePacket() {
+ }
+
+ public ServerNBTResponsePacket(int transactionId, CompoundTag nbt) {
+ this.transactionId = transactionId;
+ this.nbt = nbt;
+ }
+
+ public int getTransactionId() {
+ return this.transactionId;
+ }
+
+ public CompoundTag getNBT() {
+ return this.nbt;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.transactionId = in.readVarInt();
+ this.nbt = NetUtil.readNBT(in);
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.transactionId);
+ NetUtil.writeNBT(out, this.nbt);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerPlayEffectPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerPlayEffectPacket.java
index d07c3b2c..71d67a2c 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerPlayEffectPacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerPlayEffectPacket.java
@@ -66,7 +66,7 @@ public class ServerPlayEffectPacket extends MinecraftPacket {
} else if(this.effect == ParticleEffect.SMOKE) {
this.data = MagicValues.key(SmokeEffectData.class, value % 9);
} else if(this.effect == ParticleEffect.BREAK_BLOCK) {
- this.data = new BreakBlockEffectData(new BlockState(value & 4095, (value >> 12) & 255));
+ this.data = new BreakBlockEffectData(new BlockState(value));
} else if(this.effect == ParticleEffect.BREAK_SPLASH_POTION) {
this.data = new BreakPotionEffectData(value);
} else if(this.effect == ParticleEffect.BONEMEAL_GROW) {
@@ -86,7 +86,7 @@ public class ServerPlayEffectPacket extends MinecraftPacket {
} else if(this.data instanceof SmokeEffectData) {
value = MagicValues.value(Integer.class, (SmokeEffectData) this.data);
} else if(this.data instanceof BreakBlockEffectData) {
- value = (((BreakBlockEffectData) this.data).getBlockState().getId() & 4095) | ((((BreakBlockEffectData) this.data).getBlockState().getData() & 255) << 12);
+ value = ((BreakBlockEffectData) this.data).getBlockState().getId();
} else if(this.data instanceof BreakPotionEffectData) {
value = ((BreakPotionEffectData) this.data).getPotionId();
} else if(this.data instanceof BonemealGrowEffectData) {
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerSpawnParticlePacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerSpawnParticlePacket.java
index 343926e7..41d9385c 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerSpawnParticlePacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerSpawnParticlePacket.java
@@ -1,8 +1,10 @@
package com.github.steveice10.mc.protocol.packet.ingame.server.world;
import com.github.steveice10.mc.protocol.data.MagicValues;
-import com.github.steveice10.mc.protocol.data.game.world.Particle;
+import com.github.steveice10.mc.protocol.data.game.world.particle.Particle;
+import com.github.steveice10.mc.protocol.data.game.world.particle.ParticleType;
import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.mc.protocol.util.NetUtil;
import com.github.steveice10.packetlib.io.NetInput;
import com.github.steveice10.packetlib.io.NetOutput;
@@ -19,13 +21,12 @@ public class ServerSpawnParticlePacket extends MinecraftPacket {
private float offsetZ;
private float velocityOffset;
private int amount;
- private int data[];
@SuppressWarnings("unused")
private ServerSpawnParticlePacket() {
}
- public ServerSpawnParticlePacket(Particle particle, boolean longDistance, float x, float y, float z, float offsetX, float offsetY, float offsetZ, float velocityOffset, int amount, int... data) {
+ public ServerSpawnParticlePacket(Particle particle, boolean longDistance, float x, float y, float z, float offsetX, float offsetY, float offsetZ, float velocityOffset, int amount) {
this.particle = particle;
this.longDistance = longDistance;
this.x = x;
@@ -36,10 +37,6 @@ public class ServerSpawnParticlePacket extends MinecraftPacket {
this.offsetZ = offsetZ;
this.velocityOffset = velocityOffset;
this.amount = amount;
- this.data = data;
- if(this.data.length != particle.getDataLength()) {
- throw new IllegalArgumentException("Data array length must be equal to particle's data length.");
- }
}
public Particle getParticle() {
@@ -82,13 +79,9 @@ public class ServerSpawnParticlePacket extends MinecraftPacket {
return this.amount;
}
- public int[] getData() {
- return this.data;
- }
-
@Override
public void read(NetInput in) throws IOException {
- this.particle = MagicValues.key(Particle.class, in.readInt());
+ ParticleType type = MagicValues.key(ParticleType.class, in.readInt());
this.longDistance = in.readBoolean();
this.x = in.readFloat();
this.y = in.readFloat();
@@ -98,10 +91,7 @@ public class ServerSpawnParticlePacket extends MinecraftPacket {
this.offsetZ = in.readFloat();
this.velocityOffset = in.readFloat();
this.amount = in.readInt();
- this.data = new int[this.particle.getDataLength()];
- for(int index = 0; index < this.data.length; index++) {
- this.data[index] = in.readVarInt();
- }
+ this.particle = new Particle(type, NetUtil.readParticleData(in, type));
}
@Override
@@ -116,8 +106,6 @@ public class ServerSpawnParticlePacket extends MinecraftPacket {
out.writeFloat(this.offsetZ);
out.writeFloat(this.velocityOffset);
out.writeInt(this.amount);
- for(int index = 0; index < this.particle.getDataLength(); index++) {
- out.writeVarInt(this.data[index]);
- }
+ NetUtil.writeParticleData(out, this.particle.getData(), this.particle.getType());
}
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/login/client/LoginPluginResponsePacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/login/client/LoginPluginResponsePacket.java
new file mode 100644
index 00000000..ebe24018
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/login/client/LoginPluginResponsePacket.java
@@ -0,0 +1,54 @@
+package com.github.steveice10.mc.protocol.packet.login.client;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class LoginPluginResponsePacket extends MinecraftPacket {
+ private int messageId;
+ private byte[] data;
+
+ @SuppressWarnings("unused")
+ private LoginPluginResponsePacket() {
+ }
+
+ public LoginPluginResponsePacket(int messageId) {
+ this.messageId = messageId;
+ }
+
+ public LoginPluginResponsePacket(int messageId, byte[] data) {
+ this.messageId = messageId;
+ this.data = data;
+ }
+
+ public int getMessageId() {
+ return this.messageId;
+ }
+
+ public byte[] getData() {
+ return this.data;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.messageId = in.readVarInt();
+ if (in.readBoolean()) {
+ this.data = in.readBytes(in.available());
+ } else {
+ this.data = null;
+ }
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.messageId);
+ if (data != null) {
+ out.writeBoolean(true);
+ out.writeBytes(this.data);
+ } else {
+ out.writeBoolean(false);
+ }
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/login/server/LoginPluginRequestPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/login/server/LoginPluginRequestPacket.java
new file mode 100644
index 00000000..0b02de43
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/login/server/LoginPluginRequestPacket.java
@@ -0,0 +1,49 @@
+package com.github.steveice10.mc.protocol.packet.login.server;
+
+import com.github.steveice10.mc.protocol.packet.MinecraftPacket;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+
+import java.io.IOException;
+
+public class LoginPluginRequestPacket extends MinecraftPacket {
+ private int messageId;
+ private String channel;
+ private byte[] data;
+
+ @SuppressWarnings("unused")
+ private LoginPluginRequestPacket() {
+ }
+
+ public LoginPluginRequestPacket(int messageId, String channel, byte[] data) {
+ this.messageId = messageId;
+ this.channel = channel;
+ this.data = data;
+ }
+
+ public int getMessageId() {
+ return this.messageId;
+ }
+
+ public String getChannel() {
+ return this.channel;
+ }
+
+ public byte[] getData() {
+ return this.data;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.messageId = in.readVarInt();
+ this.channel = in.readString();
+ this.data = in.readBytes(in.available());
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.messageId);
+ out.writeString(this.channel);
+ out.writeBytes(this.data);
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/util/NetUtil.java b/src/main/java/com/github/steveice10/mc/protocol/util/NetUtil.java
index a79fd89d..28b0d61c 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/util/NetUtil.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/util/NetUtil.java
@@ -12,6 +12,13 @@ import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.Rotation;
import com.github.steveice10.mc.protocol.data.game.world.block.BlockFace;
import com.github.steveice10.mc.protocol.data.game.world.block.BlockState;
+import com.github.steveice10.mc.protocol.data.game.world.particle.BlockParticleData;
+import com.github.steveice10.mc.protocol.data.game.world.particle.DustParticleData;
+import com.github.steveice10.mc.protocol.data.game.world.particle.FallingDustParticleData;
+import com.github.steveice10.mc.protocol.data.game.world.particle.ItemParticleData;
+import com.github.steveice10.mc.protocol.data.game.world.particle.Particle;
+import com.github.steveice10.mc.protocol.data.game.world.particle.ParticleType;
+import com.github.steveice10.mc.protocol.data.game.world.particle.ParticleData;
import com.github.steveice10.mc.protocol.data.message.Message;
import com.github.steveice10.opennbt.NBTIO;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
@@ -54,12 +61,11 @@ public class NetUtil {
}
public static BlockState readBlockState(NetInput in) throws IOException {
- int rawId = in.readVarInt();
- return new BlockState(rawId >> 4, rawId & 0xF);
+ return new BlockState(in.readVarInt());
}
public static void writeBlockState(NetOutput out, BlockState blockState) throws IOException {
- out.writeVarInt((blockState.getId() << 4) | (blockState.getData() & 0xF));
+ out.writeVarInt(blockState.getId());
}
public static ItemStack readItem(NetInput in) throws IOException {
@@ -67,7 +73,7 @@ public class NetUtil {
if(item < 0) {
return null;
} else {
- return new ItemStack(item, in.readByte(), in.readShort(), readNBT(in));
+ return new ItemStack(item, in.readByte(), readNBT(in));
}
}
@@ -77,7 +83,6 @@ public class NetUtil {
} else {
out.writeShort(item.getId());
out.writeByte(item.getAmount());
- out.writeShort(item.getData());
writeNBT(out, item.getNBT());
}
}
@@ -110,6 +115,56 @@ public class NetUtil {
out.writeFloat(rot.getRoll());
}
+ public static Particle readParticle(NetInput in) throws IOException {
+ ParticleType type = MagicValues.key(ParticleType.class, in.readVarInt());
+ ParticleData data = readParticleData(in, type);
+ return new Particle(type, data);
+ }
+
+ public static ParticleData readParticleData(NetInput in, ParticleType type) throws IOException {
+ switch (type) {
+ case BLOCK:
+ return new BlockParticleData(readBlockState(in));
+ case DUST:
+ float red = in.readFloat();
+ float green = in.readFloat();
+ float blue = in.readFloat();
+ float scale = in.readFloat();
+ return new DustParticleData(red, green, blue, scale);
+ case FALLING_DUST:
+ return new FallingDustParticleData(readBlockState(in));
+ case ITEM:
+ return new ItemParticleData(readItem(in));
+ default:
+ return null;
+ }
+ }
+
+ public static void writeParticle(NetOutput out, Particle particle) throws IOException {
+ out.writeVarInt(MagicValues.value(Integer.class, particle.getType()));
+ writeParticleData(out, particle.getData(), particle.getType());
+ }
+
+ public static void writeParticleData(NetOutput out, ParticleData data, ParticleType type) throws IOException {
+ switch (type) {
+ case BLOCK:
+ writeBlockState(out, ((BlockParticleData) data).getBlockState());
+ break;
+ case DUST:
+ out.writeFloat(((DustParticleData) data).getRed());
+ out.writeFloat(((DustParticleData) data).getGreen());
+ out.writeFloat(((DustParticleData) data).getBlue());
+ out.writeFloat(((DustParticleData) data).getScale());
+ break;
+ case FALLING_DUST:
+ writeBlockState(out, ((FallingDustParticleData) data).getBlockState());
+ break;
+ case ITEM:
+ writeItem(out, ((ItemParticleData) data).getItemStack());
+ break;
+ }
+ }
+
public static EntityMetadata[] readEntityMetadata(NetInput in) throws IOException {
List ret = new ArrayList();
int id;
@@ -130,6 +185,12 @@ public class NetUtil {
case STRING:
value = in.readString();
break;
+ case OPTIONAL_CHAT:
+ boolean chatPresent = in.readBoolean();
+ if (!chatPresent) {
+ break;
+ }
+ // Intentional fall-through
case CHAT:
value = Message.fromString(in.readString());
break;
@@ -168,6 +229,9 @@ public class NetUtil {
case NBT_TAG:
value = readNBT(in);
break;
+ case PARTICLE:
+ value = readParticle(in);
+ break;
default:
throw new IOException("Unknown metadata type id: " + typeId);
}
@@ -195,6 +259,12 @@ public class NetUtil {
case STRING:
out.writeString((String) meta.getValue());
break;
+ case OPTIONAL_CHAT:
+ out.writeBoolean(meta.getValue() != null);
+ if (meta.getValue() == null) {
+ break;
+ }
+ // Intentional fall-through
case CHAT:
out.writeString(((Message) meta.getValue()).toJsonString());
break;
@@ -233,6 +303,9 @@ public class NetUtil {
case NBT_TAG:
writeNBT(out, (CompoundTag) meta.getValue());
break;
+ case PARTICLE:
+ writeParticle(out, (Particle) meta.getValue());
+ break;
default:
throw new IOException("Unknown metadata type: " + meta.getType());
}
@@ -256,9 +329,9 @@ public class NetUtil {
}
}
- byte biomeData[] = null;
+ int biomeData[] = null;
if(fullChunk) {
- biomeData = in.readBytes(256);
+ biomeData = in.readInts(256);
}
column = new Column(x, z, chunks, biomeData, tileEntities);
@@ -292,7 +365,7 @@ public class NetUtil {
}
if(fullChunk) {
- out.writeBytes(column.getBiomeData());
+ out.writeInts(column.getBiomeData());
}
return mask;
diff --git a/src/test/java/com/github/steveice10/mc/protocol/ByteBufHelper.java b/src/test/java/com/github/steveice10/mc/protocol/ByteBufHelper.java
index 7949b9d2..4be24b34 100644
--- a/src/test/java/com/github/steveice10/mc/protocol/ByteBufHelper.java
+++ b/src/test/java/com/github/steveice10/mc/protocol/ByteBufHelper.java
@@ -47,8 +47,7 @@ public class ByteBufHelper {
assertEquals("Received incorrect Z position", z, position.getZ());
}
- public static void assertBlock(BlockChangeRecord record, int block, int data) {
+ public static void assertBlock(BlockChangeRecord record, int block) {
assertEquals("Received incorrect block id", block, record.getBlock().getId());
- assertEquals("Received incorrect block data", data, record.getBlock().getData());
}
}
diff --git a/src/test/java/com/github/steveice10/mc/protocol/MinecraftProtocolTest.java b/src/test/java/com/github/steveice10/mc/protocol/MinecraftProtocolTest.java
index a45a9c1c..7341acd5 100644
--- a/src/test/java/com/github/steveice10/mc/protocol/MinecraftProtocolTest.java
+++ b/src/test/java/com/github/steveice10/mc/protocol/MinecraftProtocolTest.java
@@ -135,11 +135,11 @@ public class MinecraftProtocolTest {
@Test
public void testBlockBreak() throws IOException {
- BlockChangeRecord record = new BlockChangeRecord(new Position(1, 61, -1), new BlockState(3, 2));
+ BlockChangeRecord record = new BlockChangeRecord(new Position(1, 61, -1), new BlockState(3));
ServerBlockChangePacket packet = writeAndRead(new ServerBlockChangePacket(record));
assertPosition(packet.getRecord().getPosition(), 1, 61, -1);
- assertBlock(packet.getRecord(), 3, 2);
+ assertBlock(packet.getRecord(), 3);
}
@After