diff --git a/pom.xml b/pom.xml index b0ac07ec..c24f8d08 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.spacehq mcprotocollib - 1.10.2-SNAPSHOT + 1.11-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 d837b0ec..1415a351 100644 --- a/src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java +++ b/src/main/java/org/spacehq/mc/protocol/MinecraftConstants.java @@ -2,8 +2,8 @@ package org.spacehq.mc.protocol; public class MinecraftConstants { // General Constants - public static final String GAME_VERSION = "1.10.2"; - public static final int PROTOCOL_VERSION = 210; + public static final String GAME_VERSION = "1.11"; + public static final int PROTOCOL_VERSION = 315; // General Key Constants public static final String PROFILE_KEY = "profile"; diff --git a/src/main/java/org/spacehq/mc/protocol/data/MagicValues.java b/src/main/java/org/spacehq/mc/protocol/data/MagicValues.java index 7f70e79e..c84d28cd 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/MagicValues.java +++ b/src/main/java/org/spacehq/mc/protocol/data/MagicValues.java @@ -69,6 +69,7 @@ import org.spacehq.mc.protocol.data.game.world.block.value.PistonValueType; import org.spacehq.mc.protocol.data.game.world.effect.ParticleEffect; 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.map.MapIconType; 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.notify.EnterCreditsValue; @@ -297,6 +298,8 @@ public class MagicValues { register(EntityStatus.OP_PERMISSION_LEVEL_2, 26); register(EntityStatus.OP_PERMISSION_LEVEL_3, 27); register(EntityStatus.OP_PERMISSION_LEVEL_4, 28); + register(EntityStatus.IRON_GOLEM_NO_ROSE, 34); + register(EntityStatus.TOTEM_OF_UNDYING, 35); register(PositionElement.X, 0); register(PositionElement.Y, 1); @@ -306,8 +309,18 @@ public class MagicValues { register(GlobalEntityType.LIGHTNING_BOLT, 1); - register(MobType.MOB, 48); - register(MobType.MONSTER, 49); + register(MobType.ELDER_GUARDIAN, 4); + register(MobType.WITHER_SKELETON, 5); + register(MobType.STRAY, 6); + register(MobType.HUSK, 23); + register(MobType.ZOMBIE_VILLAGER, 27); + register(MobType.SKELETON_HORSE, 28); + register(MobType.ZOMBIE_HORSE, 29); + register(MobType.DONKEY, 31); + register(MobType.MULE, 32); + register(MobType.EVOCATION_ILLAGER, 34); + register(MobType.VEX, 35); + register(MobType.VINDICATION_ILLAGER, 36); register(MobType.CREEPER, 50); register(MobType.SKELETON, 51); register(MobType.SPIDER, 52); @@ -341,6 +354,7 @@ public class MagicValues { register(MobType.HORSE, 100); register(MobType.RABBIT, 101); register(MobType.POLAR_BEAR, 102); + register(MobType.LLAMA, 103); register(MobType.VILLAGER, 120); register(ObjectType.BOAT, 1); @@ -349,7 +363,7 @@ public class MagicValues { register(ObjectType.MINECART, 10); register(ObjectType.PRIMED_TNT, 50); register(ObjectType.ENDER_CRYSTAL, 51); - register(ObjectType.ARROW, 60); + register(ObjectType.TIPPED_ARROW, 60); register(ObjectType.SNOWBALL, 61); register(ObjectType.EGG, 62); register(ObjectType.GHAST_FIREBALL, 63); @@ -357,18 +371,18 @@ public class MagicValues { register(ObjectType.ENDER_PEARL, 65); register(ObjectType.WITHER_HEAD_PROJECTILE, 66); register(ObjectType.SHULKER_BULLET, 67); + register(ObjectType.LLAMA_SPIT, 68); register(ObjectType.FALLING_BLOCK, 70); register(ObjectType.ITEM_FRAME, 71); register(ObjectType.EYE_OF_ENDER, 72); register(ObjectType.POTION, 73); - register(ObjectType.FALLING_DRAGON_EGG, 74); register(ObjectType.EXP_BOTTLE, 75); register(ObjectType.FIREWORK_ROCKET, 76); register(ObjectType.LEASH_KNOT, 77); register(ObjectType.ARMOR_STAND, 78); + register(ObjectType.EVOCATION_FANGS, 79); register(ObjectType.FISH_HOOK, 90); register(ObjectType.SPECTRAL_ARROW, 91); - register(ObjectType.TIPPED_ARROW, 92); register(ObjectType.DRAGON_FIREBALL, 93); register(MinecartType.NORMAL, 0); @@ -444,6 +458,23 @@ public class MagicValues { register(ScoreboardAction.ADD_OR_UPDATE, 0); register(ScoreboardAction.REMOVE, 1); + register(MapIconType.WHITE_ARROW, 0); + register(MapIconType.GREEN_ARROW, 1); + register(MapIconType.RED_ARROW, 2); + register(MapIconType.BLUE_ARROW, 3); + register(MapIconType.WHITE_CROSS, 4); + register(MapIconType.RED_POINTER, 5); + register(MapIconType.WHITE_CIRCLE, 6); + register(MapIconType.SMALL_WHITE_CIRCLE, 7); + register(MapIconType.MANSION, 8); + register(MapIconType.TEMPLE, 9); + register(MapIconType.UNUSED_10, 10); + register(MapIconType.UNUSED_11, 11); + register(MapIconType.UNUSED_12, 12); + register(MapIconType.UNUSED_13, 13); + register(MapIconType.UNUSED_14, 14); + register(MapIconType.UNUSED_15, 15); + register(WindowType.GENERIC_INVENTORY, "minecraft:container"); register(WindowType.ANVIL, "minecraft:anvil"); register(WindowType.BEACON, "minecraft:beacon"); @@ -456,6 +487,7 @@ public class MagicValues { register(WindowType.FURNACE, "minecraft:furnace"); register(WindowType.HOPPER, "minecraft:hopper"); register(WindowType.VILLAGER, "minecraft:villager"); + register(WindowType.SHULKER_BOX, "minecraft:shulker_box"); register(WindowType.HORSE, "EntityHorse"); register(BrewingStandProperty.BREW_TIME, 0); @@ -750,9 +782,10 @@ public class MagicValues { register(TitleAction.TITLE, 0); register(TitleAction.SUBTITLE, 1); - register(TitleAction.TIMES, 2); - register(TitleAction.CLEAR, 3); - register(TitleAction.RESET, 4); + register(TitleAction.ACTION_BAR, 2); + register(TitleAction.TIMES, 3); + register(TitleAction.CLEAR, 4); + register(TitleAction.RESET, 5); register(ResourcePackStatus.SUCCESSFULLY_LOADED, 0); register(ResourcePackStatus.DECLINED, 1); diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/TitleAction.java b/src/main/java/org/spacehq/mc/protocol/data/game/TitleAction.java index dd27e8fd..46600e90 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/game/TitleAction.java +++ b/src/main/java/org/spacehq/mc/protocol/data/game/TitleAction.java @@ -3,6 +3,7 @@ package org.spacehq.mc.protocol.data.game; public enum TitleAction { TITLE, SUBTITLE, + ACTION_BAR, TIMES, CLEAR, RESET; diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/entity/EntityStatus.java b/src/main/java/org/spacehq/mc/protocol/data/game/entity/EntityStatus.java index 1da52e5b..0672ada9 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/game/entity/EntityStatus.java +++ b/src/main/java/org/spacehq/mc/protocol/data/game/entity/EntityStatus.java @@ -27,5 +27,7 @@ public enum EntityStatus { OP_PERMISSION_LEVEL_1, OP_PERMISSION_LEVEL_2, OP_PERMISSION_LEVEL_3, - OP_PERMISSION_LEVEL_4; + OP_PERMISSION_LEVEL_4, + IRON_GOLEM_NO_ROSE, + TOTEM_OF_UNDYING; } diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/entity/type/MobType.java b/src/main/java/org/spacehq/mc/protocol/data/game/entity/type/MobType.java index f860df23..c4bd8b86 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/game/entity/type/MobType.java +++ b/src/main/java/org/spacehq/mc/protocol/data/game/entity/type/MobType.java @@ -1,8 +1,18 @@ package org.spacehq.mc.protocol.data.game.entity.type; public enum MobType { - MOB, - MONSTER, + ELDER_GUARDIAN, + WITHER_SKELETON, + STRAY, + HUSK, + ZOMBIE_VILLAGER, + SKELETON_HORSE, + ZOMBIE_HORSE, + DONKEY, + MULE, + EVOCATION_ILLAGER, + VEX, + VINDICATION_ILLAGER, CREEPER, SKELETON, SPIDER, @@ -36,5 +46,6 @@ public enum MobType { HORSE, RABBIT, POLAR_BEAR, + LLAMA, VILLAGER; } diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/entity/type/object/ObjectType.java b/src/main/java/org/spacehq/mc/protocol/data/game/entity/type/object/ObjectType.java index dbb5ce92..71ba9154 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/game/entity/type/object/ObjectType.java +++ b/src/main/java/org/spacehq/mc/protocol/data/game/entity/type/object/ObjectType.java @@ -7,7 +7,6 @@ public enum ObjectType { MINECART, PRIMED_TNT, ENDER_CRYSTAL, - ARROW, SNOWBALL, EGG, GHAST_FIREBALL, @@ -15,15 +14,16 @@ public enum ObjectType { ENDER_PEARL, WITHER_HEAD_PROJECTILE, SHULKER_BULLET, + LLAMA_SPIT, FALLING_BLOCK, ITEM_FRAME, EYE_OF_ENDER, POTION, - FALLING_DRAGON_EGG, EXP_BOTTLE, FIREWORK_ROCKET, LEASH_KNOT, ARMOR_STAND, + EVOCATION_FANGS, FISH_HOOK, SPECTRAL_ARROW, TIPPED_ARROW, diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/window/WindowType.java b/src/main/java/org/spacehq/mc/protocol/data/game/window/WindowType.java index 620b8b1d..a97adf7b 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/game/window/WindowType.java +++ b/src/main/java/org/spacehq/mc/protocol/data/game/window/WindowType.java @@ -14,6 +14,7 @@ public enum WindowType { FURNACE, HOPPER, VILLAGER, + SHULKER_BOX, HORSE; } diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/world/map/MapPlayer.java b/src/main/java/org/spacehq/mc/protocol/data/game/world/map/MapIcon.java similarity index 56% rename from src/main/java/org/spacehq/mc/protocol/data/game/world/map/MapPlayer.java rename to src/main/java/org/spacehq/mc/protocol/data/game/world/map/MapIcon.java index 3ca85d04..87ac8359 100644 --- a/src/main/java/org/spacehq/mc/protocol/data/game/world/map/MapPlayer.java +++ b/src/main/java/org/spacehq/mc/protocol/data/game/world/map/MapIcon.java @@ -1,15 +1,15 @@ package org.spacehq.mc.protocol.data.game.world.map; -public class MapPlayer { +public class MapIcon { private int centerX; private int centerZ; - private int iconSize; + private MapIconType iconType; private int iconRotation; - public MapPlayer(int centerX, int centerZ, int iconSize, int iconRotation) { + public MapIcon(int centerX, int centerZ, MapIconType iconType, int iconRotation) { this.centerX = centerX; this.centerZ = centerZ; - this.iconSize = iconSize; + this.iconType = iconType; this.iconRotation = iconRotation; } @@ -21,8 +21,8 @@ public class MapPlayer { return this.centerZ; } - public int getIconSize() { - return this.iconSize; + public MapIconType getIconType() { + return this.iconType; } public int getIconRotation() { @@ -31,7 +31,7 @@ public class MapPlayer { @Override public boolean equals(Object o) { - return o instanceof MapPlayer && this.centerX == ((MapPlayer) o).centerX && this.centerZ == ((MapPlayer) o).centerZ && this.iconSize == ((MapPlayer) o).iconSize && this.iconRotation == ((MapPlayer) o).iconRotation; + return o instanceof MapIcon && this.centerX == ((MapIcon) o).centerX && this.centerZ == ((MapIcon) o).centerZ && this.iconType == ((MapIcon) o).iconType && this.iconRotation == ((MapIcon) o).iconRotation; } @Override @@ -39,7 +39,7 @@ public class MapPlayer { int result = this.centerX; result = 31 * result + this.centerZ; result = 31 * result + this.iconRotation; - result = 31 * result + this.iconSize; + result = 31 * result + (this.iconType != null ? this.iconType.hashCode() : 0); return result; } } diff --git a/src/main/java/org/spacehq/mc/protocol/data/game/world/map/MapIconType.java b/src/main/java/org/spacehq/mc/protocol/data/game/world/map/MapIconType.java new file mode 100644 index 00000000..fd44a3bd --- /dev/null +++ b/src/main/java/org/spacehq/mc/protocol/data/game/world/map/MapIconType.java @@ -0,0 +1,20 @@ +package org.spacehq.mc.protocol.data.game.world.map; + +public enum MapIconType { + WHITE_ARROW, + GREEN_ARROW, + RED_ARROW, + BLUE_ARROW, + WHITE_CROSS, + RED_POINTER, + WHITE_CIRCLE, + SMALL_WHITE_CIRCLE, + MANSION, + TEMPLE, + UNUSED_10, + UNUSED_11, + UNUSED_12, + UNUSED_13, + UNUSED_14, + UNUSED_15; +} diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/player/ClientPlayerPlaceBlockPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/player/ClientPlayerPlaceBlockPacket.java index 10df7d5c..0632b2eb 100644 --- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/player/ClientPlayerPlaceBlockPacket.java +++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/client/player/ClientPlayerPlaceBlockPacket.java @@ -63,9 +63,9 @@ public class ClientPlayerPlaceBlockPacket implements Packet { this.position = NetUtil.readPosition(in); this.face = MagicValues.key(BlockFace.class, in.readVarInt()); this.hand = MagicValues.key(Hand.class, in.readVarInt()); - this.cursorX = in.readUnsignedByte() / 16f; - this.cursorY = in.readUnsignedByte() / 16f; - this.cursorZ = in.readUnsignedByte() / 16f; + this.cursorX = in.readFloat(); + this.cursorY = in.readFloat(); + this.cursorZ = in.readFloat(); } @Override @@ -73,9 +73,9 @@ public class ClientPlayerPlaceBlockPacket implements Packet { NetUtil.writePosition(out, this.position); out.writeVarInt(MagicValues.value(Integer.class, this.face)); out.writeVarInt(MagicValues.value(Integer.class, this.hand)); - out.writeByte((int) (this.cursorX * 16)); - out.writeByte((int) (this.cursorY * 16)); - out.writeByte((int) (this.cursorZ * 16)); + out.writeFloat(this.cursorX); + out.writeFloat(this.cursorY); + out.writeFloat(this.cursorZ); } @Override diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/ServerTitlePacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/ServerTitlePacket.java index 503b6710..e2b7265d 100644 --- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/ServerTitlePacket.java +++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/ServerTitlePacket.java @@ -17,6 +17,8 @@ public class ServerTitlePacket implements Packet { private Message subtitle; + private Message actionBar; + private int fadeIn; private int stay; private int fadeOut; @@ -30,12 +32,28 @@ public class ServerTitlePacket implements Packet { } public ServerTitlePacket(Message title, boolean sub) { - if(sub) { - this.action = TitleAction.SUBTITLE; - this.subtitle = title; - } else { - this.action = TitleAction.TITLE; - this.title = title; + this(sub ? TitleAction.SUBTITLE : TitleAction.TITLE, title); + } + + public ServerTitlePacket(TitleAction action, String title) { + this(action, Message.fromString(title)); + } + + public ServerTitlePacket(TitleAction action, Message title) { + this.action = action; + + switch (action) { + case TITLE: + this.title = title; + break; + case SUBTITLE: + this.subtitle = title; + break; + case ACTION_BAR: + this.actionBar = title; + break; + default: + throw new IllegalArgumentException("action must be one of TITLE, SUBTITLE, ACTION_BAR"); } } @@ -66,6 +84,10 @@ public class ServerTitlePacket implements Packet { return this.subtitle; } + public Message getActionBar() { + return this.actionBar; + } + public int getFadeIn() { return this.fadeIn; } @@ -88,6 +110,9 @@ public class ServerTitlePacket implements Packet { case SUBTITLE: this.subtitle = Message.fromString(in.readString()); break; + case ACTION_BAR: + this.actionBar = Message.fromString(in.readString()); + break; case TIMES: this.fadeIn = in.readInt(); this.stay = in.readInt(); @@ -110,6 +135,9 @@ public class ServerTitlePacket implements Packet { case SUBTITLE: out.writeString(this.subtitle.toJsonString()); break; + case ACTION_BAR: + out.writeString(this.actionBar.toJsonString()); + break; case TIMES: out.writeInt(this.fadeIn); out.writeInt(this.stay); diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityCollectItemPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityCollectItemPacket.java index 7b5a8845..744948a1 100644 --- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityCollectItemPacket.java +++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/entity/ServerEntityCollectItemPacket.java @@ -11,14 +11,16 @@ public class ServerEntityCollectItemPacket implements Packet { private int collectedEntityId; private int collectorEntityId; + private int itemCount; @SuppressWarnings("unused") private ServerEntityCollectItemPacket() { } - public ServerEntityCollectItemPacket(int collectedEntityId, int collectorEntityId) { + public ServerEntityCollectItemPacket(int collectedEntityId, int collectorEntityId, int itemCount) { this.collectedEntityId = collectedEntityId; this.collectorEntityId = collectorEntityId; + this.itemCount = itemCount; } public int getCollectedEntityId() { @@ -29,16 +31,22 @@ public class ServerEntityCollectItemPacket implements Packet { return this.collectorEntityId; } + public int getItemCount() { + return this.itemCount; + } + @Override public void read(NetInput in) throws IOException { this.collectedEntityId = in.readVarInt(); this.collectorEntityId = in.readVarInt(); + this.itemCount = in.readVarInt(); } @Override public void write(NetOutput out) throws IOException { out.writeVarInt(this.collectedEntityId); out.writeVarInt(this.collectorEntityId); + out.writeVarInt(this.itemCount); } @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 1e7b009a..e904d642 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,7 +104,7 @@ public class ServerSpawnMobPacket implements Packet { public void read(NetInput in) throws IOException { this.entityId = in.readVarInt(); this.uuid = in.readUUID(); - this.type = MagicValues.key(MobType.class, in.readUnsignedByte()); + this.type = MagicValues.key(MobType.class, in.readVarInt()); this.x = in.readDouble(); this.y = in.readDouble(); this.z = in.readDouble(); @@ -121,7 +121,7 @@ public class ServerSpawnMobPacket implements Packet { public void write(NetOutput out) throws IOException { out.writeVarInt(this.entityId); out.writeUUID(this.uuid); - out.writeByte(MagicValues.value(Integer.class, this.type)); + out.writeVarInt(MagicValues.value(Integer.class, this.type)); out.writeDouble(this.x); out.writeDouble(this.y); out.writeDouble(this.z); 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 c6f97fd0..5aa69c9c 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 @@ -131,7 +131,7 @@ public class ServerSpawnObjectPacket implements Packet { this.data = new FallingBlockData(data & 65535, data >> 16); } else if(this.type == ObjectType.POTION) { this.data = new SplashPotionData(data); - } else if(this.type == ObjectType.ARROW || this.type == ObjectType.SPECTRAL_ARROW || this.type == ObjectType.TIPPED_ARROW || this.type == ObjectType.GHAST_FIREBALL || this.type == ObjectType.BLAZE_FIREBALL || this.type == ObjectType.DRAGON_FIREBALL || this.type == ObjectType.WITHER_HEAD_PROJECTILE || this.type == ObjectType.FISH_HOOK) { + } else if(this.type == ObjectType.SPECTRAL_ARROW || this.type == ObjectType.TIPPED_ARROW || this.type == ObjectType.GHAST_FIREBALL || this.type == ObjectType.BLAZE_FIREBALL || this.type == ObjectType.DRAGON_FIREBALL || this.type == ObjectType.WITHER_HEAD_PROJECTILE || this.type == ObjectType.FISH_HOOK) { this.data = new ProjectileData(data); } else { this.data = new ObjectData() { diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerBlockValuePacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerBlockValuePacket.java index 3a0f3446..37b6ef12 100644 --- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerBlockValuePacket.java +++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerBlockValuePacket.java @@ -31,6 +31,8 @@ public class ServerBlockValuePacket implements Packet { private static final int CHEST = 54; private static final int ENDER_CHEST = 130; private static final int TRAPPED_CHEST = 146; + private static final int SHULKER_BOX_LOWER = 219; + private static final int SHULKER_BOX_HIGHER = 234; private Position position; private BlockValueType type; @@ -80,7 +82,8 @@ public class ServerBlockValuePacket implements Packet { } else if(this.blockId == MOB_SPAWNER) { this.type = MagicValues.key(MobSpawnerValueType.class, type); this.value = new MobSpawnerValue(); - } else if(this.blockId == CHEST || this.blockId == ENDER_CHEST || this.blockId == TRAPPED_CHEST) { + } else if(this.blockId == CHEST || this.blockId == ENDER_CHEST || this.blockId == TRAPPED_CHEST + || (this.blockId >= SHULKER_BOX_LOWER && this.blockId <= SHULKER_BOX_HIGHER)) { this.type = MagicValues.key(ChestValueType.class, type); this.value = new ChestValue(value); } else { diff --git a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerMapDataPacket.java b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerMapDataPacket.java index 04c64f5a..a0667b39 100644 --- a/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerMapDataPacket.java +++ b/src/main/java/org/spacehq/mc/protocol/packet/ingame/server/world/ServerMapDataPacket.java @@ -1,7 +1,9 @@ package org.spacehq.mc.protocol.packet.ingame.server.world; +import org.spacehq.mc.protocol.data.MagicValues; import org.spacehq.mc.protocol.data.game.world.map.MapData; -import org.spacehq.mc.protocol.data.game.world.map.MapPlayer; +import org.spacehq.mc.protocol.data.game.world.map.MapIcon; +import org.spacehq.mc.protocol.data.game.world.map.MapIconType; import org.spacehq.mc.protocol.util.ReflectionToString; import org.spacehq.packetlib.io.NetInput; import org.spacehq.packetlib.io.NetOutput; @@ -14,7 +16,7 @@ public class ServerMapDataPacket implements Packet { private int mapId; private byte scale; private boolean trackingPosition; - private MapPlayer players[]; + private MapIcon icons[]; private MapData data; @@ -22,15 +24,15 @@ public class ServerMapDataPacket implements Packet { private ServerMapDataPacket() { } - public ServerMapDataPacket(int mapId, byte scale, boolean trackingPosition, MapPlayer players[]) { - this(mapId, scale, trackingPosition, players, null); + public ServerMapDataPacket(int mapId, byte scale, boolean trackingPosition, MapIcon icons[]) { + this(mapId, scale, trackingPosition, icons, null); } - public ServerMapDataPacket(int mapId, byte scale, boolean trackingPosition, MapPlayer players[], MapData data) { + public ServerMapDataPacket(int mapId, byte scale, boolean trackingPosition, MapIcon icons[], MapData data) { this.mapId = mapId; this.scale = scale; this.trackingPosition = trackingPosition; - this.players = players; + this.icons = icons; this.data = data; } @@ -46,8 +48,8 @@ public class ServerMapDataPacket implements Packet { return this.trackingPosition; } - public MapPlayer[] getPlayers() { - return this.players; + public MapIcon[] getIcons() { + return this.icons; } public MapData getData() { @@ -59,14 +61,14 @@ public class ServerMapDataPacket implements Packet { this.mapId = in.readVarInt(); this.scale = in.readByte(); this.trackingPosition = in.readBoolean(); - this.players = new MapPlayer[in.readVarInt()]; - for(int index = 0; index < this.players.length; index++) { + this.icons = new MapIcon[in.readVarInt()]; + for(int index = 0; index < this.icons.length; index++) { int data = in.readUnsignedByte(); - int size = (data >> 4) & 15; + int type = (data >> 4) & 15; int rotation = data & 15; int x = in.readUnsignedByte(); int z = in.readUnsignedByte(); - this.players[index] = new MapPlayer(x, z, size, rotation); + this.icons[index] = new MapIcon(x, z, MagicValues.value(MapIconType.class, type), rotation); } int columns = in.readUnsignedByte(); @@ -84,12 +86,13 @@ public class ServerMapDataPacket implements Packet { out.writeVarInt(this.mapId); out.writeByte(this.scale); out.writeBoolean(this.trackingPosition); - out.writeVarInt(this.players.length); - for(int index = 0; index < this.players.length; index++) { - MapPlayer player = this.players[index]; - out.writeByte((player.getIconSize() & 15) << 4 | player.getIconRotation() & 15); - out.writeByte(player.getCenterX()); - out.writeByte(player.getCenterZ()); + out.writeVarInt(this.icons.length); + for(int index = 0; index < this.icons.length; index++) { + MapIcon icon = this.icons[index]; + int type = MagicValues.key(Integer.class, icon.getIconType()); + out.writeByte((type & 15) << 4 | icon.getIconRotation() & 15); + out.writeByte(icon.getCenterX()); + out.writeByte(icon.getCenterZ()); } if(this.data != null && this.data.getColumns() != 0) {