From a4a7601d068a8226ae70e664af4b98333aaedd8d Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 31 Mar 2025 21:50:01 +0800 Subject: [PATCH] refactor entity data --- .../bukkit/entity/data/BaseEntityData.java | 1 - .../entity/data/BlockDisplayEntityData.java | 12 +++ .../bukkit/entity/data/DisplayEntityData.java | 73 +------------------ .../entity/data/InteractionEntityData.java | 46 +----------- .../entity/data/ItemDisplayEntityData.java | 25 +++++++ .../bukkit/entity/data/SimpleEntityData.java | 1 - .../entity/data/TextDisplayEntityData.java | 16 ++++ .../furniture/BukkitFurnitureElement.java | 14 ++-- .../furniture/hitbox/ShulkerHitBox.java | 1 - .../core/pack/AbstractPackManager.java | 2 +- 10 files changed, 65 insertions(+), 126 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/BlockDisplayEntityData.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/ItemDisplayEntityData.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/TextDisplayEntityData.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/BaseEntityData.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/BaseEntityData.java index 890c9425a..43bc28cfe 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/BaseEntityData.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/BaseEntityData.java @@ -5,7 +5,6 @@ import net.momirealms.craftengine.bukkit.util.Reflections; import java.util.Optional; public class BaseEntityData extends SimpleEntityData { - public static final BaseEntityData SharedFlags = new BaseEntityData<>(0, EntityDataValue.Serializers$BYTE, (byte) 0); public static final BaseEntityData AirSupply = new BaseEntityData<>(1, EntityDataValue.Serializers$INT, 300); public static final BaseEntityData> CustomName = new BaseEntityData<>(2, EntityDataValue.Serializers$OPTIONAL_COMPONENT, Optional.empty()); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/BlockDisplayEntityData.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/BlockDisplayEntityData.java new file mode 100644 index 000000000..8543612f7 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/BlockDisplayEntityData.java @@ -0,0 +1,12 @@ +package net.momirealms.craftengine.bukkit.entity.data; + +import net.momirealms.craftengine.bukkit.util.Reflections; + +public class BlockDisplayEntityData extends DisplayEntityData { + // Block display only + public static final DisplayEntityData DisplayedBlock = of(23, EntityDataValue.Serializers$BLOCK_STATE, Reflections.instance$Blocks$AIR$defaultState); + + public BlockDisplayEntityData(int id, Object serializer, T defaultValue) { + super(id, serializer, defaultValue); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/DisplayEntityData.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/DisplayEntityData.java index 2ae6a8a7f..c206727cb 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/DisplayEntityData.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/DisplayEntityData.java @@ -3,17 +3,7 @@ package net.momirealms.craftengine.bukkit.entity.data; import net.momirealms.craftengine.bukkit.util.Reflections; import net.momirealms.craftengine.core.util.VersionHelper; -import java.util.List; - -public class DisplayEntityData { - - private final int id; - private final Object serializer; - private final T defaultValue; - - // Entity - public static final DisplayEntityData EntityMasks = of(0, EntityDataValue.Serializers$BYTE, (byte) 0); - +public class DisplayEntityData extends BaseEntityData { // Display only public static final DisplayEntityData InterpolationDelay = of(8, EntityDataValue.Serializers$INT, 0); @@ -43,70 +33,11 @@ public class DisplayEntityData { public static final DisplayEntityData Height = of(21, EntityDataValue.Serializers$FLOAT, 0f); public static final DisplayEntityData GlowColorOverride = of(22, EntityDataValue.Serializers$INT, -1); - // Text display only - public static final DisplayEntityData Text = of(23, EntityDataValue.Serializers$COMPONENT, Reflections.instance$Component$empty); - public static final DisplayEntityData LineWidth = of(24, EntityDataValue.Serializers$INT, 200); - public static final DisplayEntityData BackgroundColor = of(25, EntityDataValue.Serializers$INT, 0x40000000); - public static final DisplayEntityData TextOpacity = of(26, EntityDataValue.Serializers$BYTE, (byte) -1); - public static final DisplayEntityData TextDisplayMasks = of(27, EntityDataValue.Serializers$BYTE, (byte) 0); - - // Item display only - public static final DisplayEntityData DisplayedItem = of(23, EntityDataValue.Serializers$ITEM_STACK, Reflections.instance$ItemStack$Air); - /** - * Display type: - * 0 = NONE - * 1 = THIRD_PERSON_LEFT_HAND - * 2 = THIRD_PERSON_RIGHT_HAND - * 3 = FIRST_PERSON_LEFT_HAND - * 4 = FIRST_PERSON_RIGHT_HAND - * 5 = HEAD - * 6 = GUI - * 7 = GROUND - * 8 = FIXED - */ - public static final DisplayEntityData DisplayType = of(24, EntityDataValue.Serializers$BYTE, (byte) 0); - - // Block display only - public static final DisplayEntityData DisplayedBlock = of(23, EntityDataValue.Serializers$BLOCK_STATE, Reflections.instance$Blocks$AIR$defaultState); - public static DisplayEntityData of(final int id, final Object serializer, T defaultValue) { return new DisplayEntityData<>(id, serializer, defaultValue); } public DisplayEntityData(int id, Object serializer, T defaultValue) { - if (!VersionHelper.isVersionNewerThan1_20_2()) { - if (id >= 11) { - id--; - } - } - this.id = id; - this.serializer = serializer; - this.defaultValue = defaultValue; - } - - public Object serializer() { - return serializer; - } - - public int id() { - return id; - } - - public T defaultValue() { - return defaultValue; - } - - public Object createEntityDataIfNotDefaultValue(T value) { - if (defaultValue().equals(value)) return null; - return EntityDataValue.create(id, serializer, value); - } - - public void addEntityDataIfNotDefaultValue(T value, List list) { - if (defaultValue().equals(value)) return; - list.add(EntityDataValue.create(id, serializer, value)); - } - - public void addEntityData(T value, List list) { - list.add(EntityDataValue.create(id, serializer, value)); + super(!VersionHelper.isVersionNewerThan1_20_2() && id >= 11 ? id - 1 : id, serializer, defaultValue); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/InteractionEntityData.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/InteractionEntityData.java index 8f9f4583b..9819e3550 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/InteractionEntityData.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/InteractionEntityData.java @@ -2,16 +2,7 @@ package net.momirealms.craftengine.bukkit.entity.data; import net.momirealms.craftengine.core.util.VersionHelper; -import java.util.List; - -public class InteractionEntityData { - - private final int id; - private final Object serializer; - private final T defaultValue; - - // Entity - public static final InteractionEntityData EntityMasks = of(0, EntityDataValue.Serializers$BYTE, (byte) 0); +public class InteractionEntityData extends BaseEntityData { // Interaction only public static final InteractionEntityData Width = of(8, EntityDataValue.Serializers$FLOAT, 1F); public static final InteractionEntityData Height = of(9, EntityDataValue.Serializers$FLOAT, 1F); @@ -22,39 +13,6 @@ public class InteractionEntityData { } public InteractionEntityData(int id, Object serializer, T defaultValue) { - if (!VersionHelper.isVersionNewerThan1_20_2()) { - if (id >= 11) { - id--; - } - } - this.id = id; - this.serializer = serializer; - this.defaultValue = defaultValue; - } - - public Object serializer() { - return serializer; - } - - public int id() { - return id; - } - - public T defaultValue() { - return defaultValue; - } - - public Object createEntityDataIfNotDefaultValue(T value) { - if (defaultValue().equals(value)) return null; - return EntityDataValue.create(id, serializer, value); - } - - public void addEntityDataIfNotDefaultValue(T value, List list) { - if (defaultValue().equals(value)) return; - list.add(EntityDataValue.create(id, serializer, value)); - } - - public void addEntityData(T value, List list) { - list.add(EntityDataValue.create(id, serializer, value)); + super(!VersionHelper.isVersionNewerThan1_20_2() && id >= 11 ? id - 1 : id, serializer, defaultValue); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/ItemDisplayEntityData.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/ItemDisplayEntityData.java new file mode 100644 index 000000000..4b9263e0d --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/ItemDisplayEntityData.java @@ -0,0 +1,25 @@ +package net.momirealms.craftengine.bukkit.entity.data; + +import net.momirealms.craftengine.bukkit.util.Reflections; + +public class ItemDisplayEntityData extends DisplayEntityData { + // Item display only + public static final DisplayEntityData DisplayedItem = of(23, EntityDataValue.Serializers$ITEM_STACK, Reflections.instance$ItemStack$Air); + /** + * Display type: + * 0 = NONE + * 1 = THIRD_PERSON_LEFT_HAND + * 2 = THIRD_PERSON_RIGHT_HAND + * 3 = FIRST_PERSON_LEFT_HAND + * 4 = FIRST_PERSON_RIGHT_HAND + * 5 = HEAD + * 6 = GUI + * 7 = GROUND + * 8 = FIXED + */ + public static final DisplayEntityData DisplayType = of(24, EntityDataValue.Serializers$BYTE, (byte) 0); + + public ItemDisplayEntityData(int id, Object serializer, T defaultValue) { + super(id, serializer, defaultValue); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/SimpleEntityData.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/SimpleEntityData.java index b2251d50d..7993ed163 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/SimpleEntityData.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/SimpleEntityData.java @@ -1,7 +1,6 @@ package net.momirealms.craftengine.bukkit.entity.data; public class SimpleEntityData implements EntityData { - private final int id; private final Object serializer; private final T defaultValue; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/TextDisplayEntityData.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/TextDisplayEntityData.java new file mode 100644 index 000000000..403fbb075 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/TextDisplayEntityData.java @@ -0,0 +1,16 @@ +package net.momirealms.craftengine.bukkit.entity.data; + +import net.momirealms.craftengine.bukkit.util.Reflections; + +public class TextDisplayEntityData extends DisplayEntityData { + // Text display only + public static final DisplayEntityData Text = of(23, EntityDataValue.Serializers$COMPONENT, Reflections.instance$Component$empty); + public static final DisplayEntityData LineWidth = of(24, EntityDataValue.Serializers$INT, 200); + public static final DisplayEntityData BackgroundColor = of(25, EntityDataValue.Serializers$INT, 0x40000000); + public static final DisplayEntityData TextOpacity = of(26, EntityDataValue.Serializers$BYTE, (byte) -1); + public static final DisplayEntityData TextDisplayMasks = of(27, EntityDataValue.Serializers$BYTE, (byte) 0); + + public TextDisplayEntityData(int id, Object serializer, T defaultValue) { + super(id, serializer, defaultValue); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureElement.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureElement.java index 18a49e678..1471a4a91 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureElement.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureElement.java @@ -1,6 +1,6 @@ package net.momirealms.craftengine.bukkit.entity.furniture; -import net.momirealms.craftengine.bukkit.entity.data.DisplayEntityData; +import net.momirealms.craftengine.bukkit.entity.data.ItemDisplayEntityData; import net.momirealms.craftengine.bukkit.item.BukkitItemManager; import net.momirealms.craftengine.bukkit.util.Reflections; import net.momirealms.craftengine.core.entity.furniture.AbstractFurnitureElement; @@ -55,12 +55,12 @@ public class BukkitFurnitureElement extends AbstractFurnitureElement { CraftEngine.instance().logger().warn("Failed to create furniture element for " + item() + " because item " + item() + " not found"); item = BukkitItemManager.instance().wrap(new ItemStack(Material.STONE)); } - DisplayEntityData.DisplayedItem.addEntityDataIfNotDefaultValue(item.getLiteralObject(), this.cachedValues); - DisplayEntityData.Scale.addEntityDataIfNotDefaultValue(scale(), this.cachedValues); - DisplayEntityData.RotationLeft.addEntityDataIfNotDefaultValue(rotation(), this.cachedValues); - DisplayEntityData.BillboardConstraints.addEntityDataIfNotDefaultValue(billboard().id(), this.cachedValues); - DisplayEntityData.Translation.addEntityDataIfNotDefaultValue(translation(), this.cachedValues); - DisplayEntityData.DisplayType.addEntityDataIfNotDefaultValue(transform().id(), this.cachedValues); + ItemDisplayEntityData.DisplayedItem.addEntityDataIfNotDefaultValue(item.getLiteralObject(), this.cachedValues); + ItemDisplayEntityData.Scale.addEntityDataIfNotDefaultValue(scale(), this.cachedValues); + ItemDisplayEntityData.RotationLeft.addEntityDataIfNotDefaultValue(rotation(), this.cachedValues); + ItemDisplayEntityData.BillboardConstraints.addEntityDataIfNotDefaultValue(billboard().id(), this.cachedValues); + ItemDisplayEntityData.Translation.addEntityDataIfNotDefaultValue(translation(), this.cachedValues); + ItemDisplayEntityData.DisplayType.addEntityDataIfNotDefaultValue(transform().id(), this.cachedValues); } return this.cachedValues; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/ShulkerHitBox.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/ShulkerHitBox.java index 058e64457..0f41b384a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/ShulkerHitBox.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/ShulkerHitBox.java @@ -1,6 +1,5 @@ package net.momirealms.craftengine.bukkit.entity.furniture.hitbox; -import io.netty.buffer.Unpooled; import net.momirealms.craftengine.bukkit.entity.data.ShulkerData; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.util.DirectionUtils; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java index c6394fc05..3980f39f5 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java @@ -38,8 +38,8 @@ import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.*; import java.util.List; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; import java.util.function.Consumer;