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 75f1b3521..1cc35512d 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 @@ -555,7 +555,7 @@ public class BukkitBlockManager extends AbstractBlockManager { json.addProperty("x", ResourceConfigUtils.getAsInt(singleModelMap.get("x"), "x")); if (singleModelMap.containsKey("y")) json.addProperty("y", ResourceConfigUtils.getAsInt(singleModelMap.get("y"), "y")); - if (singleModelMap.containsKey("uvlock")) json.addProperty("uvlock", (boolean) singleModelMap.get("uvlock")); + if (singleModelMap.containsKey("uvlock")) json.addProperty("uvlock", ResourceConfigUtils.getAsBoolean(singleModelMap.get("uvlock"), "uvlock")); if (singleModelMap.containsKey("weight")) json.addProperty("weight", ResourceConfigUtils.getAsInt(singleModelMap.get("weight"), "weight")); Map generationMap = MiscUtils.castToMap(singleModelMap.get("generation"), true); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BushBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BushBlockBehavior.java index 86d6c014e..a29878a0f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BushBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BushBlockBehavior.java @@ -42,9 +42,9 @@ public class BushBlockBehavior extends AbstractCanSurviveBlockBehavior { @Override public BlockBehavior create(CustomBlock block, Map arguments) { Tuple, Set, Set> tuple = readTagsAndState(arguments, false); - boolean stackable = (boolean) arguments.getOrDefault("stackable", false); + boolean stackable = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("stackable", false), "stackable"); int delay = ResourceConfigUtils.getAsInt(arguments.getOrDefault("delay", 0), "delay"); - boolean blacklistMode = (boolean) arguments.getOrDefault("blacklist", false); + boolean blacklistMode = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("blacklist", false), "blacklist"); return new BushBlockBehavior(block, delay, blacklistMode, stackable, tuple.left(), tuple.mid(), tuple.right()); } } 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 349ed26f1..16765f6e4 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 @@ -205,7 +205,7 @@ public class CropBlockBehavior extends BukkitBlockBehavior { Property ageProperty = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("age"), "warning.config.block.behavior.crop.missing_age"); int minGrowLight = ResourceConfigUtils.getAsInt(arguments.getOrDefault("light-requirement", 9), "light-requirement"); float growSpeed = ResourceConfigUtils.getAsFloat(arguments.getOrDefault("grow-speed", 0.125f), "grow-speed"); - boolean isBoneMealTarget = (boolean) arguments.getOrDefault("is-bone-meal-target", true); + boolean isBoneMealTarget = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("is-bone-meal-target", true), "is-bone-meal-target"); NumberProvider boneMealAgeBonus = NumberProviders.fromObject(arguments.getOrDefault("bone-meal-age-bonus", 1)); return new CropBlockBehavior(block, ageProperty, growSpeed, minGrowLight, isBoneMealTarget, boneMealAgeBonus); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java index 80a994936..2fd035163 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java @@ -316,8 +316,8 @@ public class DoorBlockBehavior extends AbstractCanSurviveBlockBehavior { Property hinge = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("hinge"), "warning.config.block.behavior.door.missing_hinge"); Property open = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("open"), "warning.config.block.behavior.door.missing_open"); Property powered = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("powered"), "warning.config.block.behavior.door.missing_powered"); - boolean canOpenWithHand = (boolean) arguments.getOrDefault("can-open-with-hand", true); - boolean canOpenByWindCharge = (boolean) arguments.getOrDefault("can-open-by-wind-charge", true); + boolean canOpenWithHand = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-open-with-hand", true), "can-open-with-hand"); + boolean canOpenByWindCharge = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-open-by-wind-charge", true), "can-open-by-wind-charge"); Map sounds = (Map) arguments.get("sounds"); SoundData openSound = null; SoundData closeSound = null; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceGateBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceGateBlockBehavior.java index bba558c62..ca92f4dbe 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceGateBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceGateBlockBehavior.java @@ -275,8 +275,8 @@ public class FenceGateBlockBehavior extends BukkitBlockBehavior { Property inWall = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("in_wall"), "warning.config.block.behavior.fence_gate.missing_in_wall"); Property open = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("open"), "warning.config.block.behavior.fence_gate.missing_open"); Property powered = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("powered"), "warning.config.block.behavior.fence_gate.missing_powered"); - boolean canOpenWithHand = (boolean) arguments.getOrDefault("can-open-with-hand", true); - boolean canOpenByWindCharge = (boolean) arguments.getOrDefault("can-open-by-wind-charge", true); + boolean canOpenWithHand = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-open-with-hand", true), "can-open-with-hand"); + boolean canOpenByWindCharge = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-open-by-wind-charge", true), "can-open-by-wind-charge"); Map sounds = (Map) arguments.get("sounds"); SoundData openSound = null; SoundData closeSound = null; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/HangingBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/HangingBlockBehavior.java index 4ef89c94f..c6e645afd 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/HangingBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/HangingBlockBehavior.java @@ -33,9 +33,9 @@ public class HangingBlockBehavior extends BushBlockBehavior { @Override public BlockBehavior create(CustomBlock block, Map arguments) { Tuple, Set, Set> tuple = readTagsAndState(arguments, true); - boolean stackable = (boolean) arguments.getOrDefault("stackable", false); + boolean stackable = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("stackable", false), "stackable"); int delay = ResourceConfigUtils.getAsInt(arguments.getOrDefault("delay", 0), "delay"); - boolean blacklistMode = (boolean) arguments.getOrDefault("blacklist", false); + boolean blacklistMode = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("blacklist", false), "blacklist"); return new HangingBlockBehavior(block, delay, blacklistMode, stackable, tuple.left(), tuple.mid(), tuple.right()); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/NearLiquidBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/NearLiquidBlockBehavior.java index 4aa5c90a7..9fb1686b2 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/NearLiquidBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/NearLiquidBlockBehavior.java @@ -46,7 +46,7 @@ public class NearLiquidBlockBehavior extends AbstractCanSurviveBlockBehavior { @Override public BlockBehavior create(CustomBlock block, Map arguments) { List liquidTypes = MiscUtils.getAsStringList(arguments.getOrDefault("liquid-type", List.of("water"))); - boolean stackable = (boolean) arguments.getOrDefault("stackable", false); + boolean stackable = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("stackable", false), "stackable"); int delay = ResourceConfigUtils.getAsInt(arguments.getOrDefault("delay", 0), "delay"); List positionsToCheck = MiscUtils.getAsStringList(arguments.getOrDefault("positions", List.of())); if (positionsToCheck.isEmpty()) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/OnLiquidBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/OnLiquidBlockBehavior.java index 4c87ee926..8b892760f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/OnLiquidBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/OnLiquidBlockBehavior.java @@ -41,7 +41,7 @@ public class OnLiquidBlockBehavior extends AbstractCanSurviveBlockBehavior { @Override public BlockBehavior create(CustomBlock block, Map arguments) { List liquidTypes = MiscUtils.getAsStringList(arguments.getOrDefault("liquid-type", List.of("water"))); - boolean stackable = (boolean) arguments.getOrDefault("stackable", false); + boolean stackable = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("stackable", false), "stackable"); int delay = ResourceConfigUtils.getAsInt(arguments.getOrDefault("delay", 0), "delay"); return new OnLiquidBlockBehavior(block, delay, stackable, liquidTypes.contains("water"), liquidTypes.contains("lava")); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SturdyBaseBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SturdyBaseBlockBehavior.java index 98ae0b51f..03852aac9 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SturdyBaseBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SturdyBaseBlockBehavior.java @@ -69,7 +69,7 @@ public class SturdyBaseBlockBehavior extends AbstractCanSurviveBlockBehavior { public BlockBehavior create(CustomBlock block, Map arguments) { int delay = ResourceConfigUtils.getAsInt(arguments.getOrDefault("delay", 0), "delay"); Direction direction = Direction.valueOf(arguments.getOrDefault("direction", "down").toString().toUpperCase(Locale.ENGLISH)); - boolean stackable = (boolean) arguments.getOrDefault("stackable", false); + boolean stackable = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("stackable", false), "stackable"); List supportTypes = MiscUtils.getAsStringList(arguments.getOrDefault("support-types", List.of("full"))); return new SturdyBaseBlockBehavior(block, delay, direction, stackable, supportTypes.contains("full"), supportTypes.contains("rigid"), supportTypes.contains("center")); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java index 5c6400055..da4024c35 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java @@ -24,10 +24,7 @@ import net.momirealms.craftengine.core.item.ItemKeys; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.item.context.UseOnContext; import net.momirealms.craftengine.core.sound.SoundData; -import net.momirealms.craftengine.core.util.Direction; -import net.momirealms.craftengine.core.util.HorizontalDirection; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.VersionHelper; +import net.momirealms.craftengine.core.util.*; import net.momirealms.craftengine.core.world.BlockPos; import net.momirealms.craftengine.core.world.Vec3d; import net.momirealms.craftengine.core.world.World; @@ -234,9 +231,9 @@ public class TrapDoorBlockBehavior extends BukkitBlockBehavior { Property facing = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("facing"), "warning.config.block.behavior.trapdoor.missing_facing"); Property open = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("open"), "warning.config.block.behavior.trapdoor.missing_open"); Property powered = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("powered"), "warning.config.block.behavior.trapdoor.missing_powered"); - boolean canOpenWithHand = (boolean) arguments.getOrDefault("can-open-with-hand", true); - boolean canOpenByWindCharge = (boolean) arguments.getOrDefault("can-open-by-wind-charge", true); - Map sounds = (Map) arguments.get("sounds"); + boolean canOpenWithHand = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-open-with-hand", true), "can-open-with-hand"); + boolean canOpenByWindCharge = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-open-by-wind-charge", true), "can-open-by-wind-charge"); + Map sounds = MiscUtils.castToMap(arguments.get("sounds"), true); SoundData openSound = null; SoundData closeSound = null; if (sounds != null) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/CustomHitBox.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/CustomHitBox.java index 42274e1a6..5c6f30a3b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/CustomHitBox.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/CustomHitBox.java @@ -91,8 +91,8 @@ public class CustomHitBox extends AbstractHitBox { if (entityType == null) { throw new LocalizedResourceConfigException("warning.config.furniture.hitbox.custom.invalid_entity", new IllegalArgumentException("EntityType not found: " + type), type); } - boolean canBeHitByProjectile = (boolean) arguments.getOrDefault("can-be-hit-by-projectile", false); - boolean blocksBuilding = (boolean) arguments.getOrDefault("blocks-building", true); + boolean canBeHitByProjectile = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-be-hit-by-projectile", false), "can-be-hit-by-projectile"); + boolean blocksBuilding = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("blocks-building", true), "blocks-building"); return new CustomHitBox(HitBoxFactory.getSeats(arguments), position, entityType, scale, blocksBuilding, canBeHitByProjectile); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/HappyGhastHitBox.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/HappyGhastHitBox.java index 9c7e6e29b..3defd743b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/HappyGhastHitBox.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/HappyGhastHitBox.java @@ -118,10 +118,10 @@ public class HappyGhastHitBox extends AbstractHitBox { throw new UnsupportedOperationException("HappyGhastHitBox is only supported on 1.21.6+"); } double scale = ResourceConfigUtils.getAsDouble(arguments.getOrDefault("scale", 1), "scale"); - boolean hardCollision = (boolean) arguments.getOrDefault("hard-collision", true); - boolean canUseOn = (boolean) arguments.getOrDefault("can-use-item-on", false); - boolean canBeHitByProjectile = (boolean) arguments.getOrDefault("can-be-hit-by-projectile", false); - boolean blocksBuilding = (boolean) arguments.getOrDefault("blocks-building", false); + boolean hardCollision = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("hard-collision", true), "hard-collision"); + boolean canUseOn = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-use-item-on", false), "can-use-item-on"); + boolean canBeHitByProjectile = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-be-hit-by-projectile", false), "can-be-hit-by-projectile"); + boolean blocksBuilding = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("blocks-building", false), "blocks-building"); return new HappyGhastHitBox( HitBoxFactory.getSeats(arguments), MiscUtils.getAsVector3f(arguments.getOrDefault("position", "0"), "position"), diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/InteractionHitBox.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/InteractionHitBox.java index 1ab038efe..3fad43d0d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/InteractionHitBox.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/InteractionHitBox.java @@ -104,10 +104,10 @@ public class InteractionHitBox extends AbstractHitBox { width = ResourceConfigUtils.getAsFloat(arguments.getOrDefault("width", "1"), "width"); height = ResourceConfigUtils.getAsFloat(arguments.getOrDefault("height", "1"), "height"); } - boolean canUseOn = (boolean) arguments.getOrDefault("can-use-item-on", false); - boolean interactive = (boolean) arguments.getOrDefault("interactive", true); - boolean canBeHitByProjectile = (boolean) arguments.getOrDefault("can-be-hit-by-projectile", false); - boolean blocksBuilding = (boolean) arguments.getOrDefault("blocks-building", true); + boolean canUseOn = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-use-item-on", false), "can-use-item-on"); + boolean interactive = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("interactive", true), "interactive"); + boolean canBeHitByProjectile = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-be-hit-by-projectile", false), "can-be-hit-by-projectile"); + boolean blocksBuilding = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("blocks-building", true), "blocks-building"); return new InteractionHitBox( HitBoxFactory.getSeats(arguments), position, diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/ShulkerHitBox.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/ShulkerHitBox.java index fdf1db0c3..96db4da42 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/ShulkerHitBox.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/ShulkerHitBox.java @@ -284,11 +284,11 @@ public class ShulkerHitBox extends AbstractHitBox { float scale = ResourceConfigUtils.getAsFloat(arguments.getOrDefault("scale", "1"), "scale"); byte peek = (byte) ResourceConfigUtils.getAsInt(arguments.getOrDefault("peek", 0), "peek"); Direction directionEnum = Optional.ofNullable(arguments.get("direction")).map(it -> Direction.valueOf(it.toString().toUpperCase(Locale.ENGLISH))).orElse(Direction.UP); - boolean interactive = (boolean) arguments.getOrDefault("interactive", true); - boolean interactionEntity = (boolean) arguments.getOrDefault("interaction-entity", true); - boolean canUseItemOn = (boolean) arguments.getOrDefault("can-use-item-on", true); - boolean canBeHitByProjectile = (boolean) arguments.getOrDefault("can-be-hit-by-projectile", true); - boolean blocksBuilding = (boolean) arguments.getOrDefault("blocks-building", true); + boolean interactive = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("interactive", true), "interactive"); + boolean interactionEntity = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("interaction-entity", true), "interaction-entity"); + boolean canUseItemOn = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-use-item-on", true), "can-use-item-on"); + boolean canBeHitByProjectile = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("can-be-hit-by-projectile", true), "can-be-hit-by-projectile"); + boolean blocksBuilding = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("blocks-building", true), "blocks-building"); return new ShulkerHitBox( HitBoxFactory.getSeats(arguments), position, directionEnum, diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/loot/BukkitVanillaLootManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/loot/BukkitVanillaLootManager.java index d56a0fb1f..14018080b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/loot/BukkitVanillaLootManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/loot/BukkitVanillaLootManager.java @@ -111,7 +111,7 @@ public class BukkitVanillaLootManager extends AbstractVanillaLootManager impleme } catch (IllegalArgumentException e) { throw new LocalizedResourceConfigException("warning.config.vanilla_loot.invalid_type", type, EnumUtils.toString(VanillaLoot.Type.values())); } - boolean override = (boolean) section.getOrDefault("override", false); + boolean override = ResourceConfigUtils.getAsBoolean(section.getOrDefault("override", false), "override"); List targets = MiscUtils.getAsStringList(section.getOrDefault("target", List.of())); LootTable lootTable = LootTable.fromMap(MiscUtils.castToMap(section.get("loot"), false)); switch (typeEnum) { diff --git a/common-files/src/main/resources/translations/en.yml b/common-files/src/main/resources/translations/en.yml index 9be5a8c1d..5612c8ae3 100644 --- a/common-files/src/main/resources/translations/en.yml +++ b/common-files/src/main/resources/translations/en.yml @@ -66,6 +66,7 @@ command.send_resource_pack.success.multiple: "Send resource packs to Duplicated files Found. Please resolve them through config.yml 'resource-pack.duplicated-files-handler' section." warning.config.yaml.duplicated_key: "Issue found in file - Found duplicated key '' at line , this might cause unexpected results." warning.config.type.int: "Issue found in file - Failed to load '': Cannot cast '' to integer type for option ''." +warning.config.type.boolean: "Issue found in file - Failed to load '': Cannot cast '' to boolean 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 ''." warning.config.type.quaternionf: "Issue found in file - Failed to load '': Cannot cast '' to Quaternionf type for option ''." @@ -154,6 +155,7 @@ warning.config.furniture.hitbox.custom.invalid_entity: "Issue found in f warning.config.item.duplicate: "Issue found in file - Duplicated item ''. Please check if there is the same configuration in other files." warning.config.item.settings.unknown: "Issue found in file - The item '' is using an unknown setting type ''." warning.config.item.settings.invulnerable.invalid_damage_source: "Issue found in file - The item '' is using an unknown damage source ''. Allowed sources: []." +warning.config.item.settings.equippable.missing_slot: "Issue found in file - The item '' is missing the required 'slot' argument for 'equippable' settings." warning.config.item.missing_material: "Issue found in file - The item '' is missing the required 'material' argument." warning.config.item.invalid_material: "Issue found in file - The item '' is using an invalid material type ''." warning.config.item.invalid_custom_model_data: "Issue found in file - The item '' is using a negative custom model data '' which is invalid." diff --git a/common-files/src/main/resources/translations/zh_cn.yml b/common-files/src/main/resources/translations/zh_cn.yml index 43384290d..522ec704f 100644 --- a/common-files/src/main/resources/translations/zh_cn.yml +++ b/common-files/src/main/resources/translations/zh_cn.yml @@ -67,6 +67,7 @@ warning.config.pack.duplicated_files: "发现重复文件 请通过 config warning.config.yaml.duplicated_key: "在文件 发现问题 - 在第行发现重复的键 '', 这可能会导致一些意料之外的问题." warning.config.type.int: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为整数类型 (选项 '')" warning.config.type.float: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为浮点数类型 (选项 '')" +warning.config.type.boolean: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为布尔类型 (选项 '')" warning.config.type.double: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为双精度类型 (选项 '')" warning.config.type.quaternionf: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为四元数类型 (选项 '')" warning.config.type.vector3f: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为三维向量类型 (选项 '')" @@ -154,6 +155,7 @@ warning.config.furniture.hitbox.custom.invalid_entity: "在文件 在文件 发现问题 - 重复的物品 '' 请检查其他文件中是否存在相同配置" warning.config.item.settings.unknown: "在文件 发现问题 - 物品 '' 使用了未知的设置类型 ''" warning.config.item.settings.invulnerable.invalid_damage_source: "在文件 发现问题 - 物品 '' 物品使用了未知的伤害来源类型 '' 允许的来源: []" +warning.config.item.settings.equippable.missing_slot: "在文件 发现问题 - 物品 '' 缺少了 'equippable' 设置所需的 'slot' 参数." warning.config.item.missing_material: "在文件 发现问题 - 物品 '' 缺少必需的 'material' 参数" warning.config.item.invalid_material: "在文件 发现问题 - 物品 '' 使用了无效的材料类型 ''" warning.config.item.invalid_custom_model_data: "在文件 发现问题 - 物品 '' 使用了无效的负数模型值 ''." diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 18f604a63..1ff120cc5 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -21,7 +21,7 @@ dependencies { implementation("net.momirealms:sparrow-nbt-codec:${rootProject.properties["sparrow_nbt_version"]}") implementation("net.momirealms:sparrow-nbt-legacy-codec:${rootProject.properties["sparrow_nbt_version"]}") // S3 - implementation("net.momirealms:craft-engine-s3:0.1") + implementation("net.momirealms:craft-engine-s3:0.2") // Util compileOnly("net.momirealms:sparrow-util:${rootProject.properties["sparrow_util_version"]}") // Adventure diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/BlockSettings.java b/core/src/main/java/net/momirealms/craftengine/core/block/BlockSettings.java index 9d8bf35d1..14cf66bea 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/BlockSettings.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/BlockSettings.java @@ -386,11 +386,11 @@ public class BlockSettings { return settings -> settings.resistance(floatValue); })); registerFactory("is-randomly-ticking", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "is-randomly-ticking"); return settings -> settings.isRandomlyTicking(booleanValue); })); registerFactory("propagate-skylight", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "propagate-skylight"); return settings -> settings.propagatesSkylightDown(booleanValue ? Tristate.TRUE : Tristate.FALSE); })); registerFactory("push-reaction", (value -> { @@ -402,7 +402,7 @@ public class BlockSettings { return settings -> settings.mapColor(MapColor.get(intValue)); })); registerFactory("burnable", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "burnable"); return settings -> settings.burnable(booleanValue); })); registerFactory("instrument", (value -> { @@ -426,19 +426,19 @@ public class BlockSettings { return settings -> settings.fireSpreadChance(intValue); })); registerFactory("replaceable", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "replaceable"); return settings -> settings.replaceable(booleanValue); })); registerFactory("is-redstone-conductor", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "is-redstone-conductor"); return settings -> settings.isRedstoneConductor(booleanValue); })); registerFactory("is-suffocating", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "is-suffocating"); return settings -> settings.isSuffocating(booleanValue); })); registerFactory("is-view-blocking", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "is-view-blocking"); return settings -> settings.isViewBlocking(booleanValue); })); registerFactory("sounds", (value -> { @@ -446,11 +446,11 @@ public class BlockSettings { return settings -> settings.sounds(BlockSounds.fromMap(soundMap)); })); registerFactory("fluid-state", (value -> { - String state = (String) value; + String state = value.toString(); return settings -> settings.fluidState(state.equals("water")); })); registerFactory("can-occlude", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "can-occlude"); return settings -> settings.canOcclude(booleanValue ? Tristate.TRUE : Tristate.FALSE); })); registerFactory("correct-tools", (value -> { @@ -458,15 +458,15 @@ public class BlockSettings { return settings -> settings.correctTools(tools.stream().map(Key::of).collect(Collectors.toSet())); })); registerFactory("require-correct-tools", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "require-correct-tools"); return settings -> settings.requireCorrectTool(booleanValue); })); registerFactory("respect-tool-component", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "respect-tool-component"); return settings -> settings.respectToolComponent(booleanValue); })); registerFactory("use-shape-for-light-occlusion", (value -> { - boolean booleanValue = (boolean) value; + boolean booleanValue = ResourceConfigUtils.getAsBoolean(value, "use-shape-for-light-occlusion"); return settings -> settings.useShapeForLightOcclusion(booleanValue ? Tristate.TRUE : Tristate.FALSE); })); registerFactory("incorrect-tool-dig-speed", (value -> { diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/BooleanProperty.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/BooleanProperty.java index 9541878ae..2e9798331 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/properties/BooleanProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/BooleanProperty.java @@ -1,5 +1,6 @@ package net.momirealms.craftengine.core.block.properties; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.sparrow.nbt.ByteTag; import net.momirealms.sparrow.nbt.Tag; @@ -73,7 +74,7 @@ public class BooleanProperty extends Property { public static class Factory implements PropertyFactory { @Override public Property create(String name, Map arguments) { - boolean bool = (boolean) arguments.getOrDefault("default", false); + boolean bool = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("default", false), "default"); return BooleanProperty.create(name, bool); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java index 434d5b273..a5e2274bc 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java @@ -112,7 +112,7 @@ public abstract class AbstractFurnitureManager implements FurnitureManager { for (Map element : elementConfigs) { FurnitureElement furnitureElement = furnitureElementBuilder() .item(Key.of(ResourceConfigUtils.requireNonEmptyStringOrThrow(element.get("item"), "warning.config.furniture.element.missing_item"))) - .applyDyedColor((boolean) element.getOrDefault("apply-dyed-color", true)) + .applyDyedColor(ResourceConfigUtils.getAsBoolean(element.getOrDefault("apply-dyed-color", true), "apply-dyed-color")) .billboard(ResourceConfigUtils.getOrDefault(element.get("billboard"), o -> Billboard.valueOf(o.toString().toUpperCase(Locale.ENGLISH)), Billboard.FIXED)) .transform(ResourceConfigUtils.getOrDefault(element.get("transform"), o -> ItemDisplayContext.valueOf(o.toString().toUpperCase(Locale.ENGLISH)), ItemDisplayContext.NONE)) .scale(MiscUtils.getAsVector3f(element.getOrDefault("scale", "1"), "scale")) diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java index 30f83d2d3..6ee017481 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java @@ -414,8 +414,8 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl TreeMap map = AbstractItemManager.this.modernOverrides.computeIfAbsent(clientBoundMaterial, k -> new TreeMap<>()); map.put(customModelData, new ModernItemModel( modernModel, - (boolean) section.getOrDefault("oversized-in-gui", true), - (boolean) section.getOrDefault("hand-animation-on-swap", true) + ResourceConfigUtils.getAsBoolean(section.getOrDefault("oversized-in-gui", true), "oversized-in-gui"), + ResourceConfigUtils.getAsBoolean(section.getOrDefault("hand-animation-on-swap", true), "hand-animation-on-swap") )); } if (needsLegacyCompatibility() && legacyOverridesModels != null && !legacyOverridesModels.isEmpty()) { @@ -429,8 +429,8 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl if (isModernFormatRequired() && modernModel != null) { AbstractItemManager.this.modernItemModels1_21_4.put(itemModelKey, new ModernItemModel( modernModel, - (boolean) section.getOrDefault("oversized-in-gui", true), - (boolean) section.getOrDefault("hand-animation-on-swap", true) + ResourceConfigUtils.getAsBoolean(section.getOrDefault("oversized-in-gui", true), "oversized-in-gui"), + ResourceConfigUtils.getAsBoolean(section.getOrDefault("hand-animation-on-swap", true), "hand-animation-on-swap") )); } if (Config.packMaxVersion() >= VERSION_1_21_2 && needsLegacyCompatibility() && legacyOverridesModels != null && !legacyOverridesModels.isEmpty()) { @@ -529,7 +529,7 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl Map data = MiscUtils.castToMap(obj, false); int nutrition = ResourceConfigUtils.getAsInt(data.get("nutrition"), "nutrition"); float saturation = ResourceConfigUtils.getAsFloat(data.get("saturation"), "saturation"); - return new FoodModifier<>(nutrition, saturation, (boolean) data.getOrDefault("can-always-eat", false)); + return new FoodModifier<>(nutrition, saturation, ResourceConfigUtils.getAsBoolean(data.getOrDefault("can-always-eat", false), "can-always-eat")); }, "food"); } if (VersionHelper.isOrAbove1_21()) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java index 4970d9978..7e416fc79 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java @@ -262,15 +262,15 @@ public class ItemSettings { static { registerFactory("repairable", (value -> { - boolean bool = (boolean) value; + boolean bool = ResourceConfigUtils.getAsBoolean(value, "repairable"); return settings -> settings.canRepair(bool); })); registerFactory("enchantable", (value -> { - boolean bool = (boolean) value; + boolean bool = ResourceConfigUtils.getAsBoolean(value, "enchantable"); return settings -> settings.canEnchant(bool); })); registerFactory("renameable", (value -> { - boolean bool = (boolean) value; + boolean bool = ResourceConfigUtils.getAsBoolean(value, "renameable"); return settings -> settings.renameable(bool); })); registerFactory("anvil-repair-item", (value -> { @@ -318,7 +318,7 @@ public class ItemSettings { return settings -> settings.equipment(equipment); })); registerFactory("can-place", (value -> { - boolean bool = (boolean) value; + boolean bool = ResourceConfigUtils.getAsBoolean(value, "can-place"); return settings -> settings.canPlaceRelatedVanillaBlock(bool); })); registerFactory("projectile", (value -> { @@ -342,7 +342,7 @@ public class ItemSettings { return settings -> settings.compostProbability(chance); })); registerFactory("dyeable", (value -> { - boolean bool = (boolean) value; + boolean bool = ResourceConfigUtils.getAsBoolean(value, "dyeable"); return settings -> settings.dyeable(bool); })); registerFactory("food", (value -> { diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTransformRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTransformRecipe.java index 2a8ee7318..a02875e17 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTransformRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTransformRecipe.java @@ -133,7 +133,7 @@ public class CustomSmithingTransformRecipe implements Recipe { List base = MiscUtils.getAsStringList(arguments.get("base")); List addition = MiscUtils.getAsStringList(arguments.get("addition")); List template = MiscUtils.getAsStringList(arguments.get("template-type")); - boolean mergeComponents = (boolean) arguments.getOrDefault("merge-components", true); + boolean mergeComponents = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("merge-components", true), "merge-components"); @SuppressWarnings("unchecked") List> processors = (List>) arguments.getOrDefault("post-processors", List.of()); return new CustomSmithingTransformRecipe<>( diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/setting/EquipmentData.java b/core/src/main/java/net/momirealms/craftengine/core/item/setting/EquipmentData.java index aa371660c..a4f615ef1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/setting/EquipmentData.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/setting/EquipmentData.java @@ -1,7 +1,9 @@ package net.momirealms.craftengine.core.item.setting; import net.momirealms.craftengine.core.entity.EquipmentSlot; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.craftengine.core.util.VersionHelper; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -42,7 +44,7 @@ public class EquipmentData { public static EquipmentData fromMap(@NotNull final Map data) { String slot = (String) data.get("slot"); if (slot == null) { - throw new IllegalArgumentException("No `slot` option set for `equippable`"); + throw new LocalizedResourceConfigException("warning.config.item.settings.equippable.missing_slot"); } EquipmentSlot slotEnum = EquipmentSlot.valueOf(slot.toUpperCase(Locale.ENGLISH)); EquipmentData.Builder builder = EquipmentData.builder().slot(slotEnum); @@ -53,16 +55,16 @@ public class EquipmentData { builder.cameraOverlay(Key.of(data.get("camera-overlay").toString())); } if (data.containsKey("dispensable")) { - builder.dispensable((boolean) data.get("dispensable")); + builder.dispensable(ResourceConfigUtils.getAsBoolean(data.get("dispensable"), "dispensable")); } if (data.containsKey("swappable")) { - builder.swappable((boolean) data.get("swappable")); + builder.swappable(ResourceConfigUtils.getAsBoolean(data.get("swappable"), "swappable")); } if (data.containsKey("equip-on-interact")) { - builder.equipOnInteract((boolean) data.get("equip-on-interact")); + builder.equipOnInteract(ResourceConfigUtils.getAsBoolean(data.get("equip-on-interact"), "equip-on-interact")); } if (data.containsKey("damage-on-hurt")) { - builder.damageOnHurt((boolean) data.get("damage-on-hurt")); + builder.damageOnHurt(ResourceConfigUtils.getAsBoolean(data.get("damage-on-hurt"), "damage-on-hurt")); } return builder.build(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/function/SetCountFunction.java b/core/src/main/java/net/momirealms/craftengine/core/loot/function/SetCountFunction.java index 02cfdaa73..4d3c19252 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/function/SetCountFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/function/SetCountFunction.java @@ -43,7 +43,7 @@ public class SetCountFunction extends AbstractLootConditionalFunction { @Override public LootFunction create(Map arguments) { Object value = ResourceConfigUtils.requireNonNullOrThrow(arguments.get("count"), "warning.config.loot_table.function.set_count.missing_count"); - boolean add = (boolean) arguments.getOrDefault("add", false); + boolean add = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("add", false), "add"); List> conditions = Optional.ofNullable(arguments.get("conditions")) .map(it -> LootConditions.fromMapList((List>) it)) .orElse(Collections.emptyList()); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeJson.java b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeJson.java index 88679856d..909091485 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeJson.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeJson.java @@ -5,6 +5,7 @@ import net.momirealms.craftengine.core.pack.conflict.PathContext; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.GsonHelper; import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.io.IOException; import java.util.Map; @@ -43,7 +44,7 @@ public class ResolutionMergeJson implements Resolution { @Override public Resolution create(Map arguments) { - boolean deeply = (boolean) arguments.getOrDefault("deeply", false); + boolean deeply = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("deeply", false), "deeply"); return new ResolutionMergeJson(deeply); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java index 26a20125b..74abddf6a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java @@ -90,8 +90,7 @@ public class AlistHost implements ResourcePackHost { CraftEngine.instance().logger().info("[Alist] Loaded cached resource pack metadata"); } catch (Exception e) { - CraftEngine.instance().logger().warn( - "[Alist] Failed to load cache from disk: " + e.getMessage()); + CraftEngine.instance().logger().warn("[Alist] Failed to load cache " + cachePath, e); } } @@ -291,7 +290,7 @@ public class AlistHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { - boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); + boolean useEnv = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("use-environment-variables", false), "use-environment-variables"); String apiUrl = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("api-url"), () -> new LocalizedException("warning.config.host.alist.missing_api_url")); String userName = useEnv ? System.getenv("CE_ALIST_USERNAME") : Optional.ofNullable(arguments.get("username")).map(String::valueOf).orElse(null); if (userName == null || userName.isEmpty()) { @@ -305,7 +304,7 @@ public class AlistHost implements ResourcePackHost { String otpCode = Optional.ofNullable(arguments.get("otp-code")).map(String::valueOf).orElse(null); Duration jwtTokenExpiration = Duration.ofHours((int) arguments.getOrDefault("jwt-token-expiration", 48)); String uploadPath = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("upload-path"), () -> new LocalizedException("warning.config.host.alist.missing_upload_path")); - boolean disableUpload = (boolean) arguments.getOrDefault("disable-upload", false); + boolean disableUpload = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("disable-upload", false), "disable-upload"); ProxySelector proxy = getProxySelector(MiscUtils.castToMap(arguments.get("proxy"), true)); return new AlistHost(apiUrl, userName, password, filePassword, otpCode, jwtTokenExpiration, uploadPath, disableUpload, proxy); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java index 3c605ed84..98a1f483b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java @@ -63,7 +63,7 @@ public class DropboxHost implements ResourcePackHost { CraftEngine.instance().logger().info("[Dropbox] Loaded cached resource pack info"); } catch (Exception e) { - CraftEngine.instance().logger().warn("[Dropbox] Failed to load cache", e); + CraftEngine.instance().logger().warn("[Dropbox] Failed to load cache " + cachePath, e); } } @@ -263,7 +263,7 @@ public class DropboxHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { - boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); + boolean useEnv = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("use-environment-variables", false), "use-environment-variables"); String appKey = useEnv ? System.getenv("CE_DROPBOX_APP_KEY") : Optional.ofNullable(arguments.get("app-key")).map(String::valueOf).orElse(null); if (appKey == null || appKey.isEmpty()) { throw new LocalizedException("warning.config.host.dropbox.missing_app_key"); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java index d0c1f9b57..c2d1cc5e9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java @@ -7,10 +7,7 @@ import net.momirealms.craftengine.core.pack.host.ResourcePackHostFactory; import net.momirealms.craftengine.core.pack.host.ResourcePackHosts; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.locale.LocalizedException; -import net.momirealms.craftengine.core.util.GsonHelper; -import net.momirealms.craftengine.core.util.HashUtils; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.MiscUtils; +import net.momirealms.craftengine.core.util.*; import java.io.IOException; import java.io.InputStream; @@ -68,7 +65,7 @@ public class GitLabHost implements ResourcePackHost { CraftEngine.instance().logger().info("[GitLab] Loaded cached resource pack info"); } catch (Exception e) { CraftEngine.instance().logger().warn( - "[GitLab] Failed to read cache file: " + e.getMessage()); + "[GitLab] Failed to read cache file: " + cachePath, e); } } @@ -176,7 +173,7 @@ public class GitLabHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { - boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); + boolean useEnv = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("use-environment-variables", false), "use-environment-variables"); String gitlabUrl = Optional.ofNullable(arguments.get("gitlab-url")).map(String::valueOf).orElse(null); if (gitlabUrl == null || gitlabUrl.isEmpty()) { throw new LocalizedException("warning.config.host.gitlab.missing_url"); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java index 3359d3b8b..36a965a8c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java @@ -10,6 +10,7 @@ import net.momirealms.craftengine.core.plugin.locale.LocalizedException; import net.momirealms.craftengine.core.util.GsonHelper; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.io.IOException; import java.io.InputStream; @@ -271,7 +272,7 @@ public class LobFileHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { - boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); + boolean useEnv = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("use-environment-variables", false), "use-environment-variables"); String apiKey = useEnv ? System.getenv("CE_LOBFILE_API_KEY") : Optional.ofNullable(arguments.get("api-key")).map(String::valueOf).orElse(null); if (apiKey == null || apiKey.isEmpty()) { throw new LocalizedException("warning.config.host.lobfile.missing_api_key"); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java index 9c413d5e0..844e2f538 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java @@ -80,7 +80,7 @@ public class OneDriveHost implements ResourcePackHost { CraftEngine.instance().logger().info("[OneDrive] Loaded cached resource pack info"); } catch (Exception e) { CraftEngine.instance().logger().warn( - "[OneDrive] Failed to load cache from disk: " + e.getMessage()); + "[OneDrive] Failed to load cache" + cachePath, e); } } @@ -102,7 +102,7 @@ public class OneDriveHost implements ResourcePackHost { ); } catch (IOException e) { CraftEngine.instance().logger().warn( - "[OneDrive] Failed to persist cache to disk: " + e.getMessage()); + "[OneDrive] Failed to persist cache", e); } } @@ -230,7 +230,7 @@ public class OneDriveHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { - boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); + boolean useEnv = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("use-environment-variables", false), "use-environment-variables"); String clientId = useEnv ? System.getenv("CE_ONEDRIVE_CLIENT_ID") : Optional.ofNullable(arguments.get("client-id")).map(String::valueOf).orElse(null); if (clientId == null || clientId.isEmpty()) { throw new LocalizedException("warning.config.host.onedrive.missing_client_id"); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java index acfdd0800..4f93508c7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java @@ -73,9 +73,9 @@ public class SelfHost implements ResourcePackHost { } if (!url.endsWith("/")) url += "/"; } - boolean oneTimeToken = (boolean) arguments.getOrDefault("one-time-token", true); + boolean oneTimeToken = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("one-time-token", true), "one-time-token"); String protocol = arguments.getOrDefault("protocol", "http").toString(); - boolean denyNonMinecraftRequest = (boolean) arguments.getOrDefault("deny-non-minecraft-request", true); + boolean denyNonMinecraftRequest = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("deny-non-minecraft-request", true), "deny-non-minecraft-request"); Map rateMap = MiscUtils.castToMap(arguments.get("rate-map"), true); int maxRequests = 5; int resetInterval = 20_000; 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 660d7a264..85ab57e9c 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 @@ -42,7 +42,7 @@ public class HasComponentConditionProperty implements ConditionProperty { @Override public ConditionProperty create(Map arguments) { - boolean ignoreDefault = (boolean) arguments.getOrDefault("ignore-default", false); + boolean ignoreDefault = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("ignore-default", false), "ignore-default"); String componentObj = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("component"), "warning.config.item.model.condition.has_component.missing_component"); return new HasComponentConditionProperty(componentObj, ignoreDefault); } 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 883d89196..83b67fc1c 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 @@ -8,6 +8,7 @@ import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigExce import net.momirealms.craftengine.core.util.EnumUtils; 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 org.jetbrains.annotations.Nullable; import org.joml.Vector3f; @@ -54,7 +55,7 @@ public class ModelGeneration implements Supplier { } }); BUILDER_FUNCTIONS.put("ambient-occlusion", (b, data) -> { - b.ambientOcclusion((boolean) data); + b.ambientOcclusion(ResourceConfigUtils.getAsBoolean(data, "ambient-occlusion")); }); BUILDER_FUNCTIONS.put("parent", (b, data) -> { String parentModelPath = data.toString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/DamageRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/DamageRangeDispatchProperty.java index 1bdf0e52a..ddb47b314 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/DamageRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/DamageRangeDispatchProperty.java @@ -3,6 +3,7 @@ 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.ResourceConfigUtils; import java.util.Map; @@ -43,7 +44,7 @@ public class DamageRangeDispatchProperty implements RangeDispatchProperty, Legac @Override public RangeDispatchProperty create(Map arguments) { - boolean normalize = (boolean) arguments.getOrDefault("normalize", true); + boolean normalize = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("normalize", true), "normalize"); return new DamageRangeDispatchProperty(normalize); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/NormalizeRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/NormalizeRangeDispatchProperty.java index 39877b474..8150147f1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/NormalizeRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/NormalizeRangeDispatchProperty.java @@ -2,6 +2,7 @@ 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.ResourceConfigUtils; import java.util.Map; @@ -33,7 +34,7 @@ public class NormalizeRangeDispatchProperty implements RangeDispatchProperty { @Override public RangeDispatchProperty create(Map arguments) { Key type = Key.of(arguments.get("property").toString()); - boolean normalize = (boolean) arguments.getOrDefault("normalize", true); + boolean normalize = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("normalize", true), "normalize"); return new NormalizeRangeDispatchProperty(type, normalize); } } 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 3cd818c4a..253011f67 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 @@ -35,7 +35,7 @@ public class TimeRangeDispatchProperty implements RangeDispatchProperty { @Override public RangeDispatchProperty create(Map arguments) { String sourceObj = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("source"), "warning.config.item.model.range_dispatch.time.missing_source"); - boolean wobble = (boolean) arguments.getOrDefault("wobble", true); + boolean wobble = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("wobble", true), "wobble"); return new TimeRangeDispatchProperty(sourceObj, wobble); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java index 3f440c5a8..39d7aff35 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java @@ -4,6 +4,7 @@ import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.ItemKeys; import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; @@ -43,7 +44,7 @@ public class UseDurationRangeDispatchProperty implements RangeDispatchProperty, @Override public RangeDispatchProperty create(Map arguments) { - boolean remaining = (boolean) arguments.getOrDefault("remaining", false); + boolean remaining = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("remaining", false), "remaining"); return new UseDurationRangeDispatchProperty(remaining); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/MatchItemCondition.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/MatchItemCondition.java index c61398043..45d14beac 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/MatchItemCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/MatchItemCondition.java @@ -7,6 +7,7 @@ import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextPar 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.*; @@ -50,7 +51,7 @@ public class MatchItemCondition implements Condition { if (ids.isEmpty()) { throw new LocalizedResourceConfigException("warning.config.condition.match_item.missing_id"); } - boolean regex = (boolean) arguments.getOrDefault("regex", false); + boolean regex = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("regex", false), "regex"); return new MatchItemCondition<>(ids, regex); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CommandFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CommandFunction.java index d85f44950..c27b2177f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CommandFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CommandFunction.java @@ -69,7 +69,7 @@ public class CommandFunction extends AbstractConditionalFun public Function create(Map arguments) { Object command = ResourceConfigUtils.requireNonNullOrThrow(ResourceConfigUtils.get(arguments, "command", "commands"), "warning.config.function.command.missing_command"); List commands = MiscUtils.getAsStringList(command).stream().map(TextProviders::fromString).toList(); - boolean asPlayer = (boolean) arguments.getOrDefault("as-player", false); + boolean asPlayer = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("as-player", false), "as-player"); return new CommandFunction<>(getPredicates(arguments), PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), commands, asPlayer); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MessageFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MessageFunction.java index 8c43e06f6..640d26b41 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MessageFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MessageFunction.java @@ -61,7 +61,7 @@ public class MessageFunction extends AbstractConditionalFun public Function create(Map arguments) { Object message = ResourceConfigUtils.requireNonNullOrThrow(ResourceConfigUtils.get(arguments, "messages", "message"), "warning.config.function.command.missing_message"); List messages = MiscUtils.getAsStringList(message).stream().map(TextProviders::fromString).toList(); - boolean overlay = (boolean) arguments.getOrDefault("overlay", false); + boolean overlay = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("overlay", false), "overlay"); return new MessageFunction<>(getPredicates(arguments), PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), messages, overlay); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PotionEffectFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PotionEffectFunction.java index ff13ddde0..0b91844ee 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PotionEffectFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PotionEffectFunction.java @@ -61,8 +61,8 @@ public class PotionEffectFunction extends AbstractCondition Key effectType = Key.of(ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("potion-effect"), "warning.config.function.potion_effect.missing_potion_effect")); NumberProvider duration = NumberProviders.fromObject(arguments.getOrDefault("duration", 20)); NumberProvider amplifier = NumberProviders.fromObject(arguments.getOrDefault("amplifier", 0)); - boolean ambient = (boolean) arguments.getOrDefault("ambient", false); - boolean particles = (boolean) arguments.getOrDefault("particles", true); + boolean ambient = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("ambient", false), "ambient"); + boolean particles = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("particles", true), "particles"); return new PotionEffectFunction<>(effectType, duration, amplifier, ambient, particles, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveCooldownFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveCooldownFunction.java index 7463d8bf2..84982ec78 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveCooldownFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveCooldownFunction.java @@ -57,7 +57,7 @@ public class RemoveCooldownFunction extends AbstractConditi @Override public Function create(Map arguments) { - boolean all = (boolean) arguments.getOrDefault("all", false); + boolean all = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("all", false), "all"); if (all) { return new RemoveCooldownFunction<>(null, true, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); } else { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemovePotionEffectFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemovePotionEffectFunction.java index cc0148996..55322a946 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemovePotionEffectFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemovePotionEffectFunction.java @@ -52,7 +52,7 @@ public class RemovePotionEffectFunction extends AbstractCon @Override public Function create(Map arguments) { - boolean all = (boolean) arguments.getOrDefault("all", false); + boolean all = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("all", false), "all"); if (all) { return new RemovePotionEffectFunction<>(null, true, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); } else { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCooldownFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCooldownFunction.java index 68eb002d6..8019f8717 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCooldownFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCooldownFunction.java @@ -65,7 +65,7 @@ public class SetCooldownFunction extends AbstractConditiona public Function create(Map arguments) { String id = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("id"), "warning.config.function.set_cooldown.missing_id"); String time = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("time"), "warning.config.function.set_cooldown.missing_time"); - boolean add = (boolean) arguments.getOrDefault("add", false); + boolean add = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("add", false), "add"); return new SetCooldownFunction<>(TextProviders.fromString(time), id, add, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCountFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCountFunction.java index 6d9e6b496..aa005230c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCountFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCountFunction.java @@ -50,7 +50,7 @@ public class SetCountFunction extends AbstractConditionalFu @Override public Function create(Map arguments) { Object value = ResourceConfigUtils.requireNonNullOrThrow(arguments.get("count"), "warning.config.function.set_count.missing_count"); - boolean add = (boolean) arguments.getOrDefault("add", false); + boolean add = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("add", false), "add"); return new SetCountFunction<>(NumberProviders.fromObject(value), add, getPredicates(arguments)); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetFoodFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetFoodFunction.java index ebb1705a3..70a1e3f6e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetFoodFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetFoodFunction.java @@ -53,7 +53,7 @@ public class SetFoodFunction extends AbstractConditionalFun @Override public Function create(Map arguments) { Object value = ResourceConfigUtils.requireNonNullOrThrow(arguments.get("food"), "warning.config.function.set_food.missing_food"); - boolean add = (boolean) arguments.getOrDefault("add", false); + boolean add = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("add", false), "add"); return new SetFoodFunction<>(NumberProviders.fromObject(value), add, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetSaturationFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetSaturationFunction.java index 7afedc1c5..6b002aedd 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetSaturationFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetSaturationFunction.java @@ -53,7 +53,7 @@ public class SetSaturationFunction extends AbstractConditio @Override public Function create(Map arguments) { Object value = ResourceConfigUtils.requireNonNullOrThrow(arguments.get("saturation"), "warning.config.function.set_saturation.missing_saturation"); - boolean add = (boolean) arguments.getOrDefault("add", false); + boolean add = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("add", false), "add"); return new SetSaturationFunction<>(NumberProviders.fromObject(value), add, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java index f1d273822..e0c326271 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java @@ -117,7 +117,8 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { List members = MiscUtils.getAsStringList(section.getOrDefault("list", List.of())); Key icon = Key.of(section.getOrDefault("icon", ItemKeys.STONE).toString()); int priority = ResourceConfigUtils.getAsInt(section.getOrDefault("priority", 0), "priority"); - Category category = new Category(id, name, MiscUtils.getAsStringList(section.getOrDefault("lore", List.of())), icon, members.stream().distinct().toList(), priority, (boolean) section.getOrDefault("hidden", false)); + Category category = new Category(id, name, MiscUtils.getAsStringList(section.getOrDefault("lore", List.of())), icon, members.stream().distinct().toList(), priority, + ResourceConfigUtils.getAsBoolean(section.getOrDefault("hidden", false), "hidden")); if (ItemBrowserManagerImpl.this.byId.containsKey(id)) { ItemBrowserManagerImpl.this.byId.get(id).merge(category); } else { diff --git a/core/src/main/java/net/momirealms/craftengine/core/sound/AbstractSoundManager.java b/core/src/main/java/net/momirealms/craftengine/core/sound/AbstractSoundManager.java index d75ee7ec8..dd6e52699 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/sound/AbstractSoundManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/sound/AbstractSoundManager.java @@ -104,7 +104,7 @@ public abstract class AbstractSoundManager implements SoundManager { if (AbstractSoundManager.this.byId.containsKey(id)) { throw new LocalizedResourceConfigException("warning.config.sound.duplicate"); } - boolean replace = (boolean) section.getOrDefault("replace", false); + boolean replace = ResourceConfigUtils.getAsBoolean(section.getOrDefault("replace", false), "replace"); String subtitle = (String) section.get("subtitle"); List soundList = (List) ResourceConfigUtils.requireNonNullOrThrow(section.get("sounds"), "warning.config.sound.missing_sounds"); List sounds = new ArrayList<>(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/ResourceConfigUtils.java b/core/src/main/java/net/momirealms/craftengine/core/util/ResourceConfigUtils.java index 338ed70c0..b6a40aa27 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/ResourceConfigUtils.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/ResourceConfigUtils.java @@ -172,4 +172,28 @@ public final class ResourceConfigUtils { } } } + + public static boolean getAsBoolean(Object o, String option) { + switch (o) { + case null -> { + return false; + } + case Boolean b -> { + return b; + } + case Number n -> { + if (n.byteValue() == 0) return false; + if (n.byteValue() == 1) return true; + throw new LocalizedResourceConfigException("warning.config.type.boolean", String.valueOf(n), option); + } + case String s -> { + if (s.equalsIgnoreCase("true")) return true; + if (s.equalsIgnoreCase("false")) return false; + throw new LocalizedResourceConfigException("warning.config.type.boolean", s, option); + } + default -> { + throw new LocalizedResourceConfigException("warning.config.type.boolean", o.toString(), option); + } + } + } }