From 8808b0fd8ee79cd29ad76b3a59ef9389d531ea3f Mon Sep 17 00:00:00 2001 From: M_Viper Date: Fri, 15 Aug 2025 19:21:02 +0000 Subject: [PATCH] Dateien nach "src/main/java/net/licks92/wirelessredstone/commands/Admin" hochladen --- .../commands/Admin/AdminAddOwner.java | 48 ++++ .../commands/Admin/AdminBackup.java | 21 ++ .../commands/Admin/AdminChangeLanguage.java | 26 +++ .../commands/Admin/AdminCommandManager.java | 216 ++++++++++++++++++ .../commands/Admin/AdminHelp.java | 72 ++++++ .../commands/Admin/AdminList.java | 69 ++++++ .../commands/Admin/AdminPurge.java | 21 ++ .../commands/Admin/AdminRemoveOwner.java | 48 ++++ .../commands/Admin/AdminWipeData.java | 47 ++++ 9 files changed, 568 insertions(+) create mode 100644 src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminAddOwner.java create mode 100644 src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminBackup.java create mode 100644 src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminChangeLanguage.java create mode 100644 src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminCommandManager.java create mode 100644 src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminHelp.java create mode 100644 src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminList.java create mode 100644 src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminPurge.java create mode 100644 src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminRemoveOwner.java create mode 100644 src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminWipeData.java diff --git a/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminAddOwner.java b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminAddOwner.java new file mode 100644 index 0000000..23b9fe6 --- /dev/null +++ b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminAddOwner.java @@ -0,0 +1,48 @@ +package net.licks92.wirelessredstone.commands.Admin; + +import net.licks92.wirelessredstone.commands.CommandInfo; +import net.licks92.wirelessredstone.commands.WirelessCommand; +import net.licks92.wirelessredstone.commands.WirelessCommandTabCompletion; +import net.licks92.wirelessredstone.signs.WirelessChannel; +import net.licks92.wirelessredstone.Utils; +import net.licks92.wirelessredstone.WirelessRedstone; +import org.bukkit.command.CommandSender; + +@CommandInfo(description = "Add owner to WirlessChannel", usage = " ", aliases = {"addowner"}, + tabCompletion = {WirelessCommandTabCompletion.CHANNEL, WirelessCommandTabCompletion.PLAYER}, + permission = "addOwner", canUseInConsole = true, canUseInCommandBlock = false) +public class AdminAddOwner extends WirelessCommand { + + @Override + public void onCommand(CommandSender sender, String[] args) { + if (args.length < 2) { + Utils.sendFeedback(WirelessRedstone.getStrings().commandTooFewArguments, sender, true); + return; + } + + String channelName = args[0]; + String playerName = args[1]; + + if (!hasAccessToChannel(sender, channelName)) { + Utils.sendFeedback(WirelessRedstone.getStrings().permissionChannelAccess, sender, true); + return; + } + + WirelessChannel channel = WirelessRedstone.getStorageManager().getChannel(channelName); + if (channel == null) { + Utils.sendFeedback(WirelessRedstone.getStrings().channelNotFound, sender, true); + return; + } + + if (channel.getOwners().contains(playerName)) { + Utils.sendFeedback(WirelessRedstone.getStrings().channelAlreadyOwner, sender, true); + return; + } + + channel.addOwner(playerName); + WirelessRedstone.getStorage().updateChannel(channelName, channel); + + WirelessRedstone.getWRLogger().info("Channel " + channelName + " has been updated. Player " + playerName + " has been added to the owner list."); + Utils.sendFeedback(WirelessRedstone.getStrings().channelOwnerAdded.replaceAll("%%PLAYERNAME", playerName), sender, false); + } +} diff --git a/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminBackup.java b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminBackup.java new file mode 100644 index 0000000..75e5395 --- /dev/null +++ b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminBackup.java @@ -0,0 +1,21 @@ +package net.licks92.wirelessredstone.commands.Admin; + +import net.licks92.wirelessredstone.commands.CommandInfo; +import net.licks92.wirelessredstone.commands.WirelessCommand; +import net.licks92.wirelessredstone.Utils; +import net.licks92.wirelessredstone.WirelessRedstone; +import org.bukkit.command.CommandSender; + +@CommandInfo(description = "Backup all wirelesschannels", usage = "", aliases = {"backup"}, + permission = "backupdata", canUseInConsole = true, canUseInCommandBlock = false) +public class AdminBackup extends WirelessCommand { + + @Override + public void onCommand(CommandSender sender, String[] args) { + if (WirelessRedstone.getStorage().backupData()) { + Utils.sendFeedback(WirelessRedstone.getStrings().dbBackupDone, sender, false); + } else { + Utils.sendFeedback(WirelessRedstone.getStrings().dbBackupFailed, sender, true); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminChangeLanguage.java b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminChangeLanguage.java new file mode 100644 index 0000000..c63eaad --- /dev/null +++ b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminChangeLanguage.java @@ -0,0 +1,26 @@ +package net.licks92.wirelessredstone.commands.Admin; + +import net.licks92.wirelessredstone.commands.CommandInfo; +import net.licks92.wirelessredstone.commands.WirelessCommand; +import net.licks92.wirelessredstone.ConfigManager; +import net.licks92.wirelessredstone.Utils; +import net.licks92.wirelessredstone.WirelessRedstone; +import org.bukkit.command.CommandSender; + +@CommandInfo(description = "Change response language", usage = "", aliases = {"changelanguage", "changel"}, + permission = "changelanguage", canUseInConsole = true, canUseInCommandBlock = false) +public class AdminChangeLanguage extends WirelessCommand { + + @Override + public void onCommand(CommandSender sender, String[] args) { + if (args.length == 0) { + Utils.sendFeedback(WirelessRedstone.getStrings().commandTooFewArguments, sender, true); + return; + } + + ConfigManager.getConfig().setValue(ConfigManager.ConfigPaths.LANGUAGE, args[0]); + WirelessRedstone.getInstance().resetStrings(); + + Utils.sendFeedback(WirelessRedstone.getStrings().commandLanguageChanged, sender, false); + } +} diff --git a/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminCommandManager.java b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminCommandManager.java new file mode 100644 index 0000000..dd413ec --- /dev/null +++ b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminCommandManager.java @@ -0,0 +1,216 @@ +package net.licks92.wirelessredstone.commands.Admin; + +import net.licks92.wirelessredstone.commands.CommandInfo; +import net.licks92.wirelessredstone.commands.WirelessCommand; +import net.licks92.wirelessredstone.commands.WirelessCommandTabCompletion; +import net.licks92.wirelessredstone.signs.SignType; +import net.licks92.wirelessredstone.storage.StorageType; +import net.licks92.wirelessredstone.Utils; +import net.licks92.wirelessredstone.WirelessRedstone; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandException; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.util.StringUtil; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Vector; +import java.util.logging.Level; +import java.util.stream.Collectors; + +public class AdminCommandManager implements CommandExecutor, TabCompleter { + + private final ArrayList cmds; + + public AdminCommandManager() { + cmds = new ArrayList<>(); + cmds.add(new AdminHelp()); + cmds.add(new AdminList()); + cmds.add(new AdminAddOwner()); + cmds.add(new AdminRemoveOwner()); + cmds.add(new AdminChangeLanguage()); +// cmds.add(new AdminConvert()); + cmds.add(new AdminBackup()); +// cmds.add(new AdminRestore()); + cmds.add(new AdminPurge()); + cmds.add(new AdminWipeData()); + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + if (cmd.getName().equalsIgnoreCase("wra") || cmd.getName().equalsIgnoreCase("wradmin")) { + if (args.length == 0) { + int timer = 0; + for (WirelessCommand gcmd : cmds) { + if (timer == 0) + Utils.sendFeedback(ChatColor.WHITE + "WirelessRedstone Admin help menu", sender, false); + if (timer >= 8) { + Utils.sendFeedback("Use /wra help 2 for the next page.", sender, false); //TODO: Add this string to the stringloader + break; + } + + CommandInfo info = gcmd.getClass().getAnnotation(CommandInfo.class); + if (sender.hasPermission("wirelessredstone.Admin." + info.permission())) { + Utils.sendCommandFeedback(ChatColor.GRAY + "- " + ChatColor.GREEN + "/wra " + + String.join("|", info.aliases()) + getCommandUsage(info) + ChatColor.WHITE + " - " + + ChatColor.GRAY + info.description(), sender, false); + timer++; + } + } + if (timer == 0) { + Utils.sendFeedback(WirelessRedstone.getStrings().permissionGeneral, sender, true, true); + } + + return true; + } + + WirelessCommand wanted = null; + + for (WirelessCommand gcmd : cmds) { + CommandInfo info = gcmd.getClass().getAnnotation(CommandInfo.class); + for (String alias : info.aliases()) { + if (alias.equals(args[0])) { + wanted = gcmd; + break; + } + } + } + + if (wanted == null) { + Utils.sendFeedback(WirelessRedstone.getStrings().commandNotFound, sender, true, true); + return true; + } + + if (!sender.hasPermission("wirelessredstone.Admin." + wanted.getClass().getAnnotation(CommandInfo.class).permission())) { + Utils.sendFeedback(WirelessRedstone.getStrings().permissionGeneral, sender, true, true); + return true; + } + + if (!(sender instanceof Player || sender instanceof ConsoleCommandSender) + && !wanted.getClass().getAnnotation(CommandInfo.class).canUseInCommandBlock()) { + WirelessRedstone.getWRLogger().info("Commandblocks are not allowed to run command: /wradmin " + args[0]); + return true; + } + + if (!wanted.getClass().getAnnotation(CommandInfo.class).canUseInConsole() && sender instanceof ConsoleCommandSender) { + Utils.sendFeedback(WirelessRedstone.getStrings().commandOnlyInGame, sender, true); + return true; + } + + Vector a = new Vector(Arrays.asList(args)); + a.remove(0); + args = a.toArray(new String[0]); + + try { + wanted.onCommand(sender, args); + } catch (RuntimeException ex) { + sender.sendMessage(ChatColor.RED + "An internal error occurred while attempting to perform this command"); + + CommandException commandException = new CommandException(ex.getMessage(), ex); + WirelessRedstone.getInstance().getLogger().log(Level.SEVERE, "An exception was raised", commandException); + } + } + + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + if (sender.isOp() || sender.hasPermission("wirelessredstone.Admin." + args[0])) { + List completions = new ArrayList<>(); + + if (args.length == 1) { + String partialCommand = args[0]; + List commands = new ArrayList<>(); + + for (WirelessCommand cmd : cmds) { + commands.add(cmd.getClass().getAnnotation(CommandInfo.class).aliases()[0]); + } + + StringUtil.copyPartialMatches(partialCommand, commands, completions); + } + + if (args.length >= 2) { + WirelessCommand wanted = null; + + for (WirelessCommand gcmd : cmds) { + CommandInfo info = gcmd.getClass().getAnnotation(CommandInfo.class); + for (String alias : info.aliases()) { + if (alias.equals(args[0])) { + wanted = gcmd; + break; + } + } + } + + if (wanted != null) { + if (args.length == 2) { + String partial = args[1]; + List availableCompletions = getPossibleTabCompletions(wanted, 0); + StringUtil.copyPartialMatches(partial, availableCompletions, completions); + } else if (args.length == 3) { + String partial = args[2]; + List availableCompletions = getPossibleTabCompletions(wanted, 1); + StringUtil.copyPartialMatches(partial, availableCompletions, completions); + } + } + } + + Collections.sort(completions); + + return completions; + } + + return null; + } + + public List getCommands() { + return cmds; + } + + private String getCommandUsage(CommandInfo info) { + if (info.usage().equalsIgnoreCase("")) + return ""; + else + return " " + info.usage(); + } + + private List getPossibleTabCompletions(WirelessCommand command, int index) { + List availableCompletions = new ArrayList<>(); + + WirelessCommandTabCompletion[] tabCompletion = command.getClass().getAnnotation(CommandInfo.class).tabCompletion(); + if (tabCompletion.length >= index + 1) { + if (tabCompletion[index] == WirelessCommandTabCompletion.BOOL) { + availableCompletions.add(Boolean.TRUE.toString()); + availableCompletions.add(Boolean.FALSE.toString()); + } else if (tabCompletion[index] == WirelessCommandTabCompletion.PLAYER) { + availableCompletions.addAll(Bukkit.getOnlinePlayers().stream() + .map(HumanEntity::getName) + .collect(Collectors.toList())); + } else if (tabCompletion[index] == WirelessCommandTabCompletion.CHANNEL) { + WirelessRedstone.getStorageManager().getChannels() + .forEach(c -> availableCompletions.add(c.getName())); + } else if (tabCompletion[index] == WirelessCommandTabCompletion.SIGNTYPE) { + for (SignType type : SignType.values()) { + availableCompletions.add(type.name()); + } + } else if (tabCompletion[index] == WirelessCommandTabCompletion.STORAGETYPE) { + for (StorageType type : StorageType.values()) { + availableCompletions.add(type.name()); + } + } + } + + return availableCompletions; + } + +} \ No newline at end of file diff --git a/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminHelp.java b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminHelp.java new file mode 100644 index 0000000..cb20b61 --- /dev/null +++ b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminHelp.java @@ -0,0 +1,72 @@ +package net.licks92.wirelessredstone.commands.Admin; + +import net.licks92.wirelessredstone.commands.CommandInfo; +import net.licks92.wirelessredstone.commands.WirelessCommand; +import net.licks92.wirelessredstone.Utils; +import net.licks92.wirelessredstone.WirelessRedstone; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.ArrayList; + +@CommandInfo(description = "Get admin help page", usage = "[page]", aliases = {"help", "h"}, + permission = "isAdmin", canUseInConsole = true, canUseInCommandBlock = false) +public class AdminHelp extends WirelessCommand { + + @Override + public void onCommand(CommandSender sender, String[] args) { + int page = 1; + if (args.length > 0) { + try { + page = Integer.parseInt(args[0]); + } catch (NumberFormatException ex) { + Utils.sendFeedback(WirelessRedstone.getStrings().commandInferiorZero, sender, true); + return; + } + } + + ArrayList commandList = new ArrayList<>(); + for (WirelessCommand gcmd : WirelessRedstone.getAdminCommandManager().getCommands()) { + CommandInfo info = gcmd.getClass().getAnnotation(CommandInfo.class); + commandList.add(ChatColor.GRAY + "- " + ChatColor.GREEN + "/wra " + + String.join(":", info.aliases()) + " " + + info.usage() + ChatColor.WHITE + " - " + + ChatColor.GRAY + info.description()); + } + + int commandListLength = WirelessRedstone.getAdminCommandManager().getCommands().size(); + int maxItemsPerPage = 8; + int totalPages = 1; + + for (int i = 0; i < commandListLength / maxItemsPerPage; i++) { + totalPages++; + } + + if (commandListLength % maxItemsPerPage == 0) { + totalPages--; + } + + if (page > totalPages) { + if (totalPages > 1) + Utils.sendFeedback("There are only " + totalPages + " pages.", sender, true); + else + Utils.sendFeedback("There is only 1 page.", sender, true); + return; + } + + int currentItem = ((page * maxItemsPerPage) - maxItemsPerPage); + // 2*3 = 6 ; 6 - 3 = 3 + + Utils.sendFeedback(ChatColor.WHITE + "WirelessRedstone admin help menu", sender, false); + Utils.sendFeedback(ChatColor.WHITE + "Page " + page + " of " + totalPages, sender, false); + + if (totalPages == 0) { + Utils.sendFeedback(WirelessRedstone.getStrings().commandNoData, sender, true); + } else { + for (int i = currentItem; i < (currentItem + maxItemsPerPage); i++) { + if (!(i >= commandListLength)) + Utils.sendCommandFeedback(commandList.get(i), sender, false); + } + } + } +} diff --git a/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminList.java b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminList.java new file mode 100644 index 0000000..81666e7 --- /dev/null +++ b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminList.java @@ -0,0 +1,69 @@ +package net.licks92.wirelessredstone.commands.Admin; + +import net.licks92.wirelessredstone.commands.CommandInfo; +import net.licks92.wirelessredstone.commands.WirelessCommand; +import net.licks92.wirelessredstone.signs.WirelessChannel; +import net.licks92.wirelessredstone.Utils; +import net.licks92.wirelessredstone.WirelessRedstone; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.ArrayList; + +@CommandInfo(description = "Get all channels", usage = "[page]", aliases = {"list", "l"}, + permission = "list", canUseInConsole = true, canUseInCommandBlock = false) +public class AdminList extends WirelessCommand { + + @Override + public void onCommand(CommandSender sender, String[] args) { + int page = 1; + if (args.length > 0) { + try { + page = Integer.parseInt(args[0]); + } catch (NumberFormatException ex) { + Utils.sendFeedback(WirelessRedstone.getStrings().commandInferiorZero, sender, true); + return; + } + } + + ArrayList channelList = new ArrayList<>(); + for (WirelessChannel channel : WirelessRedstone.getStorageManager().getChannels()) { + channelList.add(ChatColor.GRAY + "- " + ChatColor.GREEN + channel.getName()); + } + + int channelListLength = WirelessRedstone.getStorageManager().getChannels().size(); + int maxItemsPerPage = 10; + int totalPages = 1; + + for (int i = 0; i < channelListLength / maxItemsPerPage; i++) { + totalPages++; + } + + if (channelListLength % maxItemsPerPage == 0) { + totalPages--; + } + + if (page > totalPages) { + if (totalPages > 1) + Utils.sendFeedback("There are only " + totalPages + " pages.", sender, true); + else + Utils.sendFeedback("There is only 1 page.", sender, true); + return; + } + + int currentItem = ((page * maxItemsPerPage) - maxItemsPerPage); + // 2*3 = 6 ; 6 - 3 = 3 + + Utils.sendFeedback(ChatColor.WHITE + "WirelessRedstone channels", sender, false); + Utils.sendFeedback(ChatColor.WHITE + "Page " + page + " of " + totalPages, sender, false); + + if (totalPages == 0) { + Utils.sendFeedback(WirelessRedstone.getStrings().commandNoData, sender, true); + } else { + for (int i = currentItem; i < (currentItem + maxItemsPerPage); i++) { + if (!(i >= channelListLength)) + Utils.sendCommandFeedback(channelList.get(i), sender, false); + } + } + } +} diff --git a/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminPurge.java b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminPurge.java new file mode 100644 index 0000000..b88dea2 --- /dev/null +++ b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminPurge.java @@ -0,0 +1,21 @@ +package net.licks92.wirelessredstone.commands.Admin; + +import net.licks92.wirelessredstone.commands.CommandInfo; +import net.licks92.wirelessredstone.commands.WirelessCommand; +import net.licks92.wirelessredstone.Utils; +import net.licks92.wirelessredstone.WirelessRedstone; +import org.bukkit.command.CommandSender; + +@CommandInfo(description = "Purge database", usage = "", aliases = {"purge"}, + permission = "purgedata", canUseInConsole = true, canUseInCommandBlock = false) +public class AdminPurge extends WirelessCommand { + + @Override + public void onCommand(CommandSender sender, String[] args) { + if (WirelessRedstone.getStorage().purgeData() >= 0) { + Utils.sendFeedback(WirelessRedstone.getStrings().dbPurgeDone, sender, false); + } else { + Utils.sendFeedback(WirelessRedstone.getStrings().dbPurgeFailed, sender, true); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminRemoveOwner.java b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminRemoveOwner.java new file mode 100644 index 0000000..5cd68f7 --- /dev/null +++ b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminRemoveOwner.java @@ -0,0 +1,48 @@ +package net.licks92.wirelessredstone.commands.Admin; + +import net.licks92.wirelessredstone.commands.CommandInfo; +import net.licks92.wirelessredstone.commands.WirelessCommand; +import net.licks92.wirelessredstone.commands.WirelessCommandTabCompletion; +import net.licks92.wirelessredstone.signs.WirelessChannel; +import net.licks92.wirelessredstone.Utils; +import net.licks92.wirelessredstone.WirelessRedstone; +import org.bukkit.command.CommandSender; + +@CommandInfo(description = "Remove owner from WirelessChannel", usage = " ", aliases = {"removeowner"}, + tabCompletion = {WirelessCommandTabCompletion.CHANNEL, WirelessCommandTabCompletion.PLAYER}, + permission = "removeOwner", canUseInConsole = true, canUseInCommandBlock = false) +public class AdminRemoveOwner extends WirelessCommand { + + @Override + public void onCommand(CommandSender sender, String[] args) { + if (args.length < 2) { + Utils.sendFeedback(WirelessRedstone.getStrings().commandTooFewArguments, sender, true); + return; + } + + String channelName = args[0]; + String playerName = args[1]; + + if (!hasAccessToChannel(sender, channelName)) { + Utils.sendFeedback(WirelessRedstone.getStrings().permissionChannelAccess, sender, true); + return; + } + + WirelessChannel channel = WirelessRedstone.getStorageManager().getChannel(channelName); + if (channel == null) { + Utils.sendFeedback(WirelessRedstone.getStrings().channelNotFound, sender, true); + return; + } + + if (!channel.getOwners().contains(playerName)) { + Utils.sendFeedback(WirelessRedstone.getStrings().channelAlreadyOwner, sender, true); + return; + } + + channel.removeOwner(playerName); + WirelessRedstone.getStorage().updateChannel(channelName, channel); + + WirelessRedstone.getWRLogger().info("Channel " + channelName + " has been updated. Player " + playerName + " has been removed to the owner list."); + Utils.sendFeedback(WirelessRedstone.getStrings().channelOwnerRemoved.replaceAll("%%PLAYERNAME", playerName), sender, false); + } +} diff --git a/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminWipeData.java b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminWipeData.java new file mode 100644 index 0000000..9cd9b71 --- /dev/null +++ b/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminWipeData.java @@ -0,0 +1,47 @@ +package net.licks92.wirelessredstone.commands.Admin; + +import net.licks92.wirelessredstone.commands.CommandInfo; +import net.licks92.wirelessredstone.commands.WirelessCommand; +import net.licks92.wirelessredstone.Utils; +import net.licks92.wirelessredstone.WirelessRedstone; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.UUID; + +@CommandInfo(description = "Wipe all channels", usage = "", aliases = {"wipedata"}, + permission = "wipeData", canUseInConsole = true, canUseInCommandBlock = false) +public class AdminWipeData extends WirelessCommand { + + private final ArrayList confirmation = new ArrayList<>(); + + @Override + public void onCommand(final CommandSender sender, String[] args) { + UUID uuid = UUID.fromString("00000000-0000-0000-0000-000000000000"); + + if (sender instanceof Player) { + uuid = ((Player) sender).getUniqueId(); + } + + if (!confirmation.contains(uuid)) { + Utils.sendFeedback(ChatColor.BOLD + WirelessRedstone.getStrings().dbDeleteConfirm, sender, true); + + confirmation.add(uuid); + + final UUID finalUuid = uuid; + Bukkit.getScheduler().runTaskLater(WirelessRedstone.getInstance(), () -> confirmation.remove(finalUuid), 20 * 15); + return; + } + + confirmation.remove(uuid); + + if (WirelessRedstone.getStorage().wipeData()) { + Utils.sendFeedback(WirelessRedstone.getStrings().dbDeleteDone, sender, false); + } else { + Utils.sendFeedback(WirelessRedstone.getStrings().dbDeleteFailed, sender, true); + } + } +} \ No newline at end of file