diff --git a/pom.xml b/pom.xml index 372361c..8567d76 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ com.songoda UltimateModeration 4.0.0 - 1.2.9 + 2 clean install UltimateModeration-${project.version} @@ -97,7 +97,7 @@ org.spigotmc spigot - 1.15 + 1.16.1 com.github.MilkBowl diff --git a/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java b/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java index 72eddff..058b895 100644 --- a/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java +++ b/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java @@ -6,13 +6,19 @@ import com.songoda.core.commands.CommandManager; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.compatibility.ServerVersion; import com.songoda.core.configuration.Config; +import com.songoda.core.database.DataMigrationManager; +import com.songoda.core.database.DatabaseConnector; +import com.songoda.core.database.MySQLConnector; +import com.songoda.core.database.SQLiteConnector; import com.songoda.core.gui.GuiManager; import com.songoda.ultimatemoderation.commands.*; +import com.songoda.ultimatemoderation.database.DataManager; +import com.songoda.ultimatemoderation.database.migrations._1_InitialMigration; import com.songoda.ultimatemoderation.listeners.*; +import com.songoda.ultimatemoderation.moderate.ModerationManager; import com.songoda.ultimatemoderation.punish.AppliedPunishment; import com.songoda.ultimatemoderation.punish.PunishmentNote; import com.songoda.ultimatemoderation.punish.PunishmentType; -import com.songoda.ultimatemoderation.punish.player.PlayerPunishData; import com.songoda.ultimatemoderation.punish.player.PunishmentManager; import com.songoda.ultimatemoderation.punish.template.Template; import com.songoda.ultimatemoderation.punish.template.TemplateManager; @@ -27,11 +33,14 @@ import com.songoda.ultimatemoderation.tickets.TicketManager; import com.songoda.ultimatemoderation.tickets.TicketResponse; import com.songoda.ultimatemoderation.tickets.TicketStatus; import com.songoda.ultimatemoderation.utils.Methods; -import com.songoda.ultimatemoderation.utils.gui.AbstractGUI; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.plugin.PluginManager; +import java.io.File; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; public class UltimateModeration extends SongodaPlugin { @@ -43,8 +52,10 @@ public class UltimateModeration extends SongodaPlugin { private CommandManager commandManager; private PunishmentManager punishmentManager; private StaffChatManager staffChatManager; + private ModerationManager moderationManager; - private Storage storage; + private DatabaseConnector databaseConnector; + private DataManager dataManager; public static UltimateModeration getInstance() { return INSTANCE; @@ -57,8 +68,6 @@ public class UltimateModeration extends SongodaPlugin { @Override public void onPluginDisable() { - storage.doSave(); - this.storage.closeConnection(); } @Override @@ -80,23 +89,17 @@ public class UltimateModeration extends SongodaPlugin { ); this.commandManager.addCommand(new CommandBan(this)); this.commandManager.addCommand(new CommandClearChat(this)); - this.commandManager.addCommand(new CommandCommandSpy(this)); - this.commandManager.addCommand(new CommandFreeze(this)); - this.commandManager.addCommand(new CommandInvSee(this)); this.commandManager.addCommand(new CommandKick(this)); this.commandManager.addCommand(new CommandMute(this)); this.commandManager.addCommand(new CommandRandomPlayer(this)); - this.commandManager.addCommand(new CommandRevive(this)); this.commandManager.addCommand(new CommandRunTemplate(this)); this.commandManager.addCommand(new CommandSlowMode(this)); - this.commandManager.addCommand(new CommandSpy(this)); this.commandManager.addCommand(new CommandStaffChat(this)); this.commandManager.addCommand(new CommandTicket(this)); this.commandManager.addCommand(new CommandToggleChat(this)); this.commandManager.addCommand(new CommandUnBan(this)); this.commandManager.addCommand(new CommandUnMute(this)); this.commandManager.addCommand(new CommandVanish(this)); - this.commandManager.addCommand(new CommandViewEnderChest(this)); this.commandManager.addCommand(new CommandWarn(this)); // Setup Managers @@ -104,14 +107,138 @@ public class UltimateModeration extends SongodaPlugin { this.templateManager = new TemplateManager(); this.punishmentManager = new PunishmentManager(); this.staffChatManager = new StaffChatManager(); + this.moderationManager = new ModerationManager(this); - // Load data - this.checkStorage(); - Bukkit.getScheduler().scheduleSyncDelayedTask(this, this::loadFromFile, 1L); + // Database stuff, go! + try { + if (Settings.MYSQL_ENABLED.getBoolean()) { + String hostname = Settings.MYSQL_HOSTNAME.getString(); + int port = Settings.MYSQL_PORT.getInt(); + String database = Settings.MYSQL_DATABASE.getString(); + String username = Settings.MYSQL_USERNAME.getString(); + String password = Settings.MYSQL_PASSWORD.getString(); + boolean useSSL = Settings.MYSQL_USE_SSL.getBoolean(); + + this.databaseConnector = new MySQLConnector(this, hostname, port, database, username, password, useSSL); + this.getLogger().info("Data handler connected using MySQL."); + } else { + this.databaseConnector = new SQLiteConnector(this); + this.getLogger().info("Data handler connected using SQLite."); + } + } catch (Exception ex) { + this.getLogger().severe("Fatal error trying to connect to database. Please make sure all your connection settings are correct and try again. Plugin has been disabled."); + this.emergencyStop(); + } + + this.dataManager = new DataManager(this.databaseConnector, this); + DataMigrationManager dataMigrationManager = new DataMigrationManager(this.databaseConnector, this.dataManager, + new _1_InitialMigration()); + dataMigrationManager.runMigrations(); + + Bukkit.getScheduler().runTaskLaterAsynchronously(this, () -> { + // Legacy Data + File folder = getDataFolder(); + File dataFile = new File(folder, "data.yml"); + + boolean converted = false; + if (dataFile.exists()) { + converted = true; + Storage storage = new StorageYaml(this); + console.sendMessage("[" + getDescription().getName() + "] " + ChatColor.RED + "Conversion process starting DO NOT turn off your server... " + + "UltimateModeration hasn't fully loaded yet so its best users don't interact with the plugin until conversion completes."); + if (storage.containsGroup("templates")) { + for (StorageRow row : storage.getRowsByGroup("templates")) { + Template template = new Template(PunishmentType.valueOf(row.get("type").asString()), + row.get("duration").asLong(), + row.get("reason").asString(), + UUID.fromString(row.get("creator").asString()), + row.get("name").asString()); + dataManager.createTemplate(template); + } + } + + if (storage.containsGroup("punishments")) { + for (StorageRow row : storage.getRowsByGroup("punishments")) { + AppliedPunishment appliedPunishment = new AppliedPunishment(PunishmentType.valueOf(row.get("type").asString()), + row.get("duration").asLong(), + row.get("reason").asString(), + UUID.fromString(row.get("victim").asString()), + row.get("punisher").asObject() == null ? null : UUID.fromString(row.get("punisher").asString()), + row.get("expiration").asLong()); + dataManager.createAppliedPunishment(appliedPunishment); + } + } + + if (storage.containsGroup("notes")) { + for (StorageRow row : storage.getRowsByGroup("notes")) { + PunishmentNote note = new PunishmentNote(row.get("note").asString(), + UUID.fromString(row.get("author").asString()), + UUID.fromString(row.get("subject").asString()), + row.get("creation").asLong()); + dataManager.createNote(note); + } + } + + Map tickets = new HashMap<>(); + if (storage.containsGroup("tickets")) { + for (StorageRow row : storage.getRowsByGroup("tickets")) { + + int id = Integer.parseInt(row.get("id").asString()); + Ticket ticket = new Ticket( + UUID.fromString(row.get("player").asString()), + row.get("subject").asString(), + row.get("type").asString()); + ticket.setId(id); + ticket.setLocation(Methods.unserializeLocation(row.get("location").asString())); + ticket.setStatus(TicketStatus.valueOf(row.get("status").asString())); + tickets.put(id, ticket); + } + } + + if (storage.containsGroup("ticketresponses")) { + for (StorageRow row : storage.getRowsByGroup("ticketresponses")) { + int id = row.get("ticketid").asInt(); + TicketResponse ticketResponse = new TicketResponse( + UUID.fromString(row.get("author").asString()), + row.get("message").asString(), + Long.parseLong(row.get("posted").asString())); + + tickets.get(id).addResponse(ticketResponse); + ticketResponse.setTicketId(id); + } + } + for (Ticket ticket : tickets.values()) + dataManager.createTicket(ticket); + } + dataFile.delete(); + + final boolean convrted = converted; + getDataManager().queueAsync(() -> { + if (convrted) + console.sendMessage("[" + getDescription().getName() + "] " + ChatColor.GREEN + "Conversion complete :)"); + // Load data from DB + this.dataManager.getTemplates((templates) -> { + for (Template template : templates) { + this.templateManager.addTemplate(template); + } + }); + this.dataManager.getAppliedPunishments((appliedPunishments) -> { + for (AppliedPunishment punishment : appliedPunishments) + this.punishmentManager.getPlayer(punishment.getVictim()).addPunishment(punishment); + }); + this.dataManager.getNotes((notes) -> { + for (PunishmentNote note : notes) + this.punishmentManager.getPlayer(note.getSubject()).addNotes(note); + }); + this.dataManager.getTickets((tickets) -> { + for (Ticket ticket : tickets.values()) + this.ticketManager.addTicket(ticket); + }); + }, "create"); + }, 20); // Register Listeners guiManager.init(); - AbstractGUI.initializeListeners(this); PluginManager pluginManager = Bukkit.getPluginManager(); pluginManager.registerEvents(new CommandListener(this), this); pluginManager.registerEvents(new DeathListener(this), this); @@ -130,85 +257,6 @@ public class UltimateModeration extends SongodaPlugin { // Start tasks SlowModeTask.startTask(this); - - int timeout = Settings.AUTOSAVE.getInt() * 60 * 20; - Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> storage.doSave(), timeout, timeout); - } - - private void checkStorage() { - this.storage = new StorageYaml(this); - } - - private void loadFromFile() { - if (storage.containsGroup("templates")) { - for (StorageRow row : storage.getRowsByGroup("templates")) { - Template template = new Template(PunishmentType.valueOf(row.get("type").asString()), - row.get("duration").asLong(), - row.get("reason").asString(), - UUID.fromString(row.get("creator").asString()), - row.get("name").asString(), - UUID.fromString(row.get("uuid").asString())); - templateManager.addTemplate(template); - } - } - if (storage.containsGroup("punishments")) { - for (StorageRow row : storage.getRowsByGroup("punishments")) { - UUID playerUUID = UUID.fromString(row.get("victim").asString()); - AppliedPunishment appliedPunishment = new AppliedPunishment(PunishmentType.valueOf(row.get("type").asString()), - row.get("duration").asLong(), - row.get("reason").asString(), - UUID.fromString(row.get("victim").asString()), - row.get("punisher").asObject() == null ? null : UUID.fromString(row.get("punisher").asString()), - row.get("expiration").asLong(), - playerUUID); - PlayerPunishData playerPunishData = getPunishmentManager().getPlayer(playerUUID); - playerPunishData.addPunishment(appliedPunishment); - playerPunishData.audit(); - } - } - - if (storage.containsGroup("notes")) { - for (StorageRow row : storage.getRowsByGroup("notes")) { - UUID playerUUID = UUID.fromString(row.get("subject").asString()); - PunishmentNote note = new PunishmentNote(UUID.fromString(row.get("uuid").asString()), - row.get("note").asString(), - UUID.fromString(row.get("author").asString()), - UUID.fromString(row.get("subject").asString()), - row.get("creation").asLong()); - - PlayerPunishData playerPunishData = getPunishmentManager().getPlayer(playerUUID); - playerPunishData.addNotes(note); - } - } - - if (storage.containsGroup("tickets")) { - for (StorageRow row : storage.getRowsByGroup("tickets")) { - - int id = Integer.parseInt(row.get("id").asString()); - Ticket ticket = new Ticket( - UUID.fromString(row.get("player").asString()), - row.get("subject").asString(), - row.get("type").asString()); - ticket.setTicketId(id); - ticket.setLocation(Methods.unserializeLocation(row.get("location").asString())); - ticket.setStatus(TicketStatus.valueOf(row.get("status").asString())); - ticketManager.addTicket(ticket, id); - } - } - - if (storage.containsGroup("ticketresponses")) { - for (StorageRow row : storage.getRowsByGroup("ticketresponses")) { - int id = row.get("ticketid").asInt(); - TicketResponse ticketResponse = new TicketResponse( - UUID.fromString(row.get("author").asString()), - row.get("message").asString(), - Long.parseLong(row.get("posted").asString())); - ticketResponse.setTicketId(id); - ticketManager.getTicket(id).addResponse(ticketResponse); - - } - } - storage.doSave(); } @Override @@ -242,7 +290,19 @@ public class UltimateModeration extends SongodaPlugin { return staffChatManager; } + public DataManager getDataManager() { + return dataManager; + } + + public DatabaseConnector getDatabaseConnector() { + return databaseConnector; + } + public GuiManager getGuiManager() { return guiManager; } + + public ModerationManager getModerationManager() { + return moderationManager; + } } diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandBan.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandBan.java index 07abdc4..57c3a3e 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandBan.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandBan.java @@ -67,7 +67,7 @@ public class CommandBan extends AbstractCommand { long durationFinal = duration; Bukkit.getScheduler().runTaskAsynchronously(instance, () -> { - if (sender instanceof Player && VaultPermissions.hasPermission(Bukkit.getWorlds().get(0).getName(), player, "um.ban.exempt")) { + if (sender instanceof Player && VaultPermissions.hasPermission(player, "um.ban.exempt")) { instance.getLocale().newMessage("You cannot ban this player.").sendPrefixedMessage(sender); return; } diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandCommandSpy.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandCommandSpy.java deleted file mode 100644 index def8037..0000000 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandCommandSpy.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.songoda.ultimatemoderation.commands; - -import com.songoda.core.commands.AbstractCommand; -import com.songoda.ultimatemoderation.UltimateModeration; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -public class CommandCommandSpy extends AbstractCommand { - - private UltimateModeration instance; - private static List inSpy = new ArrayList<>(); - - public CommandCommandSpy(UltimateModeration instance) { - super(CommandType.CONSOLE_OK, "CommandSpy"); - this.instance = instance; - } - - public static boolean isSpying(Player player) { - return !inSpy.contains(player.getUniqueId()); - } - - @Override - protected ReturnType runCommand(CommandSender sender, String... args) { - Player player = ((Player) sender); - - if (inSpy.contains(player.getUniqueId())) { - inSpy.remove(player.getUniqueId()); - instance.getLocale().getMessage("command.commandspy.toggleOn").sendPrefixedMessage(player); - } else { - inSpy.add(player.getUniqueId()); - instance.getLocale().getMessage("command.commandspy.toggleOff").sendPrefixedMessage(player); - } - return ReturnType.SUCCESS; - } - - @Override - protected List onTab(CommandSender sender, String... args) { - return null; - } - - @Override - public String getPermissionNode() { - return "Um.commandspy"; - } - - @Override - public String getSyntax() { - return "/Commandspy"; - } - - @Override - public String getDescription() { - return "Allows you to see inside of a players enderchest."; - } -} diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandFreeze.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandFreeze.java deleted file mode 100644 index 2f2dcde..0000000 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandFreeze.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.songoda.ultimatemoderation.commands; - -import com.songoda.core.commands.AbstractCommand; -import com.songoda.ultimatemoderation.UltimateModeration; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -public class CommandFreeze extends AbstractCommand { - - private UltimateModeration instance; - private static List frozen = new ArrayList<>(); - - public CommandFreeze(UltimateModeration instance) { - super(CommandType.CONSOLE_OK, "Freeze"); - this.instance = instance; - } - - public static void freeze(OfflinePlayer player, CommandSender sender) { - UltimateModeration instance = UltimateModeration.getInstance(); - if (frozen.contains(player.getUniqueId())) { - frozen.remove(player.getUniqueId()); - instance.getLocale().getMessage("command.freeze.remove") - .processPlaceholder("player", player.getPlayer().getDisplayName()).sendPrefixedMessage(sender); - instance.getLocale().getMessage("command.freeze.alertremove").sendPrefixedMessage(sender); - } else { - frozen.add(player.getUniqueId()); - instance.getLocale().getMessage("command.freeze.add") - .processPlaceholder("player", player.getPlayer().getDisplayName()).sendPrefixedMessage(sender); - instance.getLocale().getMessage("command.freeze.alertadd").sendPrefixedMessage(player.getPlayer()); - } - } - - public static boolean isFrozen(OfflinePlayer player) { - return frozen.contains(player.getUniqueId()); - } - - @Override - protected ReturnType runCommand(CommandSender sender, String... args) { - if (args.length != 1) - return ReturnType.SYNTAX_ERROR; - - Player player = Bukkit.getPlayer(args[0]); - - if (player == null) { - instance.getLocale().newMessage("That player does not exist or is not online.").sendPrefixedMessage(sender); - return ReturnType.FAILURE; - } - - if (sender instanceof Player && player.hasPermission("um.freeze.exempt")) { - instance.getLocale().newMessage("That player cannot be frozen.").sendPrefixedMessage(sender); - return ReturnType.FAILURE; - } - - freeze(player, sender); - - return ReturnType.SUCCESS; - } - - @Override - protected List onTab(CommandSender sender, String... args) { - if (args.length == 1) { - List players = new ArrayList<>(); - for (Player player : Bukkit.getOnlinePlayers()) { - players.add(player.getName()); - } - return players; - } - return null; - } - - @Override - public String getPermissionNode() { - return "um.freeze"; - } - - @Override - public String getSyntax() { - return "/Freeze "; - } - - @Override - public String getDescription() { - return "Allows you to freeze a player."; - } -} diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandInvSee.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandInvSee.java deleted file mode 100644 index b2ab774..0000000 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandInvSee.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.songoda.ultimatemoderation.commands; - -import com.songoda.core.commands.AbstractCommand; -import com.songoda.ultimatemoderation.UltimateModeration; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; - -public class CommandInvSee extends AbstractCommand { - - private UltimateModeration instance; - - public CommandInvSee(UltimateModeration instance) { - super(CommandType.PLAYER_ONLY, "InvSee"); - this.instance = instance; - } - - @Override - protected ReturnType runCommand(CommandSender sender, String... args) { - if (args.length != 1) - return ReturnType.SYNTAX_ERROR; - - Player player = Bukkit.getPlayer(args[0]); - - if (player == null) { - instance.getLocale().newMessage("That player does not exist or is not online").sendPrefixedMessage(sender); - return ReturnType.FAILURE; - } - - if (player.hasPermission("um.invsee.exempt")) { - instance.getLocale().newMessage("You cannot invsee that player.").sendPrefixedMessage(sender); - return ReturnType.FAILURE; - } - - ((Player) sender).openInventory(player.getInventory()); - return ReturnType.SUCCESS; - } - - @Override - protected List onTab(CommandSender sender, String... args) { - if (args.length == 1) { - List players = new ArrayList<>(); - for (Player player : Bukkit.getOnlinePlayers()) { - players.add(player.getName()); - } - return players; - } - return null; - } - - @Override - public String getPermissionNode() { - return "um.invsee"; - } - - @Override - public String getSyntax() { - return "/InvSee "; - } - - @Override - public String getDescription() { - return "Allows you to see inside of a players inventory."; - } -} diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandKick.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandKick.java index a4bedf2..28ff94a 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandKick.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandKick.java @@ -13,7 +13,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -public class CommandKick extends AbstractCommand { +public class CommandKick extends AbstractCommand { private UltimateModeration instance; diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandMute.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandMute.java index 340b4fc..6675ca4 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandMute.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandMute.java @@ -54,7 +54,7 @@ public class CommandMute extends AbstractCommand { return ReturnType.FAILURE; } - if (sender instanceof Player && VaultPermissions.hasPermission(Bukkit.getWorlds().get(0).getName(), player, "um.mute.exempt")) { + if (sender instanceof Player && VaultPermissions.hasPermission(player, "um.mute.exempt")) { instance.getLocale().newMessage("You cannot mute that player.").sendPrefixedMessage(sender); return ReturnType.FAILURE; } diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandRandomPlayer.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandRandomPlayer.java index 8775981..f3398fd 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandRandomPlayer.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandRandomPlayer.java @@ -26,7 +26,7 @@ public class CommandRandomPlayer extends AbstractCommand { players.remove(sender); if (players.size() == 0) { - instance.getLocale().newMessage("&c You are the only one online!").sendPrefixedMessage(sender); + instance.getLocale().newMessage("&cYou are the only one online!").sendPrefixedMessage(sender); return ReturnType.FAILURE; } diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandRevive.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandRevive.java deleted file mode 100644 index f73b270..0000000 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandRevive.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.songoda.ultimatemoderation.commands; - -import com.songoda.core.commands.AbstractCommand; -import com.songoda.ultimatemoderation.UltimateModeration; -import com.songoda.ultimatemoderation.listeners.DeathListener; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class CommandRevive extends AbstractCommand { - - private UltimateModeration instance; - - public CommandRevive(UltimateModeration instance) { - super(CommandType.CONSOLE_OK, "Revive"); - this.instance = instance; - } - - @Override - protected ReturnType runCommand(CommandSender sender, String... args) { - if (args.length != 1) - return ReturnType.SYNTAX_ERROR; - - Player player = Bukkit.getPlayer(args[0]); - - if (player == null) { - instance.getLocale().newMessage("That player does not exist or is not online.").sendPrefixedMessage(sender); - return ReturnType.FAILURE; - } - - if (!(revive(player, sender))) return ReturnType.FAILURE; - - instance.getLocale().getMessage("command.revive.revived").sendPrefixedMessage(player); - instance.getLocale().getMessage("command.revive.success") - .processPlaceholder("player", player.getName()).sendPrefixedMessage(sender); - return ReturnType.SUCCESS; - } - - @Override - protected List onTab(CommandSender sender, String... args) { - if (args.length == 1) { - List players = new ArrayList<>(); - for (Player player : Bukkit.getOnlinePlayers()) { - players.add(player.getName()); - } - return players; - } - return null; - } - - public static boolean revive(Player player, CommandSender sender) { - UltimateModeration instance = UltimateModeration.getInstance(); - List drops = DeathListener.getLastDrop(player); - - if (drops == null) { - instance.getLocale().getMessage("command.revive.noloot").sendPrefixedMessage(sender); - return false; - } - - ItemStack[] dropArr = new ItemStack[drops.size()]; - dropArr = drops.toArray(dropArr); - - HashMap leftOver = player.getInventory().addItem(dropArr); - - for (ItemStack item : leftOver.values()) { - player.getWorld().dropItemNaturally(player.getLocation(), item); - } - return true; - } - - @Override - public String getPermissionNode() { - return "um.revive"; - } - - @Override - public String getSyntax() { - return "/Revive "; - } - - @Override - public String getDescription() { - return "Allows you to revive a player."; - } -} diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandRunTemplate.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandRunTemplate.java index b7ec2e8..e5283a4 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandRunTemplate.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandRunTemplate.java @@ -62,7 +62,7 @@ public class CommandRunTemplate extends AbstractCommand { } else if (args.length == 2) { List lines = new ArrayList<>(); for (Template template : instance.getTemplateManager().getTemplates().values()) { - lines.add(template.getTemplateName()); + lines.add(template.getName()); } } return null; diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandTicket.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandTicket.java index 79f0092..fe4d873 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandTicket.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandTicket.java @@ -2,7 +2,7 @@ package com.songoda.ultimatemoderation.commands; import com.songoda.core.commands.AbstractCommand; import com.songoda.ultimatemoderation.UltimateModeration; -import com.songoda.ultimatemoderation.gui.GUITicketManager; +import com.songoda.ultimatemoderation.gui.TicketManagerGui; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -21,7 +21,7 @@ public class CommandTicket extends AbstractCommand { protected ReturnType runCommand(CommandSender sender, String... args) { Player senderP = ((Player) sender); - new GUITicketManager(instance, senderP, senderP); + new TicketManagerGui(instance, senderP, senderP); return ReturnType.SUCCESS; } diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandUltimateModeration.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandUltimateModeration.java index 616acb7..710f0c3 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandUltimateModeration.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandUltimateModeration.java @@ -2,7 +2,7 @@ package com.songoda.ultimatemoderation.commands; import com.songoda.core.commands.AbstractCommand; import com.songoda.ultimatemoderation.UltimateModeration; -import com.songoda.ultimatemoderation.gui.GUIPlayers; +import com.songoda.ultimatemoderation.gui.MainGui; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -19,7 +19,7 @@ public class CommandUltimateModeration extends AbstractCommand { @Override protected ReturnType runCommand(CommandSender sender, String... args) { - new GUIPlayers(instance, (Player) sender); + instance.getGuiManager().showGUI((Player) sender, new MainGui(instance, (Player) sender)); return ReturnType.SUCCESS; } @@ -40,6 +40,6 @@ public class CommandUltimateModeration extends AbstractCommand { @Override public String getDescription() { - return "Displays this page."; + return "Displays the moderation panel."; } } diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandUnBan.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandUnBan.java index 191845c..3aa7845 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandUnBan.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandUnBan.java @@ -72,6 +72,6 @@ public class CommandUnBan extends AbstractCommand { @Override public String getDescription() { - return "Allows you to ban players."; + return "Allows you to unban players."; } } diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandViewEnderChest.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandViewEnderChest.java deleted file mode 100644 index 518c1e9..0000000 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandViewEnderChest.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.songoda.ultimatemoderation.commands; - -import com.songoda.core.commands.AbstractCommand; -import com.songoda.ultimatemoderation.UltimateModeration; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; - -public class CommandViewEnderChest extends AbstractCommand { - - private UltimateModeration instance; - - public CommandViewEnderChest(UltimateModeration instance) { - super(CommandType.PLAYER_ONLY, "ViewEnderChest"); - this.instance = instance; - } - - @Override - protected ReturnType runCommand(CommandSender sender, String... args) { - - if (args.length != 1) - return ReturnType.SYNTAX_ERROR; - - Player player = Bukkit.getPlayer(args[0]); - - if (player == null) { - instance.getLocale().newMessage("That player does not exist or is not online.").sendPrefixedMessage(sender); - return ReturnType.FAILURE; - } - - if (player.hasPermission("um.viewenderchest.exempt")) { - instance.getLocale().newMessage("You cannot view the enderchest of that player.").sendPrefixedMessage(sender); - return ReturnType.FAILURE; - } - - ((Player) sender).openInventory(player.getEnderChest()); - return ReturnType.SUCCESS; - } - - @Override - protected List onTab(CommandSender sender, String... args) { - if (args.length == 1) { - List players = new ArrayList<>(); - for (Player player : Bukkit.getOnlinePlayers()) { - players.add(player.getName()); - } - return players; - } - return null; - } - - @Override - public String getPermissionNode() { - return "um.viewenderchest"; - } - - @Override - public String getSyntax() { - return "/ViewEnderChest "; - } - - @Override - public String getDescription() { - return "Allows you to see inside of a players enderchest."; - } -} diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandWarn.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandWarn.java index 357ea35..596c6c2 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandWarn.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandWarn.java @@ -49,12 +49,12 @@ public class CommandWarn extends AbstractCommand { OfflinePlayer player = Bukkit.getOfflinePlayer(args[0]); - if (player == null) { + if (!player.hasPlayedBefore()) { instance.getLocale().newMessage("That player does not exist.").sendPrefixedMessage(sender); return ReturnType.FAILURE; } - if (sender instanceof Player && VaultPermissions.hasPermission(Bukkit.getWorlds().get(0).getName(), player, "um.warning.exempt")) { + if (sender instanceof Player && VaultPermissions.hasPermission(player, "um.warning.exempt")) { instance.getLocale().newMessage("You cannot warn that player.").sendPrefixedMessage(sender); return ReturnType.FAILURE; } diff --git a/src/main/java/com/songoda/ultimatemoderation/database/DataManager.java b/src/main/java/com/songoda/ultimatemoderation/database/DataManager.java new file mode 100644 index 0000000..7c0458e --- /dev/null +++ b/src/main/java/com/songoda/ultimatemoderation/database/DataManager.java @@ -0,0 +1,321 @@ +package com.songoda.ultimatemoderation.database; + +import com.songoda.core.database.DataManagerAbstract; +import com.songoda.core.database.DatabaseConnector; +import com.songoda.ultimatemoderation.punish.AppliedPunishment; +import com.songoda.ultimatemoderation.punish.PunishmentNote; +import com.songoda.ultimatemoderation.punish.PunishmentType; +import com.songoda.ultimatemoderation.punish.template.Template; +import com.songoda.ultimatemoderation.tickets.Ticket; +import com.songoda.ultimatemoderation.tickets.TicketResponse; +import com.songoda.ultimatemoderation.tickets.TicketStatus; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.plugin.Plugin; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.*; +import java.util.function.Consumer; + +public class DataManager extends DataManagerAbstract { + + public DataManager(DatabaseConnector databaseConnector, Plugin plugin) { + super(databaseConnector, plugin); + } + + public void createTemplate(Template template) { + this.queueAsync(() -> this.databaseConnector.connect(connection -> { + String createTemplate = "INSERT INTO " + this.getTablePrefix() + "templates (punishment_type, duration, reason, name, creator) VALUES (?, ?, ?, ?, ?)"; + try (PreparedStatement statement = connection.prepareStatement(createTemplate)) { + statement.setString(1, template.getPunishmentType().name()); + statement.setLong(2, template.getDuration()); + statement.setString(3, template.getReason()); + statement.setString(4, template.getName()); + statement.setString(5, template.getCreator().toString()); + statement.executeUpdate(); + } + + int templateId = this.lastInsertedId(connection, "templates"); + template.setId(templateId); + }), "create"); + } + + public void deleteTemplate(Template template) { + this.async(() -> this.databaseConnector.connect(connection -> { + String deleteTemplate = "DELETE FROM " + this.getTablePrefix() + "templates WHERE id = ?"; + try (PreparedStatement statement = connection.prepareStatement(deleteTemplate)) { + statement.setLong(1, template.getId()); + statement.executeUpdate(); + } + })); + } + + public void getTemplates(Consumer> callback) { + List