diff --git a/bukkit/loader/src/main/resources/translations/en.yml b/bukkit/loader/src/main/resources/translations/en.yml
index aaa30b4ca..e2db3a07a 100644
--- a/bukkit/loader/src/main/resources/translations/en.yml
+++ b/bukkit/loader/src/main/resources/translations/en.yml
@@ -64,7 +64,7 @@ command.upload.failure.not_supported: "Current hosting method '' doe
command.upload.on_progress: "Started uploading progress. Check the console for more information."
command.send_resource_pack.success.single: "Sent resource pack to ."
command.send_resource_pack.success.multiple: "Send resource packs to players."
-
+warning.config.pack.duplicated_files: "Duplicated files Found. Please resolve them through config.yml 'resource-pack.duplicated-files-handler' section."
warning.config.type.int: "Issue found in file - Failed to load '': Cannot cast '' to integer type for option ''."
warning.config.type.float: "Issue found in file - Failed to load '': Cannot cast '' to float type for option ''."
warning.config.type.double: "Issue found in file - Failed to load '': Cannot cast '' to double type for option ''."
@@ -101,6 +101,7 @@ warning.config.recipe.smithing_transform.post_processor.keep_component.missing_t
warning.config.i18n.unknown_locale: "Issue found in file - Unknown locale ''."
warning.config.template.duplicate: "Issue found in file - Duplicated template ''."
warning.config.template.argument.self_increase_int.invalid_range: "Issue found in file - The template '' is using a 'from' '' larger than 'to' '' in 'self_increase_int' argument."
+warning.config.template.argument.list.invalid_type: "Issue found in file - The template '' is using a 'list' argument which expects a 'List' as argument while the input argument is a(n) ''."
warning.config.vanilla_loot.missing_type: "Issue found in file - 'type' not set for vanilla loot ''."
warning.config.vanilla_loot.block.invalid_target: "Issue found in file - Invalid block target '' in vanilla loot ''."
warning.config.sound.duplicate: "Issue found in file - Duplicated sound ''."
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 5a2a01441..7958debae 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
@@ -344,15 +344,24 @@ public class BukkitBlockManager extends AbstractBlockManager {
Map> properties;
Map appearances;
Map variants;
- Map stateSection = MiscUtils.castToMap(section.get("state"), true);
- if (stateSection != null) {
+ Object stateObj = section.get("state");
+ if (stateObj == null) {
+ stateObj = section.get("states");
+ }
+ if (stateObj == null) {
+ throw new LocalizedResourceConfigException("warning.config.block.missing_state", path, id);
+ }
+ Map stateSection = MiscUtils.castToMap(stateObj, true);
+
+ // single state
+ if (!stateSection.containsKey("properties")) {
properties = Map.of();
int internalId = ResourceConfigUtils.getAsInt(stateSection.getOrDefault("id", -1), "id");
if (internalId < 0) {
throw new LocalizedResourceConfigException("warning.config.block.state.missing_real_id", path, id);
}
- Pair pair = parseAppearanceSection(pack, path, id, stateSection);
+ Pair pair = parseAppearanceSection(id, stateSection);
if (pair == null) return;
appearances = Map.of("default", pair.right());
@@ -366,19 +375,14 @@ public class BukkitBlockManager extends AbstractBlockManager {
}
variants = Map.of("", new VariantState("default", settings, internalBlockRegistryId));
} else {
- // states
- Map statesSection = MiscUtils.castToMap(section.get("states"), true);
- if (statesSection == null) {
- throw new LocalizedResourceConfigException("warning.config.block.missing_state", path, id);
- }
// properties
- Map propertySection = MiscUtils.castToMap(statesSection.get("properties"), true);
+ Map propertySection = MiscUtils.castToMap(stateSection.get("properties"), true);
if (propertySection == null) {
throw new LocalizedResourceConfigException("warning.config.block.state.missing_properties", path, id);
}
properties = parseProperties(propertySection);
// appearance
- Map appearancesSection = MiscUtils.castToMap(statesSection.get("appearances"), true);
+ Map appearancesSection = MiscUtils.castToMap(stateSection.get("appearances"), true);
if (appearancesSection == null) {
throw new LocalizedResourceConfigException("warning.config.block.state.missing_appearances", path, id);
}
@@ -386,14 +390,14 @@ public class BukkitBlockManager extends AbstractBlockManager {
Map tempTypeMap = new HashMap<>();
for (Map.Entry appearanceEntry : appearancesSection.entrySet()) {
if (appearanceEntry.getValue() instanceof Map, ?> appearanceSection) {
- Pair pair = parseAppearanceSection(pack, path, id, MiscUtils.castToMap(appearanceSection, false));
+ Pair pair = parseAppearanceSection(id, MiscUtils.castToMap(appearanceSection, false));
if (pair == null) return;
appearances.put(appearanceEntry.getKey(), pair.right());
tempTypeMap.put(appearanceEntry.getKey(), pair.left());
}
}
// variants
- Map variantsSection = MiscUtils.castToMap(statesSection.get("variants"), true);
+ Map variantsSection = MiscUtils.castToMap(stateSection.get("variants"), true);
if (variantsSection == null) {
throw new LocalizedResourceConfigException("warning.config.block.state.missing_variants", path, id);
}
@@ -425,7 +429,6 @@ public class BukkitBlockManager extends AbstractBlockManager {
}
Map behaviors = MiscUtils.castToMap(section.getOrDefault("behavior", Map.of()), false);
-
CustomBlock block = BukkitCustomBlock.builder(id)
.appearances(appearances)
.variantMapper(variants)
@@ -448,6 +451,7 @@ public class BukkitBlockManager extends AbstractBlockManager {
}
byId.put(id, block);
+
// generate mod assets
if (Config.generateModAssets()) {
for (ImmutableBlockState state : block.variantProvider().states()) {
@@ -468,32 +472,20 @@ public class BukkitBlockManager extends AbstractBlockManager {
}
@Nullable
- private Pair parseAppearanceSection(Pack pack, Path path, Key id, Map section) {
+ private Pair parseAppearanceSection(Key id, Map section) {
// require state non null
Object vanillaStateString = section.get("state");
if (vanillaStateString == null) {
- throw new LocalizedResourceConfigException("warning.config.block.state.missing_state", path, id);
+ throw new LocalizedResourceConfigException("warning.config.block.state.missing_state");
}
// get its registry id
- int vanillaStateRegistryId;
- VanillaStateParseResult parseResult = parseVanillaStateRegistryId(vanillaStateString.toString());
- if (parseResult.success()) {
- vanillaStateRegistryId = parseResult.result;
- } else {
- String[] args = new String[parseResult.args.length + 2];
- args[0] = path.toString();
- args[1] = id.toString();
- System.arraycopy(parseResult.args, 0, args, 2, parseResult.args.length);
- TranslationManager.instance().log(parseResult.reason(), args);
- return null;
- }
+ int vanillaStateRegistryId = parseVanillaStateRegistryId(vanillaStateString.toString());
// check conflict
Key ifAny = this.tempRegistryIdConflictMap.get(vanillaStateRegistryId);
if (ifAny != null && !ifAny.equals(id)) {
- TranslationManager.instance().log("warning.config.block.state.conflict", path.toString(), id.toString(), BlockStateUtils.fromBlockData(BlockStateUtils.idToBlockState(vanillaStateRegistryId)).getAsString(), ifAny.toString());
- return null;
+ throw new LocalizedResourceConfigException("warning.config.block.state.conflict", BlockStateUtils.fromBlockData(BlockStateUtils.idToBlockState(vanillaStateRegistryId)).getAsString(), ifAny.toString());
}
// require models not to be null
@@ -502,16 +494,16 @@ public class BukkitBlockManager extends AbstractBlockManager {
models = section.get("model");
}
if (models == null) {
- throw new LocalizedResourceConfigException("warning.config.block.state.missing_model", path, id);
+ throw new LocalizedResourceConfigException("warning.config.block.state.missing_model");
}
List variants = new ArrayList<>();
if (models instanceof Map, ?> singleModelSection) {
- loadVariantModel(pack, path, id, variants, MiscUtils.castToMap(singleModelSection, false));
+ loadVariantModel(variants, MiscUtils.castToMap(singleModelSection, false));
} else if (models instanceof List> modelList) {
for (Object model : modelList) {
if (model instanceof Map,?> singleModelMap) {
- loadVariantModel(pack, path, id, variants, MiscUtils.castToMap(singleModelMap, false));
+ loadVariantModel(variants, MiscUtils.castToMap(singleModelMap, false));
}
}
}
@@ -536,7 +528,7 @@ public class BukkitBlockManager extends AbstractBlockManager {
return Pair.of(block, vanillaStateRegistryId);
}
- private void loadVariantModel(Pack pack, Path path, Key id, List variants, Map singleModelMap) {
+ private void loadVariantModel(List variants, Map singleModelMap) {
JsonObject json = new JsonObject();
String modelPath = (String) singleModelMap.get("path");
if (modelPath == null) {
@@ -557,50 +549,47 @@ public class BukkitBlockManager extends AbstractBlockManager {
variants.add(json);
}
- private VanillaStateParseResult parseVanillaStateRegistryId(String blockState) {
+ private int parseVanillaStateRegistryId(String blockState) {
String[] split = blockState.split(":", 3);
if (split.length >= 4) {
- return VanillaStateParseResult.failure("warning.config.block.state.invalid_vanilla", new String[]{blockState});
+ throw new LocalizedResourceConfigException("warning.config.block.state.invalid_vanilla", blockState);
}
int registryId;
String stateOrId = split[split.length - 1];
boolean isId = !stateOrId.contains("[") && !stateOrId.contains("]");
if (isId) {
- if (split.length == 1) return VanillaStateParseResult.failure("warning.config.block.state.invalid_vanilla", new String[]{blockState});
+ if (split.length == 1) {
+ throw new LocalizedResourceConfigException("warning.config.block.state.invalid_vanilla", blockState);
+ }
Key block = split.length == 2 ? Key.of(split[0]) : Key.of(split[0], split[1]);
try {
int id = split.length == 2 ? Integer.parseInt(split[1]) : Integer.parseInt(split[2]);
- if (id < 0) return VanillaStateParseResult.failure("warning.config.block.state.invalid_vanilla", new String[]{blockState});
+ if (id < 0) {
+ throw new LocalizedResourceConfigException("warning.config.block.state.invalid_vanilla", blockState);
+ }
List arranger = this.blockAppearanceArranger.get(block);
- if (arranger == null) return VanillaStateParseResult.failure("warning.config.block.state.unavailable_vanilla", new String[]{blockState});
- if (id >= arranger.size()) return VanillaStateParseResult.failure("warning.config.block.state.invalid_vanilla_id", new String[]{blockState, String.valueOf(arranger.size() - 1)});
+ if (arranger == null) {
+ throw new LocalizedResourceConfigException("warning.config.block.state.unavailable_vanilla", blockState);
+ }
+ if (id >= arranger.size()) {
+ throw new LocalizedResourceConfigException("warning.config.block.state.invalid_vanilla_id", blockState, String.valueOf(arranger.size() - 1));
+ }
registryId = arranger.get(id);
} catch (NumberFormatException e) {
- return VanillaStateParseResult.failure("warning.config.block.state.invalid_vanilla", new String[]{blockState});
+ throw new LocalizedResourceConfigException("warning.config.block.state.invalid_vanilla", e, blockState);
}
} else {
try {
BlockData blockData = Bukkit.createBlockData(blockState);
registryId = BlockStateUtils.blockDataToId(blockData);
if (!this.blockAppearanceMapper.containsKey(registryId)) {
- return VanillaStateParseResult.failure("warning.config.block.state.unavailable_vanilla", new String[]{blockState});
+ throw new LocalizedResourceConfigException("warning.config.block.state.unavailable_vanilla", blockState);
}
} catch (IllegalArgumentException e) {
- return VanillaStateParseResult.failure("warning.config.block.state.invalid_vanilla", new String[]{blockState});
+ throw new LocalizedResourceConfigException("warning.config.block.state.invalid_vanilla", e, blockState);
}
}
- return VanillaStateParseResult.success(registryId);
- }
-
- public record VanillaStateParseResult(boolean success, int result, String reason, String[] args) {
-
- public static VanillaStateParseResult success(int result) {
- return new VanillaStateParseResult(true, result, null, null);
- }
-
- public static VanillaStateParseResult failure(String reason, String[] args) {
- return new VanillaStateParseResult(false, -1, reason, args);
- }
+ return registryId;
}
private void loadMappingsAndAdditionalBlocks() {
diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java
index 868d8c87f..3ac1d4ccb 100644
--- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java
+++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java
@@ -14,7 +14,10 @@ import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory;
import net.momirealms.craftengine.core.item.context.BlockPlaceContext;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
-import net.momirealms.craftengine.core.util.*;
+import net.momirealms.craftengine.core.util.Direction;
+import net.momirealms.craftengine.core.util.Key;
+import net.momirealms.craftengine.core.util.ResourceConfigUtils;
+import net.momirealms.craftengine.core.util.VersionHelper;
import net.momirealms.craftengine.shared.block.BlockBehavior;
import org.bukkit.block.BlockState;
import org.bukkit.event.block.BlockFormEvent;
diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java
index fc3ce5513..7d687ae26 100644
--- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java
+++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java
@@ -17,7 +17,6 @@ import net.momirealms.craftengine.core.loot.number.NumberProvider;
import net.momirealms.craftengine.core.loot.number.NumberProviders;
import net.momirealms.craftengine.core.loot.parameter.LootParameters;
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.RandomUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import net.momirealms.craftengine.core.util.Tuple;
diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FallingBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FallingBlockBehavior.java
index 171b682bc..54b2d436a 100644
--- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FallingBlockBehavior.java
+++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FallingBlockBehavior.java
@@ -11,7 +11,6 @@ import net.momirealms.craftengine.core.block.ImmutableBlockState;
import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.loot.parameter.LootParameters;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import net.momirealms.craftengine.core.util.VersionHelper;
import net.momirealms.craftengine.core.util.context.ContextHolder;
diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SaplingBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SaplingBlockBehavior.java
index 382619943..6dae49a43 100644
--- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SaplingBlockBehavior.java
+++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SaplingBlockBehavior.java
@@ -11,7 +11,10 @@ import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory;
import net.momirealms.craftengine.core.block.properties.Property;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
-import net.momirealms.craftengine.core.util.*;
+import net.momirealms.craftengine.core.util.Key;
+import net.momirealms.craftengine.core.util.RandomUtils;
+import net.momirealms.craftengine.core.util.ResourceConfigUtils;
+import net.momirealms.craftengine.core.util.Tuple;
import net.momirealms.craftengine.shared.block.BlockBehavior;
import org.bukkit.Location;
import org.bukkit.World;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java b/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java
index 1c9014b3e..d1aae38fd 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java
@@ -178,8 +178,8 @@ public abstract class CustomBlock {
return this;
}
- public Builder behavior(Map behaviorSettings) {
- this.behavior = behaviorSettings;
+ public Builder behavior(Map behavior) {
+ this.behavior = behavior;
return this;
}
diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/behavior/BlockBehaviors.java b/core/src/main/java/net/momirealms/craftengine/core/block/behavior/BlockBehaviors.java
index 445961eb5..79f189e9c 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/block/behavior/BlockBehaviors.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/block/behavior/BlockBehaviors.java
@@ -24,7 +24,7 @@ public class BlockBehaviors {
}
public static BlockBehavior fromMap(CustomBlock block, @Nullable Map map) {
- if (map == null) return EmptyBlockBehavior.INSTANCE;
+ if (map == null || map.isEmpty()) return EmptyBlockBehavior.INSTANCE;
Object type = map.get("type");
if (type == null) {
throw new LocalizedResourceConfigException("warning.config.block.behavior.missing_type");
diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/EnumProperty.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/EnumProperty.java
index b4d530aa7..d26941108 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/block/properties/EnumProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/EnumProperty.java
@@ -1,7 +1,6 @@
package net.momirealms.craftengine.core.block.properties;
import com.google.common.collect.ImmutableMap;
-import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.sparrow.nbt.StringTag;
import net.momirealms.sparrow.nbt.Tag;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/IntegerProperty.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/IntegerProperty.java
index 7f7edeb06..7b77e0bd0 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/block/properties/IntegerProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/IntegerProperty.java
@@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.block.properties;
import it.unimi.dsi.fastutil.ints.IntImmutableList;
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import net.momirealms.sparrow.nbt.IntTag;
import net.momirealms.sparrow.nbt.NumericTag;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/StringProperty.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/StringProperty.java
index 0c9dbb7c1..c6ef572e3 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/block/properties/StringProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/StringProperty.java
@@ -1,7 +1,6 @@
package net.momirealms.craftengine.core.block.properties;
import com.google.common.collect.ImmutableMap;
-import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.sparrow.nbt.StringTag;
import net.momirealms.sparrow.nbt.Tag;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/behavior/ItemBehaviors.java b/core/src/main/java/net/momirealms/craftengine/core/item/behavior/ItemBehaviors.java
index 0c02d14c9..d31aef35c 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/item/behavior/ItemBehaviors.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/item/behavior/ItemBehaviors.java
@@ -22,6 +22,7 @@ public class ItemBehaviors {
}
public static ItemBehavior fromMap(Pack pack, Path path, Key id, Map map) {
+ if (map == null || map.isEmpty()) return EmptyItemBehavior.INSTANCE;
Object type = map.get("type");
if (type == null) {
throw new LocalizedResourceConfigException("warning.config.item.behavior.missing_type");
diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBlastingRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBlastingRecipe.java
index fd0f29ebe..d7f2e531d 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBlastingRecipe.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBlastingRecipe.java
@@ -2,11 +2,9 @@ package net.momirealms.craftengine.core.item.recipe;
import net.momirealms.craftengine.core.registry.Holder;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import org.jetbrains.annotations.NotNull;
-import java.util.Locale;
import java.util.Map;
import java.util.Set;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCampfireRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCampfireRecipe.java
index 984d185dd..007381419 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCampfireRecipe.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCampfireRecipe.java
@@ -2,11 +2,9 @@ package net.momirealms.craftengine.core.item.recipe;
import net.momirealms.craftengine.core.registry.Holder;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import org.jetbrains.annotations.NotNull;
-import java.util.Locale;
import java.util.Map;
import java.util.Set;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmeltingRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmeltingRecipe.java
index 6698c3591..0a667cdff 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmeltingRecipe.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmeltingRecipe.java
@@ -1,13 +1,10 @@
package net.momirealms.craftengine.core.item.recipe;
-import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
import net.momirealms.craftengine.core.registry.Holder;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import org.jetbrains.annotations.NotNull;
-import java.util.Locale;
import java.util.Map;
import java.util.Set;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmokingRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmokingRecipe.java
index c875a19d5..9054a2b02 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmokingRecipe.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmokingRecipe.java
@@ -1,13 +1,10 @@
package net.momirealms.craftengine.core.item.recipe;
-import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
import net.momirealms.craftengine.core.registry.Holder;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import org.jetbrains.annotations.NotNull;
-import java.util.Locale;
import java.util.Map;
import java.util.Set;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/RandomCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/RandomCondition.java
index a13aa0913..50cb43f1e 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/RandomCondition.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/RandomCondition.java
@@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.loot.condition;
import net.momirealms.craftengine.core.loot.LootContext;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.RandomUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/TableBonusCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/TableBonusCondition.java
index e71358c1d..125d5859d 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/TableBonusCondition.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/TableBonusCondition.java
@@ -6,7 +6,6 @@ import net.momirealms.craftengine.core.loot.LootContext;
import net.momirealms.craftengine.core.loot.parameter.LootParameters;
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import java.util.ArrayList;
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 be0ddac75..ac7d5f9da 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
@@ -513,15 +513,18 @@ public abstract class AbstractPackManager implements PackManager {
List folders = new ArrayList<>();
folders.addAll(loadedPacks().stream().filter(Pack::enabled).map(Pack::resourcePackFolder).toList());
folders.addAll(Config.foldersToMerge().stream().map(it -> plugin.dataFolderPath().getParent().resolve(it)).filter(Files::exists).toList());
-
List>> duplicated = mergeFolder(folders, generatedPackPath);
if (!duplicated.isEmpty()) {
- this.plugin.logger().severe("Duplicated files Found. Please resolve them through config.yml resource-pack.duplicated-files-handler.");
+ plugin.logger().severe(AdventureHelper.miniMessage().stripTags(TranslationManager.instance().miniMessageTranslation("warning.config.pack.duplicated_files")));
+ int x = 1;
for (Pair> path : duplicated) {
- this.plugin.logger().warn("");
- this.plugin.logger().warn("Target: " + path.left());
- for (Path path0 : path.right()) {
- this.plugin.logger().warn(" - " + path0.toAbsolutePath());
+ this.plugin.logger().warn("[ " + (x++) + " ] " + path.left());
+ for (int i = 0, size = path.right().size(); i < size; i++) {
+ if (i == size - 1) {
+ this.plugin.logger().info(" └ " + path.right().get(i).toAbsolutePath());
+ } else {
+ this.plugin.logger().info(" ├ " + path.right().get(i).toAbsolutePath());
+ }
}
}
}
@@ -932,7 +935,7 @@ public abstract class AbstractPackManager implements PackManager {
}
if (Config.packMinVersion() < 21.19f && has) {
- plugin.logger().warn("You are using item-model component for models which requires 1.21.2+. But the min supported version is " + "1." + Config.packMinVersion());
+ plugin.logger().warn("You are using 'item-model' component for some models which requires 1.21.2+ client. But the min-supported-version set in 'config.yml' is " + "1." + Config.packMinVersion());
}
}
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/CustomModelDataConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/CustomModelDataConditionProperty.java
index ec17f1df0..205301496 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/CustomModelDataConditionProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/CustomModelDataConditionProperty.java
@@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.pack.model.condition;
import com.google.gson.JsonObject;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import java.util.Map;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/HasComponentConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/HasComponentConditionProperty.java
index 028a14a0a..4f0a9a7aa 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/HasComponentConditionProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/HasComponentConditionProperty.java
@@ -5,7 +5,6 @@ import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigExce
import net.momirealms.craftengine.core.util.Key;
import java.util.Map;
-import java.util.Objects;
public class HasComponentConditionProperty implements ConditionProperty {
public static final Factory FACTORY = new Factory();
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/KeyBindDownConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/KeyBindDownConditionProperty.java
index 5e2b678d3..5597a60b5 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/KeyBindDownConditionProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/KeyBindDownConditionProperty.java
@@ -5,7 +5,6 @@ import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigExce
import net.momirealms.craftengine.core.util.Key;
import java.util.Map;
-import java.util.Objects;
public class KeyBindDownConditionProperty implements ConditionProperty {
public static final Factory FACTORY = new Factory();
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CompassRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CompassRangeDispatchProperty.java
index 48fbfefd4..3b8f31f0b 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CompassRangeDispatchProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CompassRangeDispatchProperty.java
@@ -5,7 +5,6 @@ import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigExce
import net.momirealms.craftengine.core.util.Key;
import java.util.Map;
-import java.util.Objects;
public class CompassRangeDispatchProperty implements RangeDispatchProperty {
public static final Factory FACTORY = new Factory();
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CustomModelDataRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CustomModelDataRangeDispatchProperty.java
index 445cd83da..7c7b51031 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CustomModelDataRangeDispatchProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CustomModelDataRangeDispatchProperty.java
@@ -3,7 +3,6 @@ package net.momirealms.craftengine.core.pack.model.rangedisptach;
import com.google.gson.JsonObject;
import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import java.util.Map;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/TimeRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/TimeRangeDispatchProperty.java
index 9e8d9da05..9af1705fe 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/TimeRangeDispatchProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/TimeRangeDispatchProperty.java
@@ -5,7 +5,6 @@ import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigExce
import net.momirealms.craftengine.core.util.Key;
import java.util.Map;
-import java.util.Objects;
public class TimeRangeDispatchProperty implements RangeDispatchProperty {
public static final Factory FACTORY = new Factory();
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseCycleRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseCycleRangeDispatchProperty.java
index 522d05f30..972bcbbed 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseCycleRangeDispatchProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseCycleRangeDispatchProperty.java
@@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.pack.model.rangedisptach;
import com.google.gson.JsonObject;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import java.util.Map;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/BlockStateSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/BlockStateSelectProperty.java
index 0e0944c97..d30e02f36 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/BlockStateSelectProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/BlockStateSelectProperty.java
@@ -5,7 +5,6 @@ import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigExce
import net.momirealms.craftengine.core.util.Key;
import java.util.Map;
-import java.util.Objects;
public class BlockStateSelectProperty implements SelectProperty {
public static final Factory FACTORY = new Factory();
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/CustomModelDataSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/CustomModelDataSelectProperty.java
index a7f23ead6..cafd0e00a 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/CustomModelDataSelectProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/CustomModelDataSelectProperty.java
@@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.pack.model.select;
import com.google.gson.JsonObject;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import java.util.Map;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/LocalTimeSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/LocalTimeSelectProperty.java
index 84e97c1c8..ec8cec8a6 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/LocalTimeSelectProperty.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/LocalTimeSelectProperty.java
@@ -6,7 +6,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
-import java.util.Objects;
public class LocalTimeSelectProperty implements SelectProperty {
public static final Factory FACTORY = new Factory();
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ChestSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ChestSpecialModel.java
index 8acbfaca4..a0a2fd810 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ChestSpecialModel.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ChestSpecialModel.java
@@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.pack.model.special;
import com.google.gson.JsonObject;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import java.util.Map;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/HeadSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/HeadSpecialModel.java
index 355aefef5..7c67497df 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/HeadSpecialModel.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/HeadSpecialModel.java
@@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.pack.model.special;
import com.google.gson.JsonObject;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import java.util.Map;
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 2c01f9048..69807c639 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
@@ -3,7 +3,6 @@ package net.momirealms.craftengine.core.pack.model.special;
import com.google.gson.JsonObject;
import net.momirealms.craftengine.core.util.Direction;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import java.util.Locale;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java
index df14b2b50..c76be9f9e 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java
@@ -1,9 +1,7 @@
package net.momirealms.craftengine.core.pack.model.tint;
import com.google.gson.JsonObject;
-import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import org.incendo.cloud.type.Either;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/GrassTint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/GrassTint.java
index e20a2d6fd..d579c0c43 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/GrassTint.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/GrassTint.java
@@ -3,7 +3,6 @@ package net.momirealms.craftengine.core.pack.model.tint;
import com.google.gson.JsonObject;
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import java.util.Map;
diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/ListTemplateArgument.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/ListTemplateArgument.java
index 2b5daca92..0ed041519 100644
--- a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/ListTemplateArgument.java
+++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/ListTemplateArgument.java
@@ -1,10 +1,11 @@
package net.momirealms.craftengine.core.plugin.config.template;
+import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
import net.momirealms.craftengine.core.util.Key;
-import net.momirealms.craftengine.core.util.MiscUtils;
import java.util.List;
import java.util.Map;
+import java.util.function.Supplier;
public class ListTemplateArgument implements TemplateArgument {
public static final Factory FACTORY = new Factory();
@@ -28,7 +29,16 @@ public class ListTemplateArgument implements TemplateArgument {
@Override
public TemplateArgument create(Map arguments) {
- return new ListTemplateArgument(MiscUtils.castToList(arguments.getOrDefault("list", List.of()), false));
+ Object list = arguments.getOrDefault("list", List.of());
+ return new ListTemplateArgument(castToListOrThrow(list, () -> new LocalizedResourceConfigException("warning.config.template.argument.list.invalid_type", list.getClass().getSimpleName())));
+ }
+
+ @SuppressWarnings("unchecked")
+ private static List