9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-23 08:59:27 +00:00

refactor entity data

This commit is contained in:
XiaoMoMi
2025-03-31 21:50:01 +08:00
parent 82cfc53046
commit a4a7601d06
10 changed files with 65 additions and 126 deletions

View File

@@ -5,7 +5,6 @@ import net.momirealms.craftengine.bukkit.util.Reflections;
import java.util.Optional;
public class BaseEntityData<T> extends SimpleEntityData<T> {
public static final BaseEntityData<Byte> SharedFlags = new BaseEntityData<>(0, EntityDataValue.Serializers$BYTE, (byte) 0);
public static final BaseEntityData<Integer> AirSupply = new BaseEntityData<>(1, EntityDataValue.Serializers$INT, 300);
public static final BaseEntityData<Optional<Object>> CustomName = new BaseEntityData<>(2, EntityDataValue.Serializers$OPTIONAL_COMPONENT, Optional.empty());

View File

@@ -0,0 +1,12 @@
package net.momirealms.craftengine.bukkit.entity.data;
import net.momirealms.craftengine.bukkit.util.Reflections;
public class BlockDisplayEntityData<T> extends DisplayEntityData<T> {
// Block display only
public static final DisplayEntityData<Object> DisplayedBlock = of(23, EntityDataValue.Serializers$BLOCK_STATE, Reflections.instance$Blocks$AIR$defaultState);
public BlockDisplayEntityData(int id, Object serializer, T defaultValue) {
super(id, serializer, defaultValue);
}
}

View File

@@ -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<T> {
private final int id;
private final Object serializer;
private final T defaultValue;
// Entity
public static final DisplayEntityData<Byte> EntityMasks = of(0, EntityDataValue.Serializers$BYTE, (byte) 0);
public class DisplayEntityData<T> extends BaseEntityData<T> {
// Display only
public static final DisplayEntityData<Integer> InterpolationDelay = of(8, EntityDataValue.Serializers$INT, 0);
@@ -43,70 +33,11 @@ public class DisplayEntityData<T> {
public static final DisplayEntityData<Float> Height = of(21, EntityDataValue.Serializers$FLOAT, 0f);
public static final DisplayEntityData<Integer> GlowColorOverride = of(22, EntityDataValue.Serializers$INT, -1);
// Text display only
public static final DisplayEntityData<Object> Text = of(23, EntityDataValue.Serializers$COMPONENT, Reflections.instance$Component$empty);
public static final DisplayEntityData<Integer> LineWidth = of(24, EntityDataValue.Serializers$INT, 200);
public static final DisplayEntityData<Integer> BackgroundColor = of(25, EntityDataValue.Serializers$INT, 0x40000000);
public static final DisplayEntityData<Byte> TextOpacity = of(26, EntityDataValue.Serializers$BYTE, (byte) -1);
public static final DisplayEntityData<Byte> TextDisplayMasks = of(27, EntityDataValue.Serializers$BYTE, (byte) 0);
// Item display only
public static final DisplayEntityData<Object> 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<Byte> DisplayType = of(24, EntityDataValue.Serializers$BYTE, (byte) 0);
// Block display only
public static final DisplayEntityData<Object> DisplayedBlock = of(23, EntityDataValue.Serializers$BLOCK_STATE, Reflections.instance$Blocks$AIR$defaultState);
public static <T> DisplayEntityData<T> 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<Object> list) {
if (defaultValue().equals(value)) return;
list.add(EntityDataValue.create(id, serializer, value));
}
public void addEntityData(T value, List<Object> list) {
list.add(EntityDataValue.create(id, serializer, value));
super(!VersionHelper.isVersionNewerThan1_20_2() && id >= 11 ? id - 1 : id, serializer, defaultValue);
}
}

View File

@@ -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<T> {
private final int id;
private final Object serializer;
private final T defaultValue;
// Entity
public static final InteractionEntityData<Byte> EntityMasks = of(0, EntityDataValue.Serializers$BYTE, (byte) 0);
public class InteractionEntityData<T> extends BaseEntityData<T> {
// Interaction only
public static final InteractionEntityData<Float> Width = of(8, EntityDataValue.Serializers$FLOAT, 1F);
public static final InteractionEntityData<Float> Height = of(9, EntityDataValue.Serializers$FLOAT, 1F);
@@ -22,39 +13,6 @@ public class InteractionEntityData<T> {
}
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<Object> list) {
if (defaultValue().equals(value)) return;
list.add(EntityDataValue.create(id, serializer, value));
}
public void addEntityData(T value, List<Object> list) {
list.add(EntityDataValue.create(id, serializer, value));
super(!VersionHelper.isVersionNewerThan1_20_2() && id >= 11 ? id - 1 : id, serializer, defaultValue);
}
}

View File

@@ -0,0 +1,25 @@
package net.momirealms.craftengine.bukkit.entity.data;
import net.momirealms.craftengine.bukkit.util.Reflections;
public class ItemDisplayEntityData<T> extends DisplayEntityData<T> {
// Item display only
public static final DisplayEntityData<Object> 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<Byte> DisplayType = of(24, EntityDataValue.Serializers$BYTE, (byte) 0);
public ItemDisplayEntityData(int id, Object serializer, T defaultValue) {
super(id, serializer, defaultValue);
}
}

View File

@@ -1,7 +1,6 @@
package net.momirealms.craftengine.bukkit.entity.data;
public class SimpleEntityData<T> implements EntityData<T> {
private final int id;
private final Object serializer;
private final T defaultValue;

View File

@@ -0,0 +1,16 @@
package net.momirealms.craftengine.bukkit.entity.data;
import net.momirealms.craftengine.bukkit.util.Reflections;
public class TextDisplayEntityData<T> extends DisplayEntityData<T> {
// Text display only
public static final DisplayEntityData<Object> Text = of(23, EntityDataValue.Serializers$COMPONENT, Reflections.instance$Component$empty);
public static final DisplayEntityData<Integer> LineWidth = of(24, EntityDataValue.Serializers$INT, 200);
public static final DisplayEntityData<Integer> BackgroundColor = of(25, EntityDataValue.Serializers$INT, 0x40000000);
public static final DisplayEntityData<Byte> TextOpacity = of(26, EntityDataValue.Serializers$BYTE, (byte) -1);
public static final DisplayEntityData<Byte> TextDisplayMasks = of(27, EntityDataValue.Serializers$BYTE, (byte) 0);
public TextDisplayEntityData(int id, Object serializer, T defaultValue) {
super(id, serializer, defaultValue);
}
}

View File

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

View File

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

View File

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