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:
XiaoMoMi
2025-12-06 03:02:24 +08:00
parent d1484ce07e
commit 8cdced204b
4 changed files with 9 additions and 36 deletions

View File

@@ -23,7 +23,7 @@ public class ItemDisplayFurnitureElement implements FurnitureElement {
private final int entityId; private final int entityId;
private final Object despawnPacket; private final Object despawnPacket;
private final FurnitureColorSource colorSource; private final FurnitureColorSource colorSource;
private final LegacyChatFormatter glowColor; private final UUID uuid = UUID.randomUUID();
public ItemDisplayFurnitureElement(Furniture furniture, ItemDisplayFurnitureElementConfig config) { public ItemDisplayFurnitureElement(Furniture furniture, ItemDisplayFurnitureElementConfig config) {
this.config = config; this.config = config;
@@ -33,26 +33,18 @@ public class ItemDisplayFurnitureElement implements FurnitureElement {
this.position = new WorldPosition(furniturePos.world, position.x, position.y, position.z, furniturePos.xRot, furniturePos.yRot); this.position = new WorldPosition(furniturePos.world, position.x, position.y, position.z, furniturePos.xRot, furniturePos.yRot);
this.despawnPacket = FastNMS.INSTANCE.constructor$ClientboundRemoveEntitiesPacket(new IntArrayList() {{ add(entityId); }}); this.despawnPacket = FastNMS.INSTANCE.constructor$ClientboundRemoveEntitiesPacket(new IntArrayList() {{ add(entityId); }});
this.colorSource = furniture.dataAccessor.getColorSource(); this.colorSource = furniture.dataAccessor.getColorSource();
this.glowColor = config.glowColor;
} }
@Override @Override
public void show(Player player) { public void show(Player player) {
UUID uuid = UUID.randomUUID();
player.sendPacket(FastNMS.INSTANCE.constructor$ClientboundBundlePacket(List.of( player.sendPacket(FastNMS.INSTANCE.constructor$ClientboundBundlePacket(List.of(
FastNMS.INSTANCE.constructor$ClientboundAddEntityPacket( FastNMS.INSTANCE.constructor$ClientboundAddEntityPacket(
this.entityId, uuid, this.entityId, this.uuid,
this.position.x, this.position.y, this.position.z, 0, this.position.yRot, this.position.x, this.position.y, this.position.z, 0, this.position.yRot,
MEntityTypes.ITEM_DISPLAY, 0, CoreReflections.instance$Vec3$Zero, 0 MEntityTypes.ITEM_DISPLAY, 0, CoreReflections.instance$Vec3$Zero, 0
), ),
FastNMS.INSTANCE.constructor$ClientboundSetEntityDataPacket(this.entityId, this.config.metadata.apply(player, this.colorSource)) FastNMS.INSTANCE.constructor$ClientboundSetEntityDataPacket(this.entityId, this.config.metadata.apply(player, this.colorSource))
)), false); )), false);
if (this.glowColor != null) {
Object team = BukkitTeamManager.instance().getTeamByColor(this.glowColor);
if (team != null) {
FastNMS.INSTANCE.method$ClientboundSetPlayerTeamPacket$createMultiplePlayerPacket(team, List.of(uuid.toString()), true);
}
}
} }
@Override @Override

View File

@@ -4,7 +4,6 @@ import it.unimi.dsi.fastutil.ints.IntArrayList;
import net.momirealms.craftengine.bukkit.entity.data.BaseEntityData; import net.momirealms.craftengine.bukkit.entity.data.BaseEntityData;
import net.momirealms.craftengine.bukkit.entity.data.ItemDisplayEntityData; import net.momirealms.craftengine.bukkit.entity.data.ItemDisplayEntityData;
import net.momirealms.craftengine.bukkit.item.BukkitItemManager; import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
import net.momirealms.craftengine.core.entity.Glowing;
import net.momirealms.craftengine.core.entity.display.Billboard; import net.momirealms.craftengine.core.entity.display.Billboard;
import net.momirealms.craftengine.core.entity.display.ItemDisplayContext; import net.momirealms.craftengine.core.entity.display.ItemDisplayContext;
import net.momirealms.craftengine.core.entity.furniture.Furniture; import net.momirealms.craftengine.core.entity.furniture.Furniture;
@@ -15,8 +14,8 @@ import net.momirealms.craftengine.core.entity.player.Player;
import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemKeys; import net.momirealms.craftengine.core.item.ItemKeys;
import net.momirealms.craftengine.core.item.data.FireworkExplosion; import net.momirealms.craftengine.core.item.data.FireworkExplosion;
import net.momirealms.craftengine.core.util.Color;
import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.LegacyChatFormatter;
import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -30,7 +29,7 @@ import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.function.BiFunction; import java.util.function.BiFunction;
public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig<ItemDisplayFurnitureElement>, Glowing { public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig<ItemDisplayFurnitureElement> {
public static final Factory FACTORY = new Factory(); public static final Factory FACTORY = new Factory();
public final BiFunction<Player, FurnitureColorSource, List<Object>> metadata; public final BiFunction<Player, FurnitureColorSource, List<Object>> metadata;
public final Key itemId; public final Key itemId;
@@ -45,7 +44,7 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
public final float shadowRadius; public final float shadowRadius;
public final float shadowStrength; public final float shadowStrength;
public final boolean applyDyedColor; public final boolean applyDyedColor;
public final LegacyChatFormatter glowColor; public final Color glowColor;
public ItemDisplayFurnitureElementConfig(Key itemId, public ItemDisplayFurnitureElementConfig(Key itemId,
Vector3f scale, Vector3f scale,
@@ -59,7 +58,7 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
float shadowRadius, float shadowRadius,
float shadowStrength, float shadowStrength,
boolean applyDyedColor, boolean applyDyedColor,
@Nullable LegacyChatFormatter glowColor) { @Nullable Color glowColor) {
this.scale = scale; this.scale = scale;
this.position = position; this.position = position;
this.translation = translation; this.translation = translation;
@@ -91,6 +90,7 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
List<Object> dataValues = new ArrayList<>(); List<Object> dataValues = new ArrayList<>();
if (glowColor != null) { if (glowColor != null) {
BaseEntityData.SharedFlags.addEntityData((byte) 0x40, dataValues); BaseEntityData.SharedFlags.addEntityData((byte) 0x40, 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);
ItemDisplayEntityData.Scale.addEntityData(this.scale, dataValues); ItemDisplayEntityData.Scale.addEntityData(this.scale, dataValues);
@@ -153,8 +153,7 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig
} }
@Nullable @Nullable
@Override public Color glowColor() {
public LegacyChatFormatter glowColor() {
return this.glowColor; return this.glowColor;
} }
@@ -182,7 +181,7 @@ 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,
ResourceConfigUtils.getAsEnum(arguments.get("glow-color"), LegacyChatFormatter.class, null) Optional.ofNullable(arguments.get("glow-color")).map(it -> Color.fromStrings(it.toString().split(","))).orElse(null)
); );
} }
} }

