Merge pull request #40 from gnembon/settings_refactor_mark2
lazy rule fetching
This commit is contained in:
2 files changed
+31
-24
No files matched your search
@@ -8,7 +8,9 @@ import carpet.utils.Messenger;
|
|||||||
import com.mojang.brigadier.CommandDispatcher;
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||||
|
import com.mojang.brigadier.context.CommandContext;
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
|
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
|
||||||
import net.minecraft.server.command.ServerCommandSource;
|
import net.minecraft.server.command.ServerCommandSource;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.text.BaseText;
|
import net.minecraft.text.BaseText;
|
||||||
@@ -23,6 +25,14 @@ import static net.minecraft.server.command.CommandSource.suggestMatching;
|
|||||||
|
|
||||||
public class CarpetCommand
|
public class CarpetCommand
|
||||||
{
|
{
|
||||||
|
private static ParsedRule<?> getRule(CommandContext<ServerCommandSource> 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<ServerCommandSource> dispatcher)
|
public static void register(CommandDispatcher<ServerCommandSource> dispatcher)
|
||||||
{
|
{
|
||||||
LiteralArgumentBuilder<ServerCommandSource> literalargumentbuilder = literal("carpet").requires((player) ->
|
LiteralArgumentBuilder<ServerCommandSource> literalargumentbuilder = literal("carpet").requires((player) ->
|
||||||
@@ -41,30 +51,27 @@ public class CarpetCommand
|
|||||||
suggests( (c, b)->suggestMatching(SettingsManager.getCategories(), b)).
|
suggests( (c, b)->suggestMatching(SettingsManager.getCategories(), b)).
|
||||||
executes( (c) -> listSettings(c.getSource(),
|
executes( (c) -> listSettings(c.getSource(),
|
||||||
String.format("CarpetMod Settings matching \"%s\"", StringArgumentType.getString(c, "tag")),
|
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);
|
dispatcher.register(literalargumentbuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ public class SettingsManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public ParsedRule getRule(String name)
|
public static ParsedRule<?> getRule(String name)
|
||||||
{
|
{
|
||||||
return rules.get(name);
|
return rules.get(name);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user