From f49a4b50c8197bd91c1cb338eb973e56ecff0689 Mon Sep 17 00:00:00 2001 From: Micle Date: Mon, 9 Jun 2025 18:53:10 +0100 Subject: [PATCH 1/5] Using defineList instead of define. --- src/main/java/dev/micle/xptools/config/Config.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/dev/micle/xptools/config/Config.java b/src/main/java/dev/micle/xptools/config/Config.java index 75d9dc3..3763e85 100644 --- a/src/main/java/dev/micle/xptools/config/Config.java +++ b/src/main/java/dev/micle/xptools/config/Config.java @@ -104,13 +104,13 @@ public final class Config { .comment("Global operations are run before any unique operations.") .comment("Examples:") .comment("'set,0,0,0' - Sets the xp of all blocks to 0.") - .define("blockBreakGlobalOperations", new ArrayList<>()); + .defineList("blockBreakGlobalOperations", List.of(), entry -> true); blockBreakOperationsRaw = builder .comment("List of unique operations. Format: '[block_id/tag_id],[operation],[min],[max],[priority],[is_last]'") .comment("Examples:") .comment("'minecraft:dirt,set,2,2,0,true' - Sets the xp drop of the dirt block to 2, takes highest priority and stops any additional operations.") .comment("'#forge:ores,multiply,1,2,1,false' - Multiplies xp drop of all blocks tagged forge:ores by 1-2, allows additional operations.") - .define("blockBreakOperations", new ArrayList<>()); + .defineList("blockBreakOperations", List.of(), entry -> true); builder.pop(); builder.comment("Settings for entity killing").push("entity_killing"); @@ -120,13 +120,13 @@ public final class Config { .comment("Global operations are run before any unique operations.") .comment("Examples:") .comment("'set,0,0,0' - Sets the xp of all entities to 0.") - .define("entityKillGlobalOperations", new ArrayList<>()); + .defineList("entityKillGlobalOperations", List.of(), entry -> true); entityKillOperationsRaw = builder .comment("List of unique operations. Format: '[entity_id/tag_id],[operation],[min],[max],[priority],[is_last]'") .comment("Examples:") .comment("'minecraft:creeper,set,2,2,0,true' - Sets the xp drop for killing creepers to 2, takes highest priority and stops any additional operations.") .comment("'#some_mod:some_tag,multiply,1,2,1,false' - Multiplies the xp drop for killing all entities tagged some_mod:some_tag by 1-2, allows additional operations.") - .define("entityKillOperations", new ArrayList<>()); + .defineList("entityKillOperations", List.of(), entry -> true); builder.pop(); } From 86fd9d58431afc8d74d1ad3157a5588086ce0e64 Mon Sep 17 00:00:00 2001 From: Micle Date: Mon, 9 Jun 2025 19:25:25 +0100 Subject: [PATCH 2/5] Added validation method for global operation entries. --- src/main/java/dev/micle/xptools/config/Config.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/micle/xptools/config/Config.java b/src/main/java/dev/micle/xptools/config/Config.java index 3763e85..f7fd67a 100644 --- a/src/main/java/dev/micle/xptools/config/Config.java +++ b/src/main/java/dev/micle/xptools/config/Config.java @@ -13,6 +13,7 @@ import net.minecraftforge.fml.event.config.ModConfigEvent; import org.apache.commons.lang3.tuple.Pair; import java.util.*; +import java.util.stream.Collectors; @Mod.EventBusSubscriber(modid = XpTools.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public final class Config { @@ -104,7 +105,7 @@ public final class Config { .comment("Global operations are run before any unique operations.") .comment("Examples:") .comment("'set,0,0,0' - Sets the xp of all blocks to 0.") - .defineList("blockBreakGlobalOperations", List.of(), entry -> true); + .defineList("blockBreakGlobalOperations", List.of(), Server::isValidGlobalOperationEntry); blockBreakOperationsRaw = builder .comment("List of unique operations. Format: '[block_id/tag_id],[operation],[min],[max],[priority],[is_last]'") .comment("Examples:") @@ -120,7 +121,7 @@ public final class Config { .comment("Global operations are run before any unique operations.") .comment("Examples:") .comment("'set,0,0,0' - Sets the xp of all entities to 0.") - .defineList("entityKillGlobalOperations", List.of(), entry -> true); + .defineList("entityKillGlobalOperations", List.of(), Server::isValidGlobalOperationEntry); entityKillOperationsRaw = builder .comment("List of unique operations. Format: '[entity_id/tag_id],[operation],[min],[max],[priority],[is_last]'") .comment("Examples:") @@ -161,5 +162,14 @@ public final class Config { entityKillOperationItems.add(OperationItem.fromConfig(s)); } } + + private static boolean isValidGlobalOperationEntry(Object entry) { + return entry instanceof String && ((String) entry).matches( + String.format( + "(?i)^(%s),(\\d*\\.?\\d+),(\\d*\\.?\\d+),(\\d+)$", + Arrays.stream(OperationType.values()).map(OperationType::toString).collect(Collectors.joining("|")) + ) + ); + } } } From e7d83e5214114a02cad4a294ca9650c5f0fcf435 Mon Sep 17 00:00:00 2001 From: Micle Date: Mon, 9 Jun 2025 19:29:40 +0100 Subject: [PATCH 3/5] Added validation method for operation entries. --- src/main/java/dev/micle/xptools/config/Config.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/micle/xptools/config/Config.java b/src/main/java/dev/micle/xptools/config/Config.java index f7fd67a..82e80b7 100644 --- a/src/main/java/dev/micle/xptools/config/Config.java +++ b/src/main/java/dev/micle/xptools/config/Config.java @@ -111,7 +111,7 @@ public final class Config { .comment("Examples:") .comment("'minecraft:dirt,set,2,2,0,true' - Sets the xp drop of the dirt block to 2, takes highest priority and stops any additional operations.") .comment("'#forge:ores,multiply,1,2,1,false' - Multiplies xp drop of all blocks tagged forge:ores by 1-2, allows additional operations.") - .defineList("blockBreakOperations", List.of(), entry -> true); + .defineList("blockBreakOperations", List.of(), Server::isValidOperationEntry); builder.pop(); builder.comment("Settings for entity killing").push("entity_killing"); @@ -127,7 +127,7 @@ public final class Config { .comment("Examples:") .comment("'minecraft:creeper,set,2,2,0,true' - Sets the xp drop for killing creepers to 2, takes highest priority and stops any additional operations.") .comment("'#some_mod:some_tag,multiply,1,2,1,false' - Multiplies the xp drop for killing all entities tagged some_mod:some_tag by 1-2, allows additional operations.") - .defineList("entityKillOperations", List.of(), entry -> true); + .defineList("entityKillOperations", List.of(), Server::isValidOperationEntry); builder.pop(); } @@ -171,5 +171,14 @@ public final class Config { ) ); } + + private static boolean isValidOperationEntry(Object entry) { + return entry instanceof String && ((String) entry).matches( + String.format( + "(?i)^(\\#?\\w+:\\w+),(%s),(\\d*\\.?\\d+),(\\d*\\.?\\d+),(\\d+),(TRUE|FALSE)$", + Arrays.stream(OperationType.values()).map(OperationType::toString).collect(Collectors.joining("|")) + ) + ); + } } } From 269711292f68928889b905459537102250cabde9 Mon Sep 17 00:00:00 2001 From: Micle Date: Mon, 9 Jun 2025 19:29:51 +0100 Subject: [PATCH 4/5] Bumped mod version to 1.0.2. --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4cef17b..96684ec 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.daemon=false mod_id=xp_tools mod_name=XP Tools mod_license=All Rights Reserved -mod_version=1.0.1 +mod_version=1.0.2 mod_group_id=dev.micle mod_authors=Micle mod_description=Minecraft Forge mod for tweaking various things about XP in Minecraft. Primarily targeted at modpack developers. From 350b9cee93e05be6d6678e3c9761b522d9e12318 Mon Sep 17 00:00:00 2001 From: Micle Date: Mon, 9 Jun 2025 19:38:00 +0100 Subject: [PATCH 5/5] Updated operation entry validation regex to allow for '/' in ids. --- src/main/java/dev/micle/xptools/config/Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/micle/xptools/config/Config.java b/src/main/java/dev/micle/xptools/config/Config.java index 82e80b7..4691154 100644 --- a/src/main/java/dev/micle/xptools/config/Config.java +++ b/src/main/java/dev/micle/xptools/config/Config.java @@ -175,7 +175,7 @@ public final class Config { private static boolean isValidOperationEntry(Object entry) { return entry instanceof String && ((String) entry).matches( String.format( - "(?i)^(\\#?\\w+:\\w+),(%s),(\\d*\\.?\\d+),(\\d*\\.?\\d+),(\\d+),(TRUE|FALSE)$", + "(?i)^(\\#?\\w+:[\\w\\/]+),(%s),(\\d*\\.?\\d+),(\\d*\\.?\\d+),(\\d+),(TRUE|FALSE)$", Arrays.stream(OperationType.values()).map(OperationType::toString).collect(Collectors.joining("|")) ) );