9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-19 15:09:15 +00:00
This commit is contained in:
jhqwqmc
2025-12-06 05:27:25 +08:00
parent a2d83cefb3
commit 0b057fa869
2 changed files with 32 additions and 4 deletions

View File

@@ -45,6 +45,9 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
public final float shadowStrength; public final float shadowStrength;
public final boolean applyDyedColor; public final boolean applyDyedColor;
public final Color glowColor; public final Color glowColor;
public final int blockLight;
public final int skyLight;
public final float viewRange;
public ItemDisplayFurnitureElementConfig(Key itemId, public ItemDisplayFurnitureElementConfig(Key itemId,
Vector3f scale, Vector3f scale,
@@ -58,7 +61,10 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
float shadowRadius, float shadowRadius,
float shadowStrength, float shadowStrength,
boolean applyDyedColor, boolean applyDyedColor,
@Nullable Color glowColor) { @Nullable Color glowColor,
int blockLight,
int skyLight,
float viewRange) {
this.scale = scale; this.scale = scale;
this.position = position; this.position = position;
this.translation = translation; this.translation = translation;
@@ -72,6 +78,9 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
this.applyDyedColor = applyDyedColor; this.applyDyedColor = applyDyedColor;
this.itemId = itemId; this.itemId = itemId;
this.glowColor = glowColor; this.glowColor = glowColor;
this.blockLight = blockLight;
this.skyLight = skyLight;
this.viewRange = viewRange;
BiFunction<Player, FurnitureColorSource, Item<?>> itemFunction = (player, colorSource) -> { BiFunction<Player, FurnitureColorSource, Item<?>> itemFunction = (player, colorSource) -> {
Item<ItemStack> wrappedItem = BukkitItemManager.instance().createWrappedItem(itemId, player); Item<ItemStack> wrappedItem = BukkitItemManager.instance().createWrappedItem(itemId, player);
if (applyDyedColor && colorSource != null && wrappedItem != null) { if (applyDyedColor && colorSource != null && wrappedItem != null) {
@@ -89,7 +98,7 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
this.metadata = (player, source) -> { this.metadata = (player, source) -> {
List<Object> dataValues = new ArrayList<>(); List<Object> dataValues = new ArrayList<>();
if (glowColor != null) { if (glowColor != null) {
BaseEntityData.SharedFlags.addEntityData((byte) 0x40, dataValues); ItemDisplayEntityData.SharedFlags.addEntityData((byte) 0x40, dataValues);
ItemDisplayEntityData.GlowColorOverride.addEntityData(glowColor.color(), dataValues); ItemDisplayEntityData.GlowColorOverride.addEntityData(glowColor.color(), dataValues);
} }
ItemDisplayEntityData.DisplayedItem.addEntityData(itemFunction.apply(player, source).getLiteralObject(), dataValues); ItemDisplayEntityData.DisplayedItem.addEntityData(itemFunction.apply(player, source).getLiteralObject(), dataValues);
@@ -100,6 +109,10 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
ItemDisplayEntityData.DisplayType.addEntityData(this.displayContext.id(), dataValues); ItemDisplayEntityData.DisplayType.addEntityData(this.displayContext.id(), dataValues);
ItemDisplayEntityData.ShadowRadius.addEntityData(this.shadowRadius, dataValues); ItemDisplayEntityData.ShadowRadius.addEntityData(this.shadowRadius, dataValues);
ItemDisplayEntityData.ShadowStrength.addEntityData(this.shadowStrength, dataValues); ItemDisplayEntityData.ShadowStrength.addEntityData(this.shadowStrength, dataValues);
if (this.blockLight != -1 && this.skyLight != -1) {
ItemDisplayEntityData.BrightnessOverride.addEntityData(this.blockLight << 4 | this.skyLight << 20, dataValues);
}
ItemDisplayEntityData.ViewRange.addEntityData(this.viewRange, dataValues);
return dataValues; return dataValues;
}; };
} }
@@ -157,6 +170,18 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
return this.glowColor; return this.glowColor;
} }
public int blockLight() {
return this.blockLight;
}
public int skyLight() {
return this.skyLight;
}
public float viewRange() {
return this.viewRange;
}
@Override @Override
public ItemDisplayFurnitureElement create(@NotNull Furniture furniture) { public ItemDisplayFurnitureElement create(@NotNull Furniture furniture) {
return new ItemDisplayFurnitureElement(furniture, this); return new ItemDisplayFurnitureElement(furniture, this);
@@ -168,6 +193,7 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
public ItemDisplayFurnitureElementConfig create(Map<String, Object> arguments) { public ItemDisplayFurnitureElementConfig create(Map<String, Object> arguments) {
Key itemId = Key.of(ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("item"), "warning.config.furniture.element.item_display.missing_item")); Key itemId = Key.of(ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("item"), "warning.config.furniture.element.item_display.missing_item"));
boolean applyDyedColor = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("apply-dyed-color", true), "apply-dyed-color"); boolean applyDyedColor = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("apply-dyed-color", true), "apply-dyed-color");
Map<String, Object> brightness = ResourceConfigUtils.getAsMap(arguments.getOrDefault("brightness", Map.of()), "brightness");
return new ItemDisplayFurnitureElementConfig( return new ItemDisplayFurnitureElementConfig(
itemId, itemId,
ResourceConfigUtils.getAsVector3f(arguments.getOrDefault("scale", 1f), "scale"), ResourceConfigUtils.getAsVector3f(arguments.getOrDefault("scale", 1f), "scale"),
@@ -181,7 +207,10 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
ResourceConfigUtils.getAsFloat(arguments.getOrDefault("shadow-radius", 0f), "shadow-radius"), ResourceConfigUtils.getAsFloat(arguments.getOrDefault("shadow-radius", 0f), "shadow-radius"),
ResourceConfigUtils.getAsFloat(arguments.getOrDefault("shadow-strength", 1f), "shadow-strength"), ResourceConfigUtils.getAsFloat(arguments.getOrDefault("shadow-strength", 1f), "shadow-strength"),
applyDyedColor, applyDyedColor,
Optional.ofNullable(arguments.get("glow-color")).map(it -> Color.fromStrings(it.toString().split(","))).orElse(null) Optional.ofNullable(arguments.get("glow-color")).map(it -> Color.fromStrings(it.toString().split(","))).orElse(null),
ResourceConfigUtils.getAsInt(brightness.getOrDefault("block-light", -1), "block-light"),
ResourceConfigUtils.getAsInt(brightness.getOrDefault("sky-light", -1), "sky-light"),
ResourceConfigUtils.getAsFloat(arguments.getOrDefault("view-range", 1f), "view-range")
); );
} }
} }

View File

@@ -10,7 +10,6 @@ public final class EntityDataUtils {
private static final int LEFT_ALIGNMENT = 0x08; // 8 private static final int LEFT_ALIGNMENT = 0x08; // 8
private static final int RIGHT_ALIGNMENT = 0x10; // 16 private static final int RIGHT_ALIGNMENT = 0x10; // 16
public static final int UNSAFE_ITEM_DATA_ID = 8; // 正常来说应该通过定义 Data 获取 id 这样的做法未经验证可能不安全 public static final int UNSAFE_ITEM_DATA_ID = 8; // 正常来说应该通过定义 Data 获取 id 这样的做法未经验证可能不安全
public static final int SHARED_FLAGS_ID = 0; // 正常来说应该通过定义 Data 获取 id 这样的做法未经验证可能不安全
public static byte encodeTextDisplayMask(boolean hasShadow, boolean isSeeThrough, boolean useDefaultBackground, int alignment) { public static byte encodeTextDisplayMask(boolean hasShadow, boolean isSeeThrough, boolean useDefaultBackground, int alignment) {
int bitMask = 0; int bitMask = 0;