diff --git a/src/main/java/org/mvplugins/multiverse/core/command/MVCommandCompletions.java b/src/main/java/org/mvplugins/multiverse/core/command/MVCommandCompletions.java index 6a0493785..71acc4e50 100644 --- a/src/main/java/org/mvplugins/multiverse/core/command/MVCommandCompletions.java +++ b/src/main/java/org/mvplugins/multiverse/core/command/MVCommandCompletions.java @@ -27,6 +27,7 @@ import org.bukkit.Material; import org.bukkit.World; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.entity.SpawnCategory; import org.jetbrains.annotations.NotNull; @@ -43,9 +44,9 @@ import org.mvplugins.multiverse.core.destination.DestinationInstance; import org.mvplugins.multiverse.core.destination.DestinationSuggestionPacket; import org.mvplugins.multiverse.core.destination.DestinationsProvider; +import org.mvplugins.multiverse.core.destination.core.WorldDestination; import org.mvplugins.multiverse.core.permissions.CorePermissionsChecker; import org.mvplugins.multiverse.core.utils.REPatterns; -import org.mvplugins.multiverse.core.utils.StringFormatter; import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld; import org.mvplugins.multiverse.core.world.MultiverseWorld; import org.mvplugins.multiverse.core.world.WorldManager; @@ -100,7 +101,7 @@ public class MVCommandCompletions extends PaperCommandCompletions { registerAsyncCompletion("mvworlds", this::suggestMVWorlds); registerAsyncCompletion("mvworldpropsname", this::suggestMVWorldPropsName); registerAsyncCompletion("mvworldpropsvalue", this::suggestMVWorldPropsValue); - registerAsyncCompletion("playersarray", this::suggestPlayersArray); + registerCompletion("playersarray", this::suggestPlayersArray); // getting online players cannot be async registerStaticCompletion("propsmodifyaction", suggestEnums(PropertyModifyAction.class)); registerStaticCompletion("spawncategories", suggestEnums(SpawnCategory.class)); registerAsyncCompletion("spawncategorypropsname", this::suggestSpawnCategoryPropsName); @@ -224,18 +225,22 @@ private Collection suggestDestinations(BukkitCommandCompletionContext co // Most likely console did not specify a player return Collections.emptyList(); } - if (context.hasConfig("othersOnly") && (players.length == 1 && players[0].equals(context.getIssuer().getIssuer()))) { + CommandSender sender = context.getIssuer().getIssuer(); + if (context.hasConfig("othersOnly") && (players.length == 1 && players[0].equals(sender))) { return Collections.emptyList(); } - return suggestDestinationsWithPerms(context.getIssuer().getIssuer(), players, context.getInput()); + return suggestDestinationsWithPerms(sender, Arrays.asList(players), context.getInput()); }) .getOrElse(Collections.emptyList()); } - private Collection suggestDestinationsWithPerms(CommandSender teleporter, Player[] players, String deststring) { + private Collection suggestDestinationsWithPerms(CommandSender teleporter, List teleportees, String deststring) { return destinationsProvider.suggestDestinations(teleporter, deststring).stream() + .filter(packet -> !config.getSimplifiedDestinationTabCompletion() + || packet.destination() instanceof WorldDestination + || deststring.startsWith(packet.destination().getIdentifier() + ":")) .filter(packet -> corePermissionsChecker - .checkDestinationPacketPermission(teleporter, Arrays.asList(players), packet)) + .checkDestinationPacketPermission(teleporter, teleportees, packet)) .map(DestinationSuggestionPacket::parsableString) .toList(); } diff --git a/src/main/java/org/mvplugins/multiverse/core/command/MVCommandContexts.java b/src/main/java/org/mvplugins/multiverse/core/command/MVCommandContexts.java index e08c6699c..19ce84675 100644 --- a/src/main/java/org/mvplugins/multiverse/core/command/MVCommandContexts.java +++ b/src/main/java/org/mvplugins/multiverse/core/command/MVCommandContexts.java @@ -11,6 +11,7 @@ import co.aikar.commands.PaperCommandContexts; import co.aikar.commands.contexts.ContextResolver; import com.google.common.base.Strings; +import io.vavr.control.Option; import io.vavr.control.Try; import jakarta.inject.Inject; import org.bukkit.Bukkit; @@ -272,13 +273,25 @@ private IssuerAwareContextBuilder playerContextBuilder() { private IssuerAwareContextBuilder playerArrayContextBuilder() { return new IssuerAwareContextBuilder() .fromPlayer((context, player) -> new Player[]{player}) - .fromInput((context, input) -> { - Player[] players = PlayerFinder.getMulti(input, context.getSender()).toArray(new Player[0]); - return (players.length == 0) ? null : players; - }) + .fromInput((context, input) -> PlayerFinder + .tryGetMulti(input, context.getSender()) + .map(list -> list.toArray(new Player[0])) + .map(arr -> (arr.length == 0) ? null : arr) + .getOrElseThrow(failure -> { + if (failure instanceof MVInvalidCommandArgument mvFailure) { + throw mvFailure; + } + throw new InvalidCommandArgument(failure.getLocalizedMessage() + " " + + Option.of(failure.getCause()).map(Throwable::getLocalizedMessage).getOrElse("")); + })) .issuerOnlyFailMessage((context) -> Message.of("This command can only be used by a player.")) .issuerAwareInputFailMessage((context, input) -> Message.of("Invalid player: " + input + ". Either specify an online player or use this command as a player.")) - .inputOnlyFailMessage((context, input) -> Message.of("Player " + input + " not found.")); + .inputOnlyFailMessage((context, input) -> { + if (PlayerFinder.isSelector(input)) { + return Message.of("No player(s) matched selector: " + input + "."); + } + return Message.of("Player(s) " + input + " not found."); + }); } private PlayerLocation parsePlayerLocation(BukkitCommandExecutionContext context) { diff --git a/src/main/java/org/mvplugins/multiverse/core/command/context/issueraware/IssuerAwareContextBuilder.java b/src/main/java/org/mvplugins/multiverse/core/command/context/issueraware/IssuerAwareContextBuilder.java index a9c1057b7..7df5fe70d 100644 --- a/src/main/java/org/mvplugins/multiverse/core/command/context/issueraware/IssuerAwareContextBuilder.java +++ b/src/main/java/org/mvplugins/multiverse/core/command/context/issueraware/IssuerAwareContextBuilder.java @@ -123,48 +123,8 @@ public IssuerAwareContextBuilder inputOnlyFailMessage(BiFunction generateContext() { - Objects.requireNonNull(fromPlayer); - Objects.requireNonNull(fromInput); - Objects.requireNonNull(issuerOnlyFailMessage); - Objects.requireNonNull(issuerAwarePlayerFailMessage); - Objects.requireNonNull(issuerAwareInputFailMessage); - Objects.requireNonNull(inputOnlyFailMessage); - - return context -> { - BukkitCommandIssuer issuer = context.getIssuer(); - String resolve = context.getFlagValue("resolve", ""); - - if (resolve.equals("issuerOnly")) { - if (issuer.isPlayer()) { - T result = fromPlayer.apply(context, issuer.getPlayer()); - if (result != null) { - return result; - } - } - throw new InvalidCommandArgument(issuerOnlyFailMessage.apply(context).formatted(issuer)); - } - - String input = context.getFirstArg(); - T result = fromInput.apply(context, input); - if (result != null) { - context.popFirstArg(); - return result; - } - - if (resolve.equals("issuerAware")) { - if (issuer.isPlayer()) { - Player player = issuer.getPlayer(); - result = fromPlayer.apply(context, player); - if (result != null) { - return result; - } - throw new InvalidCommandArgument(issuerAwarePlayerFailMessage.apply(context, player).formatted(issuer)); - } - throw new InvalidCommandArgument(issuerAwareInputFailMessage.apply(context, input).formatted(issuer)); - } - - throw new InvalidCommandArgument(inputOnlyFailMessage.apply(context, input).formatted(issuer)); - }; + validateRequiredVariables(); + return context -> resolveValue(context, GenericIssuerAwareValue::new).value; } /** @@ -178,49 +138,66 @@ public IssuerAwareContextResolver generateCont */ @ApiStatus.AvailableSince("5.1") public IssuerAwareContextResolver generateContext(BiFunction createValue) { - // todo: This is a copy and paste from above + validateRequiredVariables(); + return context -> resolveValue(context, createValue); + } + private void validateRequiredVariables() { Objects.requireNonNull(fromPlayer); Objects.requireNonNull(fromInput); Objects.requireNonNull(issuerOnlyFailMessage); Objects.requireNonNull(issuerAwarePlayerFailMessage); Objects.requireNonNull(issuerAwareInputFailMessage); Objects.requireNonNull(inputOnlyFailMessage); + } - return context -> { - BukkitCommandIssuer issuer = context.getIssuer(); - String resolve = context.getFlagValue("resolve", ""); + private I resolveValue(BukkitCommandExecutionContext context, BiFunction createValue) { + BukkitCommandIssuer issuer = context.getIssuer(); + String resolve = context.getFlagValue("resolve", ""); - if (resolve.equals("issuerOnly")) { - if (issuer.isPlayer()) { - T result = fromPlayer.apply(context, issuer.getPlayer()); - if (result != null) { - return createValue.apply(true, result); - } + if (resolve.equals("issuerOnly")) { + if (issuer.isPlayer()) { + T result = fromPlayer.apply(context, issuer.getPlayer()); + if (result != null) { + return createValue.apply(true, result); } - throw new InvalidCommandArgument(issuerOnlyFailMessage.apply(context).formatted(issuer)); } - - String input = context.getFirstArg(); - T result = fromInput.apply(context, input); - if (result != null) { - context.popFirstArg(); - return createValue.apply(false, result); - } - - if (resolve.equals("issuerAware")) { - if (issuer.isPlayer()) { - Player player = issuer.getPlayer(); - result = fromPlayer.apply(context, player); - if (result != null) { - return createValue.apply(true, result); - } - throw new InvalidCommandArgument(issuerAwarePlayerFailMessage.apply(context, player).formatted(issuer)); + throw new InvalidCommandArgument(issuerOnlyFailMessage.apply(context).formatted(issuer)); + } + + String input = context.getFirstArg(); + T result = fromInput.apply(context, input); + if (result != null) { + context.popFirstArg(); + return createValue.apply(false, result); + } + + int maxArgForAware = context.getFlagValue("maxArgForAware", Integer.MAX_VALUE); + long argLengthWithoutFlags = context.getArgs().stream() + .takeWhile(value -> !value.startsWith("--") && !value.isEmpty()) + .count(); + + if (resolve.equals("issuerAware") && argLengthWithoutFlags <= maxArgForAware) { + if (issuer.isPlayer()) { + Player player = issuer.getPlayer(); + result = fromPlayer.apply(context, player); + if (result != null) { + return createValue.apply(true, result); } - throw new InvalidCommandArgument(issuerAwareInputFailMessage.apply(context, input).formatted(issuer)); + throw new InvalidCommandArgument(issuerAwarePlayerFailMessage.apply(context, player).formatted(issuer)); } + throw new InvalidCommandArgument(issuerAwareInputFailMessage.apply(context, input).formatted(issuer)); + } + + throw new InvalidCommandArgument(inputOnlyFailMessage.apply(context, input).formatted(issuer)); + } + + private static class GenericIssuerAwareValue extends IssuerAwareValue { + private final T value; - throw new InvalidCommandArgument(inputOnlyFailMessage.apply(context, input).formatted(issuer)); - }; + public GenericIssuerAwareValue(boolean byIssuer, T value) { + super(byIssuer); + this.value = value; + } } } diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/EntitySpawnConfigCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/EntitySpawnConfigCommand.java index 2963b4221..ec1f07b6d 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/EntitySpawnConfigCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/EntitySpawnConfigCommand.java @@ -52,7 +52,7 @@ final class EntitySpawnConfigCommand extends CoreCommand { void onInfoCommand( MVCommandIssuer issuer, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=0") @Syntax("[world]") MultiverseWorld world, @@ -91,7 +91,7 @@ private List getEntitySpawnConfigList(MultiverseWorld world) { void onModifyCommand( MVCommandIssuer issuer, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=4") @Syntax("[world]") MultiverseWorld world, diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/InfoCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/InfoCommand.java index 67a3ca38e..ef1e65e95 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/InfoCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/InfoCommand.java @@ -61,8 +61,8 @@ class InfoCommand extends CoreCommand { public void onInfoCommand( MVCommandIssuer issuer, - @Flags("resolve=issuerAware") - @Syntax("") + @Flags("resolve=issuerAware,maxArgForAware=0") + @Syntax("[world]") @Description("{@@mv-core.info.description.world}") LoadedMultiverseWorld world, diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/ModifyCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/ModifyCommand.java index 169e6036c..b0fea9bb8 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/ModifyCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/ModifyCommand.java @@ -49,12 +49,12 @@ class ModifyCommand extends CoreCommand { "@propsmodifyaction:notByIssuerForArg=arg1|@mvworldpropsname:byIssuerForArg=arg1 " + "@mvworldpropsname:notByIssuerForArg=arg1|@mvworldpropsvalue:byIssuerForArg=arg1 " + "@mvworldpropsvalue:notByIssuerForArg=arg1") - @Syntax("[world] ") + @Syntax("[world] [value]") @Description("{@@mv-core.modify.description}") void onModifyCommand(// SUPPRESS CHECKSTYLE: ParameterNumber MVCommandIssuer issuer, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=3") @Syntax("[world]") @Description("{@@mv-core.modify.world.description}") @NotNull MultiverseWorldValue worldValue, diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/PurgeAllEntitiesCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/PurgeAllEntitiesCommand.java index 92b5ebeea..ea3e6335e 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/PurgeAllEntitiesCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/PurgeAllEntitiesCommand.java @@ -33,7 +33,7 @@ final class PurgeAllEntitiesCommand extends CoreCommand { void onPurgeAllEntitiesCommand( MVCommandIssuer issuer, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=1") @Syntax("[world]") LoadedMultiverseWorld world, diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/PurgeEntitiesCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/PurgeEntitiesCommand.java index c2d15a8c7..a1a10ddd5 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/PurgeEntitiesCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/PurgeEntitiesCommand.java @@ -28,7 +28,7 @@ final class PurgeEntitiesCommand extends CoreCommand { void onPurgeEntityCommand( MVCommandIssuer issuer, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=0") @Syntax("[world]") LoadedMultiverseWorld world ) { diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/TeleportCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/TeleportCommand.java index 8030c1792..544b60abf 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/TeleportCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/TeleportCommand.java @@ -19,7 +19,10 @@ import org.mvplugins.multiverse.core.command.MVCommandIssuer; import org.mvplugins.multiverse.core.command.context.issueraware.PlayerArrayValue; +import org.mvplugins.multiverse.core.command.flag.CommandFlag; +import org.mvplugins.multiverse.core.command.flag.CommandFlagsManager; import org.mvplugins.multiverse.core.command.flag.ParsedCommandFlags; +import org.mvplugins.multiverse.core.command.flags.PageFilterFlags; import org.mvplugins.multiverse.core.command.flags.UnsafeFlags; import org.mvplugins.multiverse.core.config.CoreConfig; import org.mvplugins.multiverse.core.destination.DestinationInstance; @@ -35,14 +38,14 @@ final class TeleportCommand extends CoreCommand { private final CoreConfig config; private final CorePermissionsChecker permissionsChecker; private final AsyncSafetyTeleporter safetyTeleporter; - private final UnsafeFlags flags; + private final Flags flags; @Inject TeleportCommand( @NotNull CoreConfig config, @NotNull CorePermissionsChecker permissionsChecker, @NotNull AsyncSafetyTeleporter safetyTeleporter, - @NotNull UnsafeFlags flags + @NotNull Flags flags ) { this.config = config; this.permissionsChecker = permissionsChecker; @@ -54,14 +57,14 @@ final class TeleportCommand extends CoreCommand { @Subcommand("teleport|tp") @CommandPermission("@mvteleport") @CommandCompletion("@playersarray:checkPermissions=@mvteleportother|@destinations:byIssuerForArg=arg1 " - + "@destinations:notByIssuerForArg=arg1|@flags:byIssuerForArg=arg1,groupName=" + UnsafeFlags.NAME + " " - + "@flags:notByIssuerForArg=arg1,groupName=" + UnsafeFlags.NAME) + + "@destinations:notByIssuerForArg=arg1|@flags:byIssuerForArg=arg1,groupName=" + Flags.NAME + " " + + "@flags:notByIssuerForArg=arg1,groupName=" + Flags.NAME) @Syntax("[player] [--unsafe]") @Description("{@@mv-core.teleport.description}") void onTeleportCommand( MVCommandIssuer issuer, - @Flags("resolve=issuerAware") + @co.aikar.commands.annotation.Flags("resolve=issuerAware,maxArgForAware=1") @Syntax("[player]") @Description("{@@mv-core.teleport.player.description}") PlayerArrayValue playersValue, @@ -103,16 +106,21 @@ private void teleportSinglePlayer(MVCommandIssuer issuer, Player player, .checkSafety(!parsedFlags.hasFlag(flags.unsafe) && destination.checkTeleportSafety()) .passengerMode(config.getPassengerMode()) .teleportSingle(player) - .onSuccess(() -> issuer.sendInfo(MVCorei18n.TELEPORT_SUCCESS, - Replace.PLAYER.with(getYouOrName(issuer, player)), - Replace.DESTINATION.with(destination.toString()))) + .onSuccess(() -> { + if (parsedFlags.hasFlag(flags.silent)) { + return; + } + issuer.sendInfo(MVCorei18n.TELEPORT_SUCCESS, + Replace.PLAYER.with(getYouOrName(issuer, player)), + Replace.DESTINATION.with(destination.getDisplayMessage())); + }) .onFailureCount(reasonsCountMap -> { for (var entry : reasonsCountMap.entrySet()) { Logging.finer("Failed to teleport %s players to %s: %s", entry.getValue(), destination, entry.getKey()); issuer.sendError(MVCorei18n.TELEPORT_FAILED, Replace.PLAYER.with(player.getName()), - Replace.DESTINATION.with(destination.toString()), + Replace.DESTINATION.with(destination.getDisplayMessage()), Replace.REASON.with(Message.of(entry.getKey()))); } }); @@ -136,18 +144,38 @@ private void teleportMultiplePlayers(MVCommandIssuer issuer, Player[] players, .checkSafety(!parsedFlags.hasFlag(flags.unsafe) && destination.checkTeleportSafety()) .passengerMode(config.getPassengerMode()) .teleport(List.of(players)) - .onSuccessCount(successCount -> issuer.sendInfo(MVCorei18n.TELEPORT_SUCCESS, - Replace.PLAYER.with(successCount + " players"), - Replace.DESTINATION.with(destination.toString()))) + .onSuccessCount(successCount -> { + if (parsedFlags.hasFlag(flags.silent)) { + return; + } + issuer.sendInfo(MVCorei18n.TELEPORT_SUCCESS, + Replace.PLAYER.with(successCount + " players"), + Replace.DESTINATION.with(destination.getDisplayMessage())); + }) .onFailureCount(reasonsCountMap -> { for (var entry : reasonsCountMap.entrySet()) { Logging.finer("Failed to teleport %s players to %s: %s", entry.getValue(), destination, entry.getKey()); issuer.sendError(MVCorei18n.TELEPORT_FAILED, Replace.PLAYER.with(entry.getValue() + " players"), - Replace.DESTINATION.with(destination.toString()), + Replace.DESTINATION.with(destination.getDisplayMessage()), Replace.REASON.with(Message.of(entry.getKey()))); } }); } + + @Service + private static final class Flags extends UnsafeFlags { + + private static final String NAME = "mvteleport"; + + @Inject + private Flags(@NotNull CommandFlagsManager flagsManager) { + super(NAME, flagsManager); + } + + private final CommandFlag silent = flag(CommandFlag.builder("--silent") + .addAlias("-s") + .build()); + } } diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/WhoCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/WhoCommand.java index a57687999..d9f288f23 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/WhoCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/WhoCommand.java @@ -74,12 +74,12 @@ void onWhoAllCommand( @Subcommand("who") @CommandPermission("multiverse.core.list.who") @CommandCompletion("@mvworlds:scope=both @flags:groupName=" + PageFilterFlags.NAME) - @Syntax(" [--page ] [--filter ]") + @Syntax("[world] [--page ] [--filter ]") @Description("{@@mv-core.who.description}") void onWhoCommand( MVCommandIssuer issuer, - @Flags("resolve=issuerAware") - @Syntax("") + @Flags("resolve=issuerAware,maxArgForAware=0") + @Syntax("[world]") @Description("{@@mv-core.who.world.description}") LoadedMultiverseWorld inputtedWorld, diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/WorldBorderCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/WorldBorderCommand.java index cfd185bcf..94e1e8cb2 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/WorldBorderCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/WorldBorderCommand.java @@ -35,7 +35,7 @@ void onWorldBorderAdd( @Syntax("[time]") int time, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=0") @Syntax("[world]") LoadedMultiverseWorld world ) { @@ -54,7 +54,7 @@ void onWorldBorderCenter( @Syntax("[z]") double z, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=0") @Syntax("[world]") LoadedMultiverseWorld world ) { @@ -79,7 +79,7 @@ void onWorldBorderDamageAmount( @Syntax("") double damage, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=0") @Syntax("[world]") LoadedMultiverseWorld world ) { @@ -103,7 +103,7 @@ void onWorldBorderDamageBuffer( @Syntax("") double distance, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=0") @Syntax("[world]") LoadedMultiverseWorld world ) { @@ -124,7 +124,7 @@ void onWorldBorderDamageBuffer( void onWorldBorderGet( MVCommandIssuer issuer, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=0") @Syntax("[world]") LoadedMultiverseWorld world ) { @@ -147,7 +147,7 @@ void onWorldBorderSet( @Syntax("[time]") int time, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=0") @Syntax("[world]") LoadedMultiverseWorld world ) { @@ -179,7 +179,7 @@ void onWorldBorderWarningDistance( @Syntax("") int distance, - @Flags("resolve=issuerAware") + @Flags("resolve=issuerAware,maxArgForAware=0") @Syntax("[world]") LoadedMultiverseWorld world ) { @@ -203,7 +203,7 @@ void onWorldBorderWarningTime( @Syntax("