This commit is contained in:
Steven Smith 2015-08-11 22:57:08 -07:00
parent 4ccf753002
commit abb2108fb3
22 changed files with 385 additions and 131 deletions

View file

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.spacehq</groupId> <groupId>org.spacehq</groupId>
<artifactId>mcprotocollib</artifactId> <artifactId>mcprotocollib</artifactId>
<version>1.8.8-SNAPSHOT</version> <version>15w32c</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>MCProtocolLib</name> <name>MCProtocolLib</name>

View file

@ -2,8 +2,8 @@ package org.spacehq.mc.protocol;
public class MinecraftConstants { public class MinecraftConstants {
// General Constants // General Constants
public static final String GAME_VERSION = "1.8.8"; public static final String GAME_VERSION = "15w32c";
public static final int PROTOCOL_VERSION = 47; public static final int PROTOCOL_VERSION = 54;
// General Key Constants // General Key Constants
public static final String PROFILE_KEY = "profile"; public static final String PROFILE_KEY = "profile";

View file

@ -22,6 +22,7 @@ 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.ClientPlayerPositionRotationPacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerRotationPacket; 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.ClientPlayerStatePacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerUseItemPacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientSpectatePacket; import org.spacehq.mc.protocol.packet.ingame.client.player.ClientSpectatePacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientSteerVehiclePacket; import org.spacehq.mc.protocol.packet.ingame.client.player.ClientSteerVehiclePacket;
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientSwingArmPacket; import org.spacehq.mc.protocol.packet.ingame.client.player.ClientSwingArmPacket;
@ -56,7 +57,7 @@ import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityEquipment
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityHeadLookPacket; import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityHeadLookPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityMetadataPacket; import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityMetadataPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityMovementPacket; import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityMovementPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityNBTUpdatePacket; import org.spacehq.mc.protocol.packet.ingame.server.ServerBossBarPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPositionPacket; import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPositionPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPositionRotationPacket; import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPositionRotationPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPropertiesPacket; import org.spacehq.mc.protocol.packet.ingame.server.entity.ServerEntityPropertiesPacket;
@ -386,7 +387,7 @@ public class MinecraftProtocol extends PacketProtocol {
this.registerIncoming(70, ServerSetCompressionPacket.class); this.registerIncoming(70, ServerSetCompressionPacket.class);
this.registerIncoming(71, ServerPlayerListDataPacket.class); this.registerIncoming(71, ServerPlayerListDataPacket.class);
this.registerIncoming(72, ServerResourcePackSendPacket.class); this.registerIncoming(72, ServerResourcePackSendPacket.class);
this.registerIncoming(73, ServerEntityNBTUpdatePacket.class); this.registerIncoming(73, ServerBossBarPacket.class);
this.registerOutgoing(0, ClientKeepAlivePacket.class); this.registerOutgoing(0, ClientKeepAlivePacket.class);
this.registerOutgoing(1, ClientChatPacket.class); this.registerOutgoing(1, ClientChatPacket.class);
@ -396,24 +397,25 @@ public class MinecraftProtocol extends PacketProtocol {
this.registerOutgoing(5, ClientPlayerRotationPacket.class); this.registerOutgoing(5, ClientPlayerRotationPacket.class);
this.registerOutgoing(6, ClientPlayerPositionRotationPacket.class); this.registerOutgoing(6, ClientPlayerPositionRotationPacket.class);
this.registerOutgoing(7, ClientPlayerActionPacket.class); this.registerOutgoing(7, ClientPlayerActionPacket.class);
this.registerOutgoing(8, ClientPlayerPlaceBlockPacket.class); this.registerOutgoing(8, ClientPlayerUseItemPacket.class);
this.registerOutgoing(9, ClientChangeHeldItemPacket.class); this.registerOutgoing(9, ClientPlayerPlaceBlockPacket.class);
this.registerOutgoing(10, ClientSwingArmPacket.class); this.registerOutgoing(10, ClientChangeHeldItemPacket.class);
this.registerOutgoing(11, ClientPlayerStatePacket.class); this.registerOutgoing(11, ClientSwingArmPacket.class);
this.registerOutgoing(12, ClientSteerVehiclePacket.class); this.registerOutgoing(12, ClientPlayerStatePacket.class);
this.registerOutgoing(13, ClientCloseWindowPacket.class); this.registerOutgoing(13, ClientSteerVehiclePacket.class);
this.registerOutgoing(14, ClientWindowActionPacket.class); this.registerOutgoing(14, ClientCloseWindowPacket.class);
this.registerOutgoing(15, ClientConfirmTransactionPacket.class); this.registerOutgoing(15, ClientWindowActionPacket.class);
this.registerOutgoing(16, ClientCreativeInventoryActionPacket.class); this.registerOutgoing(16, ClientConfirmTransactionPacket.class);
this.registerOutgoing(17, ClientEnchantItemPacket.class); this.registerOutgoing(17, ClientCreativeInventoryActionPacket.class);
this.registerOutgoing(18, ClientUpdateSignPacket.class); this.registerOutgoing(18, ClientEnchantItemPacket.class);
this.registerOutgoing(19, ClientPlayerAbilitiesPacket.class); this.registerOutgoing(19, ClientUpdateSignPacket.class);
this.registerOutgoing(20, ClientTabCompletePacket.class); this.registerOutgoing(20, ClientPlayerAbilitiesPacket.class);
this.registerOutgoing(21, ClientSettingsPacket.class); this.registerOutgoing(21, ClientTabCompletePacket.class);
this.registerOutgoing(22, ClientRequestPacket.class); this.registerOutgoing(22, ClientSettingsPacket.class);
this.registerOutgoing(23, ClientPluginMessagePacket.class); this.registerOutgoing(23, ClientRequestPacket.class);
this.registerOutgoing(24, ClientSpectatePacket.class); this.registerOutgoing(24, ClientPluginMessagePacket.class);
this.registerOutgoing(25, ClientResourcePackStatusPacket.class); this.registerOutgoing(25, ClientSpectatePacket.class);
this.registerOutgoing(26, ClientResourcePackStatusPacket.class);
} }
private void initServerGame(Session session) { private void initServerGame(Session session) {
@ -517,7 +519,7 @@ public class MinecraftProtocol extends PacketProtocol {
this.registerOutgoing(70, ServerSetCompressionPacket.class); this.registerOutgoing(70, ServerSetCompressionPacket.class);
this.registerOutgoing(71, ServerPlayerListDataPacket.class); this.registerOutgoing(71, ServerPlayerListDataPacket.class);
this.registerOutgoing(72, ServerResourcePackSendPacket.class); this.registerOutgoing(72, ServerResourcePackSendPacket.class);
this.registerOutgoing(73, ServerEntityNBTUpdatePacket.class); this.registerOutgoing(73, ServerBossBarPacket.class);
} }
private void initClientStatus(Session session) { private void initClientStatus(Session session) {

View file

@ -0,0 +1,10 @@
package org.spacehq.mc.protocol.data.game.values;
public enum BossBarAction {
ADD,
REMOVE,
UPDATE_HEALTH,
UPDATE_TITLE,
UPDATE_STYLE,
UPDATE_FLAGS;
}

View file

@ -0,0 +1,11 @@
package org.spacehq.mc.protocol.data.game.values;
public enum BossBarColor {
PINK,
CYAN,
RED,
LIME,
YELLOW,
PURPLE,
WHITE;
}

View file

@ -1,9 +1,7 @@
package org.spacehq.mc.protocol.data.game.values; package org.spacehq.mc.protocol.data.game.values;
public enum ClientRequest { public enum ClientRequest {
RESPAWN, RESPAWN,
STATS, STATS,
OPEN_INVENTORY_ACHIEVEMENT; OPEN_INVENTORY;
} }

View file

@ -0,0 +1,6 @@
package org.spacehq.mc.protocol.data.game.values;
public enum Hand {
MAIN_HAND,
OFF_HAND;
}

View file

@ -109,7 +109,7 @@ public class MagicValues {
register(ClientRequest.RESPAWN, 0); register(ClientRequest.RESPAWN, 0);
register(ClientRequest.STATS, 1); register(ClientRequest.STATS, 1);
register(ClientRequest.OPEN_INVENTORY_ACHIEVEMENT, 2); register(ClientRequest.OPEN_INVENTORY, 2);
register(ChatVisibility.FULL, 0); register(ChatVisibility.FULL, 0);
register(ChatVisibility.SYSTEM, 1); register(ChatVisibility.SYSTEM, 1);
@ -121,7 +121,6 @@ public class MagicValues {
register(PlayerState.START_SPRINTING, 3); register(PlayerState.START_SPRINTING, 3);
register(PlayerState.STOP_SPRINTING, 4); register(PlayerState.STOP_SPRINTING, 4);
register(PlayerState.RIDING_JUMP, 5); register(PlayerState.RIDING_JUMP, 5);
register(PlayerState.OPEN_INVENTORY, 6);
register(InteractAction.INTERACT, 0); register(InteractAction.INTERACT, 0);
register(InteractAction.ATTACK, 1); register(InteractAction.ATTACK, 1);
@ -133,6 +132,7 @@ public class MagicValues {
register(PlayerAction.DROP_ITEM_STACK, 3); register(PlayerAction.DROP_ITEM_STACK, 3);
register(PlayerAction.DROP_ITEM, 4); register(PlayerAction.DROP_ITEM, 4);
register(PlayerAction.RELEASE_USE_ITEM, 5); register(PlayerAction.RELEASE_USE_ITEM, 5);
register(PlayerAction.SWAP_HANDS, 6);
register(Face.BOTTOM, 0); register(Face.BOTTOM, 0);
register(Face.TOP, 1); register(Face.TOP, 1);
@ -881,6 +881,24 @@ public class MagicValues {
register(ResourcePackStatus.DECLINED, 1); register(ResourcePackStatus.DECLINED, 1);
register(ResourcePackStatus.FAILED_DOWNLOAD, 2); register(ResourcePackStatus.FAILED_DOWNLOAD, 2);
register(ResourcePackStatus.ACCEPTED, 3); register(ResourcePackStatus.ACCEPTED, 3);
register(Hand.MAIN_HAND, 0);
register(Hand.OFF_HAND, 1);
register(BossBarAction.ADD, 0);
register(BossBarAction.REMOVE, 1);
register(BossBarAction.UPDATE_HEALTH, 2);
register(BossBarAction.UPDATE_TITLE, 3);
register(BossBarAction.UPDATE_STYLE, 4);
register(BossBarAction.UPDATE_FLAGS, 5);
register(BossBarColor.PINK, 0);
register(BossBarColor.CYAN, 1);
register(BossBarColor.RED, 2);
register(BossBarColor.LIME, 3);
register(BossBarColor.YELLOW, 4);
register(BossBarColor.PURPLE, 5);
register(BossBarColor.WHITE, 6);
} }
private static void register(Enum<?> key, Object value) { private static void register(Enum<?> key, Object value) {

View file

@ -7,6 +7,7 @@ public enum PlayerAction {
FINISH_DIGGING, FINISH_DIGGING,
DROP_ITEM_STACK, DROP_ITEM_STACK,
DROP_ITEM, DROP_ITEM,
RELEASE_USE_ITEM; RELEASE_USE_ITEM,
SWAP_HANDS;
} }

View file

@ -1,13 +1,10 @@
package org.spacehq.mc.protocol.data.game.values.entity.player; package org.spacehq.mc.protocol.data.game.values.entity.player;
public enum PlayerState { public enum PlayerState {
START_SNEAKING, START_SNEAKING,
STOP_SNEAKING, STOP_SNEAKING,
LEAVE_BED, LEAVE_BED,
START_SPRINTING, START_SPRINTING,
STOP_SPRINTING, STOP_SPRINTING,
RIDING_JUMP, RIDING_JUMP;
OPEN_INVENTORY;
} }

View file

@ -1,5 +1,6 @@
package org.spacehq.mc.protocol.packet.ingame.client; package org.spacehq.mc.protocol.packet.ingame.client;
import org.spacehq.mc.protocol.data.game.values.Hand;
import org.spacehq.mc.protocol.data.game.values.MagicValues; import org.spacehq.mc.protocol.data.game.values.MagicValues;
import org.spacehq.mc.protocol.data.game.values.setting.ChatVisibility; import org.spacehq.mc.protocol.data.game.values.setting.ChatVisibility;
import org.spacehq.mc.protocol.data.game.values.setting.SkinPart; import org.spacehq.mc.protocol.data.game.values.setting.SkinPart;
@ -19,17 +20,19 @@ public class ClientSettingsPacket implements Packet {
private ChatVisibility chatVisibility; private ChatVisibility chatVisibility;
private boolean chatColors; private boolean chatColors;
private List<SkinPart> visibleParts; private List<SkinPart> visibleParts;
private Hand mainHand;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private ClientSettingsPacket() { private ClientSettingsPacket() {
} }
public ClientSettingsPacket(String locale, int renderDistance, ChatVisibility chatVisibility, boolean chatColors, SkinPart... visibleParts) { public ClientSettingsPacket(String locale, int renderDistance, ChatVisibility chatVisibility, boolean chatColors, SkinPart[] visibleParts, Hand mainHand) {
this.locale = locale; this.locale = locale;
this.renderDistance = renderDistance; this.renderDistance = renderDistance;
this.chatVisibility = chatVisibility; this.chatVisibility = chatVisibility;
this.chatColors = chatColors; this.chatColors = chatColors;
this.visibleParts = Arrays.asList(visibleParts); this.visibleParts = Arrays.asList(visibleParts);
this.mainHand = mainHand;
} }
public String getLocale() { public String getLocale() {
@ -52,13 +55,18 @@ public class ClientSettingsPacket implements Packet {
return this.visibleParts; return this.visibleParts;
} }
public Hand getMainHand() {
return this.mainHand;
}
@Override @Override
public void read(NetInput in) throws IOException { public void read(NetInput in) throws IOException {
this.locale = in.readString(); this.locale = in.readString();
this.renderDistance = in.readByte(); this.renderDistance = in.readByte();
this.chatVisibility = MagicValues.key(ChatVisibility.class, in.readByte()); this.chatVisibility = MagicValues.key(ChatVisibility.class, in.readVarInt());
this.chatColors = in.readBoolean(); this.chatColors = in.readBoolean();
this.visibleParts = new ArrayList<SkinPart>(); this.visibleParts = new ArrayList<SkinPart>();
int flags = in.readUnsignedByte(); int flags = in.readUnsignedByte();
for(SkinPart part : SkinPart.values()) { for(SkinPart part : SkinPart.values()) {
int bit = 1 << part.ordinal(); int bit = 1 << part.ordinal();
@ -66,20 +74,25 @@ public class ClientSettingsPacket implements Packet {
this.visibleParts.add(part); this.visibleParts.add(part);
} }
} }
this.mainHand = MagicValues.key(Hand.class, in.readVarInt());
} }
@Override @Override
public void write(NetOutput out) throws IOException { public void write(NetOutput out) throws IOException {
out.writeString(this.locale); out.writeString(this.locale);
out.writeByte(this.renderDistance); out.writeByte(this.renderDistance);
out.writeByte(MagicValues.value(Integer.class, this.chatVisibility)); out.writeVarInt(MagicValues.value(Integer.class, this.chatVisibility));
out.writeBoolean(this.chatColors); out.writeBoolean(this.chatColors);
int flags = 0; int flags = 0;
for(SkinPart part : this.visibleParts) { for(SkinPart part : this.visibleParts) {
flags |= 1 << part.ordinal(); flags |= 1 << part.ordinal();
} }
out.writeByte(flags); out.writeByte(flags);
out.writeVarInt(MagicValues.value(Integer.class, this.mainHand));
} }
@Override @Override

View file

@ -1,5 +1,6 @@
package org.spacehq.mc.protocol.packet.ingame.client.player; package org.spacehq.mc.protocol.packet.ingame.client.player;
import org.spacehq.mc.protocol.data.game.values.Hand;
import org.spacehq.mc.protocol.data.game.values.MagicValues; import org.spacehq.mc.protocol.data.game.values.MagicValues;
import org.spacehq.mc.protocol.data.game.values.entity.player.InteractAction; import org.spacehq.mc.protocol.data.game.values.entity.player.InteractAction;
import org.spacehq.packetlib.io.NetInput; import org.spacehq.packetlib.io.NetInput;
@ -16,21 +17,27 @@ public class ClientPlayerInteractEntityPacket implements Packet {
private float targetX; private float targetX;
private float targetY; private float targetY;
private float targetZ; private float targetZ;
private Hand hand;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private ClientPlayerInteractEntityPacket() { private ClientPlayerInteractEntityPacket() {
} }
public ClientPlayerInteractEntityPacket(int entityId, InteractAction action) { public ClientPlayerInteractEntityPacket(int entityId, InteractAction action) {
this(entityId, action, 0, 0, 0); this(entityId, action, Hand.MAIN_HAND);
} }
public ClientPlayerInteractEntityPacket(int entityId, InteractAction action, float targetX, float targetY, float targetZ) { public ClientPlayerInteractEntityPacket(int entityId, InteractAction action, Hand hand) {
this(entityId, action, 0, 0, 0, hand);
}
public ClientPlayerInteractEntityPacket(int entityId, InteractAction action, float targetX, float targetY, float targetZ, Hand hand) {
this.entityId = entityId; this.entityId = entityId;
this.action = action; this.action = action;
this.targetX = targetX; this.targetX = targetX;
this.targetY = targetY; this.targetY = targetY;
this.targetZ = targetZ; this.targetZ = targetZ;
this.hand = hand;
} }
public int getEntityId() { public int getEntityId() {
@ -41,6 +48,22 @@ public class ClientPlayerInteractEntityPacket implements Packet {
return this.action; return this.action;
} }
public float getTargetX() {
return this.targetX;
}
public float getTargetY() {
return this.targetY;
}
public float getTargetZ() {
return this.targetZ;
}
public Hand getHand() {
return this.hand;
}
@Override @Override
public void read(NetInput in) throws IOException { public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt(); this.entityId = in.readVarInt();
@ -50,6 +73,10 @@ public class ClientPlayerInteractEntityPacket implements Packet {
this.targetY = in.readFloat(); this.targetY = in.readFloat();
this.targetZ = in.readFloat(); this.targetZ = in.readFloat();
} }
if(this.action == InteractAction.INTERACT || this.action == InteractAction.INTERACT_AT) {
this.hand = MagicValues.key(Hand.class, in.readVarInt());
}
} }
@Override @Override
@ -61,6 +88,10 @@ public class ClientPlayerInteractEntityPacket implements Packet {
out.writeFloat(this.targetY); out.writeFloat(this.targetY);
out.writeFloat(this.targetZ); out.writeFloat(this.targetZ);
} }
if(this.action == InteractAction.INTERACT || this.action == InteractAction.INTERACT_AT) {
out.writeVarInt(MagicValues.value(Integer.class, this.hand));
}
} }
@Override @Override

View file

@ -1,8 +1,8 @@
package org.spacehq.mc.protocol.packet.ingame.client.player; package org.spacehq.mc.protocol.packet.ingame.client.player;
import org.spacehq.mc.protocol.data.game.ItemStack;
import org.spacehq.mc.protocol.data.game.Position; import org.spacehq.mc.protocol.data.game.Position;
import org.spacehq.mc.protocol.data.game.values.Face; import org.spacehq.mc.protocol.data.game.values.Face;
import org.spacehq.mc.protocol.data.game.values.Hand;
import org.spacehq.mc.protocol.data.game.values.MagicValues; import org.spacehq.mc.protocol.data.game.values.MagicValues;
import org.spacehq.mc.protocol.util.NetUtil; import org.spacehq.mc.protocol.util.NetUtil;
import org.spacehq.packetlib.io.NetInput; import org.spacehq.packetlib.io.NetInput;
@ -15,7 +15,7 @@ public class ClientPlayerPlaceBlockPacket implements Packet {
private Position position; private Position position;
private Face face; private Face face;
private ItemStack held; private Hand hand;
private float cursorX; private float cursorX;
private float cursorY; private float cursorY;
private float cursorZ; private float cursorZ;
@ -24,10 +24,10 @@ public class ClientPlayerPlaceBlockPacket implements Packet {
private ClientPlayerPlaceBlockPacket() { private ClientPlayerPlaceBlockPacket() {
} }
public ClientPlayerPlaceBlockPacket(Position position, Face face, ItemStack held, float cursorX, float cursorY, float cursorZ) { public ClientPlayerPlaceBlockPacket(Position position, Face face, Hand hand, float cursorX, float cursorY, float cursorZ) {
this.position = position; this.position = position;
this.face = face; this.face = face;
this.held = held; this.hand = hand;
this.cursorX = cursorX; this.cursorX = cursorX;
this.cursorY = cursorY; this.cursorY = cursorY;
this.cursorZ = cursorZ; this.cursorZ = cursorZ;
@ -41,8 +41,8 @@ public class ClientPlayerPlaceBlockPacket implements Packet {
return this.face; return this.face;
} }
public ItemStack getHeldItem() { public Hand getHand() {
return this.held; return this.hand;
} }
public float getCursorX() { public float getCursorX() {
@ -61,7 +61,7 @@ public class ClientPlayerPlaceBlockPacket implements Packet {
public void read(NetInput in) throws IOException { public void read(NetInput in) throws IOException {
this.position = NetUtil.readPosition(in); this.position = NetUtil.readPosition(in);
this.face = MagicValues.key(Face.class, in.readUnsignedByte()); this.face = MagicValues.key(Face.class, in.readUnsignedByte());
this.held = NetUtil.readItem(in); this.hand = MagicValues.key(Hand.class, in.readVarInt());
this.cursorX = in.readByte() / 16f; this.cursorX = in.readByte() / 16f;
this.cursorY = in.readByte() / 16f; this.cursorY = in.readByte() / 16f;
this.cursorZ = in.readByte() / 16f; this.cursorZ = in.readByte() / 16f;
@ -71,7 +71,7 @@ public class ClientPlayerPlaceBlockPacket implements Packet {
public void write(NetOutput out) throws IOException { public void write(NetOutput out) throws IOException {
NetUtil.writePosition(out, this.position); NetUtil.writePosition(out, this.position);
out.writeByte(MagicValues.value(Integer.class, this.face)); out.writeByte(MagicValues.value(Integer.class, this.face));
NetUtil.writeItem(out, this.held); out.writeVarInt(MagicValues.value(Integer.class, this.hand));
out.writeByte((int) (this.cursorX * 16)); out.writeByte((int) (this.cursorX * 16));
out.writeByte((int) (this.cursorY * 16)); out.writeByte((int) (this.cursorY * 16));
out.writeByte((int) (this.cursorZ * 16)); out.writeByte((int) (this.cursorZ * 16));

View file

@ -0,0 +1,40 @@
package org.spacehq.mc.protocol.packet.ingame.client.player;
import org.spacehq.mc.protocol.data.game.values.Hand;
import org.spacehq.mc.protocol.data.game.values.MagicValues;
import org.spacehq.packetlib.io.NetInput;
import org.spacehq.packetlib.io.NetOutput;
import org.spacehq.packetlib.packet.Packet;
import java.io.IOException;
public class ClientPlayerUseItemPacket implements Packet {
private Hand hand;
@SuppressWarnings("unused")
private ClientPlayerUseItemPacket() {
}
public ClientPlayerUseItemPacket(Hand hand) {
this.hand = hand;
}
public Hand getHand() {
return this.hand;
}
@Override
public void read(NetInput in) throws IOException {
this.hand = MagicValues.key(Hand.class, in.readVarInt());
}
@Override
public void write(NetOutput out) throws IOException {
out.writeVarInt(MagicValues.value(Integer.class, this.hand));
}
@Override
public boolean isPriority() {
return false;
}
}

View file

@ -1,5 +1,7 @@
package org.spacehq.mc.protocol.packet.ingame.client.player; package org.spacehq.mc.protocol.packet.ingame.client.player;
import org.spacehq.mc.protocol.data.game.values.Hand;
import org.spacehq.mc.protocol.data.game.values.MagicValues;
import org.spacehq.packetlib.io.NetInput; import org.spacehq.packetlib.io.NetInput;
import org.spacehq.packetlib.io.NetOutput; import org.spacehq.packetlib.io.NetOutput;
import org.spacehq.packetlib.packet.Packet; import org.spacehq.packetlib.packet.Packet;
@ -7,21 +9,32 @@ import org.spacehq.packetlib.packet.Packet;
import java.io.IOException; import java.io.IOException;
public class ClientSwingArmPacket implements Packet { public class ClientSwingArmPacket implements Packet {
private Hand hand;
public ClientSwingArmPacket() { @SuppressWarnings("unused")
private ClientSwingArmPacket() {
}
public ClientSwingArmPacket(Hand hand) {
this.hand = hand;
}
public Hand getHand() {
return this.hand;
} }
@Override @Override
public void read(NetInput in) throws IOException { public void read(NetInput in) throws IOException {
this.hand = MagicValues.key(Hand.class, in.readVarInt());
} }
@Override @Override
public void write(NetOutput out) throws IOException { public void write(NetOutput out) throws IOException {
out.writeVarInt(MagicValues.value(Integer.class, this.hand));
} }
@Override @Override
public boolean isPriority() { public boolean isPriority() {
return false; return false;
} }
} }

View file

@ -0,0 +1,151 @@
package org.spacehq.mc.protocol.packet.ingame.server;
import org.spacehq.mc.protocol.data.game.values.BossBarAction;
import org.spacehq.mc.protocol.data.game.values.BossBarColor;
import org.spacehq.mc.protocol.data.game.values.MagicValues;
import org.spacehq.mc.protocol.data.message.Message;
import org.spacehq.packetlib.io.NetInput;
import org.spacehq.packetlib.io.NetOutput;
import org.spacehq.packetlib.packet.Packet;
import java.io.IOException;
import java.util.UUID;
public class ServerBossBarPacket implements Packet {
private UUID uuid;
private BossBarAction action;
private Message title;
private float health;
private BossBarColor color;
private int dividers;
private int flags;
@SuppressWarnings("unused")
private ServerBossBarPacket() {
}
public ServerBossBarPacket(UUID uuid, BossBarAction action, Message title, float health, BossBarColor color, int dividers, int flags) {
this.uuid = uuid;
this.action = BossBarAction.ADD;
this.title = title;
this.health = health;
this.color = color;
this.dividers = dividers;
this.flags = flags;
}
public ServerBossBarPacket(UUID uuid) {
this.uuid = uuid;
this.action = BossBarAction.REMOVE;
}
public ServerBossBarPacket(UUID uuid, BossBarAction action, float health) {
this.uuid = uuid;
this.action = BossBarAction.UPDATE_HEALTH;
this.health = health;
}
public ServerBossBarPacket(UUID uuid, BossBarAction action, Message title) {
this.uuid = uuid;
this.action = BossBarAction.UPDATE_TITLE;
this.title = title;
}
public ServerBossBarPacket(UUID uuid, BossBarAction action, BossBarColor color, int dividers) {
this.uuid = uuid;
this.action = BossBarAction.UPDATE_STYLE;
this.color = color;
this.dividers = dividers;
}
public ServerBossBarPacket(UUID uuid, BossBarAction action, int flags) {
this.uuid = uuid;
this.action = BossBarAction.UPDATE_FLAGS;
this.flags = flags;
}
public UUID getUUID() {
return this.uuid;
}
public BossBarAction getAction() {
return this.action;
}
public Message getTitle() {
return this.title;
}
public float getHealth() {
return this.health;
}
public BossBarColor getColor() {
return this.color;
}
public int getDividers() {
return this.dividers;
}
public int getFlags() {
return this.flags;
}
@Override
public void read(NetInput in) throws IOException {
this.uuid = in.readUUID();
this.action = MagicValues.key(BossBarAction.class, in.readVarInt());
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_TITLE) {
this.title = Message.fromString(in.readString());
}
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_HEALTH) {
this.health = in.readFloat();
}
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_STYLE) {
this.color = MagicValues.key(BossBarColor.class, in.readVarInt());
this.dividers = in.readVarInt();
}
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_FLAGS) {
this.flags = in.readUnsignedByte();
}
}
@Override
public void write(NetOutput out) throws IOException {
out.writeUUID(this.uuid);
out.writeVarInt(MagicValues.value(Integer.class, this.action));
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_TITLE) {
out.writeString(this.title.toJsonString());
}
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_HEALTH) {
out.writeFloat(this.health);
}
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_STYLE) {
out.writeVarInt(MagicValues.value(Integer.class, this.color));
out.writeVarInt(this.dividers);
}
if(this.action == BossBarAction.ADD || this.action == BossBarAction.UPDATE_FLAGS) {
out.writeByte(this.flags);
}
}
@Override
public boolean isPriority() {
return false;
}
}

View file

@ -2,6 +2,7 @@ package org.spacehq.mc.protocol.packet.ingame.server;
import org.spacehq.mc.protocol.data.game.values.MagicValues; import org.spacehq.mc.protocol.data.game.values.MagicValues;
import org.spacehq.mc.protocol.data.game.values.entity.player.CombatState; import org.spacehq.mc.protocol.data.game.values.entity.player.CombatState;
import org.spacehq.mc.protocol.data.message.Message;
import org.spacehq.packetlib.io.NetInput; import org.spacehq.packetlib.io.NetInput;
import org.spacehq.packetlib.io.NetOutput; import org.spacehq.packetlib.io.NetOutput;
import org.spacehq.packetlib.packet.Packet; import org.spacehq.packetlib.packet.Packet;
@ -14,7 +15,7 @@ public class ServerCombatPacket implements Packet {
private int entityId; private int entityId;
private int duration; private int duration;
private int playerId; private int playerId;
private String message; private Message message;
public ServerCombatPacket() { public ServerCombatPacket() {
this.state = CombatState.ENTER_COMBAT; this.state = CombatState.ENTER_COMBAT;
@ -26,7 +27,7 @@ public class ServerCombatPacket implements Packet {
this.duration = duration; this.duration = duration;
} }
public ServerCombatPacket(int entityId, int playerId, String message) { public ServerCombatPacket(int entityId, int playerId, Message message) {
this.state = CombatState.ENTITY_DEAD; this.state = CombatState.ENTITY_DEAD;
this.entityId = entityId; this.entityId = entityId;
this.playerId = playerId; this.playerId = playerId;
@ -49,7 +50,7 @@ public class ServerCombatPacket implements Packet {
return this.playerId; return this.playerId;
} }
public String getMessage() { public Message getMessage() {
return this.message; return this.message;
} }
@ -62,7 +63,7 @@ public class ServerCombatPacket implements Packet {
} else if(this.state == CombatState.ENTITY_DEAD) { } else if(this.state == CombatState.ENTITY_DEAD) {
this.playerId = in.readVarInt(); this.playerId = in.readVarInt();
this.entityId = in.readInt(); this.entityId = in.readInt();
this.message = in.readString(); this.message = Message.fromString(in.readString());
} }
} }
@ -75,7 +76,7 @@ public class ServerCombatPacket implements Packet {
} else if(this.state == CombatState.ENTITY_DEAD) { } else if(this.state == CombatState.ENTITY_DEAD) {
out.writeVarInt(this.playerId); out.writeVarInt(this.playerId);
out.writeInt(this.entityId); out.writeInt(this.entityId);
out.writeString(this.message); out.writeString(this.message.toJsonString());
} }
} }

View file

@ -39,14 +39,14 @@ public class ServerEntityEquipmentPacket implements Packet {
@Override @Override
public void read(NetInput in) throws IOException { public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt(); this.entityId = in.readVarInt();
this.slot = in.readShort(); this.slot = in.readVarInt();
this.item = NetUtil.readItem(in); this.item = NetUtil.readItem(in);
} }
@Override @Override
public void write(NetOutput out) throws IOException { public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId); out.writeVarInt(this.entityId);
out.writeShort(this.slot); out.writeVarInt(this.slot);
NetUtil.writeItem(out, this.item); NetUtil.writeItem(out, this.item);
} }

View file

@ -1,48 +0,0 @@
package org.spacehq.mc.protocol.packet.ingame.server.entity;
import org.spacehq.mc.protocol.util.NetUtil;
import org.spacehq.opennbt.tag.builtin.CompoundTag;
import org.spacehq.packetlib.io.NetInput;
import org.spacehq.packetlib.io.NetOutput;
import org.spacehq.packetlib.packet.Packet;
import java.io.IOException;
public class ServerEntityNBTUpdatePacket implements Packet {
private int entityId;
private CompoundTag tag;
@SuppressWarnings("unused")
private ServerEntityNBTUpdatePacket() {
}
public ServerEntityNBTUpdatePacket(int entityId, CompoundTag tag) {
this.entityId = entityId;
this.tag = tag;
}
public int getEntityId() {
return this.entityId;
}
public CompoundTag getTag() {
return this.tag;
}
@Override
public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt();
this.tag = NetUtil.readNBT(in);
}
@Override
public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId);
NetUtil.writeNBT(out, this.tag);
}
@Override
public boolean isPriority() {
return false;
}
}

View file

@ -9,10 +9,12 @@ import org.spacehq.packetlib.io.NetOutput;
import org.spacehq.packetlib.packet.Packet; import org.spacehq.packetlib.packet.Packet;
import java.io.IOException; import java.io.IOException;
import java.util.UUID;
public class ServerSpawnMobPacket implements Packet { public class ServerSpawnMobPacket implements Packet {
private int entityId; private int entityId;
private UUID uuid;
private MobType type; private MobType type;
private double x; private double x;
private double y; private double y;
@ -29,8 +31,9 @@ public class ServerSpawnMobPacket implements Packet {
private ServerSpawnMobPacket() { private ServerSpawnMobPacket() {
} }
public ServerSpawnMobPacket(int entityId, MobType type, double x, double y, double z, float yaw, float pitch, float headYaw, double motX, double motY, double motZ, EntityMetadata metadata[]) { public ServerSpawnMobPacket(int entityId, UUID uuid, MobType type, double x, double y, double z, float yaw, float pitch, float headYaw, double motX, double motY, double motZ, EntityMetadata metadata[]) {
this.entityId = entityId; this.entityId = entityId;
this.uuid = uuid;
this.type = type; this.type = type;
this.x = x; this.x = x;
this.y = y; this.y = y;
@ -48,6 +51,10 @@ public class ServerSpawnMobPacket implements Packet {
return this.entityId; return this.entityId;
} }
public UUID getUUID() {
return this.uuid;
}
public MobType getType() { public MobType getType() {
return this.type; return this.type;
} }
@ -95,6 +102,7 @@ public class ServerSpawnMobPacket implements Packet {
@Override @Override
public void read(NetInput in) throws IOException { public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt(); this.entityId = in.readVarInt();
this.uuid = in.readUUID();
this.type = MagicValues.key(MobType.class, in.readByte()); this.type = MagicValues.key(MobType.class, in.readByte());
this.x = in.readInt() / 32D; this.x = in.readInt() / 32D;
this.y = in.readInt() / 32D; this.y = in.readInt() / 32D;
@ -111,6 +119,7 @@ public class ServerSpawnMobPacket implements Packet {
@Override @Override
public void write(NetOutput out) throws IOException { public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId); out.writeVarInt(this.entityId);
out.writeUUID(this.uuid);
out.writeByte(MagicValues.value(Integer.class, this.type)); out.writeByte(MagicValues.value(Integer.class, this.type));
out.writeInt((int) (this.x * 32)); out.writeInt((int) (this.x * 32));
out.writeInt((int) (this.y * 32)); out.writeInt((int) (this.y * 32));

View file

@ -13,10 +13,12 @@ import org.spacehq.packetlib.io.NetOutput;
import org.spacehq.packetlib.packet.Packet; import org.spacehq.packetlib.packet.Packet;
import java.io.IOException; import java.io.IOException;
import java.util.UUID;
public class ServerSpawnObjectPacket implements Packet { public class ServerSpawnObjectPacket implements Packet {
private int entityId; private int entityId;
private UUID uuid;
private ObjectType type; private ObjectType type;
private double x; private double x;
private double y; private double y;
@ -32,21 +34,21 @@ public class ServerSpawnObjectPacket implements Packet {
private ServerSpawnObjectPacket() { private ServerSpawnObjectPacket() {
} }
public ServerSpawnObjectPacket(int entityId, ObjectType type, double x, double y, double z, float yaw, float pitch) { public ServerSpawnObjectPacket(int entityId, UUID uuid, ObjectType type, double x, double y, double z, float yaw, float pitch) {
this(entityId, type, null, x, y, z, yaw, pitch, 0, 0, 0); this(entityId, uuid, type, null, x, y, z, yaw, pitch, 0, 0, 0);
} }
public ServerSpawnObjectPacket(int entityId, ObjectType type, ObjectData data, double x, double y, double z, float yaw, float pitch) { public ServerSpawnObjectPacket(int entityId, UUID uuid, ObjectType type, ObjectData data, double x, double y, double z, float yaw, float pitch) {
this(entityId, type, data, x, y, z, yaw, pitch, 0, 0, 0); this(entityId, uuid, type, data, x, y, z, yaw, pitch, 0, 0, 0);
} }
public ServerSpawnObjectPacket(int entityId, ObjectType type, double x, double y, double z, float yaw, float pitch, double motX, double motY, double motZ) { public ServerSpawnObjectPacket(int entityId, UUID uuid, ObjectType type, double x, double y, double z, float yaw, float pitch, double motX, double motY, double motZ) {
this(entityId, type, new ObjectData() { this(entityId, uuid, type, new ObjectData() {}, x, y, z, yaw, pitch, motX, motY, motZ);
}, x, y, z, yaw, pitch, motX, motY, motZ);
} }
public ServerSpawnObjectPacket(int entityId, ObjectType type, ObjectData data, double x, double y, double z, float yaw, float pitch, double motX, double motY, double motZ) { public ServerSpawnObjectPacket(int entityId, UUID uuid, ObjectType type, ObjectData data, double x, double y, double z, float yaw, float pitch, double motX, double motY, double motZ) {
this.entityId = entityId; this.entityId = entityId;
this.uuid = uuid;
this.type = type; this.type = type;
this.data = data; this.data = data;
this.x = x; this.x = x;
@ -63,6 +65,10 @@ public class ServerSpawnObjectPacket implements Packet {
return this.entityId; return this.entityId;
} }
public UUID getUUID() {
return this.uuid;
}
public ObjectType getType() { public ObjectType getType() {
return this.type; return this.type;
} }
@ -106,12 +112,14 @@ public class ServerSpawnObjectPacket implements Packet {
@Override @Override
public void read(NetInput in) throws IOException { public void read(NetInput in) throws IOException {
this.entityId = in.readVarInt(); this.entityId = in.readVarInt();
this.uuid = in.readUUID();
this.type = MagicValues.key(ObjectType.class, in.readByte()); this.type = MagicValues.key(ObjectType.class, in.readByte());
this.x = in.readInt() / 32D; this.x = in.readInt() / 32D;
this.y = in.readInt() / 32D; this.y = in.readInt() / 32D;
this.z = in.readInt() / 32D; this.z = in.readInt() / 32D;
this.pitch = in.readByte() * 360 / 256f; this.pitch = in.readByte() * 360 / 256f;
this.yaw = in.readByte() * 360 / 256f; this.yaw = in.readByte() * 360 / 256f;
int data = in.readInt(); int data = in.readInt();
if(data > 0) { if(data > 0) {
if(this.type == ObjectType.MINECART) { if(this.type == ObjectType.MINECART) {
@ -128,22 +136,24 @@ public class ServerSpawnObjectPacket implements Packet {
this.data = new ObjectData() { this.data = new ObjectData() {
}; };
} }
this.motX = in.readShort() / 8000D;
this.motY = in.readShort() / 8000D;
this.motZ = in.readShort() / 8000D;
} }
this.motX = in.readShort() / 8000D;
this.motY = in.readShort() / 8000D;
this.motZ = in.readShort() / 8000D;
} }
@Override @Override
public void write(NetOutput out) throws IOException { public void write(NetOutput out) throws IOException {
out.writeVarInt(this.entityId); out.writeVarInt(this.entityId);
out.writeUUID(this.uuid);
out.writeByte(MagicValues.value(Integer.class, this.type)); out.writeByte(MagicValues.value(Integer.class, this.type));
out.writeInt((int) (this.x * 32)); out.writeInt((int) (this.x * 32));
out.writeInt((int) (this.y * 32)); out.writeInt((int) (this.y * 32));
out.writeInt((int) (this.z * 32)); out.writeInt((int) (this.z * 32));
out.writeByte((byte) (this.pitch * 256 / 360)); out.writeByte((byte) (this.pitch * 256 / 360));
out.writeByte((byte) (this.yaw * 256 / 360)); out.writeByte((byte) (this.yaw * 256 / 360));
int data = 0; int data = 0;
if(this.data != null) { if(this.data != null) {
if(this.data instanceof MinecartType) { if(this.data instanceof MinecartType) {
@ -162,11 +172,10 @@ public class ServerSpawnObjectPacket implements Packet {
} }
out.writeInt(data); out.writeInt(data);
if(data > 0) {
out.writeShort((int) (this.motX * 8000)); out.writeShort((int) (this.motX * 8000));
out.writeShort((int) (this.motY * 8000)); out.writeShort((int) (this.motY * 8000));
out.writeShort((int) (this.motZ * 8000)); out.writeShort((int) (this.motZ * 8000));
}
} }
@Override @Override

View file

@ -18,14 +18,13 @@ public class ServerSpawnPlayerPacket implements Packet {
private double z; private double z;
private float yaw; private float yaw;
private float pitch; private float pitch;
private int currentItem;
private EntityMetadata metadata[]; private EntityMetadata metadata[];
@SuppressWarnings("unused") @SuppressWarnings("unused")
private ServerSpawnPlayerPacket() { private ServerSpawnPlayerPacket() {
} }
public ServerSpawnPlayerPacket(int entityId, UUID uuid, double x, double y, double z, float yaw, float pitch, int currentItem, EntityMetadata metadata[]) { public ServerSpawnPlayerPacket(int entityId, UUID uuid, double x, double y, double z, float yaw, float pitch, EntityMetadata metadata[]) {
this.entityId = entityId; this.entityId = entityId;
this.uuid = uuid; this.uuid = uuid;
this.x = x; this.x = x;
@ -33,7 +32,6 @@ public class ServerSpawnPlayerPacket implements Packet {
this.z = z; this.z = z;
this.yaw = yaw; this.yaw = yaw;
this.pitch = pitch; this.pitch = pitch;
this.currentItem = currentItem;
this.metadata = metadata; this.metadata = metadata;
} }
@ -65,10 +63,6 @@ public class ServerSpawnPlayerPacket implements Packet {
return this.pitch; return this.pitch;
} }
public int getCurrentItem() {
return this.currentItem;
}
public EntityMetadata[] getMetadata() { public EntityMetadata[] getMetadata() {
return this.metadata; return this.metadata;
} }
@ -82,7 +76,6 @@ public class ServerSpawnPlayerPacket implements Packet {
this.z = in.readInt() / 32D; this.z = in.readInt() / 32D;
this.yaw = in.readByte() * 360 / 256f; this.yaw = in.readByte() * 360 / 256f;
this.pitch = in.readByte() * 360 / 256f; this.pitch = in.readByte() * 360 / 256f;
this.currentItem = in.readShort();
this.metadata = NetUtil.readEntityMetadata(in); this.metadata = NetUtil.readEntityMetadata(in);
} }
@ -95,7 +88,6 @@ public class ServerSpawnPlayerPacket implements Packet {
out.writeInt((int) (this.z * 32)); out.writeInt((int) (this.z * 32));
out.writeByte((byte) (this.yaw * 256 / 360)); out.writeByte((byte) (this.yaw * 256 / 360));
out.writeByte((byte) (this.pitch * 256 / 360)); out.writeByte((byte) (this.pitch * 256 / 360));
out.writeShort(this.currentItem);
NetUtil.writeEntityMetadata(out, this.metadata); NetUtil.writeEntityMetadata(out, this.metadata);
} }