diff --git a/src/main/java/net/minestom/server/entity/MetadataHolder.java b/src/main/java/net/minestom/server/entity/MetadataHolder.java index 03391408b..5b6c97643 100644 --- a/src/main/java/net/minestom/server/entity/MetadataHolder.java +++ b/src/main/java/net/minestom/server/entity/MetadataHolder.java @@ -138,28 +138,38 @@ public final class MetadataHolder { private static Map> createMetaMap() { return Map.>ofEntries( + Map.entry("minecraft:acacia_boat", BoatMeta::new), + Map.entry("minecraft:acacia_chest_boat", BoatMeta::new), Map.entry("minecraft:allay", AllayMeta::new), Map.entry("minecraft:area_effect_cloud", AreaEffectCloudMeta::new), Map.entry("minecraft:armadillo", ArmadilloMeta::new), Map.entry("minecraft:armor_stand", ArmorStandMeta::new), Map.entry("minecraft:arrow", ArrowMeta::new), Map.entry("minecraft:axolotl", AxolotlMeta::new), + Map.entry("minecraft:bamboo_raft", BoatMeta::new), + Map.entry("minecraft:bamboo_chest_raft", BoatMeta::new), Map.entry("minecraft:bat", BatMeta::new), Map.entry("minecraft:bee", BeeMeta::new), + Map.entry("minecraft:birch_boat", BoatMeta::new), + Map.entry("minecraft:birch_chest_boat", BoatMeta::new), Map.entry("minecraft:blaze", BlazeMeta::new), Map.entry("minecraft:block_display", BlockDisplayMeta::new), - Map.entry("minecraft:boat", BoatMeta::new), Map.entry("minecraft:bogged", BoggedMeta::new), Map.entry("minecraft:breeze", BreezeMeta::new), Map.entry("minecraft:breeze_wind_charge", BreezeWindChargeMeta::new), - Map.entry("minecraft:chest_boat", BoatMeta::new), Map.entry("minecraft:camel", CamelMeta::new), Map.entry("minecraft:cat", CatMeta::new), Map.entry("minecraft:cave_spider", CaveSpiderMeta::new), + Map.entry("minecraft:cherry_boat", BoatMeta::new), + Map.entry("minecraft:cherry_chest_boat", BoatMeta::new), Map.entry("minecraft:chicken", ChickenMeta::new), Map.entry("minecraft:cod", CodMeta::new), Map.entry("minecraft:cow", CowMeta::new), + Map.entry("minecraft:creaking", CreakingMeta::new), + Map.entry("minecraft:creaking_transient", CreakingMeta::new), Map.entry("minecraft:creeper", CreeperMeta::new), + Map.entry("minecraft:dark_oak_boat", BoatMeta::new), + Map.entry("minecraft:dark_oak_chest_boat", BoatMeta::new), Map.entry("minecraft:dolphin", DolphinMeta::new), Map.entry("minecraft:donkey", DonkeyMeta::new), Map.entry("minecraft:dragon_fireball", DragonFireballMeta::new), @@ -192,12 +202,16 @@ public final class MetadataHolder { Map.entry("minecraft:item", ItemEntityMeta::new), Map.entry("minecraft:item_display", ItemDisplayMeta::new), Map.entry("minecraft:item_frame", ItemFrameMeta::new), + Map.entry("minecraft:jungle_boat", BoatMeta::new), + Map.entry("minecraft:jungle_chest_boat", BoatMeta::new), Map.entry("minecraft:fireball", FireballMeta::new), Map.entry("minecraft:leash_knot", LeashKnotMeta::new), Map.entry("minecraft:lightning_bolt", LightningBoltMeta::new), Map.entry("minecraft:llama", LlamaMeta::new), Map.entry("minecraft:llama_spit", LlamaSpitMeta::new), Map.entry("minecraft:magma_cube", MagmaCubeMeta::new), + Map.entry("minecraft:mangrove_boat", BoatMeta::new), + Map.entry("minecraft:mangrove_chest_boat", BoatMeta::new), Map.entry("minecraft:marker", MarkerMeta::new), Map.entry("minecraft:minecart", MinecartMeta::new), Map.entry("minecraft:chest_minecart", ChestMinecartMeta::new), @@ -207,11 +221,15 @@ public final class MetadataHolder { Map.entry("minecraft:spawner_minecart", SpawnerMinecartMeta::new), Map.entry("minecraft:text_display", TextDisplayMeta::new), Map.entry("minecraft:tnt_minecart", TntMinecartMeta::new), - Map.entry("minecraft:mule", MuleMeta::new), Map.entry("minecraft:mooshroom", MooshroomMeta::new), + Map.entry("minecraft:mule", MuleMeta::new), + Map.entry("minecraft:oak_boat", BoatMeta::new), + Map.entry("minecraft:oak_chest_boat", BoatMeta::new), Map.entry("minecraft:ocelot", OcelotMeta::new), Map.entry("minecraft:ominous_item_spawner", OminousItemSpawnerMeta::new), Map.entry("minecraft:painting", PaintingMeta::new), + Map.entry("minecraft:pale_oak_boat", BoatMeta::new), + Map.entry("minecraft:pale_oak_chest_boat", BoatMeta::new), Map.entry("minecraft:panda", PandaMeta::new), Map.entry("minecraft:parrot", ParrotMeta::new), Map.entry("minecraft:phantom", PhantomMeta::new), @@ -238,6 +256,8 @@ public final class MetadataHolder { Map.entry("minecraft:snowball", SnowballMeta::new), Map.entry("minecraft:spectral_arrow", SpectralArrowMeta::new), Map.entry("minecraft:spider", SpiderMeta::new), + Map.entry("minecraft:spruce_boat", BoatMeta::new), + Map.entry("minecraft:spruce_chest_boat", BoatMeta::new), Map.entry("minecraft:squid", SquidMeta::new), Map.entry("minecraft:stray", StrayMeta::new), Map.entry("minecraft:strider", StriderMeta::new), diff --git a/src/main/java/net/minestom/server/entity/metadata/AbstractVehicleMeta.java b/src/main/java/net/minestom/server/entity/metadata/AbstractVehicleMeta.java new file mode 100644 index 000000000..346d364d3 --- /dev/null +++ b/src/main/java/net/minestom/server/entity/metadata/AbstractVehicleMeta.java @@ -0,0 +1,40 @@ +package net.minestom.server.entity.metadata; + +import net.minestom.server.entity.Entity; +import net.minestom.server.entity.Metadata; +import net.minestom.server.entity.MetadataHolder; +import org.jetbrains.annotations.NotNull; + +public class AbstractVehicleMeta extends EntityMeta { + + public static final byte OFFSET = EntityMeta.MAX_OFFSET; + public static final byte MAX_OFFSET = OFFSET + 3; + + public AbstractVehicleMeta(@NotNull Entity entity, @NotNull MetadataHolder metadata) { + super(entity, metadata); + } + + public int getShakingTicks() { + return super.metadata.getIndex(OFFSET, 0); + } + + public void setShakingTicks(int value) { + super.metadata.setIndex(OFFSET, Metadata.VarInt(value)); + } + + public int getShakingDirection() { + return super.metadata.getIndex(OFFSET + 1, 1); + } + + public void setShakingDirection(int value) { + super.metadata.setIndex(OFFSET + 1, Metadata.VarInt(value)); + } + + public float getShakingMultiplier() { + return super.metadata.getIndex(OFFSET + 2, 0); + } + + public void setShakingMultiplier(float value) { + super.metadata.setIndex(OFFSET + 2, Metadata.Float(value)); + } +} diff --git a/src/main/java/net/minestom/server/entity/metadata/minecart/AbstractMinecartMeta.java b/src/main/java/net/minestom/server/entity/metadata/minecart/AbstractMinecartMeta.java index c238c6689..2648cb758 100644 --- a/src/main/java/net/minestom/server/entity/metadata/minecart/AbstractMinecartMeta.java +++ b/src/main/java/net/minestom/server/entity/metadata/minecart/AbstractMinecartMeta.java @@ -3,57 +3,42 @@ package net.minestom.server.entity.metadata.minecart; import net.minestom.server.entity.Entity; import net.minestom.server.entity.Metadata; import net.minestom.server.entity.MetadataHolder; +import net.minestom.server.entity.metadata.AbstractVehicleMeta; import net.minestom.server.entity.metadata.EntityMeta; import net.minestom.server.entity.metadata.ObjectDataProvider; import org.jetbrains.annotations.NotNull; -public abstract class AbstractMinecartMeta extends EntityMeta implements ObjectDataProvider { - public static final byte OFFSET = EntityMeta.MAX_OFFSET; - public static final byte MAX_OFFSET = OFFSET + 6; +public abstract class AbstractMinecartMeta extends AbstractVehicleMeta implements ObjectDataProvider { + public static final byte OFFSET = AbstractVehicleMeta.MAX_OFFSET; + public static final byte MAX_OFFSET = OFFSET + 3; protected AbstractMinecartMeta(@NotNull Entity entity, @NotNull MetadataHolder metadata) { super(entity, metadata); } - public int getShakingPower() { + public int getCustomBlockIdAndDamage() { return super.metadata.getIndex(OFFSET, 0); } - public void setShakingPower(int value) { - super.metadata.setIndex(OFFSET, Metadata.VarInt(value)); - } - - public int getShakingDirection() { - return super.metadata.getIndex(OFFSET + 1, 1); - } - - public void setShakingDirection(int value) { - super.metadata.setIndex(OFFSET + 1, Metadata.VarInt(value)); - } - - public float getShakingMultiplier() { - return super.metadata.getIndex(OFFSET + 2, 0F); - } - - public void setShakingMultiplier(float value) { - super.metadata.setIndex(OFFSET + 2, Metadata.Float(value)); - } - - public int getCustomBlockIdAndDamage() { - return super.metadata.getIndex(OFFSET + 3, 0); - } - public void setCustomBlockIdAndDamage(int value) { - super.metadata.setIndex(OFFSET + 3, Metadata.VarInt(value)); + super.metadata.setIndex(OFFSET, Metadata.VarInt(value)); } // in 16th of a block public int getCustomBlockYPosition() { - return super.metadata.getIndex(OFFSET + 4, 6); + return super.metadata.getIndex(OFFSET + 1, 6); } public void setCustomBlockYPosition(int value) { - super.metadata.setIndex(OFFSET + 4, Metadata.VarInt(value)); + super.metadata.setIndex(OFFSET + 1, Metadata.VarInt(value)); + } + + public boolean getShowCustomBlock() { + return super.metadata.getIndex(OFFSET + 2, false); + } + + public void setShowCustomBlock(boolean show) { + super.metadata.setIndex(OFFSET + 2, Metadata.Boolean(show)); } @Override diff --git a/src/main/java/net/minestom/server/entity/metadata/monster/CreakingMeta.java b/src/main/java/net/minestom/server/entity/metadata/monster/CreakingMeta.java new file mode 100644 index 000000000..ba6c2c549 --- /dev/null +++ b/src/main/java/net/minestom/server/entity/metadata/monster/CreakingMeta.java @@ -0,0 +1,15 @@ +package net.minestom.server.entity.metadata.monster; + +import net.minestom.server.entity.Entity; +import net.minestom.server.entity.MetadataHolder; +import org.jetbrains.annotations.NotNull; + +// TODO(1.21.2) - Find out what the metadata fields of a creaking are +public class CreakingMeta extends MonsterMeta { + public static final byte OFFSET = MonsterMeta.MAX_OFFSET; + public static final byte MAX_OFFSET = OFFSET + 0; + + public CreakingMeta(@NotNull Entity entity, @NotNull MetadataHolder metadata) { + super(entity, metadata); + } +} diff --git a/src/main/java/net/minestom/server/entity/metadata/other/BoatMeta.java b/src/main/java/net/minestom/server/entity/metadata/other/BoatMeta.java index f1c954cdf..1906c3a21 100644 --- a/src/main/java/net/minestom/server/entity/metadata/other/BoatMeta.java +++ b/src/main/java/net/minestom/server/entity/metadata/other/BoatMeta.java @@ -3,72 +3,49 @@ package net.minestom.server.entity.metadata.other; import net.minestom.server.entity.Entity; import net.minestom.server.entity.Metadata; import net.minestom.server.entity.MetadataHolder; +import net.minestom.server.entity.metadata.AbstractVehicleMeta; import net.minestom.server.entity.metadata.EntityMeta; import org.jetbrains.annotations.NotNull; -public class BoatMeta extends EntityMeta { - public static final byte OFFSET = EntityMeta.MAX_OFFSET; - public static final byte MAX_OFFSET = OFFSET + 7; +public class BoatMeta extends AbstractVehicleMeta { + public static final byte OFFSET = AbstractVehicleMeta.MAX_OFFSET; + public static final byte MAX_OFFSET = OFFSET + 4; public BoatMeta(@NotNull Entity entity, @NotNull MetadataHolder metadata) { super(entity, metadata); } - public int getTimeSinceLastHit() { - return super.metadata.getIndex(OFFSET, 0); - } - - public void setTimeSinceLastHit(int value) { - super.metadata.setIndex(OFFSET, Metadata.VarInt(value)); - } - - public int getForwardDirection() { - return super.metadata.getIndex(OFFSET + 1, 1); - } - - public void setForwardDirection(int value) { - super.metadata.setIndex(OFFSET + 1, Metadata.VarInt(value)); - } - - public float getDamageTaken() { - return super.metadata.getIndex(OFFSET + 2, 0); - } - - public void setDamageTaken(float value) { - super.metadata.setIndex(OFFSET + 2, Metadata.Float(value)); - } - @NotNull public Type getType() { - return Type.VALUES[super.metadata.getIndex(OFFSET + 3, 0)]; + return Type.VALUES[super.metadata.getIndex(OFFSET, 0)]; } public void setType(@NotNull Type value) { - super.metadata.setIndex(OFFSET + 3, Metadata.VarInt(value.ordinal())); + super.metadata.setIndex(OFFSET, Metadata.VarInt(value.ordinal())); } public boolean isLeftPaddleTurning() { - return super.metadata.getIndex(OFFSET + 4, false); + return super.metadata.getIndex(OFFSET + 1, false); } public void setLeftPaddleTurning(boolean value) { - super.metadata.setIndex(OFFSET + 4, Metadata.Boolean(value)); + super.metadata.setIndex(OFFSET + 1, Metadata.Boolean(value)); } public boolean isRightPaddleTurning() { - return super.metadata.getIndex(OFFSET + 5, false); + return super.metadata.getIndex(OFFSET + 2, false); } public void setRightPaddleTurning(boolean value) { - super.metadata.setIndex(OFFSET + 5, Metadata.Boolean(value)); + super.metadata.setIndex(OFFSET + 2, Metadata.Boolean(value)); } public int getSplashTimer() { - return super.metadata.getIndex(OFFSET + 6, 0); + return super.metadata.getIndex(OFFSET + 3, 0); } public void setSplashTimer(int value) { - super.metadata.setIndex(OFFSET + 6, Metadata.VarInt(value)); + super.metadata.setIndex(OFFSET + 3, Metadata.VarInt(value)); } public enum Type {