View File

@@ -1,10 +0,0 @@
package net.momirealms.craftengine.core.entity;
import net.momirealms.craftengine.core.util.LegacyChatFormatter;
import org.jetbrains.annotations.Nullable;
public interface Glowing {
@Nullable
LegacyChatFormatter glowColor();
}

View File

@@ -1,7 +1,6 @@
package net.momirealms.craftengine.core.entity.furniture; package net.momirealms.craftengine.core.entity.furniture;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import net.momirealms.craftengine.core.entity.Glowing;
import net.momirealms.craftengine.core.entity.furniture.behavior.FurnitureBehaviorTypes; import net.momirealms.craftengine.core.entity.furniture.behavior.FurnitureBehaviorTypes;
import net.momirealms.craftengine.core.entity.furniture.element.FurnitureElementConfig; import net.momirealms.craftengine.core.entity.furniture.element.FurnitureElementConfig;
import net.momirealms.craftengine.core.entity.furniture.element.FurnitureElementConfigs; import net.momirealms.craftengine.core.entity.furniture.element.FurnitureElementConfigs;
@@ -220,13 +219,6 @@ public abstract class AbstractFurnitureManager implements FurnitureManager {
Optional<Vector3f> optionalLootSpawnOffset = Optional.ofNullable(variantArguments.get("loot-spawn-offset")).map(it -> ResourceConfigUtils.getAsVector3f(it, "loot-spawn-offset")); Optional<Vector3f> optionalLootSpawnOffset = Optional.ofNullable(variantArguments.get("loot-spawn-offset")).map(it -> ResourceConfigUtils.getAsVector3f(it, "loot-spawn-offset"));
List<FurnitureElementConfig<?>> elements = ResourceConfigUtils.parseConfigAsList(variantArguments.get("elements"), FurnitureElementConfigs::fromMap); List<FurnitureElementConfig<?>> elements = ResourceConfigUtils.parseConfigAsList(variantArguments.get("elements"), FurnitureElementConfigs::fromMap);
// 收集发光颜色类型
for (FurnitureElementConfig<?> element : elements) {
if (element instanceof Glowing glowing) {
Optional.ofNullable(glowing.glowColor()).ifPresent(color -> AbstractFurnitureManager.this.plugin.teamManager().setColorInUse(color));
}
}
// 外部模型 // 外部模型
Optional<ExternalModel> externalModel; Optional<ExternalModel> externalModel;
if (variantArguments.containsKey("model-engine")) { if (variantArguments.containsKey("model-engine")) {