Refactor boat and minecart metadata to pull out common fields, register new boats, and add a default metadata for the creaking (#2444)

This commit is contained in:
GreatWyrm 2024-10-22 17:27:26 -07:00 committed by Matt Worzala
parent ffe42a243f
commit 5cf30408d2
5 changed files with 106 additions and 69 deletions

View File

@ -138,28 +138,38 @@ public final class MetadataHolder {
private static Map<String, BiFunction<Entity, MetadataHolder, EntityMeta>> createMetaMap() {
return Map.<String, BiFunction<Entity, MetadataHolder, EntityMeta>>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),

View File

@ -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));
}
}

View File

@ -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

View File

@ -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);
}
}

View File

@ -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 {