From 022f84b4693f71a8879f48b5e722429499386e79 Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 28 Jun 2019 23:30:25 -0300 Subject: [PATCH] lazy rule fetching --- .../java/carpet/commands/CarpetCommand.java | 53 +++++++++++-------- .../java/carpet/settings/SettingsManager.java | 2 +- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/src/main/java/carpet/commands/CarpetCommand.java b/src/main/java/carpet/commands/CarpetCommand.java index ab64394a..cbea2e8f 100644 --- a/src/main/java/carpet/commands/CarpetCommand.java +++ b/src/main/java/carpet/commands/CarpetCommand.java @@ -8,7 +8,9 @@ import carpet.utils.Messenger; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.text.BaseText; @@ -23,6 +25,14 @@ import static net.minecraft.server.command.CommandSource.suggestMatching; public class CarpetCommand { + private static ParsedRule getRule(CommandContext ctx) throws CommandSyntaxException + { + String ruleName = StringArgumentType.getString(ctx, "rule"); + ParsedRule rule = SettingsManager.getRule(ruleName); + if (rule == null) + throw new SimpleCommandExceptionType(Messenger.c("rb Unknown rule: "+ruleName)).create(); + return rule; + } public static void register(CommandDispatcher dispatcher) { LiteralArgumentBuilder literalargumentbuilder = literal("carpet").requires((player) -> @@ -41,30 +51,27 @@ public class CarpetCommand suggests( (c, b)->suggestMatching(SettingsManager.getCategories(), b)). executes( (c) -> listSettings(c.getSource(), String.format("CarpetMod Settings matching \"%s\"", StringArgumentType.getString(c, "tag")), - CarpetServer.settingsManager.getRulesMatching(StringArgumentType.getString(c, "tag")))))); + CarpetServer.settingsManager.getRulesMatching(StringArgumentType.getString(c, "tag")))))). + then(literal("removeDefault"). + requires(s -> !CarpetServer.settingsManager.locked). + then(argument("rule", StringArgumentType.word()). + suggests( (c, b) -> suggestMatching(SettingsManager.getRules().stream().map(r -> r.name), b)). + executes((c) -> removeDefault(c.getSource(), getRule(c))))). + then(literal("setDefault"). + requires(s -> !CarpetServer.settingsManager.locked). + then(argument("rule", StringArgumentType.word()). + suggests( (c, b) -> suggestMatching(SettingsManager.getRules().stream().map(r -> r.name), b)). + then(argument("value", StringArgumentType.word()). + suggests((c, b)-> suggestMatching(getRule(c).options, b)). + executes((c) -> setDefault(c.getSource(), getRule(c), StringArgumentType.getString(c, "value")))))). + then(argument("rule", StringArgumentType.word()). + suggests( (c, b) -> suggestMatching(SettingsManager.getRules().stream().map(r -> r.name), b)). + requires(s -> !CarpetServer.settingsManager.locked ). + executes( (c) -> displayRuleMenu(c.getSource(),getRule(c))). + then(argument("value", StringArgumentType.word()). + suggests((c, b)-> suggestMatching(getRule(c).options,b)). + executes((c) -> setRule(c.getSource(), getRule(c), StringArgumentType.getString(c, "value"))))); - for (ParsedRule rule: SettingsManager.getRules()) - { - literalargumentbuilder.then(literal(rule.name).executes( (context) -> - displayRuleMenu(context.getSource(),rule))); - literalargumentbuilder.then(literal("removeDefault"). - requires(s -> !CarpetServer.settingsManager.locked). - then(literal(rule.name).executes((context) -> - removeDefault(context.getSource(), rule)))); - literalargumentbuilder.then(literal(rule.name). - requires(s -> !CarpetServer.settingsManager.locked). - then(argument("value", StringArgumentType.word()). - suggests((c, b)-> suggestMatching(rule.options,b)). - executes((context) -> - setRule(context.getSource(), rule, StringArgumentType.getString(context, "value"))))); - literalargumentbuilder.then(literal("setDefault"). - requires(s -> !CarpetServer.settingsManager.locked). - then(literal(rule.name). - then(argument("value", StringArgumentType.word()). - suggests((c, b)-> suggestMatching(rule.options,b)). - executes((context) -> - setDefault(context.getSource(), rule, StringArgumentType.getString(context, "value")))))); - } dispatcher.register(literalargumentbuilder); } diff --git a/src/main/java/carpet/settings/SettingsManager.java b/src/main/java/carpet/settings/SettingsManager.java index 601e74a2..9152ff83 100644 --- a/src/main/java/carpet/settings/SettingsManager.java +++ b/src/main/java/carpet/settings/SettingsManager.java @@ -71,7 +71,7 @@ public class SettingsManager } - public ParsedRule getRule(String name) + public static ParsedRule getRule(String name) { return rules.get(name); }