Untitled
unknown
plain_text
5 months ago
18 kB
3
Indexable
package archivo.ar; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.CommandExecutor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Arrays; public class Comando implements CommandExecutor, Listener { private final DatabaseManager dbManager; public Comando(DatabaseManager dbManager) { this.dbManager = dbManager; } private boolean jugadorYaReportado(String playerName) { String query = "SELECT COUNT(*) FROM Reportes WHERE Jugador = ? AND DATE(fecha) = CURDATE()"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query)) { stmt.setString(1, playerName); try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { return rs.getInt(1) > 0; } } } catch (SQLException e) { e.printStackTrace(); } return false; } private int obtenerPuntos(String jugador) { String query = "SELECT puntos FROM Jugadores WHERE Nombre = ?"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query)) { stmt.setString(1, jugador); try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { return rs.getInt("puntos"); } } } catch (SQLException e) { e.printStackTrace(); } return 0; } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (cmd.getName().equalsIgnoreCase("report")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "Este comando solo puede ser ejecutado por jugadores."); return true; } Player player = (Player) sender; if (args.length == 0) { player.sendMessage(ChatColor.RED + "Uso: /report <jugador> <razón> o /report menu o /report lista"); return true; } if (args[0].equalsIgnoreCase("menu")) { if (player.hasPermission("admin.report")) { openReportMenu(player); } else { player.sendMessage(ChatColor.RED + "No tienes permiso para ver el menú de reportes."); } return true; } if (args[0].equalsIgnoreCase("lista")) { if (player.hasPermission("admin.report")) { mostrarReportes(player); } else { player.sendMessage(ChatColor.RED + "No tienes permiso para ver la lista de reportes."); } return true; } if (args[0].equalsIgnoreCase("jugadoresconpuntos")) { if (player.hasPermission("admin.report")) { mostrarJugadoresConPuntos(player); } else { player.sendMessage(ChatColor.RED + "No tienes permiso para ver la lista de jugadores con puntos."); } return true; } // Reportar jugador if (args.length < 2) { player.sendMessage(ChatColor.RED + "Uso: /report <jugador> <razón>"); return true; } String playerName = args[0]; Player targetPlayer = Bukkit.getPlayer(playerName); if (targetPlayer == null || !targetPlayer.isOnline()) { player.sendMessage(ChatColor.RED + "El jugador " + playerName + " no está en línea."); return true; } if (player.getName().equalsIgnoreCase(playerName)) { player.sendMessage(ChatColor.RED + "No puedes reportarte a ti mismo."); return true; } if (jugadorYaReportado(playerName)) { player.sendMessage(ChatColor.RED + "Este jugador ya ha sido reportado y está siendo revisado."); return true; } String reason = String.join(" ", Arrays.copyOfRange(args, 1, args.length)); guardarReporte(playerName, reason); player.sendMessage(ChatColor.GREEN + "Reporte enviado para " + playerName + " por: " + reason); // Notificar a los admins Bukkit.getOnlinePlayers().stream() .filter(p -> p.hasPermission("report.admin")) .forEach(admin -> admin.sendMessage(ChatColor.RED + player.getName() + " ha reportado a " + playerName + " por: " + reason)); return true; } return false; } private void openReportMenu(Player player) { Inventory reportMenu = Bukkit.createInventory(null, 9, ChatColor.YELLOW + "Menú de Reportes"); // Botón para ver lista de reportes ItemStack viewReports = new ItemStack(Material.PAPER); ItemMeta viewReportsMeta = viewReports.getItemMeta(); viewReportsMeta.setDisplayName(ChatColor.GREEN + "Ver lista de reportes"); viewReports.setItemMeta(viewReportsMeta); reportMenu.setItem(0, viewReports); // Botón para ver jugadores con puntos ItemStack viewPlayersWithPoints = new ItemStack(Material.GOLD_INGOT); ItemMeta viewPlayersWithPointsMeta = viewPlayersWithPoints.getItemMeta(); viewPlayersWithPointsMeta.setDisplayName(ChatColor.GOLD + "Ver jugadores con puntos"); viewPlayersWithPoints.setItemMeta(viewPlayersWithPointsMeta); reportMenu.setItem(1, viewPlayersWithPoints); player.openInventory(reportMenu); } private void mostrarReportes(Player player) { String query = "SELECT Jugador, Razon, fecha FROM Reportes WHERE DATE(fecha) = CURDATE()"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query); ResultSet rs = stmt.executeQuery()) { Inventory inventory = Bukkit.createInventory(null, 54, ChatColor.YELLOW + "Reportes Activos"); int count = 0; while (rs.next() && count < 54) { String jugador = rs.getString("Jugador"); String razon = rs.getString("Razon"); String fecha = rs.getString("fecha"); int puntos = obtenerPuntos(jugador); ItemStack item = new ItemStack(Material.PLAYER_HEAD); SkullMeta meta = (SkullMeta) item.getItemMeta(); meta.setOwningPlayer(Bukkit.getOfflinePlayer(jugador)); meta.setDisplayName(ChatColor.YELLOW + jugador + " (" + puntos + " puntos)"); meta.setLore(Arrays.asList( ChatColor.GRAY + "Razón: " + razon, ChatColor.GRAY + "Fecha: " + fecha, ChatColor.YELLOW + "Clic para gestionar reporte" )); item.setItemMeta(meta); inventory.addItem(item); count++; } if (count == 0) { player.sendMessage(ChatColor.RED + "No hay reportes para mostrar."); return; } player.openInventory(inventory); } catch (SQLException e) { e.printStackTrace(); player.sendMessage(ChatColor.RED + "Error al obtener los reportes: " + e.getMessage()); } } private void mostrarJugadoresConPuntos(Player player) { String query = "SELECT Jugador, puntos FROM Reportes WHERE puntos > 0"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query); ResultSet rs = stmt.executeQuery()) { Inventory inventory = Bukkit.createInventory(null, 54, ChatColor.YELLOW + "Jugadores con Puntos"); int count = 0; while (rs.next() && count < 54) { String jugador = rs.getString("Nombre"); int puntos = rs.getInt("puntos"); ItemStack item = new ItemStack(Material.PLAYER_HEAD); SkullMeta meta = (SkullMeta) item.getItemMeta(); meta.setOwningPlayer(Bukkit.getOfflinePlayer(jugador)); meta.setDisplayName(ChatColor.YELLOW + jugador + " (" + puntos + " puntos)"); item.setItemMeta(meta); inventory.addItem(item); count++; } if (count == 0) { player.sendMessage(ChatColor.RED + "No hay jugadores con puntos."); return; } player.openInventory(inventory); } catch (SQLException e) { e.printStackTrace(); player.sendMessage(ChatColor.RED + "Error al obtener los jugadores: " + e.getMessage()); } } @EventHandler public void onInventoryClick(InventoryClickEvent event) { if (!(event.getWhoClicked() instanceof Player)) return; Player player = (Player) event.getWhoClicked(); String title = event.getView().getTitle(); if (title.equals(ChatColor.YELLOW + "Menú de Reportes")) { event.setCancelled(true); if (event.getCurrentItem() != null && event.getCurrentItem().hasItemMeta()) { if (event.getCurrentItem().getItemMeta().getDisplayName().equals(ChatColor.GREEN + "Ver lista de reportes")) { player.closeInventory(); mostrarReportes(player); } else if (event.getCurrentItem().getItemMeta().getDisplayName().equals(ChatColor.GOLD + "Ver jugadores con puntos")) { player.closeInventory(); mostrarJugadoresConPuntos(player); } } } else if (title.equals(ChatColor.YELLOW + "Reportes Activos")) { event.setCancelled(true); if (event.getCurrentItem() != null && event.getCurrentItem().hasItemMeta()) { String jugador = ChatColor.stripColor(event.getCurrentItem().getItemMeta().getDisplayName()); String razon = getRazonReporte(jugador); player.closeInventory(); openActionMenu(player, jugador, razon); } } else if (title.startsWith(ChatColor.YELLOW + "Acciones para ")) { event.setCancelled(true); if (event.getCurrentItem() != null && event.getCurrentItem().hasItemMeta()) { String action = ChatColor.stripColor(event.getCurrentItem().getItemMeta().getDisplayName()); String jugador = title.replace(ChatColor.YELLOW + "Acciones para ", ""); int puntos = obtenerPuntos(jugador); switch (action) { case "Culpable": sumarPunto(jugador); // Sumar punto al jugador eliminarReporte(jugador); // Eliminar el reporte player.sendMessage(ChatColor.GREEN + "Se ha sumado un punto a " + jugador + " y el reporte ha sido eliminado."); realizarAccionesAutomáticas(jugador, obtenerPuntos(jugador) + 1); // Verifica los puntos después de sumar player.closeInventory(); break; case "Baneo": String banReason = "Baneado por reportes"; Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + jugador + " 10d " + banReason); eliminarReporte(jugador); player.sendMessage(ChatColor.GREEN + "El jugador " + jugador + " ha sido baneado y el reporte ha sido eliminado."); player.closeInventory(); break; case "Muteo": String muteReason = "Muteado por reportes"; Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "mute " + jugador + " 10d " + muteReason); eliminarReporte(jugador); player.sendMessage(ChatColor.GREEN + "El jugador " + jugador + " ha sido muteado y el reporte ha sido eliminado."); player.closeInventory(); break; case "Ver detalles del reporte": player.sendMessage(ChatColor.GREEN + "Razón del reporte: " + getRazonReporte(jugador)); player.closeInventory(); break; } } } } private void realizarAccionesAutomáticas(String jugador, int nuevosPuntos) { if (nuevosPuntos == 2) { // Ejecutar warn Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "warn " + jugador + " Has acumulado 2 puntos."); } else if (nuevosPuntos == 5) { // Ejecutar mute Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "mute " + jugador + " 10d Muteado por acumulación de puntos."); } else if (nuevosPuntos >= 7) { // Ejecutar ban Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + jugador + " 10d Baneado por acumulación de puntos."); } } private String getRazonReporte(String jugador) { String query = "SELECT Razon FROM Reportes WHERE Jugador = ? AND DATE(fecha) = CURDATE()"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query)) { stmt.setString(1, jugador); try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { return rs.getString("Razon"); } } } catch (SQLException e) { e.printStackTrace(); } return "No se encontró la razón."; } private void openActionMenu(Player player, String jugador, String razon) { Inventory actionMenu = Bukkit.createInventory(null, 9, ChatColor.YELLOW + "Acciones para " + jugador); // Botón para marcar como culpable ItemStack guilty = new ItemStack(Material.GREEN_WOOL); ItemMeta guiltyMeta = guilty.getItemMeta(); guiltyMeta.setDisplayName(ChatColor.RED + "Culpable"); guilty.setItemMeta(guiltyMeta); actionMenu.setItem(0, guilty); // Botón para baneo ItemStack ban = new ItemStack(Material.BARRIER); ItemMeta banMeta = ban.getItemMeta(); banMeta.setDisplayName(ChatColor.RED + "Baneo"); ban.setItemMeta(banMeta); actionMenu.setItem(1, ban); // Botón para muteo ItemStack mute = new ItemStack(Material.MUSIC_DISC_PIGSTEP); ItemMeta muteMeta = mute.getItemMeta(); muteMeta.setDisplayName(ChatColor.RED + "Muteo"); mute.setItemMeta(muteMeta); actionMenu.setItem(2, mute); // Botón para ver detalles del reporte ItemStack viewDetails = new ItemStack(Material.PAPER); ItemMeta viewDetailsMeta = viewDetails.getItemMeta(); viewDetailsMeta.setDisplayName(ChatColor.GREEN + "Ver detalles del reporte"); viewDetails.setItemMeta(viewDetailsMeta); actionMenu.setItem(3, viewDetails); player.openInventory(actionMenu); } private void sumarPunto(String jugador) { String query = "UPDATE Reportes SET puntos = puntos + 1 WHERE Jugador = ? AND DATE(fecha) = CURDATE()"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query)) { stmt.setString(1, jugador); int rowsAffected = stmt.executeUpdate(); if (rowsAffected > 0) { Bukkit.getConsoleSender().sendMessage("Puntos sumados a: " + jugador); } else { Bukkit.getConsoleSender().sendMessage("No se encontraron registros para sumar puntos a: " + jugador); } } catch (SQLException e) { e.printStackTrace(); } } private void eliminarReporte(String jugador) { String query = "DELETE FROM Reportes WHERE Jugador = ? AND DATE(fecha) = CURDATE()"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query)) { stmt.setString(1, jugador); int rowsAffected = stmt.executeUpdate(); if (rowsAffected > 0) { Bukkit.getConsoleSender().sendMessage("Reporte eliminado para: " + jugador); } else { Bukkit.getConsoleSender().sendMessage("No se encontraron reportes para eliminar de: " + jugador); } } catch (SQLException e) { e.printStackTrace(); } } private void guardarReporte(String jugador, String razon) { String query = "INSERT INTO Reportes (Jugador, Razon, fecha) VALUES (?, ?, NOW())"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query)) { stmt.setString(1, jugador); stmt.setString(2, razon); stmt.executeUpdate(); Bukkit.getConsoleSender().sendMessage("Reporte guardado: " + jugador + " - " + razon); } catch (SQLException e) { e.printStackTrace(); Bukkit.getConsoleSender().sendMessage("Error al guardar el reporte: " + e.getMessage()); } } }
Editor is loading...
Leave a Comment