Implement --unsafe flag for spawn command

This commit is contained in:
Ben Woo 2025-01-10 21:32:44 +08:00
parent df7b9a3e5b
commit f37ee00030

View File

@ -1,7 +1,6 @@
package org.mvplugins.multiverse.core.commands; package org.mvplugins.multiverse.core.commands;
import co.aikar.commands.BukkitCommandIssuer; import co.aikar.commands.BukkitCommandIssuer;
import co.aikar.commands.CommandIssuer;
import co.aikar.commands.MessageType; import co.aikar.commands.MessageType;
import co.aikar.commands.annotation.*; import co.aikar.commands.annotation.*;
import com.dumptruckman.minecraft.util.Logging; import com.dumptruckman.minecraft.util.Logging;
@ -11,7 +10,8 @@ import org.jetbrains.annotations.NotNull;
import org.jvnet.hk2.annotations.Service; import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.core.commandtools.MVCommandIssuer; import org.mvplugins.multiverse.core.commandtools.MVCommandIssuer;
import org.mvplugins.multiverse.core.commandtools.MVCommandManager; import org.mvplugins.multiverse.core.commandtools.MVCommandManager;
import org.mvplugins.multiverse.core.commandtools.MultiverseCommand; import org.mvplugins.multiverse.core.commandtools.flags.CommandFlag;
import org.mvplugins.multiverse.core.commandtools.flags.ParsedCommandFlags;
import org.mvplugins.multiverse.core.permissions.CorePermissionsChecker; import org.mvplugins.multiverse.core.permissions.CorePermissionsChecker;
import org.mvplugins.multiverse.core.teleportation.AsyncSafetyTeleporter; import org.mvplugins.multiverse.core.teleportation.AsyncSafetyTeleporter;
import org.mvplugins.multiverse.core.utils.MVCorei18n; import org.mvplugins.multiverse.core.utils.MVCorei18n;
@ -21,10 +21,15 @@ import org.mvplugins.multiverse.core.world.WorldManager;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class SpawnCommand extends CoreCommand { class SpawnCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;
private final AsyncSafetyTeleporter safetyTeleporter; private final AsyncSafetyTeleporter safetyTeleporter;
private final CorePermissionsChecker permissionsChecker; private final CorePermissionsChecker permissionsChecker;
private final CommandFlag UNSAFE_FLAG = flag(CommandFlag.builder("--unsafe")
.addAlias("-u")
.build());
@Inject @Inject
SpawnCommand(@NotNull MVCommandManager commandManager, SpawnCommand(@NotNull MVCommandManager commandManager,
@NotNull WorldManager worldManager, @NotNull WorldManager worldManager,
@ -39,7 +44,7 @@ class SpawnCommand extends CoreCommand {
@CommandAlias("mvspawn") @CommandAlias("mvspawn")
@Subcommand("spawn") @Subcommand("spawn")
@CommandPermission("@mvspawn") @CommandPermission("@mvspawn")
@CommandCompletion("@players") @CommandCompletion("@players|@flags:groupName=mvteleportcommand @flags:groupName=mvteleportcommand")
@Syntax("[player]") @Syntax("[player]")
@Description("{@@mv-core.spawn.description}") @Description("{@@mv-core.spawn.description}")
void onSpawnTpCommand( void onSpawnTpCommand(
@ -48,10 +53,17 @@ class SpawnCommand extends CoreCommand {
@Flags("resolve=issuerAware") @Flags("resolve=issuerAware")
@Syntax("[player]") @Syntax("[player]")
@Description("{@@mv-core.spawn.player.description}") @Description("{@@mv-core.spawn.player.description}")
Player player) { Player player,
@Optional
@Syntax("[--unsafe]")
@Description("")
String[] flags) {
ParsedCommandFlags parsedFlags = parseFlags(flags);
LoadedMultiverseWorld world = worldManager.getLoadedWorld(player.getWorld()).getOrNull(); LoadedMultiverseWorld world = worldManager.getLoadedWorld(player.getWorld()).getOrNull();
if (world == null) { if (world == null) {
issuer.sendMessage("The world the player you are trying to teleport is in, is not a multiverse world"); issuer.sendMessage("The world the player you are trying to teleport in is not a multiverse world!");
return; return;
} }
@ -64,6 +76,7 @@ class SpawnCommand extends CoreCommand {
// TODO: Different message for teleporting self vs others // TODO: Different message for teleporting self vs others
safetyTeleporter.to(world.getSpawnLocation()) safetyTeleporter.to(world.getSpawnLocation())
.by(issuer) .by(issuer)
.checkSafety(!parsedFlags.hasFlag(UNSAFE_FLAG))
.teleport(player) .teleport(player)
.onSuccess(() -> player.sendMessage(commandManager.formatMessage( .onSuccess(() -> player.sendMessage(commandManager.formatMessage(
issuer, issuer,