Skip to content

Commit f8ea3f0

Browse files
committed
Enforced per-world account checks in command permissions
Added `plugin.config.accounts.perWorld` validation to ensure commands like balance, pay, and account management respect per-world configurations.
1 parent 7b2a5ce commit f8ea3f0

5 files changed

Lines changed: 42 additions & 34 deletions

File tree

src/main/java/net/thenextlvl/economist/command/AccountCommand.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ private static LiteralArgumentBuilder<CommandSourceStack> createArgument(Economi
4646
.then(Commands.argument("player", CustomArgumentTypes.cachedOfflinePlayer())
4747
.requires(stack -> stack.getSender().hasPermission("economist.account.create.others"))
4848
.then(Commands.argument("world", ArgumentTypes.world())
49-
.requires(stack -> stack.getSender().hasPermission("economist.account.create.world"))
49+
.requires(stack -> stack.getSender().hasPermission("economist.account.create.world") && plugin.config.accounts.perWorld)
5050
.executes(context -> {
5151
var player = context.getArgument("player", OfflinePlayer.class);
5252
var world = context.getArgument("world", World.class);
@@ -59,7 +59,7 @@ private static LiteralArgumentBuilder<CommandSourceStack> createArgument(Economi
5959
.then(Commands.argument("players", ArgumentTypes.players())
6060
.requires(stack -> stack.getSender().hasPermission("economist.account.create.others"))
6161
.then(Commands.argument("world", ArgumentTypes.world())
62-
.requires(stack -> stack.getSender().hasPermission("economist.account.create.world"))
62+
.requires(stack -> stack.getSender().hasPermission("economist.account.create.world") && plugin.config.accounts.perWorld)
6363
.executes(context -> {
6464
var players = context.getArgument("players", PlayerSelectorArgumentResolver.class);
6565
var world = context.getArgument("world", World.class);
@@ -84,7 +84,7 @@ private static LiteralArgumentBuilder<CommandSourceStack> deleteArgument(Economi
8484
.then(Commands.argument("player", CustomArgumentTypes.cachedOfflinePlayer())
8585
.requires(stack -> stack.getSender().hasPermission("economist.account.delete.others"))
8686
.then(Commands.argument("world", ArgumentTypes.world())
87-
.requires(stack -> stack.getSender().hasPermission("economist.account.delete.world"))
87+
.requires(stack -> stack.getSender().hasPermission("economist.account.delete.world") && plugin.config.accounts.perWorld)
8888
.executes(context -> {
8989
var player = context.getArgument("player", OfflinePlayer.class);
9090
var world = context.getArgument("world", World.class);
@@ -97,7 +97,7 @@ private static LiteralArgumentBuilder<CommandSourceStack> deleteArgument(Economi
9797
.then(Commands.argument("players", ArgumentTypes.players())
9898
.requires(stack -> stack.getSender().hasPermission("economist.account.delete.others"))
9999
.then(Commands.argument("world", ArgumentTypes.world())
100-
.requires(stack -> stack.getSender().hasPermission("economist.account.delete.world"))
100+
.requires(stack -> stack.getSender().hasPermission("economist.account.delete.world") && plugin.config.accounts.perWorld)
101101
.executes(context -> {
102102
var players = context.getArgument("players", PlayerSelectorArgumentResolver.class);
103103
var world = context.getArgument("world", World.class);

src/main/java/net/thenextlvl/economist/command/BalanceCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public static LiteralCommandNode<CommandSourceStack> create(EconomistPlugin plug
2626
.then(Commands.argument("player", CustomArgumentTypes.cachedOfflinePlayer())
2727
.requires(stack -> stack.getSender().hasPermission("economist.balance.others"))
2828
.then(Commands.argument("world", ArgumentTypes.world())
29-
.requires(stack -> stack.getSender().hasPermission("economist.balance.world"))
29+
.requires(stack -> stack.getSender().hasPermission("economist.balance.world") && plugin.config.accounts.perWorld)
3030
.executes(context -> {
3131
var player = context.getArgument("player", OfflinePlayer.class);
3232
var world = context.getArgument("world", World.class);

src/main/java/net/thenextlvl/economist/command/BalanceTopCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static LiteralCommandNode<CommandSourceStack> create(EconomistPlugin plug
2929
.requires(stack -> stack.getSender().hasPermission("economist.balance-top"))
3030
.then(Commands.argument("page", IntegerArgumentType.integer(1))
3131
.then(Commands.argument("world", ArgumentTypes.world())
32-
.requires(stack -> stack.getSender().hasPermission("economist.balance-top.world"))
32+
.requires(stack -> stack.getSender().hasPermission("economist.balance-top.world") && plugin.config.accounts.perWorld)
3333
.executes(context -> {
3434
var world = context.getArgument("world", World.class);
3535
var page = context.getArgument("page", int.class);

src/main/java/net/thenextlvl/economist/command/EconomyCommand.java

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -52,59 +52,67 @@ public static LiteralCommandNode<CommandSourceStack> create(EconomistPlugin plug
5252
private static ArgumentBuilder<CommandSourceStack, ?> reset(EconomistPlugin plugin) {
5353
return Commands.literal("reset")
5454
.then(Commands.argument("player", CustomArgumentTypes.cachedOfflinePlayer())
55-
.then(Commands.argument("world", ArgumentTypes.world()).executes(context -> {
56-
var player = context.getArgument("player", OfflinePlayer.class);
57-
var world = context.getArgument("world", World.class);
58-
return execute(context, "balance.reset.world", List.of(player), plugin.config.startBalance, world, Account::setBalance, plugin);
59-
})).executes(context -> {
55+
.then(Commands.argument("world", ArgumentTypes.world())
56+
.requires(stack -> plugin.config.accounts.perWorld)
57+
.executes(context -> {
58+
var player = context.getArgument("player", OfflinePlayer.class);
59+
var world = context.getArgument("world", World.class);
60+
return execute(context, "balance.reset.world", List.of(player), plugin.config.startBalance, world, Account::setBalance, plugin);
61+
})).executes(context -> {
6062
var player = context.getArgument("player", OfflinePlayer.class);
6163
return execute(context, "balance.reset", List.of(player), plugin.config.startBalance, null, Account::setBalance, plugin);
6264
}))
6365
.then(Commands.argument("players", ArgumentTypes.players())
64-
.then(Commands.argument("world", ArgumentTypes.world()).executes(context -> {
65-
var players = context.getArgument("players", PlayerSelectorArgumentResolver.class);
66-
var resolve = players.resolve(context.getSource());
67-
var world = context.getArgument("world", World.class);
68-
return execute(context, "balance.reset.world", resolve, plugin.config.startBalance, world, Account::setBalance, plugin);
69-
})).executes(context -> {
66+
.then(Commands.argument("world", ArgumentTypes.world())
67+
.requires(stack -> plugin.config.accounts.perWorld)
68+
.executes(context -> {
69+
var players = context.getArgument("players", PlayerSelectorArgumentResolver.class);
70+
var resolve = players.resolve(context.getSource());
71+
var world = context.getArgument("world", World.class);
72+
return execute(context, "balance.reset.world", resolve, plugin.config.startBalance, world, Account::setBalance, plugin);
73+
})).executes(context -> {
7074
var players = context.getArgument("players", PlayerSelectorArgumentResolver.class);
7175
var resolve = players.resolve(context.getSource());
7276
return execute(context, "balance.reset", resolve, plugin.config.startBalance, null, Account::setBalance, plugin);
7377
}));
7478
}
7579

7680
private static ArgumentBuilder<CommandSourceStack, ?> create(String command, String successMessage, String successMessageWorld,
77-
BiFunction<Account, Number, BigDecimal> function, Double minimum, EconomistPlugin plugin) {
81+
BiFunction<Account, Number, BigDecimal> function, Double minimum, EconomistPlugin plugin) {
7882
return Commands.literal(command)
7983
.then(Commands.argument("player", CustomArgumentTypes.cachedOfflinePlayer())
8084
.then(Commands.argument("amount", DoubleArgumentType.doubleArg(minimum))
81-
.then(Commands.argument("world", ArgumentTypes.world()).executes(context -> {
82-
var player = context.getArgument("player", OfflinePlayer.class);
83-
var amount = context.getArgument("amount", Double.class);
84-
var world = context.getArgument("world", World.class);
85-
return execute(context, successMessageWorld, List.of(player), amount, world, function, plugin);
86-
})).executes(context -> {
85+
.then(Commands.argument("world", ArgumentTypes.world())
86+
.requires(stack -> plugin.config.accounts.perWorld)
87+
.executes(context -> {
88+
var player = context.getArgument("player", OfflinePlayer.class);
89+
var amount = context.getArgument("amount", Double.class);
90+
var world = context.getArgument("world", World.class);
91+
return execute(context, successMessageWorld, List.of(player), amount, world, function, plugin);
92+
})).executes(context -> {
8793
var player = context.getArgument("player", OfflinePlayer.class);
8894
var amount = context.getArgument("amount", Double.class);
8995
return execute(context, successMessage, List.of(player), amount, null, function, plugin);
9096
})))
9197
.then(Commands.argument("players", ArgumentTypes.players())
9298
.then(Commands.argument("amount", DoubleArgumentType.doubleArg(minimum))
93-
.then(Commands.argument("world", ArgumentTypes.world()).executes(context -> {
94-
var players = context.getArgument("players", PlayerSelectorArgumentResolver.class);
95-
var amount = context.getArgument("amount", Double.class);
96-
var world = context.getArgument("world", World.class);
97-
return execute(context, successMessageWorld, List.copyOf(players.resolve(context.getSource())), amount, world, function, plugin);
98-
})).executes(context -> {
99+
.then(Commands.argument("world", ArgumentTypes.world())
100+
.requires(stack -> plugin.config.accounts.perWorld)
101+
.executes(context -> {
102+
var players = context.getArgument("players", PlayerSelectorArgumentResolver.class);
103+
var amount = context.getArgument("amount", Double.class);
104+
var world = context.getArgument("world", World.class);
105+
return execute(context, successMessageWorld, List.copyOf(players.resolve(context.getSource())), amount, world, function, plugin);
106+
})).executes(context -> {
99107
var players = context.getArgument("players", PlayerSelectorArgumentResolver.class);
100108
var amount = context.getArgument("amount", Double.class);
101109
return execute(context, successMessage, List.copyOf(players.resolve(context.getSource())), amount, null, function, plugin);
102110
})));
103111
}
104112

105113
private static int execute(CommandContext<CommandSourceStack> context, String successMessage,
106-
Collection<? extends OfflinePlayer> players, Number amount, @Nullable World world,
107-
BiFunction<Account, Number, BigDecimal> function, EconomistPlugin plugin) {
114+
Collection<? extends OfflinePlayer> players, Number amount, @Nullable World world,
115+
BiFunction<Account, Number, BigDecimal> function, EconomistPlugin plugin) {
108116
var sender = context.getSource().getSender();
109117
var locale = sender instanceof Player p ? p.locale() : Locale.US;
110118
if (!players.isEmpty()) players.forEach(player -> (world != null

src/main/java/net/thenextlvl/economist/command/PayCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public static LiteralCommandNode<CommandSourceStack> create(EconomistPlugin plug
3333
var player = context.getArgument("player", OfflinePlayer.class);
3434
return pay(context, List.of(player), null, plugin);
3535
}).then(Commands.argument("world", ArgumentTypes.world())
36-
.requires(stack -> stack.getSender().hasPermission("economist.pay.world"))
36+
.requires(stack -> stack.getSender().hasPermission("economist.pay.world") && plugin.config.accounts.perWorld)
3737
.executes(context -> {
3838
var player = context.getArgument("player", OfflinePlayer.class);
3939
var world = context.getArgument("world", World.class);
@@ -44,7 +44,7 @@ public static LiteralCommandNode<CommandSourceStack> create(EconomistPlugin plug
4444
var players = context.getArgument("players", PlayerSelectorArgumentResolver.class);
4545
return pay(context, new ArrayList<>(players.resolve(context.getSource())), null, plugin);
4646
}).then(Commands.argument("world", ArgumentTypes.world())
47-
.requires(stack -> stack.getSender().hasPermission("economist.pay.world"))
47+
.requires(stack -> stack.getSender().hasPermission("economist.pay.world") && plugin.config.accounts.perWorld)
4848
.executes(context -> {
4949
var players = context.getArgument("players", PlayerSelectorArgumentResolver.class);
5050
var world = context.getArgument("world", World.class);

0 commit comments

Comments
 (0)