diff --git a/pom.xml b/pom.xml
index de82e1d8..e9287256 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
org.spacehq
mcprotocollib
- 15w39c-SNAPSHOT
+ 1.9-SNAPSHOT
jar
MCProtocolLib
diff --git a/src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java b/src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java
index 21387f0e..e3b8b65c 100644
--- a/src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java
+++ b/src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java
@@ -2,8 +2,8 @@ package org.spacehq.mc.protocol;
public class MinecraftConstants {
// General Constants
- public static final String GAME_VERSION = "15w39c";
- public static final int PROTOCOL_VERSION = 74;
+ public static final String GAME_VERSION = "1.9";
+ public static final int PROTOCOL_VERSION = 107;
// General Key Constants
public static final String PROFILE_KEY = "profile";
diff --git a/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java b/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java
index 55ea679f..e29fc1b5 100644
--- a/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java
+++ b/src/main/java/org/spacehq/mc/protocol/MinecraftProtocol.java
@@ -12,9 +12,9 @@ import org.spacehq.mc.protocol.packet.ingame.client.ClientRequestPacket;
import org.spacehq.mc.protocol.packet.ingame.client.ClientResourcePackStatusPacket;
import org.spacehq.mc.protocol.packet.ingame.client.ClientSettingsPacket;
import org.spacehq.mc.protocol.packet.ingame.client.ClientTabCompletePacket;
-import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerChangeHeldItemPacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerAbilitiesPacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerActionPacket;
+import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerChangeHeldItemPacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerInteractEntityPacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPlaceBlockPacket;
@@ -22,16 +22,19 @@ import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPositionP
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerRotationPacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerStatePacket;
-import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerUseItemPacket;
-import org.spacehq.mc.protocol.packet.ingame.client.world.ClientSpectatePacket;
-import org.spacehq.mc.protocol.packet.ingame.client.world.ClientSteerVehiclePacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerSwingArmPacket;
+import org.spacehq.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket;
+import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerUseItemPacket;
import org.spacehq.mc.protocol.packet.ingame.client.window.ClientCloseWindowPacket;
import org.spacehq.mc.protocol.packet.ingame.client.window.ClientConfirmTransactionPacket;
import org.spacehq.mc.protocol.packet.ingame.client.window.ClientCreativeInventoryActionPacket;
import org.spacehq.mc.protocol.packet.ingame.client.window.ClientEnchantItemPacket;
import org.spacehq.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
+import org.spacehq.mc.protocol.packet.ingame.client.world.ClientSpectatePacket;
+import org.spacehq.mc.protocol.packet.ingame.client.world.ClientSteerBoatPacket;
+import org.spacehq.mc.protocol.packet.ingame.client.world.ClientSteerVehiclePacket;
import org.spacehq.mc.protocol.packet.ingame.client.world.ClientUpdateSignPacket;
+import org.spacehq.mc.protocol.packet.ingame.client.world.ClientVehicleMovePacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerBossBarPacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerChatPacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerCombatPacket;
@@ -44,16 +47,15 @@ import org.spacehq.mc.protocol.packet.ingame.server.ServerPlayerListEntryPacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerResourcePackSendPacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerRespawnPacket;
-import org.spacehq.mc.protocol.packet.ingame.server.ServerSetCompressionPacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerSetCooldownPacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerStatisticsPacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerSwitchCameraPacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerTabCompletePacket;
import org.spacehq.mc.protocol.packet.ingame.server.ServerTitlePacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityAnimationPacket;
+import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityAttachPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityCollectItemPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityDestroyPacket;
-import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityAttachPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityEffectPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityEquipmentPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityHeadLookPacket;
@@ -64,15 +66,17 @@ import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPositionR
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPropertiesPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityRemoveEffectPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityRotationPacket;
+import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntitySetPassengersPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityStatusPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityTeleportPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityVelocityPacket;
-import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerChangeHeldItemPacket;
+import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerVehicleMovePacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerAbilitiesPacket;
-import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
-import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerUseBedPacket;
-import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerSetExperiencePacket;
+import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerChangeHeldItemPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerHealthPacket;
+import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
+import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerSetExperiencePacket;
+import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerUseBedPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnExpOrbPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnGlobalEntityPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnMobPacket;
@@ -99,6 +103,7 @@ import org.spacehq.mc.protocol.packet.ingame.server.world.ServerMultiBlockChange
import org.spacehq.mc.protocol.packet.ingame.server.world.ServerNotifyClientPacket;
import org.spacehq.mc.protocol.packet.ingame.server.world.ServerOpenTileEntityEditorPacket;
import org.spacehq.mc.protocol.packet.ingame.server.world.ServerPlayEffectPacket;
+import org.spacehq.mc.protocol.packet.ingame.server.world.ServerPlaySoundEventPacket;
import org.spacehq.mc.protocol.packet.ingame.server.world.ServerPlaySoundPacket;
import org.spacehq.mc.protocol.packet.ingame.server.world.ServerSpawnParticlePacket;
import org.spacehq.mc.protocol.packet.ingame.server.world.ServerSpawnPositionPacket;
@@ -336,23 +341,23 @@ public class MinecraftProtocol extends PacketProtocol {
this.registerIncoming(22, ServerSetSlotPacket.class);
this.registerIncoming(23, ServerSetCooldownPacket.class);
this.registerIncoming(24, ServerPluginMessagePacket.class);
- this.registerIncoming(25, ServerDisconnectPacket.class);
- this.registerIncoming(26, ServerEntityStatusPacket.class);
- this.registerIncoming(27, ServerExplosionPacket.class);
- this.registerIncoming(28, ServerUnloadChunkPacket.class);
- this.registerIncoming(29, ServerSetCompressionPacket.class);
+ this.registerIncoming(25, ServerPlaySoundPacket.class);
+ this.registerIncoming(26, ServerDisconnectPacket.class);
+ this.registerIncoming(27, ServerEntityStatusPacket.class);
+ this.registerIncoming(28, ServerExplosionPacket.class);
+ this.registerIncoming(29, ServerUnloadChunkPacket.class);
this.registerIncoming(30, ServerNotifyClientPacket.class);
this.registerIncoming(31, ServerKeepAlivePacket.class);
this.registerIncoming(32, ServerChunkDataPacket.class);
this.registerIncoming(33, ServerPlayEffectPacket.class);
this.registerIncoming(34, ServerSpawnParticlePacket.class);
- this.registerIncoming(35, ServerPlaySoundPacket.class);
- this.registerIncoming(36, ServerJoinGamePacket.class);
- this.registerIncoming(37, ServerMapDataPacket.class);
- this.registerIncoming(38, ServerEntityPositionPacket.class);
- this.registerIncoming(39, ServerEntityPositionRotationPacket.class);
- this.registerIncoming(40, ServerEntityRotationPacket.class);
- this.registerIncoming(41, ServerEntityMovementPacket.class);
+ this.registerIncoming(35, ServerJoinGamePacket.class);
+ this.registerIncoming(36, ServerMapDataPacket.class);
+ this.registerIncoming(37, ServerEntityPositionPacket.class);
+ this.registerIncoming(38, ServerEntityPositionRotationPacket.class);
+ this.registerIncoming(39, ServerEntityRotationPacket.class);
+ this.registerIncoming(40, ServerEntityMovementPacket.class);
+ this.registerIncoming(41, ServerVehicleMovePacket.class);
this.registerIncoming(42, ServerOpenTileEntityEditorPacket.class);
this.registerIncoming(43, ServerPlayerAbilitiesPacket.class);
this.registerIncoming(44, ServerCombatPacket.class);
@@ -375,75 +380,83 @@ public class MinecraftProtocol extends PacketProtocol {
this.registerIncoming(61, ServerPlayerSetExperiencePacket.class);
this.registerIncoming(62, ServerPlayerHealthPacket.class);
this.registerIncoming(63, ServerScoreboardObjectivePacket.class);
- this.registerIncoming(64, ServerTeamPacket.class);
- this.registerIncoming(65, ServerUpdateScorePacket.class);
- this.registerIncoming(66, ServerSpawnPositionPacket.class);
- this.registerIncoming(67, ServerUpdateTimePacket.class);
- this.registerIncoming(68, ServerTitlePacket.class);
- this.registerIncoming(69, ServerUpdateSignPacket.class);
- this.registerIncoming(70, ServerPlayerListDataPacket.class);
- this.registerIncoming(71, ServerEntityCollectItemPacket.class);
- this.registerIncoming(72, ServerEntityTeleportPacket.class);
- this.registerIncoming(73, ServerEntityPropertiesPacket.class);
- this.registerIncoming(74, ServerEntityEffectPacket.class);
+ this.registerIncoming(64, ServerEntitySetPassengersPacket.class);
+ this.registerIncoming(65, ServerTeamPacket.class);
+ this.registerIncoming(66, ServerUpdateScorePacket.class);
+ this.registerIncoming(67, ServerSpawnPositionPacket.class);
+ this.registerIncoming(68, ServerUpdateTimePacket.class);
+ this.registerIncoming(69, ServerTitlePacket.class);
+ this.registerIncoming(70, ServerUpdateSignPacket.class);
+ this.registerIncoming(71, ServerPlaySoundEventPacket.class);
+ this.registerIncoming(72, ServerPlayerListDataPacket.class);
+ this.registerIncoming(73, ServerEntityCollectItemPacket.class);
+ this.registerIncoming(74, ServerEntityTeleportPacket.class);
+ this.registerIncoming(75, ServerEntityPropertiesPacket.class);
+ this.registerIncoming(76, ServerEntityEffectPacket.class);
- this.registerOutgoing(0, ClientTabCompletePacket.class);
- this.registerOutgoing(1, ClientChatPacket.class);
- this.registerOutgoing(2, ClientRequestPacket.class);
- this.registerOutgoing(3, ClientSettingsPacket.class);
- this.registerOutgoing(4, ClientConfirmTransactionPacket.class);
- this.registerOutgoing(5, ClientEnchantItemPacket.class);
- this.registerOutgoing(6, ClientWindowActionPacket.class);
- this.registerOutgoing(7, ClientCloseWindowPacket.class);
- this.registerOutgoing(8, ClientPluginMessagePacket.class);
- this.registerOutgoing(9, ClientPlayerInteractEntityPacket.class);
- this.registerOutgoing(10, ClientKeepAlivePacket.class);
- this.registerOutgoing(11, ClientPlayerPositionPacket.class);
- this.registerOutgoing(12, ClientPlayerPositionRotationPacket.class);
- this.registerOutgoing(13, ClientPlayerRotationPacket.class);
- this.registerOutgoing(14, ClientPlayerMovementPacket.class);
- this.registerOutgoing(15, ClientPlayerAbilitiesPacket.class);
- this.registerOutgoing(16, ClientPlayerActionPacket.class);
- this.registerOutgoing(17, ClientPlayerStatePacket.class);
- this.registerOutgoing(18, ClientSteerVehiclePacket.class);
- this.registerOutgoing(19, ClientResourcePackStatusPacket.class);
- this.registerOutgoing(20, ClientPlayerChangeHeldItemPacket.class);
- this.registerOutgoing(21, ClientCreativeInventoryActionPacket.class);
- this.registerOutgoing(22, ClientUpdateSignPacket.class);
- this.registerOutgoing(23, ClientPlayerSwingArmPacket.class);
- this.registerOutgoing(24, ClientSpectatePacket.class);
- this.registerOutgoing(25, ClientPlayerPlaceBlockPacket.class);
- this.registerOutgoing(26, ClientPlayerUseItemPacket.class);
+ this.registerOutgoing(0, ClientTeleportConfirmPacket.class);
+ this.registerOutgoing(1, ClientTabCompletePacket.class);
+ this.registerOutgoing(2, ClientChatPacket.class);
+ this.registerOutgoing(3, ClientRequestPacket.class);
+ this.registerOutgoing(4, ClientSettingsPacket.class);
+ this.registerOutgoing(5, ClientConfirmTransactionPacket.class);
+ this.registerOutgoing(6, ClientEnchantItemPacket.class);
+ this.registerOutgoing(7, ClientWindowActionPacket.class);
+ this.registerOutgoing(8, ClientCloseWindowPacket.class);
+ this.registerOutgoing(9, ClientPluginMessagePacket.class);
+ this.registerOutgoing(10, ClientPlayerInteractEntityPacket.class);
+ this.registerOutgoing(11, ClientKeepAlivePacket.class);
+ this.registerOutgoing(12, ClientPlayerPositionPacket.class);
+ this.registerOutgoing(13, ClientPlayerPositionRotationPacket.class);
+ this.registerOutgoing(14, ClientPlayerRotationPacket.class);
+ this.registerOutgoing(15, ClientPlayerMovementPacket.class);
+ this.registerOutgoing(16, ClientVehicleMovePacket.class);
+ this.registerOutgoing(17, ClientSteerBoatPacket.class);
+ this.registerOutgoing(18, ClientPlayerAbilitiesPacket.class);
+ this.registerOutgoing(19, ClientPlayerActionPacket.class);
+ this.registerOutgoing(20, ClientPlayerStatePacket.class);
+ this.registerOutgoing(21, ClientSteerVehiclePacket.class);
+ this.registerOutgoing(22, ClientResourcePackStatusPacket.class);
+ this.registerOutgoing(23, ClientPlayerChangeHeldItemPacket.class);
+ this.registerOutgoing(24, ClientCreativeInventoryActionPacket.class);
+ this.registerOutgoing(25, ClientUpdateSignPacket.class);
+ this.registerOutgoing(26, ClientPlayerSwingArmPacket.class);
+ this.registerOutgoing(27, ClientSpectatePacket.class);
+ this.registerOutgoing(28, ClientPlayerPlaceBlockPacket.class);
+ this.registerOutgoing(29, ClientPlayerUseItemPacket.class);
}
private void initServerGame(Session session) {
- this.registerIncoming(0, ClientTabCompletePacket.class);
- this.registerIncoming(1, ClientChatPacket.class);
- this.registerIncoming(2, ClientRequestPacket.class);
- this.registerIncoming(3, ClientSettingsPacket.class);
- this.registerIncoming(4, ClientConfirmTransactionPacket.class);
- this.registerIncoming(5, ClientEnchantItemPacket.class);
- this.registerIncoming(6, ClientWindowActionPacket.class);
- this.registerIncoming(7, ClientCloseWindowPacket.class);
- this.registerIncoming(8, ClientPluginMessagePacket.class);
- this.registerIncoming(9, ClientPlayerInteractEntityPacket.class);
- this.registerIncoming(10, ClientKeepAlivePacket.class);
- this.registerIncoming(11, ClientPlayerPositionPacket.class);
- this.registerIncoming(12, ClientPlayerPositionRotationPacket.class);
- this.registerIncoming(13, ClientPlayerRotationPacket.class);
- this.registerIncoming(14, ClientPlayerMovementPacket.class);
- this.registerIncoming(15, ClientPlayerAbilitiesPacket.class);
- this.registerIncoming(16, ClientPlayerActionPacket.class);
- this.registerIncoming(17, ClientPlayerStatePacket.class);
- this.registerIncoming(18, ClientSteerVehiclePacket.class);
- this.registerIncoming(19, ClientResourcePackStatusPacket.class);
- this.registerIncoming(20, ClientPlayerChangeHeldItemPacket.class);
- this.registerIncoming(21, ClientCreativeInventoryActionPacket.class);
- this.registerIncoming(22, ClientUpdateSignPacket.class);
- this.registerIncoming(23, ClientPlayerSwingArmPacket.class);
- this.registerIncoming(24, ClientSpectatePacket.class);
- this.registerIncoming(25, ClientPlayerPlaceBlockPacket.class);
- this.registerIncoming(26, ClientPlayerUseItemPacket.class);
+ this.registerIncoming(0, ClientTeleportConfirmPacket.class);
+ this.registerIncoming(1, ClientTabCompletePacket.class);
+ this.registerIncoming(2, ClientChatPacket.class);
+ this.registerIncoming(3, ClientRequestPacket.class);
+ this.registerIncoming(4, ClientSettingsPacket.class);
+ this.registerIncoming(5, ClientConfirmTransactionPacket.class);
+ this.registerIncoming(6, ClientEnchantItemPacket.class);
+ this.registerIncoming(7, ClientWindowActionPacket.class);
+ this.registerIncoming(8, ClientCloseWindowPacket.class);
+ this.registerIncoming(9, ClientPluginMessagePacket.class);
+ this.registerIncoming(10, ClientPlayerInteractEntityPacket.class);
+ this.registerIncoming(11, ClientKeepAlivePacket.class);
+ this.registerIncoming(12, ClientPlayerPositionPacket.class);
+ this.registerIncoming(13, ClientPlayerPositionRotationPacket.class);
+ this.registerIncoming(14, ClientPlayerRotationPacket.class);
+ this.registerIncoming(15, ClientPlayerMovementPacket.class);
+ this.registerIncoming(16, ClientVehicleMovePacket.class);
+ this.registerIncoming(17, ClientSteerBoatPacket.class);
+ this.registerIncoming(18, ClientPlayerAbilitiesPacket.class);
+ this.registerIncoming(19, ClientPlayerActionPacket.class);
+ this.registerIncoming(20, ClientPlayerStatePacket.class);
+ this.registerIncoming(21, ClientSteerVehiclePacket.class);
+ this.registerIncoming(22, ClientResourcePackStatusPacket.class);
+ this.registerIncoming(23, ClientPlayerChangeHeldItemPacket.class);
+ this.registerIncoming(24, ClientCreativeInventoryActionPacket.class);
+ this.registerIncoming(25, ClientUpdateSignPacket.class);
+ this.registerIncoming(26, ClientPlayerSwingArmPacket.class);
+ this.registerIncoming(27, ClientSpectatePacket.class);
+ this.registerIncoming(28, ClientPlayerPlaceBlockPacket.class);
+ this.registerIncoming(29, ClientPlayerUseItemPacket.class);
this.registerOutgoing(0, ServerSpawnObjectPacket.class);
this.registerOutgoing(1, ServerSpawnExpOrbPacket.class);
@@ -470,23 +483,23 @@ public class MinecraftProtocol extends PacketProtocol {
this.registerOutgoing(22, ServerSetSlotPacket.class);
this.registerOutgoing(23, ServerSetCooldownPacket.class);
this.registerOutgoing(24, ServerPluginMessagePacket.class);
- this.registerOutgoing(25, ServerDisconnectPacket.class);
- this.registerOutgoing(26, ServerEntityStatusPacket.class);
- this.registerOutgoing(27, ServerExplosionPacket.class);
- this.registerOutgoing(28, ServerUnloadChunkPacket.class);
- this.registerOutgoing(29, ServerSetCompressionPacket.class);
+ this.registerOutgoing(25, ServerPlaySoundPacket.class);
+ this.registerOutgoing(26, ServerDisconnectPacket.class);
+ this.registerOutgoing(27, ServerEntityStatusPacket.class);
+ this.registerOutgoing(28, ServerExplosionPacket.class);
+ this.registerOutgoing(29, ServerUnloadChunkPacket.class);
this.registerOutgoing(30, ServerNotifyClientPacket.class);
this.registerOutgoing(31, ServerKeepAlivePacket.class);
this.registerOutgoing(32, ServerChunkDataPacket.class);
this.registerOutgoing(33, ServerPlayEffectPacket.class);
this.registerOutgoing(34, ServerSpawnParticlePacket.class);
- this.registerOutgoing(35, ServerPlaySoundPacket.class);
- this.registerOutgoing(36, ServerJoinGamePacket.class);
- this.registerOutgoing(37, ServerMapDataPacket.class);
- this.registerOutgoing(38, ServerEntityPositionPacket.class);
- this.registerOutgoing(39, ServerEntityPositionRotationPacket.class);
- this.registerOutgoing(40, ServerEntityRotationPacket.class);
- this.registerOutgoing(41, ServerEntityMovementPacket.class);
+ this.registerOutgoing(35, ServerJoinGamePacket.class);
+ this.registerOutgoing(36, ServerMapDataPacket.class);
+ this.registerOutgoing(37, ServerEntityPositionPacket.class);
+ this.registerOutgoing(38, ServerEntityPositionRotationPacket.class);
+ this.registerOutgoing(39, ServerEntityRotationPacket.class);
+ this.registerOutgoing(40, ServerEntityMovementPacket.class);
+ this.registerOutgoing(41, ServerVehicleMovePacket.class);
this.registerOutgoing(42, ServerOpenTileEntityEditorPacket.class);
this.registerOutgoing(43, ServerPlayerAbilitiesPacket.class);
this.registerOutgoing(44, ServerCombatPacket.class);
@@ -509,17 +522,19 @@ public class MinecraftProtocol extends PacketProtocol {
this.registerOutgoing(61, ServerPlayerSetExperiencePacket.class);
this.registerOutgoing(62, ServerPlayerHealthPacket.class);
this.registerOutgoing(63, ServerScoreboardObjectivePacket.class);
- this.registerOutgoing(64, ServerTeamPacket.class);
- this.registerOutgoing(65, ServerUpdateScorePacket.class);
- this.registerOutgoing(66, ServerSpawnPositionPacket.class);
- this.registerOutgoing(67, ServerUpdateTimePacket.class);
- this.registerOutgoing(68, ServerTitlePacket.class);
- this.registerOutgoing(69, ServerUpdateSignPacket.class);
- this.registerOutgoing(70, ServerPlayerListDataPacket.class);
- this.registerOutgoing(71, ServerEntityCollectItemPacket.class);
- this.registerOutgoing(72, ServerEntityTeleportPacket.class);
- this.registerOutgoing(73, ServerEntityPropertiesPacket.class);
- this.registerOutgoing(74, ServerEntityEffectPacket.class);
+ this.registerOutgoing(64, ServerEntitySetPassengersPacket.class);
+ this.registerOutgoing(65, ServerTeamPacket.class);
+ this.registerOutgoing(66, ServerUpdateScorePacket.class);
+ this.registerOutgoing(67, ServerSpawnPositionPacket.class);
+ this.registerOutgoing(68, ServerUpdateTimePacket.class);
+ this.registerOutgoing(69, ServerTitlePacket.class);
+ this.registerOutgoing(70, ServerUpdateSignPacket.class);
+ this.registerOutgoing(71, ServerPlaySoundEventPacket.class);
+ this.registerOutgoing(72, ServerPlayerListDataPacket.class);
+ this.registerOutgoing(73, ServerEntityCollectItemPacket.class);
+ this.registerOutgoing(74, ServerEntityTeleportPacket.class);
+ this.registerOutgoing(75, ServerEntityPropertiesPacket.class);
+ this.registerOutgoing(76, ServerEntityEffectPacket.class);
}
private void initClientStatus(Session session) {
diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/BossBarDivision.java b/src/main/java/org/spacehq/mc/protocol/data/game/BossBarDivision.java
new file mode 100644
index 00000000..7736aeb5
--- /dev/null
+++ b/src/main/java/org/spacehq/mc/protocol/data/game/BossBarDivision.java
@@ -0,0 +1,9 @@
+package org.spacehq.mc.protocol.data.game;
+
+public enum BossBarDivision {
+ NONE,
+ NOTCHES_6,
+ NOTCHES_10,
+ NOTCHES_12,
+ NOTCHES_20;
+}
diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/MagicValues.java b/src/main/java/org/spacehq/mc/protocol/data/game/MagicValues.java
index 9f2716cf..af6c12c6 100644
--- a/src/main/java/org/spacehq/mc/protocol/data/game/MagicValues.java
+++ b/src/main/java/org/spacehq/mc/protocol/data/game/MagicValues.java
@@ -1,27 +1,27 @@
package org.spacehq.mc.protocol.data.game;
-import org.spacehq.mc.protocol.data.game.entity.player.Hand;
-import org.spacehq.mc.protocol.data.game.entity.type.PaintingType;
-import org.spacehq.mc.protocol.data.game.entity.attribute.AttributeType;
import org.spacehq.mc.protocol.data.game.entity.Effect;
import org.spacehq.mc.protocol.data.game.entity.EntityStatus;
import org.spacehq.mc.protocol.data.game.entity.EquipmentSlot;
-import org.spacehq.mc.protocol.data.game.entity.type.GlobalEntityType;
-import org.spacehq.mc.protocol.data.game.entity.type.object.HangingDirection;
-import org.spacehq.mc.protocol.data.game.entity.metadata.MetadataType;
-import org.spacehq.mc.protocol.data.game.entity.type.object.MinecartType;
-import org.spacehq.mc.protocol.data.game.entity.type.MobType;
+import org.spacehq.mc.protocol.data.game.entity.attribute.AttributeType;
import org.spacehq.mc.protocol.data.game.entity.attribute.ModifierOperation;
import org.spacehq.mc.protocol.data.game.entity.attribute.ModifierType;
-import org.spacehq.mc.protocol.data.game.entity.type.object.ObjectType;
+import org.spacehq.mc.protocol.data.game.entity.metadata.MetadataType;
import org.spacehq.mc.protocol.data.game.entity.player.Animation;
import org.spacehq.mc.protocol.data.game.entity.player.BlockBreakStage;
import org.spacehq.mc.protocol.data.game.entity.player.CombatState;
import org.spacehq.mc.protocol.data.game.entity.player.GameMode;
+import org.spacehq.mc.protocol.data.game.entity.player.Hand;
import org.spacehq.mc.protocol.data.game.entity.player.InteractAction;
import org.spacehq.mc.protocol.data.game.entity.player.PlayerAction;
import org.spacehq.mc.protocol.data.game.entity.player.PlayerState;
import org.spacehq.mc.protocol.data.game.entity.player.PositionElement;
+import org.spacehq.mc.protocol.data.game.entity.type.GlobalEntityType;
+import org.spacehq.mc.protocol.data.game.entity.type.MobType;
+import org.spacehq.mc.protocol.data.game.entity.type.PaintingType;
+import org.spacehq.mc.protocol.data.game.entity.type.object.HangingDirection;
+import org.spacehq.mc.protocol.data.game.entity.type.object.MinecartType;
+import org.spacehq.mc.protocol.data.game.entity.type.object.ObjectType;
import org.spacehq.mc.protocol.data.game.scoreboard.CollisionRule;
import org.spacehq.mc.protocol.data.game.scoreboard.NameTagVisibility;
import org.spacehq.mc.protocol.data.game.scoreboard.ObjectiveAction;
@@ -47,7 +47,6 @@ import org.spacehq.mc.protocol.data.game.window.property.AnvilProperty;
import org.spacehq.mc.protocol.data.game.window.property.BrewingStandProperty;
import org.spacehq.mc.protocol.data.game.window.property.EnchantmentTableProperty;
import org.spacehq.mc.protocol.data.game.window.property.FurnaceProperty;
-import org.spacehq.mc.protocol.data.game.world.GenericSound;
import org.spacehq.mc.protocol.data.game.world.Particle;
import org.spacehq.mc.protocol.data.game.world.WorldBorderAction;
import org.spacehq.mc.protocol.data.game.world.WorldType;
@@ -64,6 +63,9 @@ import org.spacehq.mc.protocol.data.game.world.effect.SmokeEffectData;
import org.spacehq.mc.protocol.data.game.world.effect.SoundEffect;
import org.spacehq.mc.protocol.data.game.world.notify.ClientNotification;
import org.spacehq.mc.protocol.data.game.world.notify.DemoMessageValue;
+import org.spacehq.mc.protocol.data.game.world.sound.GenericSound;
+import org.spacehq.mc.protocol.data.game.world.sound.SoundCategory;
+import org.spacehq.mc.protocol.data.game.world.sound.SoundEvent;
import java.util.HashMap;
import java.util.Map;
@@ -97,6 +99,15 @@ public class MagicValues {
register(ModifierType.SLOW_POTION_MODIFIER, UUID.fromString("7107DE5E-7CE8-4030-940E-514C1F160890"));
register(ModifierType.STRENGTH_POTION_MODIFIER, UUID.fromString("648D7064-6A60-4F59-8ABE-C2C23A6DD7A9"));
register(ModifierType.WEAKNESS_POTION_MODIFIER, UUID.fromString("22653B89-116E-49DC-9B6B-9971489B5BE5"));
+ register(ModifierType.HASTE_POTION_MODIFIER, UUID.fromString("AF8B6E3F-3328-4C0A-AA36-5BA2BB9DBEF3"));
+ register(ModifierType.MINING_FATIGUE_POTION_MODIFIER, UUID.fromString("55FCED67-E92A-486E-9800-B47F202C4386"));
+ register(ModifierType.LUCK_POTION_MODIFIER, UUID.fromString("03C3C89D-7037-4B42-869F-B146BCB64D2E"));
+ register(ModifierType.UNLUCK_POTION_MODIFIER, UUID.fromString("CC5AF142-2BD2-4215-B636-2605AED11727"));
+ register(ModifierType.BOOTS_MODIFIER, UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"));
+ register(ModifierType.LEGGINGS_MODIFIER, UUID.fromString("D8499B04-0E66-4726-AB29-64469D734E0D"));
+ register(ModifierType.CHESTPLATE_MODIFIER, UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"));
+ register(ModifierType.HELMET_MODIFIER, UUID.fromString("2AD3F246-FEE1-4E67-B886-69FD380BB150"));
+ register(ModifierType.COVERED_ARMOR_BONUS, UUID.fromString("7E0292F2-9434-48D5-A29F-9583AF7DF27F"));
register(ModifierOperation.ADD, 0);
register(ModifierOperation.ADD_MULTIPLIED, 1);
@@ -926,6 +937,12 @@ public class MagicValues {
register(BossBarColor.PURPLE, 5);
register(BossBarColor.WHITE, 6);
+ register(BossBarDivision.NONE, 0);
+ register(BossBarDivision.NOTCHES_6, 1);
+ register(BossBarDivision.NOTCHES_10, 2);
+ register(BossBarDivision.NOTCHES_12, 3);
+ register(BossBarDivision.NOTCHES_20, 4);
+
register(BlockFace.DOWN, 0);
register(BlockFace.UP, 1);
register(BlockFace.NORTH, 2);
@@ -939,6 +956,22 @@ public class MagicValues {
register(EquipmentSlot.LEGGINGS, 3);
register(EquipmentSlot.CHESTPLATE, 4);
register(EquipmentSlot.HELMET, 5);
+
+ register(SoundCategory.MASTER, 0);
+ register(SoundCategory.MUSIC, 1);
+ register(SoundCategory.RECORD, 2);
+ register(SoundCategory.WEATHER, 3);
+ register(SoundCategory.BLOCK, 4);
+ register(SoundCategory.HOSTILE, 5);
+ register(SoundCategory.NEUTRAL, 6);
+ register(SoundCategory.PLAYER, 7);
+ register(SoundCategory.AMBIENT, 8);
+ register(SoundCategory.VOICE, 9);
+
+ int soundEventId = 0;
+ for(SoundEvent event : SoundEvent.values()) {
+ register(event, soundEventId++);
+ }
}
private static void register(Enum> key, Object value) {
@@ -962,7 +995,7 @@ public class MagicValues {
}
}
- throw new IllegalArgumentException("Value " + value + " has no mapping for key class " + keyType + ".");
+ throw new IllegalArgumentException("Value " + value + " has no mapping for key class " + keyType.getName() + ".");
}
@SuppressWarnings("unchecked")
@@ -988,7 +1021,7 @@ public class MagicValues {
}
}
- throw new IllegalArgumentException("Key " + key + " has no mapping for value class " + valueType + ".");
+ throw new IllegalArgumentException("Key " + key + " has no mapping for value class " + valueType.getName() + ".");
}
}
diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/entity/attribute/AttributeModifier.java b/src/main/java/org/spacehq/mc/protocol/data/game/entity/attribute/AttributeModifier.java
index 18c2b804..371aea69 100644
--- a/src/main/java/org/spacehq/mc/protocol/data/game/entity/attribute/AttributeModifier.java
+++ b/src/main/java/org/spacehq/mc/protocol/data/game/entity/attribute/AttributeModifier.java
@@ -12,6 +12,10 @@ public class AttributeModifier {
private ModifierOperation operation;
public AttributeModifier(ModifierType type, double amount, ModifierOperation operation) {
+ if(type == ModifierType.DYNAMIC) {
+ throw new IllegalArgumentException("Cannot create a dynamic-typed modifier without a UUID.");
+ }
+
this.type = type;
this.uuid = MagicValues.value(UUID.class, type);
this.amount = amount;
@@ -19,7 +23,12 @@ public class AttributeModifier {
}
public AttributeModifier(UUID uuid, double amount, ModifierOperation operation) {
- this.type = MagicValues.key(ModifierType.class, uuid);
+ try {
+ this.type = MagicValues.key(ModifierType.class, uuid);
+ } catch(IllegalArgumentException e) {
+ this.type = ModifierType.DYNAMIC;
+ }
+
this.uuid = uuid;
this.amount = amount;
this.operation = operation;
@@ -50,7 +59,7 @@ public class AttributeModifier {
if(Double.compare(that.amount, amount) != 0) return false;
if(operation != that.operation) return false;
- if(type != that.type) return false;
+ if(!type.equals(that.type)) return false;
return true;
}
diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/entity/attribute/ModifierType.java b/src/main/java/org/spacehq/mc/protocol/data/game/entity/attribute/ModifierType.java
index 34532260..061a2b13 100644
--- a/src/main/java/org/spacehq/mc/protocol/data/game/entity/attribute/ModifierType.java
+++ b/src/main/java/org/spacehq/mc/protocol/data/game/entity/attribute/ModifierType.java
@@ -1,6 +1,7 @@
package org.spacehq.mc.protocol.data.game.entity.attribute;
public enum ModifierType {
+ DYNAMIC,
CREATURE_FLEE_SPEED_BONUS,
ENDERMAN_ATTACK_SPEED_BOOST,
@@ -14,6 +15,14 @@ public enum ModifierType {
HEALTH_BOOST_POTION_MODIFIER,
SLOW_POTION_MODIFIER,
STRENGTH_POTION_MODIFIER,
- WEAKNESS_POTION_MODIFIER;
-
+ WEAKNESS_POTION_MODIFIER,
+ HASTE_POTION_MODIFIER,
+ MINING_FATIGUE_POTION_MODIFIER,
+ LUCK_POTION_MODIFIER,
+ UNLUCK_POTION_MODIFIER,
+ BOOTS_MODIFIER,
+ LEGGINGS_MODIFIER,
+ CHESTPLATE_MODIFIER,
+ HELMET_MODIFIER,
+ COVERED_ARMOR_BONUS;
}
diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/world/Sound.java b/src/main/java/org/spacehq/mc/protocol/data/game/world/Sound.java
deleted file mode 100644
index 3b9309f8..00000000
--- a/src/main/java/org/spacehq/mc/protocol/data/game/world/Sound.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.spacehq.mc.protocol.data.game.world;
-
-public interface Sound {
-}
diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/world/CustomSound.java b/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/CustomSound.java
similarity index 91%
rename from src/main/java/org/spacehq/mc/protocol/data/game/world/CustomSound.java
rename to src/main/java/org/spacehq/mc/protocol/data/game/world/sound/CustomSound.java
index 7fc66cfb..8ba20be4 100644
--- a/src/main/java/org/spacehq/mc/protocol/data/game/world/CustomSound.java
+++ b/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/CustomSound.java
@@ -1,4 +1,4 @@
-package org.spacehq.mc.protocol.data.game.world;
+package org.spacehq.mc.protocol.data.game.world.sound;
public class CustomSound implements Sound {
diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/world/GenericSound.java b/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/GenericSound.java
similarity index 98%
rename from src/main/java/org/spacehq/mc/protocol/data/game/world/GenericSound.java
rename to src/main/java/org/spacehq/mc/protocol/data/game/world/sound/GenericSound.java
index 79126e4f..26292e45 100644
--- a/src/main/java/org/spacehq/mc/protocol/data/game/world/GenericSound.java
+++ b/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/GenericSound.java
@@ -1,4 +1,4 @@
-package org.spacehq.mc.protocol.data.game.world;
+package org.spacehq.mc.protocol.data.game.world.sound;
public enum GenericSound implements Sound {
diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/Sound.java b/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/Sound.java
new file mode 100644
index 00000000..81efb602
--- /dev/null
+++ b/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/Sound.java
@@ -0,0 +1,4 @@
+package org.spacehq.mc.protocol.data.game.world.sound;
+
+public interface Sound {
+}
diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/SoundCategory.java b/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/SoundCategory.java
new file mode 100644
index 00000000..fe8bd12b
--- /dev/null
+++ b/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/SoundCategory.java
@@ -0,0 +1,14 @@
+package org.spacehq.mc.protocol.data.game.world.sound;
+
+public enum SoundCategory {
+ MASTER,
+ MUSIC,
+ RECORD,
+ WEATHER,
+ BLOCK,
+ HOSTILE,
+ NEUTRAL,
+ PLAYER,
+ AMBIENT,
+ VOICE;
+}
diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/SoundEvent.java b/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/SoundEvent.java
new file mode 100644
index 00000000..03f445e5
--- /dev/null
+++ b/src/main/java/org/spacehq/mc/protocol/data/game/world/sound/SoundEvent.java
@@ -0,0 +1,436 @@
+package org.spacehq.mc.protocol.data.game.world.sound;
+
+public enum SoundEvent {
+ AMBIENT_CAVE,
+ BLOCK_ANVIL_BREAK,
+ BLOCK_ANVIL_DESTROY,
+ BLOCK_ANVIL_FALL,
+ BLOCK_ANVIL_HIT,
+ BLOCK_ANVIL_LAND,
+ BLOCK_ANVIL_PLACE,
+ BLOCK_ANVIL_STEP,
+ BLOCK_ANVIL_USE,
+ BLOCK_BREWING_STAND_BREW,
+ BLOCK_CHEST_CLOSE,
+ BLOCK_CHEST_LOCKED,
+ BLOCK_CHEST_OPEN,
+ BLOCK_CHORUS_FLOWER_DEATH,
+ BLOCK_CHORUS_FLOWER_GROW,
+ BLOCK_CLOTH_BREAK,
+ BLOCK_CLOTH_FALL,
+ BLOCK_CLOTH_HIT,
+ BLOCK_CLOTH_PLACE,
+ BLOCK_CLOTH_STEP,
+ BLOCK_COMPARATOR_CLICK,
+ BLOCK_DISPENSER_DISPENSE,
+ BLOCK_DISPENSER_FAIL,
+ BLOCK_DISPENSER_LAUNCH,
+ BLOCK_END_GATEWAY_SPAWN,
+ BLOCK_ENDERCHEST_CLOSE,
+ BLOCK_ENDERCHEST_OPEN,
+ BLOCK_FENCE_GATE_CLOSE,
+ BLOCK_FENCE_GATE_OPEN,
+ BLOCK_FIRE_AMBIENT,
+ BLOCK_FIRE_EXTINGUISH,
+ BLOCK_FURNACE_FIRE_CRACKLE,
+ BLOCK_GLASS_BREAK,
+ BLOCK_GLASS_FALL,
+ BLOCK_GLASS_HIT,
+ BLOCK_GLASS_PLACE,
+ BLOCK_GLASS_STEP,
+ BLOCK_GRASS_BREAK,
+ BLOCK_GRASS_FALL,
+ BLOCK_GRASS_HIT,
+ BLOCK_GRASS_PLACE,
+ BLOCK_GRASS_STEP,
+ BLOCK_GRAVEL_BREAK,
+ BLOCK_GRAVEL_FALL,
+ BLOCK_GRAVEL_HIT,
+ BLOCK_GRAVEL_PLACE,
+ BLOCK_GRAVEL_STEP,
+ BLOCK_IRON_DOOR_CLOSE,
+ BLOCK_IRON_DOOR_OPEN,
+ BLOCK_IRON_TRAPDOOR_CLOSE,
+ BLOCK_IRON_TRAPDOOR_OPEN,
+ BLOCK_LADDER_BREAK,
+ BLOCK_LADDER_FALL,
+ BLOCK_LADDER_HIT,
+ BLOCK_LADDER_PLACE,
+ BLOCK_LADDER_STEP,
+ BLOCK_LAVA_AMBIENT,
+ BLOCK_LAVA_EXTINGUISH,
+ BLOCK_LAVA_POP,
+ BLOCK_LEVER_CLICK,
+ BLOCK_METAL_BREAK,
+ BLOCK_METAL_FALL,
+ BLOCK_METAL_HIT,
+ BLOCK_METAL_PLACE,
+ BLOCK_METAL_STEP,
+ BLOCK_METAL_PRESSUREPLATE_CLICK_OFF,
+ BLOCK_METAL_PRESSUREPLATE_CLICK_ON,
+ BLOCK_NOTE_BASEDRUM,
+ BLOCK_NOTE_BASS,
+ BLOCK_NOTE_HARP,
+ BLOCK_NOTE_HAT,
+ BLOCK_NOTE_SNARE,
+ BLOCK_PISTON_CONTRACT,
+ BLOCK_PISTON_EXTEND,
+ BLOCK_PORTAL_AMBIENT,
+ BLOCK_PORTAL_TRAVEL,
+ BLOCK_PORTAL_TRIGGER,
+ BLOCK_REDSTONE_TORCH_BURNOUT,
+ BLOCK_SAND_BREAK,
+ BLOCK_SAND_FALL,
+ BLOCK_SAND_HIT,
+ BLOCK_SAND_PLACE,
+ BLOCK_SAND_STEP,
+ BLOCK_SLIME_BREAK,
+ BLOCK_SLIME_FALL,
+ BLOCK_SLIME_HIT,
+ BLOCK_SLIME_PLACE,
+ BLOCK_SLIME_STEP,
+ BLOCK_SNOW_BREAK,
+ BLOCK_SNOW_FALL,
+ BLOCK_SNOW_HIT,
+ BLOCK_SNOW_PLACE,
+ BLOCK_SNOW_STEP,
+ BLOCK_STONE_BREAK,
+ BLOCK_STONE_FALL,
+ BLOCK_STONE_HIT,
+ BLOCK_STONE_PLACE,
+ BLOCK_STONE_STEP,
+ BLOCK_STONE_BUTTON_CLICK_OFF,
+ BLOCK_STONE_BUTTON_CLICK_ON,
+ BLOCK_STONE_PRESSUREPLATE_CLICK_OFF,
+ BLOCK_STONE_PRESSUREPLATE_CLICK_ON,
+ BLOCK_TRIPWIRE_ATTACH,
+ BLOCK_TRIPWIRE_CLICK_OFF,
+ BLOCK_TRIPWIRE_CLICK_ON,
+ BLOCK_TRIPWIRE_DETACH,
+ BLOCK_WATER_AMBIENT,
+ BLOCK_WATERLILY_PLACE,
+ BLOCK_WOOD_BREAK,
+ BLOCK_WOOD_FALL,
+ BLOCK_WOOD_HIT,
+ BLOCK_WOOD_PLACE,
+ BLOCK_WOOD_STEP,
+ BLOCK_WOOD_BUTTON_CLICK_OFF,
+ BLOCK_WOOD_BUTTON_CLICK_ON,
+ BLOCK_WOOD_PRESSUREPLATE_CLICK_OFF,
+ BLOCK_WOOD_PRESSUREPLATE_CLICK_ON,
+ BLOCK_WOODEN_DOOR_CLOSE,
+ BLOCK_WOODEN_DOOR_OPEN,
+ BLOCK_WOODEN_TRAPDOOR_CLOSE,
+ BLOCK_WOODEN_TRAPDOOR_OPEN,
+ ENCHANT_THORNS_HIT,
+ ENTITY_ARMORSTAND_BREAK,
+ ENTITY_ARMORSTAND_FALL,
+ ENTITY_ARMORSTAND_HIT,
+ ENTITY_ARMORSTAND_PLACE,
+ ENTITY_ARROW_HIT,
+ ENTITY_ARROW_HIT_PLAYER,
+ ENTITY_ARROW_SHOOT,
+ ENTITY_BAT_AMBIENT,
+ ENTITY_BAT_DEATH,
+ ENTITY_BAT_HURT,
+ ENTITY_BAT_TAKEOFF,
+ ENTITY_BLAZE_AMBIENT,
+ ENTITY_BLAZE_BURN,
+ ENTITY_BLAZE_DEATH,
+ ENTITY_BLAZE_HURT,
+ ENTITY_BLAZE_SHOOT,
+ ENTITY_BOBBER_SPLASH,
+ ENTITY_BOBBER_THROW,
+ ENTITY_CAT_AMBIENT,
+ ENTITY_CAT_DEATH,
+ ENTITY_CAT_HURT,
+ ENTITY_CAT_PURR,
+ ENTITY_CAT_PURREOW,
+ ENTITY_CHICKEN_AMBIENT,
+ ENTITY_CHICKEN_DEATH,
+ ENTITY_CHICKEN_EGG,
+ ENTITY_CHICKEN_HURT,
+ ENTITY_CHICKEN_STEP,
+ ENTITY_COW_AMBIENT,
+ ENTITY_COW_DEATH,
+ ENTITY_COW_HURT,
+ ENTITY_COW_MILK,
+ ENTITY_COW_STEP,
+ ENTITY_CREEPER_DEATH,
+ ENTITY_CREEPER_HURT,
+ ENTITY_CREEPER_PRIMED,
+ ENTITY_DONKEY_AMBIENT,
+ ENTITY_DONKEY_ANGRY,
+ ENTITY_DONKEY_CHEST,
+ ENTITY_DONKEY_DEATH,
+ ENTITY_DONKEY_HURT,
+ ENTITY_EGG_THROW,
+ ENTITY_ELDER_GUARDIAN_AMBIENT,
+ ENTITY_ELDER_GUARDIAN_AMBIENT_LAND,
+ ENTITY_ELDER_GUARDIAN_CURSE,
+ ENTITY_ELDER_GUARDIAN_DEATH,
+ ENTITY_ELDER_GUARDIAN_DEATH_LAND,
+ ENTITY_ELDER_GUARDIAN_HURT,
+ ENTITY_ELDER_GUARDIAN_HURT_LAND,
+ ENTITY_ENDERDRAGON_AMBIENT,
+ ENTITY_ENDERDRAGON_DEATH,
+ ENTITY_ENDERDRAGON_FLAP,
+ ENTITY_ENDERDRAGON_GROWL,
+ ENTITY_ENDERDRAGON_HURT,
+ ENTITY_ENDERDRAGON_SHOOT,
+ ENTITY_ENDERDRAGON_FIREBALL_EXPLODE,
+ ENTITY_ENDEREYE_LAUNCH,
+ ENTITY_ENDERMEN_AMBIENT,
+ ENTITY_ENDERMEN_DEATH,
+ ENTITY_ENDERMEN_HURT,
+ ENTITY_ENDERMEN_SCREAM,
+ ENTITY_ENDERMEN_STARE,
+ ENTITY_ENDERMEN_TELEPORT,
+ ENTITY_ENDERMITE_AMBIENT,
+ ENTITY_ENDERMITE_DEATH,
+ ENTITY_ENDERMITE_HURT,
+ ENTITY_ENDERMITE_STEP,
+ ENTITY_ENDERPEARL_THROW,
+ ENTITY_EXPERIENCE_BOTTLE_THROW,
+ ENTITY_EXPERIENCE_ORB_PICKUP,
+ ENTITY_EXPERIENCE_ORB_TOUCH,
+ ENTITY_FIREWORK_BLAST,
+ ENTITY_FIREWORK_BLAST_FAR,
+ ENTITY_FIREWORK_LARGE_BLAST,
+ ENTITY_FIREWORK_LARGE_BLAST_FAR,
+ ENTITY_FIREWORK_LAUNCH,
+ ENTITY_FIREWORK_SHOOT,
+ ENTITY_FIREWORK_TWINKLE,
+ ENTITY_FIREWORK_TWINKLE_FAR,
+ ENTITY_GENERIC_BIG_FALL,
+ ENTITY_GENERIC_BURN,
+ ENTITY_GENERIC_DEATH,
+ ENTITY_GENERIC_DRINK,
+ ENTITY_GENERIC_EAT,
+ ENTITY_GENERIC_EXPLODE,
+ ENTITY_GENERIC_EXTINGUISH_FIRE,
+ ENTITY_GENERIC_HURT,
+ ENTITY_GENERIC_SMALL_FALL,
+ ENTITY_GENERIC_SPLASH,
+ ENTITY_GENERIC_SWIM,
+ ENTITY_GHAST_AMBIENT,
+ ENTITY_GHAST_DEATH,
+ ENTITY_GHAST_HURT,
+ ENTITY_GHAST_SHOOT,
+ ENTITY_GHAST_WARN,
+ ENTITY_GUARDIAN_AMBIENT,
+ ENTITY_GUARDIAN_AMBIENT_LAND,
+ ENTITY_GUARDIAN_ATTACK,
+ ENTITY_GUARDIAN_DEATH,
+ ENTITY_GUARDIAN_DEATH_LAND,
+ ENTITY_GUARDIAN_FLOP,
+ ENTITY_GUARDIAN_HURT,
+ ENTITY_GUARDIAN_HURT_LAND,
+ ENTITY_HORSE_AMBIENT,
+ ENTITY_HORSE_ANGRY,
+ ENTITY_HORSE_ARMOR,
+ ENTITY_HORSE_BREATHE,
+ ENTITY_HORSE_DEATH,
+ ENTITY_HORSE_EAT,
+ ENTITY_HORSE_GALLOP,
+ ENTITY_HORSE_HURT,
+ ENTITY_HORSE_JUMP,
+ ENTITY_HORSE_LAND,
+ ENTITY_HORSE_SADDLE,
+ ENTITY_HORSE_STEP,
+ ENTITY_HORSE_STEP_WOOD,
+ ENTITY_HOSTILE_BIG_FALL,
+ ENTITY_HOSTILE_DEATH,
+ ENTITY_HOSTILE_HURT,
+ ENTITY_HOSTILE_SMALL_FALL,
+ ENTITY_HOSTILE_SPLASH,
+ ENTITY_HOSTILE_SWIM,
+ ENTITY_IRONGOLEM_ATTACK,
+ ENTITY_IRONGOLEM_DEATH,
+ ENTITY_IRONGOLEM_HURT,
+ ENTITY_IRONGOLEM_STEP,
+ ENTITY_ITEM_BREAK,
+ ENTITY_ITEM_PICKUP,
+ ENTITY_ITEMFRAME_ADD_ITEM,
+ ENTITY_ITEMFRAME_BREAK,
+ ENTITY_ITEMFRAME_PLACE,
+ ENTITY_ITEMFRAME_REMOVE_ITEM,
+ ENTITY_ITEMFRAME_ROTATE_ITEM,
+ ENTITY_LEASHKNOT_BREAK,
+ ENTITY_LEASHKNOT_PLACE,
+ ENTITY_LIGHTNING_IMPACT,
+ ENTITY_LIGHTNING_THUNDER,
+ ENTITY_LINGERINGPOTION_THROW,
+ ENTITY_MAGMACUBE_DEATH,
+ ENTITY_MAGMACUBE_HURT,
+ ENTITY_MAGMACUBE_JUMP,
+ ENTITY_MAGMACUBE_SQUISH,
+ ENTITY_MINECART_INSIDE,
+ ENTITY_MINECART_RIDING,
+ ENTITY_MOOSHROOM_SHEAR,
+ ENTITY_MULE_AMBIENT,
+ ENTITY_MULE_DEATH,
+ ENTITY_MULE_HURT,
+ ENTITY_PAINTING_BREAK,
+ ENTITY_PAINTING_PLACE,
+ ENTITY_PIG_AMBIENT,
+ ENTITY_PIG_DEATH,
+ ENTITY_PIG_HURT,
+ ENTITY_PIG_SADDLE,
+ ENTITY_PIG_STEP,
+ ENTITY_PLAYER_ATTACK_CRIT,
+ ENTITY_PLAYER_ATTACK_KNOCKBACK,
+ ENTITY_PLAYER_ATTACK_NODAMAGE,
+ ENTITY_PLAYER_ATTACK_STRONG,
+ ENTITY_PLAYER_ATTACK_SWEEP,
+ ENTITY_PLAYER_ATTACK_WEAK,
+ ENTITY_PLAYER_BIG_FALL,
+ ENTITY_PLAYER_BURP,
+ ENTITY_PLAYER_DEATH,
+ ENTITY_PLAYER_HURT,
+ ENTITY_PLAYER_LEVELUP,
+ ENTITY_PLAYER_SMALL_FALL,
+ ENTITY_PLAYER_SPLASH,
+ ENTITY_PLAYER_SWIM,
+ ENTITY_RABBIT_AMBIENT,
+ ENTITY_RABBIT_ATTACK,
+ ENTITY_RABBIT_DEATH,
+ ENTITY_RABBIT_HURT,
+ ENTITY_RABBIT_JUMP,
+ ENTITY_SHEEP_AMBIENT,
+ ENTITY_SHEEP_DEATH,
+ ENTITY_SHEEP_HURT,
+ ENTITY_SHEEP_SHEAR,
+ ENTITY_SHEEP_STEP,
+ ENTITY_SHIELD_BLOCK,
+ ENTITY_SHIELD_BREAK,
+ ENTITY_SHULKER_AMBIENT,
+ ENTITY_SHULKER_CLOSE,
+ ENTITY_SHULKER_DEATH,
+ ENTITY_SHULKER_HURT,
+ ENTITY_SHULKER_HURT_CLOSED,
+ ENTITY_SHULKER_OPEN,
+ ENTITY_SHULKER_SHOOT,
+ ENTITY_SHULKER_TELEPORT,
+ ENTITY_SHULKER_BULLET_HIT,
+ ENTITY_SHULKER_BULLET_HURT,
+ ENTITY_SILVERFISH_AMBIENT,
+ ENTITY_SILVERFISH_DEATH,
+ ENTITY_SILVERFISH_HURT,
+ ENTITY_SILVERFISH_STEP,
+ ENTITY_SKELETON_AMBIENT,
+ ENTITY_SKELETON_DEATH,
+ ENTITY_SKELETON_HURT,
+ ENTITY_SKELETON_SHOOT,
+ ENTITY_SKELETON_STEP,
+ ENTITY_SKELETON_HORSE_AMBIENT,
+ ENTITY_SKELETON_HORSE_DEATH,
+ ENTITY_SKELETON_HORSE_HURT,
+ ENTITY_SLIME_ATTACK,
+ ENTITY_SLIME_DEATH,
+ ENTITY_SLIME_HURT,
+ ENTITY_SLIME_JUMP,
+ ENTITY_SLIME_SQUISH,
+ ENTITY_SMALL_MAGMACUBE_DEATH,
+ ENTITY_SMALL_MAGMACUBE_HURT,
+ ENTITY_SMALL_MAGMACUBE_SQUISH,
+ ENTITY_SMALL_SLIME_DEATH,
+ ENTITY_SMALL_SLIME_HURT,
+ ENTITY_SMALL_SLIME_SQUISH,
+ ENTITY_SNOWBALL_THROW,
+ ENTITY_SNOWMAN_AMBIENT,
+ ENTITY_SNOWMAN_DEATH,
+ ENTITY_SNOWMAN_HURT,
+ ENTITY_SNOWMAN_SHOOT,
+ ENTITY_SPIDER_AMBIENT,
+ ENTITY_SPIDER_DEATH,
+ ENTITY_SPIDER_HURT,
+ ENTITY_SPIDER_STEP,
+ ENTITY_SPLASH_POTION_BREAK,
+ ENTITY_SPLASH_POTION_THROW,
+ ENTITY_SQUID_AMBIENT,
+ ENTITY_SQUID_DEATH,
+ ENTITY_SQUID_HURT,
+ ENTITY_TNT_PRIMED,
+ ENTITY_VILLAGER_AMBIENT,
+ ENTITY_VILLAGER_DEATH,
+ ENTITY_VILLAGER_HURT,
+ ENTITY_VILLAGER_NO,
+ ENTITY_VILLAGER_TRADING,
+ ENTITY_VILLAGER_YES,
+ ENTITY_WITCH_AMBIENT,
+ ENTITY_WITCH_DEATH,
+ ENTITY_WITCH_DRINK,
+ ENTITY_WITCH_HURT,
+ ENTITY_WITCH_THROW,
+ ENTITY_WITHER_AMBIENT,
+ ENTITY_WITHER_BREAK_BLOCK,
+ ENTITY_WITHER_DEATH,
+ ENTITY_WITHER_HURT,
+ ENTITY_WITHER_SHOOT,
+ ENTITY_WITHER_SPAWN,
+ ENTITY_WOLF_AMBIENT,
+ ENTITY_WOLF_DEATH,
+ ENTITY_WOLF_GROWL,
+ ENTITY_WOLF_HURT,
+ ENTITY_WOLF_PANT,
+ ENTITY_WOLF_SHAKE,
+ ENTITY_WOLF_STEP,
+ ENTITY_WOLF_WHINE,
+ ENTITY_ZOMBIE_AMBIENT,
+ ENTITY_ZOMBIE_ATTACK_DOOR_WOOD,
+ ENTITY_ZOMBIE_ATTACK_IRON_DOOR,
+ ENTITY_ZOMBIE_BREAK_DOOR_WOOD,
+ ENTITY_ZOMBIE_CURE,
+ ENTITY_ZOMBIE_DEATH,
+ ENTITY_ZOMBIE_HURT,
+ ENTITY_ZOMBIE_INFECT,
+ ENTITY_ZOMBIE_STEP,
+ ENTITY_ZOMBIE_UNFECT,
+ ENTITY_ZOMBIE_HORSE_AMBIENT,
+ ENTITY_ZOMBIE_HORSE_DEATH,
+ ENTITY_ZOMBIE_HORSE_HURT,
+ ENTITY_ZOMBIE_PIG_AMBIENT,
+ ENTITY_ZOMBIE_PIG_ANGRY,
+ ENTITY_ZOMBIE_PIG_DEATH,
+ ENTITY_ZOMBIE_PIG_HURT,
+ ITEM_ARMOR_EQUIP_CHAIN,
+ ITEM_ARMOR_EQUIP_DIAMOND,
+ ITEM_ARMOR_EQUIP_GENERIC,
+ ITEM_ARMOR_EQUIP_GOLD,
+ ITEM_ARMOR_EQUIP_IRON,
+ ITEM_ARMOR_EQUIP_LEATHER,
+ ITEM_BOTTLE_FILL,
+ ITEM_BOTTLE_FILL_DRAGONBREATH,
+ ITEM_BUCKET_EMPTY,
+ ITEM_BUCKET_EMPTY_LAVA,
+ ITEM_BUCKET_FILL,
+ ITEM_BUCKET_FILL_LAVA,
+ ITEM_CHORUS_FRUIT_TELEPORT,
+ ITEM_FIRECHARGE_USE,
+ ITEM_FLINTANDSTEEL_USE,
+ ITEM_HOE_TILL,
+ ITEM_SHOVEL_FLATTEN,
+ MUSIC_CREATIVE,
+ MUSIC_CREDITS,
+ MUSIC_DRAGON,
+ MUSIC_END,
+ MUSIC_GAME,
+ MUSIC_MENU,
+ MUSIC_NETHER,
+ RECORD_11,
+ RECORD_13,
+ RECORD_BLOCKS,
+ RECORD_CAT,
+ RECORD_CHIRP,
+ RECORD_FAR,
+ RECORD_MALL,
+ RECORD_MELLOHI,
+ RECORD_STAL,
+ RECORD_STRAD,
+ RECORD_WAIT,
+ RECORD_WARD,
+ UI_BUTTON_CLICK,
+ WEATHER_RAIN,
+ WEATHER_RAIN_ABOVE;
+}
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/ClientTabCompletePacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/ClientTabCompletePacket.java
index ed667ed4..ce70b4e3 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/ClientTabCompletePacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/ClientTabCompletePacket.java
@@ -11,37 +11,49 @@ import java.io.IOException;
public class ClientTabCompletePacket implements Packet {
private String text;
- private Position position;
+ private boolean assumeCommand;
+ private Position lookingAt;
@SuppressWarnings("unused")
private ClientTabCompletePacket() {
}
- public ClientTabCompletePacket(String text) {
- this(text, null);
+ public ClientTabCompletePacket(String text, boolean assumeCommand) {
+ this(text, assumeCommand, null);
}
- public ClientTabCompletePacket(String text, Position position) {
+ public ClientTabCompletePacket(String text, boolean assumeCommand, Position lookingAt) {
this.text = text;
- this.position = position;
+ this.assumeCommand = assumeCommand;
+ this.lookingAt = lookingAt;
}
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.text = in.readString();
- this.position = in.readBoolean() ? NetUtil.readPosition(in) : null;
+ this.assumeCommand = in.readBoolean();
+ this.lookingAt = in.readBoolean() ? NetUtil.readPosition(in) : null;
}
@Override
public void write(NetOutput out) throws IOException {
out.writeString(this.text);
- out.writeBoolean(this.position != null);
- if(this.position != null) {
- NetUtil.writePosition(out, this.position);
+ out.writeBoolean(this.assumeCommand);
+ out.writeBoolean(this.lookingAt != null);
+ if(this.lookingAt != null) {
+ NetUtil.writePosition(out, this.lookingAt);
}
}
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/world/ClientSteerBoatPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/world/ClientSteerBoatPacket.java
new file mode 100644
index 00000000..a343631c
--- /dev/null
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/world/ClientSteerBoatPacket.java
@@ -0,0 +1,48 @@
+package org.spacehq.mc.protocol.packet.ingame.client.world;
+
+import org.spacehq.packetlib.io.NetInput;
+import org.spacehq.packetlib.io.NetOutput;
+import org.spacehq.packetlib.packet.Packet;
+
+import java.io.IOException;
+
+public class ClientSteerBoatPacket implements Packet {
+
+ private boolean unk1;
+ private boolean unk2;
+
+ @SuppressWarnings("unused")
+ private ClientSteerBoatPacket() {
+ }
+
+ public ClientSteerBoatPacket(boolean unk1, boolean unk2) {
+ this.unk1 = unk1;
+ this.unk2 = unk2;
+ }
+
+ public boolean getUnknown1() {
+ return this.unk1;
+ }
+
+ public boolean getUnknown2() {
+ return this.unk2;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.unk1 = in.readBoolean();
+ this.unk2 = in.readBoolean();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeBoolean(this.unk1);
+ out.writeBoolean(this.unk2);
+ }
+
+ @Override
+ public boolean isPriority() {
+ return false;
+ }
+
+}
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/world/ClientTeleportConfirmPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/world/ClientTeleportConfirmPacket.java
new file mode 100644
index 00000000..6b936b19
--- /dev/null
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/world/ClientTeleportConfirmPacket.java
@@ -0,0 +1,38 @@
+package org.spacehq.mc.protocol.packet.ingame.client.world;
+
+import org.spacehq.packetlib.io.NetInput;
+import org.spacehq.packetlib.io.NetOutput;
+import org.spacehq.packetlib.packet.Packet;
+
+import java.io.IOException;
+
+public class ClientTeleportConfirmPacket implements Packet {
+ private int id;
+
+ @SuppressWarnings("unused")
+ private ClientTeleportConfirmPacket() {
+ }
+
+ public ClientTeleportConfirmPacket(int id) {
+ this.id = id;
+ }
+
+ public int getTeleportId() {
+ return this.id;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.id = in.readVarInt();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.id);
+ }
+
+ @Override
+ public boolean isPriority() {
+ return false;
+ }
+}
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/world/ClientVehicleMovePacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/world/ClientVehicleMovePacket.java
new file mode 100644
index 00000000..5984556f
--- /dev/null
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/world/ClientVehicleMovePacket.java
@@ -0,0 +1,70 @@
+package org.spacehq.mc.protocol.packet.ingame.client.world;
+
+import org.spacehq.packetlib.io.NetInput;
+import org.spacehq.packetlib.io.NetOutput;
+import org.spacehq.packetlib.packet.Packet;
+
+import java.io.IOException;
+
+public class ClientVehicleMovePacket implements Packet {
+ private double x;
+ private double y;
+ private double z;
+ private float yaw;
+ private float pitch;
+
+ @SuppressWarnings("unused")
+ private ClientVehicleMovePacket() {
+ }
+
+ public ClientVehicleMovePacket(double x, double y, double z, float yaw, float pitch) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.yaw = yaw;
+ this.pitch = pitch;
+ }
+
+ public double getX() {
+ return this.x;
+ }
+
+ public double getY() {
+ return this.y;
+ }
+
+ public double getZ() {
+ return this.z;
+ }
+
+ public float getYaw() {
+ return this.yaw;
+ }
+
+ public float getPitch() {
+ return this.pitch;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.x = in.readDouble();
+ this.y = in.readDouble();
+ this.z = in.readDouble();
+ this.yaw = in.readFloat();
+ this.pitch = in.readFloat();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeDouble(this.x);
+ out.writeDouble(this.y);
+ out.writeDouble(this.z);
+ out.writeFloat(this.yaw);
+ out.writeFloat(this.pitch);
+ }
+
+ @Override
+ public boolean isPriority() {
+ return false;
+ }
+}
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/ServerBossBarPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/ServerBossBarPacket.java
index 0149d4fc..e1b8a1b0 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/ServerBossBarPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/ServerBossBarPacket.java
@@ -2,6 +2,7 @@ package org.spacehq.mc.protocol.packet.ingame.server;
import org.spacehq.mc.protocol.data.game.BossBarAction;
import org.spacehq.mc.protocol.data.game.BossBarColor;
+import org.spacehq.mc.protocol.data.game.BossBarDivision;
import org.spacehq.mc.protocol.data.game.MagicValues;
import org.spacehq.mc.protocol.data.message.Message;
import org.spacehq.packetlib.io.NetInput;
@@ -18,22 +19,24 @@ public class ServerBossBarPacket implements Packet {
private Message title;
private float health;
private BossBarColor color;
- private int dividers;
- private int flags;
+ private BossBarDivision division;
+ private boolean darkenSky;
+ private boolean dragonBar;
@SuppressWarnings("unused")
private ServerBossBarPacket() {
}
- public ServerBossBarPacket(UUID uuid, BossBarAction action, Message title, float health, BossBarColor color, int dividers, int flags) {
+ public ServerBossBarPacket(UUID uuid, BossBarAction action, Message title, float health, BossBarColor color, BossBarDivision division, boolean darkenSky, boolean dragonBar) {
this.uuid = uuid;
this.action = BossBarAction.ADD;
this.title = title;
this.health = health;
this.color = color;
- this.dividers = dividers;
- this.flags = flags;
+ this.division = division;
+ this.darkenSky = darkenSky;
+ this.dragonBar = dragonBar;
}
public ServerBossBarPacket(UUID uuid) {
@@ -55,19 +58,20 @@ public class ServerBossBarPacket implements Packet {
this.title = title;
}
- public ServerBossBarPacket(UUID uuid, BossBarAction action, BossBarColor color, int dividers) {
+ public ServerBossBarPacket(UUID uuid, BossBarAction action, BossBarColor color, BossBarDivision division) {
this.uuid = uuid;
this.action = BossBarAction.UPDATE_STYLE;
this.color = color;
- this.dividers = dividers;
+ this.division = division;
}
- public ServerBossBarPacket(UUID uuid, BossBarAction action, int flags) {
+ public ServerBossBarPacket(UUID uuid, BossBarAction action, boolean darkenSky, boolean dragonBar) {
this.uuid = uuid;
this.action = BossBarAction.UPDATE_FLAGS;
- this.flags = flags;
+ this.darkenSky = darkenSky;
+ this.dragonBar = dragonBar;
}
public UUID getUUID() {
@@ -90,12 +94,16 @@ public class ServerBossBarPacket implements Packet {
return this.color;
}
- public int getDividers() {
- return this.dividers;
+ public BossBarDivision getDivision() {
+ return this.division;
}
- public int getFlags() {
- return this.flags;
+ public boolean getDarkenSky() {
+ return this.darkenSky;
+ }
+
+ public boolean isDragonBar() {
+ return this.dragonBar;
}
@Override
@@ -113,11 +121,13 @@ public class ServerBossBarPacket implements Packet {
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_STYLE) {
this.color = MagicValues.key(BossBarColor.class, in.readVarInt());
- this.dividers = in.readVarInt();
+ this.division = MagicValues.key(BossBarDivision.class, in.readVarInt());
}
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_FLAGS) {
- this.flags = in.readUnsignedByte();
+ int flags = in.readUnsignedByte();
+ this.darkenSky = (flags & 0x1) == 0x1;
+ this.dragonBar = (flags & 0x2) == 0x2;
}
}
@@ -136,11 +146,20 @@ public class ServerBossBarPacket implements Packet {
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_STYLE) {
out.writeVarInt(MagicValues.value(Integer.class, this.color));
- out.writeVarInt(this.dividers);
+ out.writeVarInt(MagicValues.value(Integer.class, this.division));
}
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_FLAGS) {
- out.writeByte(this.flags);
+ int flags = 0;
+ if(this.darkenSky) {
+ flags |= 0x1;
+ }
+
+ if(this.dragonBar) {
+ flags |= 0x2;
+ }
+
+ out.writeByte(flags);
}
}
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityAttachPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityAttachPacket.java
index aac850aa..af9b6b0e 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityAttachPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityAttachPacket.java
@@ -10,16 +10,14 @@ public class ServerEntityAttachPacket implements Packet {
private int entityId;
private int attachedToId;
- private boolean leash;
@SuppressWarnings("unused")
private ServerEntityAttachPacket() {
}
- public ServerEntityAttachPacket(int entityId, int attachedToId, boolean leash) {
+ public ServerEntityAttachPacket(int entityId, int attachedToId) {
this.entityId = entityId;
this.attachedToId = attachedToId;
- this.leash = leash;
}
public int getEntityId() {
@@ -30,22 +28,16 @@ public class ServerEntityAttachPacket implements Packet {
return this.attachedToId;
}
- public boolean getLeash() {
- return this.leash;
- }
-
@Override
public void read(NetInput in) throws IOException {
this.entityId = in.readInt();
this.attachedToId = in.readInt();
- this.leash = in.readBoolean();
}
@Override
public void write(NetOutput out) throws IOException {
out.writeInt(this.entityId);
out.writeInt(this.attachedToId);
- out.writeBoolean(this.leash);
}
@Override
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityEffectPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityEffectPacket.java
index b0f610d8..65e983a6 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityEffectPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityEffectPacket.java
@@ -14,18 +14,20 @@ public class ServerEntityEffectPacket implements Packet {
private Effect effect;
private int amplifier;
private int duration;
- private boolean hideParticles;
+ private boolean ambient;
+ private boolean showParticles;
@SuppressWarnings("unused")
private ServerEntityEffectPacket() {
}
- public ServerEntityEffectPacket(int entityId, Effect effect, int amplifier, int duration, boolean hideParticles) {
+ public ServerEntityEffectPacket(int entityId, Effect effect, int amplifier, int duration, boolean ambient, boolean showParticles) {
this.entityId = entityId;
this.effect = effect;
this.amplifier = amplifier;
this.duration = duration;
- this.hideParticles = hideParticles;
+ this.ambient = ambient;
+ this.showParticles = showParticles;
}
public int getEntityId() {
@@ -44,8 +46,12 @@ public class ServerEntityEffectPacket implements Packet {
return this.duration;
}
- public boolean getHideParticles() {
- return this.hideParticles;
+ public boolean isAmbient() {
+ return this.ambient;
+ }
+
+ public boolean getShowParticles() {
+ return this.showParticles;
}
@Override
@@ -54,7 +60,10 @@ public class ServerEntityEffectPacket implements Packet {
this.effect = MagicValues.key(Effect.class, in.readByte());
this.amplifier = in.readByte();
this.duration = in.readVarInt();
- this.hideParticles = in.readBoolean();
+
+ int flags = in.readByte();
+ this.ambient = (flags & 0x1) == 0x1;
+ this.showParticles = (flags & 0x2) == 0x2;
}
@Override
@@ -63,7 +72,17 @@ public class ServerEntityEffectPacket implements Packet {
out.writeByte(MagicValues.value(Integer.class, this.effect));
out.writeByte(this.amplifier);
out.writeVarInt(this.duration);
- out.writeBoolean(this.hideParticles);
+
+ int flags = 0;
+ if(this.ambient) {
+ flags |= 0x1;
+ }
+
+ if(this.showParticles) {
+ flags |= 0x2;
+ }
+
+ out.writeByte(flags);
}
@Override
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityMovementPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityMovementPacket.java
index fd90d1e8..de38d9cb 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityMovementPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityMovementPacket.java
@@ -59,9 +59,9 @@ public class ServerEntityMovementPacket implements Packet {
public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt();
if(this.pos) {
- this.moveX = in.readByte() / 32D;
- this.moveY = in.readByte() / 32D;
- this.moveZ = in.readByte() / 32D;
+ this.moveX = in.readShort() / 4096D;
+ this.moveY = in.readShort() / 4096D;
+ this.moveZ = in.readShort() / 4096D;
}
if(this.rot) {
@@ -78,9 +78,9 @@ public class ServerEntityMovementPacket implements Packet {
public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId);
if(this.pos) {
- out.writeByte((int) (this.moveX * 32));
- out.writeByte((int) (this.moveY * 32));
- out.writeByte((int) (this.moveZ * 32));
+ out.writeShort((int) (this.moveX * 4096));
+ out.writeShort((int) (this.moveY * 4096));
+ out.writeShort((int) (this.moveZ * 4096));
}
if(this.rot) {
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntitySetPassengersPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntitySetPassengersPacket.java
new file mode 100644
index 00000000..797766f4
--- /dev/null
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntitySetPassengersPacket.java
@@ -0,0 +1,46 @@
+package org.spacehq.mc.protocol.packet.ingame.server.entity;
+
+import org.spacehq.packetlib.io.NetInput;
+import org.spacehq.packetlib.io.NetOutput;
+import org.spacehq.packetlib.packet.Packet;
+
+import java.io.IOException;
+
+public class ServerEntitySetPassengersPacket implements Packet {
+
+ private int entityIds[];
+
+ @SuppressWarnings("unused")
+ private ServerEntitySetPassengersPacket() {
+ }
+
+ public ServerEntitySetPassengersPacket(int... entityIds) {
+ this.entityIds = entityIds;
+ }
+
+ public int[] getEntityIds() {
+ return this.entityIds;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.entityIds = new int[in.readVarInt()];
+ for(int index = 0; index < this.entityIds.length; index++) {
+ this.entityIds[index] = in.readVarInt();
+ }
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(this.entityIds.length);
+ for(int entityId : this.entityIds) {
+ out.writeVarInt(entityId);
+ }
+ }
+
+ @Override
+ public boolean isPriority() {
+ return false;
+ }
+
+}
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityTeleportPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityTeleportPacket.java
index 597a8664..3a00fe01 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityTeleportPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityTeleportPacket.java
@@ -61,9 +61,9 @@ public class ServerEntityTeleportPacket implements Packet {
@Override
public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt();
- this.x = in.readInt() / 32D;
- this.y = in.readInt() / 32D;
- this.z = in.readInt() / 32D;
+ this.x = in.readDouble();
+ this.y = in.readDouble();
+ this.z = in.readDouble();
this.yaw = in.readByte() * 360 / 256f;
this.pitch = in.readByte() * 360 / 256f;
this.onGround = in.readBoolean();
@@ -72,9 +72,9 @@ public class ServerEntityTeleportPacket implements Packet {
@Override
public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId);
- out.writeInt((int) (this.x * 32));
- out.writeInt((int) (this.y * 32));
- out.writeInt((int) (this.z * 32));
+ out.writeDouble(this.x);
+ out.writeDouble(this.y);
+ out.writeDouble(this.z);
out.writeByte((byte) (this.yaw * 256 / 360));
out.writeByte((byte) (this.pitch * 256 / 360));
out.writeBoolean(this.onGround);
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerVehicleMovePacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerVehicleMovePacket.java
new file mode 100644
index 00000000..6ec0a588
--- /dev/null
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerVehicleMovePacket.java
@@ -0,0 +1,70 @@
+package org.spacehq.mc.protocol.packet.ingame.server.entity;
+
+import org.spacehq.packetlib.io.NetInput;
+import org.spacehq.packetlib.io.NetOutput;
+import org.spacehq.packetlib.packet.Packet;
+
+import java.io.IOException;
+
+public class ServerVehicleMovePacket implements Packet {
+ private double x;
+ private double y;
+ private double z;
+ private float yaw;
+ private float pitch;
+
+ @SuppressWarnings("unused")
+ private ServerVehicleMovePacket() {
+ }
+
+ public ServerVehicleMovePacket(double x, double y, double z, float yaw, float pitch) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.yaw = yaw;
+ this.pitch = pitch;
+ }
+
+ public double getX() {
+ return this.x;
+ }
+
+ public double getY() {
+ return this.y;
+ }
+
+ public double getZ() {
+ return this.z;
+ }
+
+ public float getYaw() {
+ return this.yaw;
+ }
+
+ public float getPitch() {
+ return this.pitch;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.x = in.readDouble();
+ this.y = in.readDouble();
+ this.z = in.readDouble();
+ this.yaw = in.readFloat();
+ this.pitch = in.readFloat();
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeDouble(this.x);
+ out.writeDouble(this.y);
+ out.writeDouble(this.z);
+ out.writeFloat(this.yaw);
+ out.writeFloat(this.pitch);
+ }
+
+ @Override
+ public boolean isPriority() {
+ return false;
+ }
+}
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/player/ServerPlayerPositionRotationPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/player/ServerPlayerPositionRotationPacket.java
index 749200d7..c52f7a43 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/player/ServerPlayerPositionRotationPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/player/ServerPlayerPositionRotationPacket.java
@@ -19,22 +19,20 @@ public class ServerPlayerPositionRotationPacket implements Packet {
private float yaw;
private float pitch;
private List relative;
+ private int teleportId;
@SuppressWarnings("unused")
private ServerPlayerPositionRotationPacket() {
}
- public ServerPlayerPositionRotationPacket(double x, double y, double z, float yaw, float pitch) {
- this(x, y, z, yaw, pitch, new PositionElement[0]);
- }
-
- public ServerPlayerPositionRotationPacket(double x, double y, double z, float yaw, float pitch, PositionElement... relative) {
+ public ServerPlayerPositionRotationPacket(double x, double y, double z, float yaw, float pitch, int teleportId, PositionElement... relative) {
this.x = x;
this.y = y;
this.z = z;
this.yaw = yaw;
this.pitch = pitch;
- this.relative = Arrays.asList(relative);
+ this.teleportId = teleportId;
+ this.relative = Arrays.asList(relative != null ? relative : new PositionElement[0]);
}
public double getX() {
@@ -61,6 +59,10 @@ public class ServerPlayerPositionRotationPacket implements Packet {
return this.relative;
}
+ public int getTeleportId() {
+ return this.teleportId;
+ }
+
@Override
public void read(NetInput in) throws IOException {
this.x = in.readDouble();
@@ -76,6 +78,8 @@ public class ServerPlayerPositionRotationPacket implements Packet {
this.relative.add(element);
}
}
+
+ this.teleportId = in.readVarInt();
}
@Override
@@ -91,6 +95,7 @@ public class ServerPlayerPositionRotationPacket implements Packet {
}
out.writeByte(flags);
+ out.writeVarInt(this.teleportId);
}
@Override
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnExpOrbPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnExpOrbPacket.java
index 66e73d97..ea6f5cee 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnExpOrbPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnExpOrbPacket.java
@@ -49,18 +49,18 @@ public class ServerSpawnExpOrbPacket implements Packet {
@Override
public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt();
- this.x = in.readInt() / 32D;
- this.y = in.readInt() / 32D;
- this.z = in.readInt() / 32D;
+ this.x = in.readDouble();
+ this.y = in.readDouble();
+ this.z = in.readDouble();
this.exp = in.readShort();
}
@Override
public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId);
- out.writeInt((int) (this.x * 32));
- out.writeInt((int) (this.y * 32));
- out.writeInt((int) (this.z * 32));
+ out.writeDouble(this.x);
+ out.writeDouble(this.y);
+ out.writeDouble(this.z);
out.writeShort(this.exp);
}
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnGlobalEntityPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnGlobalEntityPacket.java
index fdd9f0d7..5763a261 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnGlobalEntityPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnGlobalEntityPacket.java
@@ -12,15 +12,15 @@ public class ServerSpawnGlobalEntityPacket implements Packet {
private int entityId;
private GlobalEntityType type;
- private int x;
- private int y;
- private int z;
+ private double x;
+ private double y;
+ private double z;
@SuppressWarnings("unused")
private ServerSpawnGlobalEntityPacket() {
}
- public ServerSpawnGlobalEntityPacket(int entityId, GlobalEntityType type, int x, int y, int z) {
+ public ServerSpawnGlobalEntityPacket(int entityId, GlobalEntityType type, double x, double y, double z) {
this.entityId = entityId;
this.type = type;
this.x = x;
@@ -36,15 +36,15 @@ public class ServerSpawnGlobalEntityPacket implements Packet {
return this.type;
}
- public int getX() {
+ public double getX() {
return this.x;
}
- public int getY() {
+ public double getY() {
return this.y;
}
- public int getZ() {
+ public double getZ() {
return this.z;
}
@@ -52,18 +52,18 @@ public class ServerSpawnGlobalEntityPacket implements Packet {
public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt();
this.type = MagicValues.key(GlobalEntityType.class, in.readByte());
- this.x = in.readInt();
- this.y = in.readInt();
- this.z = in.readInt();
+ this.x = in.readDouble();
+ this.y = in.readDouble();
+ this.z = in.readDouble();
}
@Override
public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId);
out.writeByte(MagicValues.value(Integer.class, this.type));
- out.writeInt(this.x);
- out.writeInt(this.y);
- out.writeInt(this.z);
+ out.writeDouble(this.x);
+ out.writeDouble(this.y);
+ out.writeDouble(this.z);
}
@Override
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnMobPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnMobPacket.java
index f91d23fa..1b49d2f6 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnMobPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnMobPacket.java
@@ -104,9 +104,9 @@ public class ServerSpawnMobPacket implements Packet {
this.entityId = in.readVarInt();
this.uuid = in.readUUID();
this.type = MagicValues.key(MobType.class, in.readUnsignedByte());
- this.x = in.readInt() / 32D;
- this.y = in.readInt() / 32D;
- this.z = in.readInt() / 32D;
+ this.x = in.readDouble();
+ this.y = in.readDouble();
+ this.z = in.readDouble();
this.yaw = in.readByte() * 360 / 256f;
this.pitch = in.readByte() * 360 / 256f;
this.headYaw = in.readByte() * 360 / 256f;
@@ -121,9 +121,9 @@ public class ServerSpawnMobPacket implements Packet {
out.writeVarInt(this.entityId);
out.writeUUID(this.uuid);
out.writeByte(MagicValues.value(Integer.class, this.type));
- out.writeInt((int) (this.x * 32));
- out.writeInt((int) (this.y * 32));
- out.writeInt((int) (this.z * 32));
+ out.writeDouble(this.x);
+ out.writeDouble(this.y);
+ out.writeDouble(this.z);
out.writeByte((byte) (this.yaw * 256 / 360));
out.writeByte((byte) (this.pitch * 256 / 360));
out.writeByte((byte) (this.headYaw * 256 / 360));
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnObjectPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnObjectPacket.java
index 8156ce60..6efe246c 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnObjectPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnObjectPacket.java
@@ -114,9 +114,9 @@ public class ServerSpawnObjectPacket implements Packet {
this.entityId = in.readVarInt();
this.uuid = in.readUUID();
this.type = MagicValues.key(ObjectType.class, in.readByte());
- this.x = in.readInt() / 32D;
- this.y = in.readInt() / 32D;
- this.z = in.readInt() / 32D;
+ this.x = in.readDouble();
+ this.y = in.readDouble();
+ this.z = in.readDouble();
this.pitch = in.readByte() * 360 / 256f;
this.yaw = in.readByte() * 360 / 256f;
@@ -148,9 +148,9 @@ public class ServerSpawnObjectPacket implements Packet {
out.writeVarInt(this.entityId);
out.writeUUID(this.uuid);
out.writeByte(MagicValues.value(Integer.class, this.type));
- out.writeInt((int) (this.x * 32));
- out.writeInt((int) (this.y * 32));
- out.writeInt((int) (this.z * 32));
+ out.writeDouble(this.x);
+ out.writeDouble(this.y);
+ out.writeDouble(this.z);
out.writeByte((byte) (this.pitch * 256 / 360));
out.writeByte((byte) (this.yaw * 256 / 360));
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPaintingPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPaintingPacket.java
index 23bf54f9..483d4598 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPaintingPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPaintingPacket.java
@@ -1,7 +1,7 @@
package org.spacehq.mc.protocol.packet.ingame.server.entity.spawn;
-import org.spacehq.mc.protocol.data.game.entity.metadata.Position;
import org.spacehq.mc.protocol.data.game.MagicValues;
+import org.spacehq.mc.protocol.data.game.entity.metadata.Position;
import org.spacehq.mc.protocol.data.game.entity.type.PaintingType;
import org.spacehq.mc.protocol.data.game.entity.type.object.HangingDirection;
import org.spacehq.mc.protocol.util.NetUtil;
@@ -10,10 +10,12 @@ import org.spacehq.packetlib.io.NetOutput;
import org.spacehq.packetlib.packet.Packet;
import java.io.IOException;
+import java.util.UUID;
public class ServerSpawnPaintingPacket implements Packet {
private int entityId;
+ private UUID uuid;
private PaintingType paintingType;
private Position position;
private HangingDirection direction;
@@ -22,8 +24,9 @@ public class ServerSpawnPaintingPacket implements Packet {
private ServerSpawnPaintingPacket() {
}
- public ServerSpawnPaintingPacket(int entityId, PaintingType paintingType, Position position, HangingDirection direction) {
+ public ServerSpawnPaintingPacket(int entityId, UUID uuid, PaintingType paintingType, Position position, HangingDirection direction) {
this.entityId = entityId;
+ this.uuid = uuid;
this.paintingType = paintingType;
this.position = position;
this.direction = direction;
@@ -33,6 +36,10 @@ public class ServerSpawnPaintingPacket implements Packet {
return this.entityId;
}
+ public UUID getUUID() {
+ return this.uuid;
+ }
+
public PaintingType getPaintingType() {
return this.paintingType;
}
@@ -48,6 +55,7 @@ public class ServerSpawnPaintingPacket implements Packet {
@Override
public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt();
+ this.uuid = in.readUUID();
this.paintingType = MagicValues.key(PaintingType.class, in.readString());
this.position = NetUtil.readPosition(in);
this.direction = MagicValues.key(HangingDirection.class, in.readUnsignedByte());
@@ -56,6 +64,7 @@ public class ServerSpawnPaintingPacket implements Packet {
@Override
public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId);
+ out.writeUUID(this.uuid);
out.writeString(MagicValues.value(String.class, this.paintingType));
NetUtil.writePosition(out, this.position);
out.writeByte(MagicValues.value(Integer.class, this.direction));
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPlayerPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPlayerPacket.java
index c710fab3..709b58eb 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPlayerPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/spawn/ServerSpawnPlayerPacket.java
@@ -71,9 +71,9 @@ public class ServerSpawnPlayerPacket implements Packet {
public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt();
this.uuid = in.readUUID();
- this.x = in.readInt() / 32D;
- this.y = in.readInt() / 32D;
- this.z = in.readInt() / 32D;
+ this.x = in.readDouble();
+ this.y = in.readDouble();
+ this.z = in.readDouble();
this.yaw = in.readByte() * 360 / 256f;
this.pitch = in.readByte() * 360 / 256f;
this.metadata = NetUtil.readEntityMetadata(in);
@@ -83,9 +83,9 @@ public class ServerSpawnPlayerPacket implements Packet {
public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId);
out.writeUUID(this.uuid);
- out.writeInt((int) (this.x * 32));
- out.writeInt((int) (this.y * 32));
- out.writeInt((int) (this.z * 32));
+ out.writeDouble(this.x);
+ out.writeDouble(this.y);
+ out.writeDouble(this.z);
out.writeByte((byte) (this.yaw * 256 / 360));
out.writeByte((byte) (this.pitch * 256 / 360));
NetUtil.writeEntityMetadata(out, this.metadata);
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerPlaySoundEventPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerPlaySoundEventPacket.java
new file mode 100644
index 00000000..eb96c9ec
--- /dev/null
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerPlaySoundEventPacket.java
@@ -0,0 +1,100 @@
+package org.spacehq.mc.protocol.packet.ingame.server.world;
+
+import org.spacehq.mc.protocol.data.game.MagicValues;
+import org.spacehq.mc.protocol.data.game.world.sound.SoundCategory;
+import org.spacehq.mc.protocol.data.game.world.sound.SoundEvent;
+import org.spacehq.packetlib.io.NetInput;
+import org.spacehq.packetlib.io.NetOutput;
+import org.spacehq.packetlib.packet.Packet;
+
+import java.io.IOException;
+
+public class ServerPlaySoundEventPacket implements Packet {
+
+ private SoundEvent sound;
+ private SoundCategory category;
+ private double x;
+ private double y;
+ private double z;
+ private float volume;
+ private float pitch;
+
+ @SuppressWarnings("unused")
+ private ServerPlaySoundEventPacket() {
+ }
+
+ public ServerPlaySoundEventPacket(SoundEvent sound, SoundCategory category, double x, double y, double z, float volume, float pitch) {
+ this.sound = sound;
+ this.category = category;
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.volume = volume;
+ this.pitch = pitch;
+ }
+
+ public SoundEvent getSound() {
+ return this.sound;
+ }
+
+ public SoundCategory getCategory() {
+ return this.category;
+ }
+
+ public double getX() {
+ return this.x;
+ }
+
+ public double getY() {
+ return this.y;
+ }
+
+ public double getZ() {
+ return this.z;
+ }
+
+ public float getVolume() {
+ return this.volume;
+ }
+
+ public float getPitch() {
+ return this.pitch;
+ }
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.sound = MagicValues.key(SoundEvent.class, in.readVarInt());
+ this.category = MagicValues.key(SoundCategory.class, in.readVarInt());
+ this.x = in.readInt() / 8D;
+ this.y = in.readInt() / 8D;
+ this.z = in.readInt() / 8D;
+ this.volume = in.readFloat();
+ this.pitch = in.readUnsignedByte() / 63.5f;
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ out.writeVarInt(MagicValues.value(Integer.class, this.sound));
+ out.writeVarInt(MagicValues.value(Integer.class, this.category));
+ out.writeInt((int) (this.x * 8));
+ out.writeInt((int) (this.y * 8));
+ out.writeInt((int) (this.z * 8));
+ out.writeFloat(this.volume);
+ int pitch = (int) (this.pitch * 63.5f);
+ if(pitch > 255) {
+ pitch = 255;
+ }
+
+ if(pitch < 0) {
+ pitch = 0;
+ }
+
+ out.writeByte(pitch);
+ }
+
+ @Override
+ public boolean isPriority() {
+ return false;
+ }
+
+}
diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerPlaySoundPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerPlaySoundPacket.java
index 93d9e0ef..ba4993f9 100644
--- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerPlaySoundPacket.java
+++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerPlaySoundPacket.java
@@ -1,9 +1,10 @@
package org.spacehq.mc.protocol.packet.ingame.server.world;
import org.spacehq.mc.protocol.data.game.MagicValues;
-import org.spacehq.mc.protocol.data.game.world.CustomSound;
-import org.spacehq.mc.protocol.data.game.world.GenericSound;
-import org.spacehq.mc.protocol.data.game.world.Sound;
+import org.spacehq.mc.protocol.data.game.world.sound.CustomSound;
+import org.spacehq.mc.protocol.data.game.world.sound.GenericSound;
+import org.spacehq.mc.protocol.data.game.world.sound.Sound;
+import org.spacehq.mc.protocol.data.game.world.sound.SoundCategory;
import org.spacehq.packetlib.io.NetInput;
import org.spacehq.packetlib.io.NetOutput;
import org.spacehq.packetlib.packet.Packet;
@@ -13,6 +14,7 @@ import java.io.IOException;
public class ServerPlaySoundPacket implements Packet {
private Sound sound;
+ private SoundCategory category;
private double x;
private double y;
private double z;
@@ -23,8 +25,9 @@ public class ServerPlaySoundPacket implements Packet {
private ServerPlaySoundPacket() {
}
- public ServerPlaySoundPacket(Sound sound, double x, double y, double z, float volume, float pitch) {
+ public ServerPlaySoundPacket(Sound sound, SoundCategory category, double x, double y, double z, float volume, float pitch) {
this.sound = sound;
+ this.category = category;
this.x = x;
this.y = y;
this.z = z;
@@ -36,6 +39,10 @@ public class ServerPlaySoundPacket implements Packet {
return this.sound;
}
+ public SoundCategory getCategory() {
+ return this.category;
+ }
+
public double getX() {
return this.x;
}
@@ -65,6 +72,7 @@ public class ServerPlaySoundPacket implements Packet {
this.sound = new CustomSound(value);
}
+ this.category = MagicValues.key(SoundCategory.class, in.readVarInt());
this.x = in.readInt() / 8D;
this.y = in.readInt() / 8D;
this.z = in.readInt() / 8D;
@@ -82,6 +90,7 @@ public class ServerPlaySoundPacket implements Packet {
}
out.writeString(value);
+ out.writeVarInt(MagicValues.value(Integer.class, this.category));
out.writeInt((int) (this.x * 8));
out.writeInt((int) (this.y * 8));
out.writeInt((int) (this.z * 8));