Dateien nach "src/main/java/net/licks92/wirelessredstone/commands/Admin" hochladen

This commit is contained in:
2025-08-15 19:21:02 +00:00
parent 64f14883a4
commit 8808b0fd8e
9 changed files with 568 additions and 0 deletions

View File

@@ -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 = "<channel> <playername>", 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);
}
}

View File

@@ -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);
}
}
}

View File

@@ -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 = "<language>", 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);
}
}

View File

@@ -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<WirelessCommand> 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<String> a = new Vector<String>(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<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
if (sender.isOp() || sender.hasPermission("wirelessredstone.Admin." + args[0])) {
List<String> completions = new ArrayList<>();
if (args.length == 1) {
String partialCommand = args[0];
List<String> 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<String> availableCompletions = getPossibleTabCompletions(wanted, 0);
StringUtil.copyPartialMatches(partial, availableCompletions, completions);
} else if (args.length == 3) {
String partial = args[2];
List<String> availableCompletions = getPossibleTabCompletions(wanted, 1);
StringUtil.copyPartialMatches(partial, availableCompletions, completions);
}
}
}
Collections.sort(completions);
return completions;
}
return null;
}
public List<WirelessCommand> getCommands() {
return cmds;
}
private String getCommandUsage(CommandInfo info) {
if (info.usage().equalsIgnoreCase(""))
return "";
else
return " " + info.usage();
}
private List<String> getPossibleTabCompletions(WirelessCommand command, int index) {
List<String> 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;
}
}

View File

@@ -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<String> 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);
}
}
}
}

View File

@@ -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<String> 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);
}
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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 = "<channel> <playername>", 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);
}
}

View File

@@ -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<UUID> 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);
}
}
}