Untitled
unknown
plain_text
5 months ago
11 kB
5
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 = ?"; 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"; 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()) { String displayName = event.getCurrentItem().getItemMeta().getDisplayName(); if (displayName.equals(ChatColor.GREEN + "Ver lista de reportes")) { player.closeInventory(); mostrarReportes(player); } else if (displayName.equals(ChatColor.GOLD + "Ver jugadores con puntos")) { player.closeInventory(); mostrarJugadoresConPuntos(player); } } } } 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(); } catch (SQLException e) { e.printStackTrace(); } } }
Editor is loading...
Leave a Comment