mirror of
https://github.com/Multiverse/Multiverse-Core.git
synced 2025-02-16 20:41:59 +01:00
More ACF testing, add queue manager.
This commit is contained in:
parent
d8ff083418
commit
15810c9404
@ -709,6 +709,8 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
|
||||
* Register Multiverse-Core commands to Command Manager.
|
||||
*/
|
||||
private void registerCommands() {
|
||||
commandHandler.enableUnstableAPI("help");
|
||||
|
||||
CommandTools tools = new CommandTools(this);
|
||||
tools.registerCommandContext();
|
||||
tools.registerCommandCompletions();
|
||||
|
@ -5,10 +5,12 @@ import co.aikar.commands.PaperCommandManager;
|
||||
import com.onarandombox.MultiverseCore.MultiverseCore;
|
||||
import com.onarandombox.MultiverseCore.api.MVWorldManager;
|
||||
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class CommandTools {
|
||||
@ -16,6 +18,9 @@ public class CommandTools {
|
||||
private final PaperCommandManager commandHandler;
|
||||
private final MVWorldManager worldManager;
|
||||
|
||||
private static final String UUID_REGEX = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[34][0-9a-fA-F]{3}-[89ab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}"
|
||||
;
|
||||
|
||||
public CommandTools(MultiverseCore plugin) {
|
||||
this.plugin = plugin;
|
||||
this.commandHandler = this.plugin.getCommandHandler();
|
||||
@ -73,25 +78,35 @@ public class CommandTools {
|
||||
}
|
||||
);
|
||||
|
||||
commandHandler.getCommandContexts().registerIssuerAwareContext(
|
||||
PageOrWorld.class,
|
||||
commandHandler.getCommandContexts().registerContext(
|
||||
Player.class,
|
||||
context -> {
|
||||
String arg = context.popFirstArg();
|
||||
MultiverseWorld targetWorld = this.worldManager.getMVWorld(arg);
|
||||
if (targetWorld != null) {
|
||||
return new PageOrWorld(targetWorld);
|
||||
String playerIdentifier = context.popFirstArg();
|
||||
Player targetPlayer = Bukkit.getPlayerExact(playerIdentifier);
|
||||
if (targetPlayer == null) {
|
||||
return tryGetPlayerByUUID(playerIdentifier);
|
||||
}
|
||||
|
||||
targetWorld = GetPlayerMVWorld(context.getPlayer());
|
||||
int page = ParsePageNumber(arg);
|
||||
|
||||
return new PageOrWorld(targetWorld, page);
|
||||
return targetPlayer;
|
||||
}
|
||||
);
|
||||
|
||||
//TODO: Destination
|
||||
}
|
||||
|
||||
private Player tryGetPlayerByUUID(String playerIdentifier) {
|
||||
if (!playerIdentifier.matches(UUID_REGEX)) {
|
||||
return null;
|
||||
}
|
||||
UUID playerUUID;
|
||||
try {
|
||||
playerUUID = UUID.fromString(playerIdentifier);
|
||||
}
|
||||
catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
return Bukkit.getPlayer(playerUUID);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private MultiverseWorld GetPlayerMVWorld(Player player) {
|
||||
if (player == null) {
|
||||
@ -105,17 +120,4 @@ public class CommandTools {
|
||||
|
||||
return targetWorld;
|
||||
}
|
||||
|
||||
private int ParsePageNumber(String arg) {
|
||||
if (arg == null) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
try {
|
||||
return Integer.parseInt(arg);
|
||||
}
|
||||
catch (NumberFormatException ignored) {
|
||||
throw new InvalidCommandArgument("Invalid page number: " + arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ public class ConfigCommand extends MultiverseCommand {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Subcommand("show")
|
||||
@Subcommand("list")
|
||||
@Description("Show Global MV Variables.")
|
||||
public void onShowCommand(CommandSender sender) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
@ -53,17 +53,16 @@ public class ConfigCommand extends MultiverseCommand {
|
||||
return;
|
||||
}
|
||||
|
||||
// special rule
|
||||
// special rule, don't forget to set the world!
|
||||
if (property.equalsIgnoreCase("firstspawnworld")) {
|
||||
// Don't forget to set the world!
|
||||
this.plugin.getMVWorldManager().setFirstSpawnWorld(value);
|
||||
}
|
||||
|
||||
if (this.plugin.saveMVConfigs()) {
|
||||
sender.sendMessage(ChatColor.GREEN + "SUCCESS!" + ChatColor.WHITE + " Values were updated successfully!");
|
||||
this.plugin.loadConfigs();
|
||||
} else {
|
||||
if (!this.plugin.saveMVConfigs()) {
|
||||
sender.sendMessage(ChatColor.RED + "FAIL!" + ChatColor.WHITE + " Check your console for details!");
|
||||
}
|
||||
|
||||
sender.sendMessage(ChatColor.GREEN + "SUCCESS!" + ChatColor.WHITE + " Values were updated successfully!");
|
||||
this.plugin.loadConfigs();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,10 @@
|
||||
package com.onarandombox.MultiverseCore.commands_acf;
|
||||
|
||||
import com.onarandombox.MultiverseCore.MultiverseCore;
|
||||
|
||||
public class ConfirmCommand extends MultiverseCommand {
|
||||
|
||||
public ConfirmCommand(MultiverseCore plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
}
|
@ -11,51 +11,56 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
@CommandAlias("mv")
|
||||
@Subcommand("debug")
|
||||
@CommandPermission("multiverse.core.debug")
|
||||
public class DebugCommand extends MultiverseCommand {
|
||||
|
||||
public DebugCommand(MultiverseCore plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Subcommand("debug")
|
||||
@CommandPermission("multiverse.core.debug")
|
||||
@Description("Show the current debug level.")
|
||||
public void showDebugCommand(CommandSender sender) {
|
||||
displayDebugMode(sender);
|
||||
}
|
||||
|
||||
@Subcommand("debug")
|
||||
@CommandPermission("multiverse.core.debug")
|
||||
@Syntax("<level>")
|
||||
@Description("Change debug level.")
|
||||
public void changeDebugCommand(CommandSender sender, String debugLevel) {
|
||||
int parsedLevel;
|
||||
if (debugLevel.equalsIgnoreCase("off")) {
|
||||
parsedLevel = 0;
|
||||
}
|
||||
else {
|
||||
try {
|
||||
parsedLevel = Integer.parseInt(debugLevel);
|
||||
if (parsedLevel > 3 || parsedLevel < 0) {
|
||||
throw new NumberFormatException();
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
sender.sendMessage(ChatColor.RED + "Error" + ChatColor.WHITE
|
||||
+ " setting debug level. Please use a number 0-3 " + ChatColor.AQUA + "(3 being many many messages!)");
|
||||
return;
|
||||
}
|
||||
public void changeDebugCommand(CommandSender sender, String debugLevel) {
|
||||
int parsedLevel = parseDebugLevel(debugLevel);
|
||||
if (parsedLevel == -1) {
|
||||
sender.sendMessage(ChatColor.RED + "Error" + ChatColor.WHITE
|
||||
+ " setting debug level. Please use a number 0-3 " + ChatColor.AQUA + "(3 being many many messages!)");
|
||||
return;
|
||||
}
|
||||
|
||||
plugin.getMVConfig().setGlobalDebug(parsedLevel);
|
||||
if (!plugin.saveMVConfigs()) {
|
||||
this.plugin.getMVConfig().setGlobalDebug(parsedLevel);
|
||||
if (!this.plugin.saveMVConfigs()) {
|
||||
sender.sendMessage(ChatColor.RED + "Error saving changes to config! See console for more info.");
|
||||
}
|
||||
|
||||
this.displayDebugMode(sender);
|
||||
displayDebugMode(sender);
|
||||
}
|
||||
|
||||
private int parseDebugLevel(String debugLevel) {
|
||||
if (debugLevel.equalsIgnoreCase("off")) {
|
||||
return 0;
|
||||
}
|
||||
if (debugLevel.equalsIgnoreCase("on")) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
try {
|
||||
int parsedLevel = Integer.parseInt(debugLevel);
|
||||
return (parsedLevel > 3 || parsedLevel < 0) ? parsedLevel : -1;
|
||||
}
|
||||
catch (NumberFormatException ignored) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
private void displayDebugMode(CommandSender sender) {
|
||||
final int debugLevel = plugin.getMVConfig().getGlobalDebug();
|
||||
final int debugLevel = this.plugin.getMVConfig().getGlobalDebug();
|
||||
if (debugLevel == 0) {
|
||||
sender.sendMessage("Multiverse Debug mode is " + ChatColor.RED + "OFF");
|
||||
}
|
||||
|
@ -0,0 +1,10 @@
|
||||
package com.onarandombox.MultiverseCore.commands_acf;
|
||||
|
||||
import com.onarandombox.MultiverseCore.MultiverseCore;
|
||||
|
||||
public class DeleteCommand extends MultiverseCommand {
|
||||
|
||||
protected DeleteCommand(MultiverseCore plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
}
|
@ -22,26 +22,17 @@ public class InfoCommand extends MultiverseCommand {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Subcommand("info")
|
||||
@CommandPermission("multiverse.core.info")
|
||||
@Syntax("[page]")
|
||||
@Description("")
|
||||
public void onPlayerInfoCommand(CommandSender sender, PageOrWorld pageOrWorld) {
|
||||
ShowWorldInfo(sender, pageOrWorld.getWorld(), pageOrWorld.getPage());
|
||||
}
|
||||
|
||||
@Subcommand("info")
|
||||
@CommandPermission("multiverse.core.info")
|
||||
@Syntax("[world] [page]")
|
||||
@CommandCompletion("@mvworlds")
|
||||
@Description("")
|
||||
public void onInfoCommand(CommandSender sender, PageOrWorld pageOrWorld, @Default("1") int page) {
|
||||
ShowWorldInfo(sender, pageOrWorld.getWorld(), page);
|
||||
public void onInfoCommand(CommandSender sender, MultiverseWorld world, @Default("1") int page) {
|
||||
ShowWorldInfo(sender, world, page);
|
||||
}
|
||||
|
||||
private void ShowWorldInfo(CommandSender sender, MultiverseWorld world, int page) {
|
||||
sender.sendMessage(world.toString());
|
||||
sender.sendMessage("Page of " + page);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import co.aikar.commands.BaseCommand;
|
||||
import com.onarandombox.MultiverseCore.MultiverseCore;
|
||||
|
||||
public class MultiverseCommand extends BaseCommand {
|
||||
|
||||
protected final MultiverseCore plugin;
|
||||
|
||||
protected MultiverseCommand(MultiverseCore plugin) {
|
||||
|
@ -1,34 +0,0 @@
|
||||
package com.onarandombox.MultiverseCore.commands_acf;
|
||||
|
||||
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
|
||||
|
||||
public class PageOrWorld {
|
||||
private MultiverseWorld world;
|
||||
private int page;
|
||||
|
||||
public PageOrWorld(MultiverseWorld world) {
|
||||
this.world = world;
|
||||
this.page = 1;
|
||||
}
|
||||
|
||||
public PageOrWorld(MultiverseWorld world, int page) {
|
||||
this.world = world;
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
public MultiverseWorld getWorld() {
|
||||
return world;
|
||||
}
|
||||
|
||||
public void setWorld(MultiverseWorld world) {
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
public int getPage() {
|
||||
return page;
|
||||
}
|
||||
|
||||
public void setPage(int page) {
|
||||
this.page = page;
|
||||
}
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
package com.onarandombox.MultiverseCore.commands_acf;
|
||||
|
||||
import com.dumptruckman.minecraft.util.Logging;
|
||||
import com.onarandombox.MultiverseCore.MultiverseCore;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class QueueManager {
|
||||
private final MultiverseCore plugin;
|
||||
private final Map<CommandSender, QueuedCommand> queuedCommands;
|
||||
|
||||
private static final int DEFAULT_EXPIRE_TIME = 200; // In ticks for now
|
||||
|
||||
public QueueManager(MultiverseCore plugin) {
|
||||
this.plugin = plugin;
|
||||
this.queuedCommands = new HashMap<CommandSender, QueuedCommand>();
|
||||
}
|
||||
|
||||
public void addToQueue(@NotNull CommandSender sender, @NotNull Runnable runnable) {
|
||||
addToQueue(sender, runnable, DEFAULT_EXPIRE_TIME);
|
||||
}
|
||||
|
||||
public void addToQueue(@NotNull CommandSender sender, @NotNull Runnable runnable, int validPeriod) {
|
||||
cancelPreviousQueue(sender);
|
||||
|
||||
QueuedCommand queuedCommand = new QueuedCommand(sender, runnable, validPeriod);
|
||||
queuedCommands.put(sender, queuedCommand);
|
||||
queuedCommand.setExpireTask(runExpireLater(queuedCommand));
|
||||
|
||||
sender.sendMessage("The command you are trying to run is deemed dangerous.");
|
||||
sender.sendMessage("Run /mv confirm to continue.");
|
||||
}
|
||||
|
||||
private void cancelPreviousQueue(@NotNull CommandSender sender) {
|
||||
QueuedCommand previousCommand = queuedCommands.get(sender);
|
||||
if (previousCommand == null) {
|
||||
return;
|
||||
}
|
||||
previousCommand.cancelExpiryTask();
|
||||
queuedCommands.remove(sender);
|
||||
}
|
||||
|
||||
private BukkitTask runExpireLater(@NotNull QueuedCommand queuedCommand) {
|
||||
return Bukkit.getScheduler().runTaskLater(
|
||||
this.plugin,
|
||||
expireRunnable(queuedCommand),
|
||||
queuedCommand.getValidInterval()
|
||||
);
|
||||
}
|
||||
|
||||
private Runnable expireRunnable(@NotNull QueuedCommand queuedCommand) {
|
||||
return () -> {
|
||||
QueuedCommand matchingQueuedCommand = this.queuedCommands.get(queuedCommand.getSender());
|
||||
if (!queuedCommand.equals(matchingQueuedCommand)) {
|
||||
Logging.finer("This is an old command already.");
|
||||
return;
|
||||
}
|
||||
this.queuedCommands.remove(queuedCommand.getSender());
|
||||
Logging.finer("Command expired and is removed.");
|
||||
};
|
||||
}
|
||||
|
||||
public boolean runQueuedCommand(@NotNull CommandSender sender) {
|
||||
QueuedCommand queuedCommand = this.queuedCommands.get(sender);
|
||||
if (queuedCommand == null) {
|
||||
Logging.fine("No queued command.");
|
||||
return false;
|
||||
}
|
||||
|
||||
queuedCommand.runCommand();
|
||||
queuedCommands.remove(sender);
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package com.onarandombox.MultiverseCore.commands_acf;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
public class QueuedCommand {
|
||||
private final CommandSender sender;
|
||||
private final Runnable runnable;
|
||||
private final int validInterval;
|
||||
private BukkitTask expireTask;
|
||||
|
||||
public QueuedCommand(CommandSender sender, Runnable runnable, int validPeriod) {
|
||||
this.sender = sender;
|
||||
this.runnable = runnable;
|
||||
this.validInterval = validPeriod;
|
||||
}
|
||||
|
||||
public void runCommand() {
|
||||
runnable.run();
|
||||
cancelExpiryTask();
|
||||
}
|
||||
|
||||
public void cancelExpiryTask() {
|
||||
expireTask.cancel();
|
||||
}
|
||||
|
||||
public void setExpireTask(BukkitTask expireTask) {
|
||||
this.expireTask = expireTask;
|
||||
}
|
||||
|
||||
public CommandSender getSender() {
|
||||
return sender;
|
||||
}
|
||||
|
||||
public int getValidInterval() {
|
||||
return validInterval;
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.onarandombox.MultiverseCore.commands_acf;
|
||||
|
||||
import co.aikar.commands.CommandHelp;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import com.onarandombox.MultiverseCore.MultiverseCore;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
@CommandAlias("mv")
|
||||
public class UsageCommand extends MultiverseCommand {
|
||||
|
||||
public UsageCommand(MultiverseCore plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@HelpCommand
|
||||
@Subcommand("help")
|
||||
@CommandPermission("multiverse.core.help")
|
||||
@Description("Show Multiverse Command usage.")
|
||||
public void onUsageCommand(CommandSender sender, CommandHelp help) {
|
||||
help.showHelp();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user