From a705a8e8de3f1d33d2fe80f8f2a2e080ec896820 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Fri, 9 May 2025 22:39:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BAgeneration=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default/configuration/categories.yml | 4 +- .../resources/default/configuration/items.yml | 35 ++- .../src/main/resources/translations/en.yml | 2 + .../src/main/resources/translations/zh_cn.yml | 2 + .../bukkit/block/BukkitBlockManager.java | 2 +- .../bukkit/item/BukkitItemManager.java | 6 + .../core/pack/AbstractPackManager.java | 2 +- .../core/pack/model/BaseItemModel.java | 2 +- .../core/pack/model/SpecialItemModel.java | 3 +- .../generation/AbstractModelGenerator.java | 9 +- .../core/pack/model/generation/GuiLight.java | 5 + .../model/generation/ModelGeneration.java | 228 +++++++++++++++--- .../model/generation/display/DisplayMeta.java | 25 ++ .../generation/display/DisplayPosition.java | 12 + .../model/special/ShulkerBoxSpecialModel.java | 1 - .../text/minimessage/GlobalVariableTag.java | 1 - 16 files changed, 295 insertions(+), 44 deletions(-) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/GuiLight.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayMeta.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayPosition.java diff --git a/bukkit/loader/src/main/resources/resources/default/configuration/categories.yml b/bukkit/loader/src/main/resources/resources/default/configuration/categories.yml index 3c8d218d6..3189f43a4 100644 --- a/bukkit/loader/src/main/resources/resources/default/configuration/categories.yml +++ b/bukkit/loader/src/main/resources/resources/default/configuration/categories.yml @@ -62,4 +62,6 @@ categories: - default:flame_cane - default:gunpowder_block - default:solid_gunpowder_block - - default:ender_pearl_flower_seeds \ No newline at end of file + - default:ender_pearl_flower_seeds + - default:gui_head_size_1 + - default:gui_head_size_4 \ No newline at end of file diff --git a/bukkit/loader/src/main/resources/resources/default/configuration/items.yml b/bukkit/loader/src/main/resources/resources/default/configuration/items.yml index 02fa220c0..b21baa96f 100644 --- a/bukkit/loader/src/main/resources/resources/default/configuration/items.yml +++ b/bukkit/loader/src/main/resources/resources/default/configuration/items.yml @@ -1,4 +1,37 @@ -items: +items#gui_head: + default:gui_head_size_1: + material: player_head + custom-model-data: 1000 + model: + type: minecraft:special + path: minecraft:item/custom/gui_head_size_1 + generation: + parent: minecraft:item/template_skull + gui-light: front + display: + gui: + translation: 0,8,0 + scale: 2,2,2 + model: + type: minecraft:head + kind: player + default:gui_head_size_4: + material: player_head + custom-model-data: 1001 + model: + type: minecraft:special + path: minecraft:item/custom/gui_head_size_4 + generation: + parent: minecraft:item/template_skull + gui-light: front + display: + gui: + translation: 9,7,0 + scale: 4,4,4 + model: + type: minecraft:head + kind: player +items#topaz_gears: default:topaz_rod: material: fishing_rod custom-model-data: 1000 diff --git a/bukkit/loader/src/main/resources/translations/en.yml b/bukkit/loader/src/main/resources/translations/en.yml index d7240fa55..3f0da67b9 100644 --- a/bukkit/loader/src/main/resources/translations/en.yml +++ b/bukkit/loader/src/main/resources/translations/en.yml @@ -227,6 +227,8 @@ warning.config.block.behavior.strippable.missing_stripped: "Issue found warning.config.block.event.condition.missing_type: "Issue found in file - The block '' is missing the required 'type' argument for event condition." warning.config.block.event.condition.invalid_type: "Issue found in file - The block '' is using an invalid 'type' argument '' for event condition." warning.config.model.generation.missing_parent: "Issue found in file - The config '' is missing the required 'parent' argument in 'generation' section." +warning.config.model.generation.invalid_display_position: "Issue found in file - The config '' is using an invalid display position '' in 'generation.display' section. Allowed display positions: []" +warning.config.model.generation.invalid_gui_light: "Issue found in file - The config '' is using an invalid gui-light option '' in 'generation' section. Allowed gui light options: []" warning.config.model.generation.conflict: "Issue found in file - Failed to generate model for '' as two or more configurations attempt to generate different json models with the same path: ''." warning.config.model.generation.texture.invalid: "Issue found in file - The config '' has a texture '' with path '' that contains illegal characters. Please read https://minecraft.wiki/w/Resource_location#Legal_characters." warning.config.model.generation.parent.invalid: "Issue found in file - The config '' has a parent argument '' that contains illegal characters. Please read https://minecraft.wiki/w/Resource_location#Legal_characters." diff --git a/bukkit/loader/src/main/resources/translations/zh_cn.yml b/bukkit/loader/src/main/resources/translations/zh_cn.yml index 2429e0ff3..9a75a659e 100644 --- a/bukkit/loader/src/main/resources/translations/zh_cn.yml +++ b/bukkit/loader/src/main/resources/translations/zh_cn.yml @@ -228,6 +228,8 @@ warning.config.block.event.condition.missing_type: "在文件 - warning.config.block.event.condition.invalid_type: "在文件 - 方块 '' 使用了无效的事件条件类型 ''" warning.config.model.generation.missing_parent: "在文件 发现问题 - 配置项 '' 的 'generation' 段落缺少必需的 'parent' 参数" warning.config.model.generation.conflict: "在文件 发现问题 - 无法为 '' 生成模型 存在多个配置尝试使用相同路径 '' 生成不同的 JSON 模型" +warning.config.model.generation.invalid_display_position: "在文件 发现问题 - 配置项 '' 在 'generation.display' 区域使用了无效的 display 位置类型 ''. 可用展示类型: []" +warning.config.model.generation.invalid_gui_light: "在文件 发现问题 - 配置项 '' 在 'generation' 区域使用了无效的GUI光照 ''. 可用GUI光照: []" warning.config.model.generation.texture.invalid: "在文件 发现问题 - 配置项 '' 的纹理 '' 路径 '' 包含非法字符 请参考 https://zh.minecraft.wiki/w/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4ID#%E5%90%88%E6%B3%95%E5%AD%97%E7%AC%A6" warning.config.model.generation.parent.invalid: "在文件 发现问题 - 配置项 '' 的父级参数 '' 包含非法字符 请参考 https://zh.minecraft.wiki/w/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4ID#%E5%90%88%E6%B3%95%E5%AD%97%E7%AC%A6" warning.config.emoji.missing_keywords: "在文件 发现问题 - 表情 '' 缺少必需的 'keywords' 参数" diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java index 3f6762964..8bd60c4c7 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java @@ -537,7 +537,7 @@ public class BukkitBlockManager extends AbstractBlockManager { if (singleModelMap.containsKey("weight")) json.addProperty("weight", ResourceConfigUtils.getAsInt(singleModelMap.get("weight"), "weight")); Map generationMap = MiscUtils.castToMap(singleModelMap.get("generation"), true); if (generationMap != null) { - prepareModelGeneration(new ModelGeneration(Key.of(modelPath), generationMap)); + prepareModelGeneration(ModelGeneration.of(Key.of(modelPath), generationMap)); } variants.add(json); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java index 9d72cbf8f..fe46abf8e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java @@ -463,6 +463,12 @@ public class BukkitItemManager extends AbstractItemManager { baseModel.path(), customModelData )); + } else if (currentModel instanceof SpecialItemModel specialModel) { + resultList.add(new LegacyOverridesModel( + new LinkedHashMap<>(accumulatedPredicates), + specialModel.base(), + customModelData + )); } } 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 cfbbf3810..a4a02839d 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 @@ -832,7 +832,7 @@ public abstract class AbstractPackManager implements PackManager { } try (BufferedWriter writer = Files.newBufferedWriter(modelPath)) { - GsonHelper.get().toJson(generation.getJson(), writer); + GsonHelper.get().toJson(generation.get(), writer); } catch (IOException e) { plugin.logger().warn("Failed to generate model: " + modelPath.toAbsolutePath(), e); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/BaseItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/BaseItemModel.java index 4b2609c3b..1756b6b14 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/BaseItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/BaseItemModel.java @@ -77,7 +77,7 @@ public class BaseItemModel implements ItemModel { Map generation = MiscUtils.castToMap(arguments.get("generation"), true); ModelGeneration modelGeneration = null; if (generation != null) { - modelGeneration = new ModelGeneration(Key.of(modelPath), generation); + modelGeneration = ModelGeneration.of(Key.of(modelPath), generation); } if (arguments.containsKey("tints")) { List tints = new ArrayList<>(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/SpecialItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/SpecialItemModel.java index ccfa2e026..50052ce85 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/SpecialItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/SpecialItemModel.java @@ -13,7 +13,6 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; -import java.util.Objects; public class SpecialItemModel implements ItemModel { public static final Factory FACTORY = new Factory(); @@ -69,7 +68,7 @@ public class SpecialItemModel implements ItemModel { Map generation = MiscUtils.castToMap(arguments.get("generation"), true); ModelGeneration modelGeneration = null; if (generation != null) { - modelGeneration = new ModelGeneration(Key.of(base), generation); + modelGeneration = ModelGeneration.of(Key.of(base), generation); } Map model = MiscUtils.castToMap(arguments.get("model"), false); return new SpecialItemModel(SpecialModels.fromMap(model), base, modelGeneration); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java index e34e9f374..acc0d0c08 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java @@ -38,9 +38,12 @@ public abstract class AbstractModelGenerator implements ModelGenerator { if (!ResourceLocation.isValid(model.parentModelPath())) { throw new LocalizedResourceConfigException("warning.config.model.generation.parent.invalid", model.parentModelPath()); } - for (Map.Entry texture : model.texturesOverride().entrySet()) { - if (!ResourceLocation.isValid(texture.getValue())) { - throw new LocalizedResourceConfigException("warning.config.model.generation.texture.invalid", texture.getKey(), texture.getValue()); + Map textures = model.texturesOverride(); + if (textures != null) { + for (Map.Entry texture : textures.entrySet()) { + if (!ResourceLocation.isValid(texture.getValue())) { + throw new LocalizedResourceConfigException("warning.config.model.generation.texture.invalid", texture.getKey(), texture.getValue()); + } } } this.modelsToGenerate.put(model.path(), model); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/GuiLight.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/GuiLight.java new file mode 100644 index 000000000..0977aa82a --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/GuiLight.java @@ -0,0 +1,5 @@ +package net.momirealms.craftengine.core.pack.model.generation; + +public enum GuiLight { + FRONT, SIDE +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/ModelGeneration.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/ModelGeneration.java index 086d8c6d5..883d89196 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/ModelGeneration.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/ModelGeneration.java @@ -1,44 +1,107 @@ package net.momirealms.craftengine.core.pack.model.generation; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.pack.model.generation.display.DisplayMeta; +import net.momirealms.craftengine.core.pack.model.generation.display.DisplayPosition; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.util.EnumUtils; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.joml.Vector3f; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Objects; +import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.Supplier; -public class ModelGeneration { +public class ModelGeneration implements Supplier { + private static final Map> BUILDER_FUNCTIONS = new HashMap<>(); + static { + BUILDER_FUNCTIONS.put("textures", (b, data) -> { + Map texturesMap = MiscUtils.castToMap(data, false); + Map texturesOverride = new LinkedHashMap<>(); + for (Map.Entry entry : texturesMap.entrySet()) { + if (entry.getValue() instanceof String p) { + texturesOverride.put(entry.getKey(), p); + } + } + b.texturesOverride(texturesOverride); + }); + BUILDER_FUNCTIONS.put("display", (b, data) -> { + Map displayMap = MiscUtils.castToMap(data, false); + Map displays = new EnumMap<>(DisplayPosition.class); + for (Map.Entry entry : displayMap.entrySet()) { + try { + DisplayPosition displayPosition = DisplayPosition.valueOf(entry.getKey().toUpperCase(Locale.ENGLISH)); + if (entry.getValue() instanceof Map metaMap) { + displays.put(displayPosition, DisplayMeta.fromMap(MiscUtils.castToMap(metaMap, false))); + } + } catch (IllegalArgumentException e) { + throw new LocalizedResourceConfigException("warning.config.model.generation.invalid_display_position", e, entry.getKey(), EnumUtils.toString(DisplayPosition.values())); + } + } + b.displays(displays); + }); + BUILDER_FUNCTIONS.put("gui-light", (b, data) -> { + String guiLightStr = String.valueOf(data); + try { + GuiLight guiLight = GuiLight.valueOf(guiLightStr.toUpperCase(Locale.ENGLISH)); + b.guiLight(guiLight); + } catch (IllegalArgumentException e) { + throw new LocalizedResourceConfigException("warning.config.model.generation.invalid_gui_light", e, guiLightStr, EnumUtils.toString(GuiLight.values())); + } + }); + BUILDER_FUNCTIONS.put("ambient-occlusion", (b, data) -> { + b.ambientOcclusion((boolean) data); + }); + BUILDER_FUNCTIONS.put("parent", (b, data) -> { + String parentModelPath = data.toString(); + b.parentModelPath(parentModelPath); + }); + } + + @NotNull private final Key path; + @NotNull private final String parentModelPath; + @Nullable private final Map texturesOverride; + @Nullable + private final Map displays; + @Nullable + private final GuiLight guiLight; + @Nullable + private final Boolean ambientOcclusion; + @Nullable + private JsonObject cachedModel; - public ModelGeneration(Key path, String parentModelPath, Map texturesOverride) { + public ModelGeneration(@NotNull Key path, + @NotNull String parentModelPath, + @Nullable Map texturesOverride, + @Nullable Map displays, + @Nullable GuiLight guiLight, + @Nullable Boolean ambientOcclusion) { this.path = path; this.parentModelPath = parentModelPath; this.texturesOverride = texturesOverride; + this.displays = displays; + this.guiLight = guiLight; + this.ambientOcclusion = ambientOcclusion; } - public ModelGeneration(Key path, Map map) { - this.path = path; - Object parent = map.get("parent"); - if (parent == null) { - throw new LocalizedResourceConfigException("warning.config.model.generation.missing_parent"); - } - this.parentModelPath = parent.toString(); - Map texturesMap = MiscUtils.castToMap(map.get("textures"), true); - if (texturesMap != null) { - this.texturesOverride = new LinkedHashMap<>(); - for (Map.Entry entry : texturesMap.entrySet()) { - if (entry.getValue() instanceof String p) { - this.texturesOverride.put(entry.getKey(), p); - } - } - } else { - this.texturesOverride = Collections.emptyMap(); + public static ModelGeneration of(Key path, Map map) { + Builder builder = builder().path(path); + for (Map.Entry entry : map.entrySet()) { + Optional.ofNullable(BUILDER_FUNCTIONS.get(entry.getKey())).ifPresent(it -> it.accept(builder, entry.getValue())); } + return builder.build(); + } + + @Nullable + public Map texturesOverride() { + return texturesOverride; } public Key path() { @@ -49,36 +112,137 @@ public class ModelGeneration { return parentModelPath; } - public Map texturesOverride() { - return texturesOverride; + @Nullable + public Map displays() { + return displays; } - public JsonObject getJson() { + @Nullable + public GuiLight guiLight() { + return guiLight; + } + + @Nullable + public Boolean ambientOcclusion() { + return ambientOcclusion; + } + + @Override + public JsonObject get() { + if (this.cachedModel == null) { + this.cachedModel = this.getCachedModel(); + } + return this.cachedModel; + } + + private JsonObject getCachedModel() { JsonObject model = new JsonObject(); - model.addProperty("parent", parentModelPath); - if (this.texturesOverride != null && !this.texturesOverride.isEmpty()) { + model.addProperty("parent", this.parentModelPath); + if (this.texturesOverride != null) { JsonObject textures = new JsonObject(); for (Map.Entry entry : this.texturesOverride.entrySet()) { textures.addProperty(entry.getKey(), entry.getValue()); } model.add("textures", textures); } + if (this.displays != null) { + JsonObject displays = new JsonObject(); + for (Map.Entry entry : this.displays.entrySet()) { + JsonObject displayMetadata = new JsonObject(); + DisplayMeta meta = entry.getValue(); + if (meta.rotation() != null) + displayMetadata.add("rotation", vectorToJsonArray(meta.rotation())); + if (meta.translation() != null) + displayMetadata.add("translation", vectorToJsonArray(meta.translation())); + if (meta.scale() != null) + displayMetadata.add("scale", vectorToJsonArray(meta.scale())); + displays.add(entry.getKey().name().toLowerCase(Locale.ENGLISH), displayMetadata); + } + model.add("display", displays); + } + if (this.guiLight != null) { + model.addProperty("gui_light", this.guiLight.name().toLowerCase(Locale.ENGLISH)); + } return model; } + private JsonArray vectorToJsonArray(Vector3f vector) { + JsonArray array = new JsonArray(); + array.add(vector.x()); + array.add(vector.y()); + array.add(vector.z()); + return array; + } + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ModelGeneration that = (ModelGeneration) o; - return this.path.equals(that.path) && parentModelPath.equals(that.parentModelPath) && Objects.equals(texturesOverride, that.texturesOverride); + return this.path.equals(that.path) && parentModelPath.equals(that.parentModelPath) && Objects.equals(texturesOverride, that.texturesOverride) + && Objects.equals(displays, that.displays) && Objects.equals(ambientOcclusion, that.ambientOcclusion) && Objects.equals(guiLight, that.guiLight); } @Override public int hashCode() { - int result = path.hashCode(); - result = 31 * result + parentModelPath.hashCode(); - result = 31 * result + texturesOverride.hashCode(); + int result = this.path.hashCode(); + result = 31 * result + this.parentModelPath.hashCode(); return result; } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private Key path; + private String parentModelPath; + @Nullable + private Map texturesOverride; + @Nullable + private Map displays; + @Nullable + private GuiLight guiLight; + @Nullable + private Boolean ambientOcclusion; + + public Builder() {} + + public Builder path(Key key) { + this.path = key; + return this; + } + + public Builder parentModelPath(String parentModelPath) { + this.parentModelPath = parentModelPath; + return this; + } + + public Builder texturesOverride(Map texturesOverride) { + this.texturesOverride = texturesOverride; + return this; + } + + public Builder displays(Map displays) { + this.displays = displays; + return this; + } + + public Builder guiLight(GuiLight guiLight) { + this.guiLight = guiLight; + return this; + } + + public Builder ambientOcclusion(Boolean ambientOcclusion) { + this.ambientOcclusion = ambientOcclusion; + return this; + } + + public ModelGeneration build() { + if (this.parentModelPath == null) { + throw new LocalizedResourceConfigException("warning.config.model.generation.missing_parent"); + } + return new ModelGeneration(Objects.requireNonNull(this.path, "path should be nonnull"), this.parentModelPath, this.texturesOverride, this.displays, this.guiLight, this.ambientOcclusion); + } + } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayMeta.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayMeta.java new file mode 100644 index 000000000..31549e547 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayMeta.java @@ -0,0 +1,25 @@ +package net.momirealms.craftengine.core.pack.model.generation.display; + +import net.momirealms.craftengine.core.util.MiscUtils; +import org.joml.Vector3f; + +import java.util.Map; + +public record DisplayMeta(Vector3f rotation, Vector3f translation, Vector3f scale) { + + public static DisplayMeta fromMap(Map map) { + Vector3f rotation = null; + if (map.containsKey("rotation")) { + rotation = MiscUtils.getAsVector3f(map.get("rotation"), "rotation"); + } + Vector3f translation = null; + if (map.containsKey("translation")) { + translation = MiscUtils.getAsVector3f(map.get("translation"), "translation"); + } + Vector3f scale = null; + if (map.containsKey("scale")) { + scale = MiscUtils.getAsVector3f(map.get("scale"), "scale"); + } + return new DisplayMeta(rotation, translation, scale); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayPosition.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayPosition.java new file mode 100644 index 000000000..0f5f30a3c --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayPosition.java @@ -0,0 +1,12 @@ +package net.momirealms.craftengine.core.pack.model.generation.display; + +public enum DisplayPosition { + THIRDPERSON_RIGHTHAND, + THIRDPERSON_LEFTHAND, + FIRSTPERSON_RIGHTHAND, + FIRSTPERSON_LEFTHAND, + GUI, + HEAD, + GROUND, + FIXED +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ShulkerBoxSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ShulkerBoxSpecialModel.java index 2ba8f374c..917474670 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ShulkerBoxSpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ShulkerBoxSpecialModel.java @@ -7,7 +7,6 @@ import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import org.jetbrains.annotations.Nullable; -import java.awt.desktop.OpenFilesEvent; import java.util.Locale; import java.util.Map; import java.util.Optional; diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/text/minimessage/GlobalVariableTag.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/text/minimessage/GlobalVariableTag.java index 0a7602b0e..257a3a72e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/text/minimessage/GlobalVariableTag.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/text/minimessage/GlobalVariableTag.java @@ -6,7 +6,6 @@ import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.locale.TranslationManager; import net.momirealms.craftengine.core.util.AdventureHelper; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable;