From c15dd9d252a2accc6b147a8f3994296f9ac5155a Mon Sep 17 00:00:00 2001 From: Bixilon Date: Tue, 23 Jun 2020 20:24:28 +0200 Subject: [PATCH] All 1.8 EntityMetaData, all 1.8 mobs and objects --- .../game/datatypes/EntityRotation.java | 44 +++++++ .../game/datatypes/entities/Mobs.java | 2 + .../game/datatypes/entities/Objects.java | 1 + .../entities/meta/AgeableMetaData.java | 1 + .../entities/meta/ArmorStandMetaData.java | 117 ++++++++++++++++++ .../entities/meta/ArrowMetaData.java | 3 +- .../datatypes/entities/meta/BatMetaData.java | 1 + .../entities/meta/BlazeMetaData.java | 1 + .../datatypes/entities/meta/BoatMetaData.java | 3 + .../entities/meta/CreeperMetaData.java | 2 + .../entities/meta/EnderCrystalMetaData.java | 1 + .../entities/meta/EndermanMetaData.java | 4 +- .../entities/meta/EntityMetaData.java | 27 +++- .../entities/meta/FireworkMetaData.java | 1 + ...Data.java => FurnaceMinecartMetaData.java} | 5 +- .../entities/meta/GhastMetaData.java | 1 + .../entities/meta/GuardianMetaData.java | 51 ++++++++ .../entities/meta/HorseMetaData.java | 12 ++ .../entities/meta/HumanMetaData.java | 3 + .../entities/meta/IronGolemMetaData.java | 1 + .../entities/meta/ItemFrameMetaData.java | 4 + .../datatypes/entities/meta/ItemMetaData.java | 1 + .../entities/meta/MinecartMetaData.java | 22 +++- .../datatypes/entities/meta/MobMetaData.java | 16 +++ .../entities/meta/OcelotMetaData.java | 1 + .../datatypes/entities/meta/PigMetaData.java | 1 + .../entities/meta/RabbitMetaData.java | 34 +++++ .../entities/meta/SheepMetaData.java | 2 + .../entities/meta/SkeletonMetaData.java | 1 + .../entities/meta/SlimeMetaData.java | 1 + .../entities/meta/SpiderMetaData.java | 1 + .../entities/meta/TameableMetaData.java | 3 + .../entities/meta/VillagerMetaData.java | 3 +- .../entities/meta/WitchMetaData.java | 3 +- .../entities/meta/WitherMetaData.java | 4 + .../datatypes/entities/meta/WolfMetaData.java | 22 ++-- .../entities/meta/ZombieMetaData.java | 3 + .../game/datatypes/entities/mob/Guardian.java | 64 ++++++++++ .../game/datatypes/entities/mob/Rabbit.java | 64 ++++++++++ .../entities/objects/ArmorStand.java | 56 +++++++++ 40 files changed, 565 insertions(+), 22 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/game/datatypes/EntityRotation.java create mode 100644 src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ArmorStandMetaData.java rename src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/{FurnaceMetaData.java => FurnaceMinecartMetaData.java} (87%) create mode 100644 src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/GuardianMetaData.java create mode 100644 src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/RabbitMetaData.java create mode 100644 src/main/java/de/bixilon/minosoft/game/datatypes/entities/mob/Guardian.java create mode 100644 src/main/java/de/bixilon/minosoft/game/datatypes/entities/mob/Rabbit.java create mode 100644 src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ArmorStand.java diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/EntityRotation.java b/src/main/java/de/bixilon/minosoft/game/datatypes/EntityRotation.java new file mode 100644 index 000000000..9981d34e1 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/EntityRotation.java @@ -0,0 +1,44 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.game.datatypes; + +public class EntityRotation { + final float yaw; + final float pitch; + final float roll; + + public EntityRotation(float yaw, float pitch, float roll) { + this.yaw = yaw; + this.pitch = pitch; + this.roll = roll; + } + + + public float getYaw() { + return yaw; + } + + public float getPitch() { + return pitch; + } + + public float getRoll() { + return roll; + } + + @Override + public String toString() { + return String.format("%s %s %s", getYaw(), getPitch(), getRoll()); + } +} diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/Mobs.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/Mobs.java index 9bd2553ce..0758e7e04 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/Mobs.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/Mobs.java @@ -35,6 +35,7 @@ public enum Mobs { WITHER(new Identifier("wither"), 64, Wither.class), BAT(new Identifier("bat"), 65, Bat.class), WITCH(new Identifier("witch"), 66, Witch.class), + GUARDIAN(new Identifier("witch"), 68, Guardian.class), PIG(new Identifier("pig"), 90, Pig.class), SHEEP(new Identifier("sheep"), 91, Sheep.class), COW(new Identifier("cow"), 92, Cow.class), @@ -46,6 +47,7 @@ public enum Mobs { OCELOT(new Identifier("ocelot"), 98, Ocelot.class), IRON_GOLEM(new Identifier("iron_golem"), 99, IronGolem.class), HORSE(new Identifier("horse"), 100, Horse.class), + RABBIT(new Identifier("rabbit"), 101, Rabbit.class), VILLAGER(new Identifier("villager"), 120, Villager.class); final Identifier identifier; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/Objects.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/Objects.java index 95186010e..3f98a2db6 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/Objects.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/Objects.java @@ -37,6 +37,7 @@ public enum Objects implements EntityEnumInterface { THROWN_EXP_BOTTLE(null, 75, ThrownExpBottle.class), FIREWORK(new Identifier("firework"), 76, Firework.class), LEASH_KNOT(new Identifier("firework"), 77, LeashKnot.class), + ARMOR_STAND(new Identifier("armor_stand"), 78, ArmorStand.class), FISHING_FLOAT(null, 90, FishingFloat.class); //ToDo: identifier diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/AgeableMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/AgeableMetaData.java index c81223639..0c97b24d4 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/AgeableMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/AgeableMetaData.java @@ -26,6 +26,7 @@ public class AgeableMetaData extends MobMetaData { public int getAge() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(12).getData(); } return 0; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ArmorStandMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ArmorStandMetaData.java new file mode 100644 index 000000000..4bda73367 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ArmorStandMetaData.java @@ -0,0 +1,117 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.game.datatypes.entities.meta; + +import de.bixilon.minosoft.game.datatypes.EntityRotation; +import de.bixilon.minosoft.protocol.protocol.InByteBuffer; +import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; +import de.bixilon.minosoft.util.BitByte; + +public class ArmorStandMetaData extends MobMetaData { + + public ArmorStandMetaData(InByteBuffer buffer, ProtocolVersion v) { + super(buffer, v); + } + + + public boolean isSmall() { + switch (version) { + case VERSION_1_8: + return BitByte.isBitSet((byte) sets.get(10).getData(), 0); + } + return false; + } + + public boolean hasGravity() { + switch (version) { + case VERSION_1_8: + return BitByte.isBitSet((byte) sets.get(10).getData(), 1); + } + return false; + } + + public boolean hasArms() { + switch (version) { + case VERSION_1_8: + return BitByte.isBitSet((byte) sets.get(10).getData(), 2); + } + return false; + } + + public boolean removeBasePlate() { + switch (version) { + case VERSION_1_8: + return BitByte.isBitSet((byte) sets.get(10).getData(), 3); + } + return false; + } + + public boolean hasMarker() { + switch (version) { + case VERSION_1_8: + return BitByte.isBitSet((byte) sets.get(10).getData(), 4); + } + return false; + } + + public EntityRotation getHeadPosition() { + switch (version) { + case VERSION_1_8: + return (EntityRotation) sets.get(11).getData(); + } + return null; + } + + public EntityRotation getBodyPosition() { + switch (version) { + case VERSION_1_8: + return (EntityRotation) sets.get(12).getData(); + } + return null; + } + + public EntityRotation getLeftArmPosition() { + switch (version) { + case VERSION_1_8: + return (EntityRotation) sets.get(13).getData(); + } + return null; + } + + public EntityRotation getRightArmPosition() { + switch (version) { + case VERSION_1_8: + return (EntityRotation) sets.get(14).getData(); + } + return null; + } + + public EntityRotation getLeftLegPosition() { + switch (version) { + case VERSION_1_8: + return (EntityRotation) sets.get(15).getData(); + } + return null; + } + + public EntityRotation getRightLegPosition() { + switch (version) { + case VERSION_1_8: + return (EntityRotation) sets.get(16).getData(); + } + return null; + } + + +} diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ArrowMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ArrowMetaData.java index 958313879..13bdca556 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ArrowMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ArrowMetaData.java @@ -25,7 +25,8 @@ public class ArrowMetaData extends EntityMetaData { public boolean isCritical() { switch (version) { case VERSION_1_7_10: - return (int) sets.get(16).getData() == 0x01; + case VERSION_1_8: + return (byte) sets.get(16).getData() == 0x01; } return false; } diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BatMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BatMetaData.java index 3aff117ed..d6467d160 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BatMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BatMetaData.java @@ -26,6 +26,7 @@ public class BatMetaData extends MobMetaData { public boolean isHanging() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(16).getData() == 0x01; } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BlazeMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BlazeMetaData.java index e01c0e788..aeebffe34 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BlazeMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BlazeMetaData.java @@ -26,6 +26,7 @@ public class BlazeMetaData extends MobMetaData { public boolean isOnFire() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(16).getData() == 0x01; } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BoatMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BoatMetaData.java index 8a0510a5f..361d7df6a 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BoatMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/BoatMetaData.java @@ -25,6 +25,7 @@ public class BoatMetaData extends EntityMetaData { public int getTimeSinceHit() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(17).getData(); } return 0; @@ -33,6 +34,7 @@ public class BoatMetaData extends EntityMetaData { public int getForwardDirection() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(18).getData(); } return 0; @@ -41,6 +43,7 @@ public class BoatMetaData extends EntityMetaData { public float getDamageTaken() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (float) sets.get(19).getData(); } return 0; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/CreeperMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/CreeperMetaData.java index 778d30900..73c008405 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/CreeperMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/CreeperMetaData.java @@ -26,6 +26,7 @@ public class CreeperMetaData extends MobMetaData { public byte getState() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(16).getData(); } return -1; @@ -35,6 +36,7 @@ public class CreeperMetaData extends MobMetaData { public boolean isPowered() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(17).getData() == 0x01; } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EnderCrystalMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EnderCrystalMetaData.java index ba9e3e512..7f89e38d2 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EnderCrystalMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EnderCrystalMetaData.java @@ -25,6 +25,7 @@ public class EnderCrystalMetaData extends EntityMetaData { public int getHealth() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(8).getData(); } return 0; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EndermanMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EndermanMetaData.java index 9f203542f..d30ccc892 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EndermanMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EndermanMetaData.java @@ -27,6 +27,7 @@ public class EndermanMetaData extends MobMetaData { public Blocks getCarriedBlock() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return Blocks.byLegacy((short) sets.get(16).getData(), (byte) sets.get(17).getData()); } return Blocks.AIR; @@ -35,7 +36,8 @@ public class EndermanMetaData extends MobMetaData { public boolean isScreaming() { switch (version) { case VERSION_1_7_10: - return (byte) sets.get(17).getData() == 0x01; + case VERSION_1_8: + return (byte) sets.get(18).getData() == 0x01; } return false; } diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EntityMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EntityMetaData.java index cb083bbbf..ebf6026b0 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EntityMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/EntityMetaData.java @@ -13,6 +13,7 @@ package de.bixilon.minosoft.game.datatypes.entities.meta; +import de.bixilon.minosoft.game.datatypes.EntityRotation; import de.bixilon.minosoft.game.datatypes.Vector; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; @@ -24,15 +25,20 @@ public class EntityMetaData { final HashMap sets = new HashMap<>(); final ProtocolVersion version; + /* + 1.7.10: https://wiki.vg/index.php?title=Entity_metadata&oldid=5991 + 1.8: https://wiki.vg/index.php?title=Entity_metadata&oldid=6611 + */ public EntityMetaData(InByteBuffer buffer, ProtocolVersion v) { version = v; switch (v) { case VERSION_1_7_10: + case VERSION_1_8: byte item = buffer.readByte(); while (item != 0x7F) { byte index = (byte) (item & 0x1F); Object data; - Type_1_7_10 type = Type_1_7_10.byId((item & 0xFF) >>> 5); + TypeLegacy type = TypeLegacy.byId((item & 0xFF) >>> 5); switch (type) { case BYTE: data = buffer.readByte(); @@ -55,6 +61,9 @@ public class EntityMetaData { case SLOT: data = buffer.readSlot(v); break; + case POSITION: + data = new EntityRotation(buffer.readFloat(), buffer.readFloat(), buffer.readFloat()); + break; default: throw new IllegalStateException("Unexpected value: " + type); } @@ -152,6 +161,7 @@ public class EntityMetaData { public boolean onFire() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((byte) sets.get(0).getData(), 0); } return false; @@ -160,6 +170,7 @@ public class EntityMetaData { public boolean isSneaking() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((byte) sets.get(0).getData(), 1); } return false; @@ -168,6 +179,7 @@ public class EntityMetaData { public boolean isSprinting() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((byte) sets.get(0).getData(), 2); } return false; @@ -176,6 +188,7 @@ public class EntityMetaData { public boolean isEating() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((byte) sets.get(0).getData(), 3); } return false; @@ -192,6 +205,7 @@ public class EntityMetaData { public boolean isInvisible() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((byte) sets.get(0).getData(), 4); } return false; @@ -240,24 +254,25 @@ public class EntityMetaData { } } - enum Type_1_7_10 implements Types { + enum TypeLegacy implements Types { BYTE(0), SHORT(1), INT(2), FLOAT(3), STRING(4), SLOT(5), - VECTOR(6); + VECTOR(6), + POSITION(7); final int id; - Type_1_7_10(int id) { + TypeLegacy(int id) { this.id = id; } - public static Type_1_7_10 byId(int id) { - for (Type_1_7_10 s : values()) { + public static TypeLegacy byId(int id) { + for (TypeLegacy s : values()) { if (s.getId() == id) { return s; } diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/FireworkMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/FireworkMetaData.java index 6e19832e8..59789d872 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/FireworkMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/FireworkMetaData.java @@ -26,6 +26,7 @@ public class FireworkMetaData extends EntityMetaData { public Slot getInfo() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (Slot) sets.get(8).getData(); } return null; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/FurnaceMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/FurnaceMinecartMetaData.java similarity index 87% rename from src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/FurnaceMetaData.java rename to src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/FurnaceMinecartMetaData.java index e224d204a..1b0d8d60b 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/FurnaceMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/FurnaceMinecartMetaData.java @@ -16,15 +16,16 @@ package de.bixilon.minosoft.game.datatypes.entities.meta; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; -public class FurnaceMetaData extends EntityMetaData { +public class FurnaceMinecartMetaData extends EntityMetaData { - public FurnaceMetaData(InByteBuffer buffer, ProtocolVersion v) { + public FurnaceMinecartMetaData(InByteBuffer buffer, ProtocolVersion v) { super(buffer, v); } public boolean getPowered() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(16).getData() == 0x01; } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/GhastMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/GhastMetaData.java index 02a0c3140..95d227510 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/GhastMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/GhastMetaData.java @@ -25,6 +25,7 @@ public class GhastMetaData extends MobMetaData { public boolean isAttacking() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(16).getData() == 0x01; } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/GuardianMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/GuardianMetaData.java new file mode 100644 index 000000000..021d1a0d3 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/GuardianMetaData.java @@ -0,0 +1,51 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.game.datatypes.entities.meta; + +import de.bixilon.minosoft.protocol.protocol.InByteBuffer; +import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; +import de.bixilon.minosoft.util.BitByte; + +public class GuardianMetaData extends MobMetaData { + + public GuardianMetaData(InByteBuffer buffer, ProtocolVersion v) { + super(buffer, v); + } + + public boolean isElderly() { + switch (version) { + case VERSION_1_8: + return BitByte.isBitSet((byte) sets.get(16).getData(), 1); + } + return false; + } + + public boolean isRetractingSpikes() { + switch (version) { + case VERSION_1_8: + return BitByte.isBitSet((byte) sets.get(16).getData(), 2); + } + return false; + } + + + public int getTargetId() { + switch (version) { + case VERSION_1_8: + return (int) sets.get(17).getData(); + } + return 0; + } + +} diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/HorseMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/HorseMetaData.java index 7d8c7f626..c5a0d99e6 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/HorseMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/HorseMetaData.java @@ -27,6 +27,7 @@ public class HorseMetaData extends AgeableMetaData { public boolean isTame() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((int) sets.get(16).getData(), 1); } return false; @@ -35,6 +36,7 @@ public class HorseMetaData extends AgeableMetaData { public boolean hasSaddle() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((int) sets.get(16).getData(), 2); } return false; @@ -43,6 +45,7 @@ public class HorseMetaData extends AgeableMetaData { public boolean hasChest() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((int) sets.get(16).getData(), 3); } return false; @@ -51,6 +54,7 @@ public class HorseMetaData extends AgeableMetaData { public boolean isBred() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((int) sets.get(16).getData(), 4); } return false; @@ -59,6 +63,7 @@ public class HorseMetaData extends AgeableMetaData { public boolean isEating() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((int) sets.get(16).getData(), 5); } return false; @@ -67,6 +72,7 @@ public class HorseMetaData extends AgeableMetaData { public boolean isRearing() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((int) sets.get(16).getData(), 6); } return false; @@ -75,6 +81,7 @@ public class HorseMetaData extends AgeableMetaData { public boolean isMouthOpen() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((int) sets.get(16).getData(), 7); } return false; @@ -83,6 +90,7 @@ public class HorseMetaData extends AgeableMetaData { public HorseType getType() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return HorseType.byId((Integer) sets.get(19).getData()); } return null; @@ -91,6 +99,7 @@ public class HorseMetaData extends AgeableMetaData { public HorseColor getColor() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return HorseColor.byId((int) sets.get(20).getData() & 0xFF); } return null; @@ -99,6 +108,7 @@ public class HorseMetaData extends AgeableMetaData { public HorseDots getDots() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return HorseDots.byId((int) sets.get(20).getData() & 0xFF00); } return null; @@ -108,6 +118,7 @@ public class HorseMetaData extends AgeableMetaData { public String getOwnerName() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (String) sets.get(21).getData(); } return null; @@ -116,6 +127,7 @@ public class HorseMetaData extends AgeableMetaData { public HorseArmor getArmor() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return HorseArmor.byId((int) sets.get(21).getData()); } return null; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/HumanMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/HumanMetaData.java index 63a10983e..791e671e6 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/HumanMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/HumanMetaData.java @@ -27,6 +27,7 @@ public class HumanMetaData extends MobMetaData { public boolean hideCape() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((byte) sets.get(16).getData(), 1); } return false; @@ -35,6 +36,7 @@ public class HumanMetaData extends MobMetaData { public float getAbsorptionHearts() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (float) sets.get(17).getData(); } return 0.0F; @@ -43,6 +45,7 @@ public class HumanMetaData extends MobMetaData { public int getScore() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(18).getData(); } return 0; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/IronGolemMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/IronGolemMetaData.java index b1a5ac812..203ba8b6b 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/IronGolemMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/IronGolemMetaData.java @@ -25,6 +25,7 @@ public class IronGolemMetaData extends MobMetaData { public boolean isCreatedByPlayer() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(16).getData() == 0x01; } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ItemFrameMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ItemFrameMetaData.java index b7b104a0a..78ffbe53c 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ItemFrameMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ItemFrameMetaData.java @@ -27,6 +27,8 @@ public class ItemFrameMetaData extends EntityMetaData { switch (version) { case VERSION_1_7_10: return (Slot) sets.get(2).getData(); + case VERSION_1_8: + return (Slot) sets.get(8).getData(); } return null; } @@ -35,6 +37,8 @@ public class ItemFrameMetaData extends EntityMetaData { switch (version) { case VERSION_1_7_10: return (byte) sets.get(3).getData(); + case VERSION_1_8: + return (byte) sets.get(9).getData(); } return 0; } diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ItemMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ItemMetaData.java index 0c5456689..8588b2cef 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ItemMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ItemMetaData.java @@ -26,6 +26,7 @@ public class ItemMetaData extends EntityMetaData { public Slot getSlot() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (Slot) sets.get(10).getData(); } return null; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/MinecartMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/MinecartMetaData.java index 76d7d437d..21a7d0519 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/MinecartMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/MinecartMetaData.java @@ -26,6 +26,7 @@ public class MinecartMetaData extends EntityMetaData { public int getShakingPower() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(17).getData(); } return 0; @@ -34,6 +35,7 @@ public class MinecartMetaData extends EntityMetaData { public int getShakingDirection() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(18).getData(); } return 0; @@ -42,6 +44,7 @@ public class MinecartMetaData extends EntityMetaData { public float getDamageTaken() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (float) sets.get(19).getData(); } return 0; @@ -50,9 +53,26 @@ public class MinecartMetaData extends EntityMetaData { public Blocks getBlock() { switch (version) { case VERSION_1_7_10: - return Blocks.byLegacy((int) sets.get(20).getData() & 0xFF, (int) sets.get(20).getData() & 0xFF00); + case VERSION_1_8: + return Blocks.byLegacy((int) sets.get(20).getData() & 0xFF, (int) sets.get(20).getData() >>> 4); } return Blocks.AIR; } + public int getBlockYPosition() { + switch (version) { + case VERSION_1_8: + return (int) sets.get(21).getData(); + } + return 0; + } + + public boolean isShowingBlock() { + switch (version) { + case VERSION_1_8: + return (int) sets.get(22).getData() == 0x01; + } + return false; + } + } diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/MobMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/MobMetaData.java index b2565a495..74c1610b4 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/MobMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/MobMetaData.java @@ -27,6 +27,7 @@ public class MobMetaData extends EntityMetaData { public float getHealth() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (float) sets.get(6).getData(); } return 0.0F; @@ -35,6 +36,7 @@ public class MobMetaData extends EntityMetaData { public StatusEffects getPotionEffectColor() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return StatusEffects.byId((int) sets.get(7).getData()); } return null; @@ -44,6 +46,7 @@ public class MobMetaData extends EntityMetaData { public byte getPotionEffectAmbient() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(8).getData(); } return 0; @@ -52,6 +55,7 @@ public class MobMetaData extends EntityMetaData { public byte getNumberOfArrowsInEntity() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(9).getData(); } return 0; @@ -61,6 +65,8 @@ public class MobMetaData extends EntityMetaData { switch (version) { case VERSION_1_7_10: return (String) sets.get(10).getData(); + case VERSION_1_8: + return (String) sets.get(2).getData(); } return null; } @@ -69,9 +75,19 @@ public class MobMetaData extends EntityMetaData { switch (version) { case VERSION_1_7_10: return (byte) sets.get(11).getData(); + case VERSION_1_8: + return (byte) sets.get(3).getData(); } return 0; } + public boolean hasAI() { + switch (version) { + case VERSION_1_8: + return (byte) sets.get(15).getData() == 0x01; + } + return false; + } + } diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/OcelotMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/OcelotMetaData.java index 2d38b90b6..7eaf9e636 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/OcelotMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/OcelotMetaData.java @@ -26,6 +26,7 @@ public class OcelotMetaData extends TameableMetaData { public byte getType() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(18).getData(); } return 0x00; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/PigMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/PigMetaData.java index 1ad2dd721..b9a2ecb72 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/PigMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/PigMetaData.java @@ -26,6 +26,7 @@ public class PigMetaData extends AgeableMetaData { public boolean hasSaddle() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(16).getData() == 0x01; } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/RabbitMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/RabbitMetaData.java new file mode 100644 index 000000000..6abc18486 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/RabbitMetaData.java @@ -0,0 +1,34 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.game.datatypes.entities.meta; + +import de.bixilon.minosoft.protocol.protocol.InByteBuffer; +import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; + +public class RabbitMetaData extends TameableMetaData { + + public RabbitMetaData(InByteBuffer buffer, ProtocolVersion v) { + super(buffer, v); + } + + + public byte getType() { + switch (version) { + case VERSION_1_8: + return (byte) sets.get(18).getData(); + } + return 0; + } + +} diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SheepMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SheepMetaData.java index ed940597c..f863f698b 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SheepMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SheepMetaData.java @@ -28,6 +28,7 @@ public class SheepMetaData extends AgeableMetaData { public Color getColor() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return Color.byId((byte) sets.get(16).getData() & 0xF); } return Color.WHITE; @@ -36,6 +37,7 @@ public class SheepMetaData extends AgeableMetaData { public boolean isSheared() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((byte) sets.get(16).getData(), 5); } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SkeletonMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SkeletonMetaData.java index 1a0abc9d7..9f3195a59 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SkeletonMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SkeletonMetaData.java @@ -25,6 +25,7 @@ public class SkeletonMetaData extends MobMetaData { public boolean isWitherSkeleton() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(13).getData() == 0x01; } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SlimeMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SlimeMetaData.java index ba1de25aa..3a5c2ca32 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SlimeMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SlimeMetaData.java @@ -25,6 +25,7 @@ public class SlimeMetaData extends MobMetaData { public byte getSize() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(16).getData(); } return 0; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SpiderMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SpiderMetaData.java index efeacd1c8..f1487dfac 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SpiderMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/SpiderMetaData.java @@ -26,6 +26,7 @@ public class SpiderMetaData extends MobMetaData { public boolean isClimbing() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (byte) sets.get(16).getData() == 0x01; } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/TameableMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/TameableMetaData.java index dace491c5..6d79329b0 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/TameableMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/TameableMetaData.java @@ -27,6 +27,7 @@ public class TameableMetaData extends AgeableMetaData { public boolean isSitting() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((int) sets.get(16).getData(), 0); } return false; @@ -35,6 +36,7 @@ public class TameableMetaData extends AgeableMetaData { public boolean isTame() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((int) sets.get(16).getData(), 2); } return false; @@ -43,6 +45,7 @@ public class TameableMetaData extends AgeableMetaData { public String getOwnerName() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (String) sets.get(17).getData(); } return null; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/VillagerMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/VillagerMetaData.java index 4930b2275..818b958d9 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/VillagerMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/VillagerMetaData.java @@ -26,7 +26,8 @@ public class VillagerMetaData extends AgeableMetaData { public VillagerType getVillagerType() { switch (version) { case VERSION_1_7_10: - return VillagerType.byId((int) sets.get(17).getData()); + case VERSION_1_8: + return VillagerType.byId((int) sets.get(16).getData()); } return VillagerType.FARMER; } diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WitchMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WitchMetaData.java index 344a5bba6..264657db1 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WitchMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WitchMetaData.java @@ -25,7 +25,8 @@ public class WitchMetaData extends MobMetaData { public boolean isAggressive() { switch (version) { case VERSION_1_7_10: - return (byte) sets.get(13).getData() == 0x01; + case VERSION_1_8: + return (byte) sets.get(21).getData() == 0x01; } return false; } diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WitherMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WitherMetaData.java index e54b4c063..152e97cfa 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WitherMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WitherMetaData.java @@ -25,6 +25,7 @@ public class WitherMetaData extends MobMetaData { public int getWatchedTarget1() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(17).getData(); } return 0; @@ -33,6 +34,7 @@ public class WitherMetaData extends MobMetaData { public int getWatchedTarget2() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(18).getData(); } return 0; @@ -41,6 +43,7 @@ public class WitherMetaData extends MobMetaData { public int getWatchedTarget3() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(19).getData(); } return 0; @@ -49,6 +52,7 @@ public class WitherMetaData extends MobMetaData { public int getInvulnerableTime() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return (int) sets.get(20).getData(); } return 0; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WolfMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WolfMetaData.java index ea47327c3..4b6dc4c4b 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WolfMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/WolfMetaData.java @@ -25,17 +25,10 @@ public class WolfMetaData extends TameableMetaData { } - public byte getType() { - switch (version) { - case VERSION_1_7_10: - return (byte) sets.get(18).getData(); - } - return 0x00; - } - public boolean isAngry() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return BitByte.isBitSet((int) sets.get(16).getData(), 1); } return false; @@ -44,15 +37,26 @@ public class WolfMetaData extends TameableMetaData { public float getHealth() { switch (version) { case VERSION_1_7_10: - return (float) sets.get(19).getData(); + case VERSION_1_8: + return (float) sets.get(18).getData(); } return 0.00F; } + public boolean isBegging() { + switch (version) { + case VERSION_1_7_10: + case VERSION_1_8: + return ((byte) sets.get(19).getData()) == 0x01; + } + return false; + } + public Color getColor() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return Color.byId((byte) sets.get(20).getData()); } return Color.WHITE; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ZombieMetaData.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ZombieMetaData.java index bd8748486..1d6d27e18 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ZombieMetaData.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/meta/ZombieMetaData.java @@ -26,6 +26,7 @@ public class ZombieMetaData extends MobMetaData { public boolean isChild() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return ((byte) sets.get(12).getData()) == 0x01; } return false; @@ -34,6 +35,7 @@ public class ZombieMetaData extends MobMetaData { public boolean isVillager() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return ((byte) sets.get(13).getData()) == 0x01; } return false; @@ -42,6 +44,7 @@ public class ZombieMetaData extends MobMetaData { public boolean isConverting() { switch (version) { case VERSION_1_7_10: + case VERSION_1_8: return ((byte) sets.get(14).getData()) == 0x01; } return false; diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/mob/Guardian.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/mob/Guardian.java new file mode 100644 index 000000000..132699c6e --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/mob/Guardian.java @@ -0,0 +1,64 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.game.datatypes.entities.mob; + +import de.bixilon.minosoft.game.datatypes.entities.*; +import de.bixilon.minosoft.game.datatypes.entities.meta.EntityMetaData; +import de.bixilon.minosoft.game.datatypes.entities.meta.GuardianMetaData; +import de.bixilon.minosoft.protocol.protocol.InByteBuffer; +import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; + +public class Guardian extends Mob implements MobInterface { + GuardianMetaData metaData; + + public Guardian(int id, Location location, short yaw, short pitch, Velocity velocity, InByteBuffer buffer, ProtocolVersion v) { + super(id, location, yaw, pitch, velocity); + this.metaData = new GuardianMetaData(buffer, v); + } + + @Override + public Mobs getEntityType() { + return Mobs.GUARDIAN; + } + + @Override + public GuardianMetaData getMetaData() { + return metaData; + } + + @Override + public void setMetaData(EntityMetaData metaData) { + this.metaData = (GuardianMetaData) metaData; + } + + @Override + public float getWidth() { + return 0.85F; + } + + @Override + public float getHeight() { + return 0.85F; + } + + @Override + public int getMaxHealth() { + return 30; + } + + @Override + public Class getMetaDataClass() { + return GuardianMetaData.class; + } +} diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/mob/Rabbit.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/mob/Rabbit.java new file mode 100644 index 000000000..a9f5d2a3a --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/mob/Rabbit.java @@ -0,0 +1,64 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.game.datatypes.entities.mob; + +import de.bixilon.minosoft.game.datatypes.entities.*; +import de.bixilon.minosoft.game.datatypes.entities.meta.EntityMetaData; +import de.bixilon.minosoft.game.datatypes.entities.meta.RabbitMetaData; +import de.bixilon.minosoft.protocol.protocol.InByteBuffer; +import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; + +public class Rabbit extends Mob implements MobInterface { + RabbitMetaData metaData; + + public Rabbit(int id, Location location, short yaw, short pitch, Velocity velocity, InByteBuffer buffer, ProtocolVersion v) { + super(id, location, yaw, pitch, velocity); + this.metaData = new RabbitMetaData(buffer, v); + } + + @Override + public Mobs getEntityType() { + return Mobs.RABBIT; + } + + @Override + public RabbitMetaData getMetaData() { + return metaData; + } + + @Override + public void setMetaData(EntityMetaData metaData) { + this.metaData = (RabbitMetaData) metaData; + } + + @Override + public float getWidth() { + return 0.6F; + } + + @Override + public float getHeight() { + return 0.7F; + } + + @Override + public int getMaxHealth() { + return 3; + } + + @Override + public Class getMetaDataClass() { + return RabbitMetaData.class; + } +} diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ArmorStand.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ArmorStand.java new file mode 100644 index 000000000..c598b72f1 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ArmorStand.java @@ -0,0 +1,56 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.game.datatypes.entities.objects; + +import de.bixilon.minosoft.game.datatypes.entities.*; +import de.bixilon.minosoft.game.datatypes.entities.meta.ArmorStandMetaData; +import de.bixilon.minosoft.game.datatypes.entities.meta.EntityMetaData; + +public class ArmorStand extends EntityObject implements ObjectInterface { + ArmorStandMetaData metaData; + + public ArmorStand(int id, Location location, short yaw, short pitch, int additionalInt) { + super(id, location, yaw, pitch, null); + // objects do not spawn with metadata... reading additional info from the following int + } + + public ArmorStand(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) { + super(id, location, yaw, pitch, velocity); + } + + @Override + public Objects getEntityType() { + return Objects.ARMOR_STAND; + } + + @Override + public ArmorStandMetaData getMetaData() { + return metaData; + } + + @Override + public void setMetaData(EntityMetaData metaData) { + this.metaData = (ArmorStandMetaData) metaData; + } + + @Override + public float getWidth() { + return 0.5F; + } + + @Override + public float getHeight() { + return 2.0F; + } +}