diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java index 0d6f63e8e..a3c2eb4dd 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java @@ -210,7 +210,6 @@ public class BukkitCompatibilityManager implements CompatibilityManager { Plugin fastAsyncWorldEdit = Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit"); String version = VersionHelper.isPaper() ? fastAsyncWorldEdit.getPluginMeta().getVersion() : fastAsyncWorldEdit.getDescription().getVersion(); if (!this.fastAsyncWorldEditVersionCheck(version)) { - if (VersionHelper.isOrAbove1_20_3()) { this.plugin.logger().severe(""); if (Locale.getDefault() == Locale.SIMPLIFIED_CHINESE) { 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 4970c0467..b0ffeb3d9 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 @@ -14,8 +14,6 @@ import net.momirealms.craftengine.core.entity.furniture.FurnitureElement; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.data.FireworkExplosion; import net.momirealms.craftengine.core.plugin.CraftEngine; -import net.momirealms.craftengine.core.util.AdventureHelper; -import net.momirealms.craftengine.core.util.GsonHelper; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.world.WorldPosition; import org.bukkit.Material; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java index f5ad7bf9c..6eddbfb58 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java @@ -40,7 +40,7 @@ public abstract class BukkitItemFactory> extend case "1.21.4" -> { return new ComponentItemFactory1_21_4(plugin); } - case "1.21.5", "1.21.6", "1.22", "1.22.1" -> { + case "1.21.5", "1.21.6", "1.21.7", "1.22", "1.22.1" -> { return new ComponentItemFactory1_21_5(plugin); } default -> throw new IllegalStateException("Unsupported server version: " + plugin.serverVersion()); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory1_20_5.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory1_20_5.java index ba7ca035c..41461ead5 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory1_20_5.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory1_20_5.java @@ -20,7 +20,10 @@ import net.momirealms.sparrow.nbt.CompoundTag; import net.momirealms.sparrow.nbt.Tag; import org.bukkit.inventory.ItemStack; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; public class ComponentItemFactory1_20_5 extends BukkitItemFactory { diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_back.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_back.png new file mode 100644 index 000000000..bee2f3c2b Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_back.png differ diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_down.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_down.png new file mode 100644 index 000000000..51c403fbb Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_down.png differ diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_front.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_front.png new file mode 100644 index 000000000..56b8678bf Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_front.png differ diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_side.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_side.png new file mode 100644 index 000000000..4b2b7cffe Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_side.png differ diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_top.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_top.png new file mode 100644 index 000000000..a6c59abed Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/pickaxe_block_top.png differ diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_back.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_back.png new file mode 100644 index 000000000..f1ca41066 Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_back.png differ diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_down.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_down.png new file mode 100644 index 000000000..c220083d7 Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_down.png differ diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_front.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_front.png new file mode 100644 index 000000000..2f3f0070a Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_front.png differ diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_side.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_side.png new file mode 100644 index 000000000..ff94ffb51 Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_side.png differ diff --git a/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_top.png b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_top.png new file mode 100644 index 000000000..43ec23e4f Binary files /dev/null and b/common-files/src/main/resources/resources/default/resourcepack/assets/minecraft/textures/block/custom/place_block_top.png differ diff --git a/common-files/src/main/resources/translations/en.yml b/common-files/src/main/resources/translations/en.yml index 9df428604..65f820e64 100644 --- a/common-files/src/main/resources/translations/en.yml +++ b/common-files/src/main/resources/translations/en.yml @@ -384,7 +384,7 @@ warning.config.resource_pack.generation.missing_font_texture: "Font 'Texture '' is not listed in the atlas. You need to add the texture path to the atlas or enable 'obfuscation' option in config.yml." warning.config.resource_pack.generation.missing_model_texture: "Model '' is missing texture ''" warning.config.resource_pack.generation.missing_item_model: "Item '' is missing model file: ''" -warning.config.resource_pack.generation.missing_block_model: "Block '' is missing model file: ''" +warning.config.resource_pack.generation.missing_block_model: "Block state '' is missing model file: ''" warning.config.resource_pack.generation.missing_parent_model: "Model '' cannot find parent model: ''" warning.config.resource_pack.generation.malformatted_json: "Json file '' is malformatted." warning.config.resource_pack.invalid_overlay_format: "Issue found in config.yml at 'resource-pack.overlay-format' - Invalid overlay format ''. Overlay format must contain the placeholder '{version}'." \ No newline at end of file diff --git a/common-files/src/main/resources/translations/zh_cn.yml b/common-files/src/main/resources/translations/zh_cn.yml index 2768ad0a4..ba3574bf3 100644 --- a/common-files/src/main/resources/translations/zh_cn.yml +++ b/common-files/src/main/resources/translations/zh_cn.yml @@ -385,7 +385,7 @@ warning.config.resource_pack.generation.missing_font_texture: "字体'模型''缺少纹理''" warning.config.resource_pack.generation.texture_not_in_atlas: "纹理''不在图集内. 你需要将纹理路径或文件夹前缀添加到图集内,或者启用 config.yml 中的 'obfuscation' 选项" warning.config.resource_pack.generation.missing_item_model: "物品''缺少模型文件: ''" -warning.config.resource_pack.generation.missing_block_model: "方块''缺少模型文件: ''" +warning.config.resource_pack.generation.missing_block_model: "方块状态''缺少模型文件: ''" warning.config.resource_pack.generation.missing_parent_model: "模型''找不到父级模型文件: ''" warning.config.resource_pack.generation.malformatted_json: "Json文件 '' 格式错误." warning.config.resource_pack.invalid_overlay_format: "在 config.yml 的 'resource-pack.overlay-format' 处发现问题 - 无效的overlay格式 ''. Overlay格式必须包含占位符 '{version}'." \ No newline at end of file diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 61abe7288..ca1fa6d89 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -25,7 +25,6 @@ dependencies { // Util compileOnly("net.momirealms:sparrow-util:${rootProject.properties["sparrow_util_version"]}") // Adventure - // TODO Create an API module compileOnly("net.kyori:adventure-api:${rootProject.properties["adventure_bundle_version"]}") compileOnly("net.kyori:adventure-text-minimessage:${rootProject.properties["adventure_bundle_version"]}") compileOnly("net.kyori:adventure-text-serializer-gson:${rootProject.properties["adventure_bundle_version"]}") { diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureElement.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureElement.java index 3e1876ff4..e610ec044 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureElement.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureElement.java @@ -3,9 +3,7 @@ package net.momirealms.craftengine.core.entity.furniture; import net.momirealms.craftengine.core.entity.Billboard; import net.momirealms.craftengine.core.entity.ItemDisplayContext; import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.world.WorldPosition; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.joml.Quaternionf; import org.joml.Vector3f; diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/modifier/TrimModifier.java b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/TrimModifier.java index a86adda9b..39edfe0f5 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/modifier/TrimModifier.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/TrimModifier.java @@ -1,6 +1,9 @@ package net.momirealms.craftengine.core.item.modifier; -import net.momirealms.craftengine.core.item.*; +import net.momirealms.craftengine.core.item.ComponentKeys; +import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.item.ItemBuildContext; +import net.momirealms.craftengine.core.item.NetworkItemHandler; import net.momirealms.craftengine.core.item.data.Trim; import net.momirealms.craftengine.core.util.VersionHelper; import net.momirealms.sparrow.nbt.CompoundTag; diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/function/ApplyBonusCountFunction.java b/core/src/main/java/net/momirealms/craftengine/core/loot/function/ApplyBonusCountFunction.java index 734322c73..1e6606081 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/function/ApplyBonusCountFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/function/ApplyBonusCountFunction.java @@ -1,7 +1,7 @@ package net.momirealms.craftengine.core.loot.function; -import net.momirealms.craftengine.core.item.data.Enchantment; import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.item.data.Enchantment; import net.momirealms.craftengine.core.loot.LootConditions; import net.momirealms.craftengine.core.loot.LootContext; import net.momirealms.craftengine.core.plugin.context.Condition; 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 feb7a9c9f..2dae3b934 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 @@ -776,7 +776,7 @@ public abstract class AbstractPackManager implements PackManager { for (JsonElement texture : textures) { if (!(texture instanceof JsonPrimitive texturePath)) continue; for (String permutation : permutations) { - included.accept(Key.of(texturePath.getAsString() + separator + permutation)); + unstitch.accept(Key.of(texturePath.getAsString() + separator + permutation)); } } } @@ -787,9 +787,11 @@ public abstract class AbstractPackManager implements PackManager { @SuppressWarnings("DuplicatedCode") private void validateResourcePack(Path path) { - List rootPaths; + + long time1 = System.currentTimeMillis(); + Path[] rootPaths; try { - rootPaths = FileUtils.collectOverlays(path); + rootPaths = FileUtils.collectOverlays(path).toArray(new Path[0]); } catch (IOException e) { plugin.logger().warn("Failed to collect overlays for " + path.toAbsolutePath(), e); return; @@ -797,7 +799,9 @@ public abstract class AbstractPackManager implements PackManager { Multimap imageToFonts = ArrayListMultimap.create(); // 图片到字体的映射 Multimap modelToItems = ArrayListMultimap.create(); // 模型到物品的映射 Multimap modelToBlocks = ArrayListMultimap.create(); // 模型到方块的映射 - Multimap imageToModels = ArrayListMultimap.create(); // 图片到模型的映射 + Multimap imageToModels = ArrayListMultimap.create(); // 纹理到模型的映射 + Set collectedModels = new HashSet<>(); + Set texturesInAtlas = new HashSet<>(); Set unstitchTextures = new HashSet<>(); Map directoryMapper = new HashMap<>(); @@ -915,6 +919,7 @@ public abstract class AbstractPackManager implements PackManager { } } + // 验证font的贴图是否存在 label: for (Map.Entry> entry : imageToFonts.asMap().entrySet()) { Key key = entry.getKey(); if (VANILLA_TEXTURES.contains(key)) continue; @@ -928,9 +933,10 @@ public abstract class AbstractPackManager implements PackManager { } label: for (Map.Entry> entry : modelToItems.asMap().entrySet()) { - Key key = entry.getKey(); - String modelPath = "assets/" + key.namespace() + "/models/" + key.value() + ".json"; - if (VANILLA_MODELS.contains(key)) continue; + Key modelResourceLocation = entry.getKey(); + boolean alreadyChecked = collectedModels.add(modelResourceLocation); + if (alreadyChecked || VANILLA_MODELS.contains(modelResourceLocation)) continue; + String modelPath = "assets/" + modelResourceLocation.namespace() + "/models/" + modelResourceLocation.value() + ".json"; for (Path rootPath : rootPaths) { Path modelJsonPath = rootPath.resolve(modelPath); if (Files.exists(rootPath.resolve(modelPath))) { @@ -941,13 +947,14 @@ public abstract class AbstractPackManager implements PackManager { TranslationManager.instance().log("warning.config.resource_pack.generation.malformatted_json", modelJsonPath.toAbsolutePath().toString()); continue; } - collectModels(key, jsonObject, rootPaths, imageToModels); + collectModels(modelResourceLocation, jsonObject, rootPaths, imageToModels, collectedModels); continue label; } } TranslationManager.instance().log("warning.config.resource_pack.generation.missing_item_model", entry.getValue().stream().distinct().toList().toString(), modelPath); } + label: for (Map.Entry> entry : modelToBlocks.asMap().entrySet()) { Key key = entry.getKey(); String modelPath = "assets/" + key.namespace() + "/models/" + key.value() + ".json"; @@ -962,7 +969,7 @@ public abstract class AbstractPackManager implements PackManager { TranslationManager.instance().log("warning.config.resource_pack.generation.malformatted_json", modelJsonPath.toAbsolutePath().toString()); continue; } - collectModels(key, jsonObject, rootPaths, imageToModels); + collectModels(key, jsonObject, rootPaths, imageToModels, collectedModels); continue label; } } @@ -1003,10 +1010,10 @@ public abstract class AbstractPackManager implements PackManager { } } - private void collectModels(Key model, JsonObject modelJson, List rootPaths, Multimap imageToModels) { - if (modelJson.has("parent")) { - Key parentResourceLocation = Key.from(modelJson.get("parent").getAsString()); - if (!VANILLA_MODELS.contains(parentResourceLocation)) { + private void collectModels(Key sourceModelLocation, JsonObject sourceModelJson, Path[] rootPaths, Multimap imageToModels, Set collected) { + if (sourceModelJson.has("parent")) { + Key parentResourceLocation = Key.from(sourceModelJson.get("parent").getAsString()); + if (collected.add(parentResourceLocation) && !VANILLA_MODELS.contains(parentResourceLocation)) { String parentModelPath = "assets/" + parentResourceLocation.namespace() + "/models/" + parentResourceLocation.value() + ".json"; label: { for (Path rootPath : rootPaths) { @@ -1019,21 +1026,21 @@ public abstract class AbstractPackManager implements PackManager { TranslationManager.instance().log("warning.config.resource_pack.generation.malformatted_json", modelJsonPath.toAbsolutePath().toString()); break label; } - collectModels(parentResourceLocation, jsonObject, rootPaths, imageToModels); + collectModels(parentResourceLocation, jsonObject, rootPaths, imageToModels, collected); break label; } } - TranslationManager.instance().log("warning.config.resource_pack.generation.missing_parent_model", model.asString(), parentModelPath); + TranslationManager.instance().log("warning.config.resource_pack.generation.missing_parent_model", sourceModelLocation.asString(), parentModelPath); } } } - if (modelJson.has("textures")) { - JsonObject textures = modelJson.get("textures").getAsJsonObject(); + if (sourceModelJson.has("textures")) { + JsonObject textures = sourceModelJson.get("textures").getAsJsonObject(); for (Map.Entry entry : textures.entrySet()) { String value = entry.getValue().getAsString(); if (value.charAt(0) == '#') continue; Key textureResourceLocation = Key.from(value); - imageToModels.put(textureResourceLocation, model); + imageToModels.put(textureResourceLocation, sourceModelLocation); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/EnchantmentCondition.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/EnchantmentCondition.java index a27774af1..05bb914e9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/EnchantmentCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/EnchantmentCondition.java @@ -1,7 +1,7 @@ package net.momirealms.craftengine.core.plugin.context.condition; -import net.momirealms.craftengine.core.item.data.Enchantment; import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.item.data.Enchantment; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.Context; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/TableBonusCondition.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/TableBonusCondition.java index a53ebe386..20c6fd81a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/TableBonusCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/TableBonusCondition.java @@ -1,7 +1,7 @@ package net.momirealms.craftengine.core.plugin.context.condition; -import net.momirealms.craftengine.core.item.data.Enchantment; import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.item.data.Enchantment; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.Context; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; diff --git a/gradle.properties b/gradle.properties index f29b46424..9bbc75481 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=0.0.59 +project_version=0.0.59.1 config_version=40 lang_version=21 project_group=net.momirealms @@ -49,7 +49,7 @@ mojang_brigadier_version=1.0.18 byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.4 -anti_grief_version=0.17 +anti_grief_version=0.18 nms_helper_version=1.0.18 evalex_version=3.5.0 reactive_streams_version=1.0.4