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 extends EntityMetaData> 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 extends EntityMetaData> 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;
+ }
+}