Untitled
unknown
plain_text
5 months ago
14 kB
4
Indexable
package archivo.ar; import org.bukkit.BanList; 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; } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (cmd.getName().equalsIgnoreCase("report")) { if (args.length == 0) { sender.sendMessage(ChatColor.RED + "Uso: /report <jugador> <razón> o /report menu"); return true; } if (args[0].equalsIgnoreCase("menu")) { if (sender instanceof Player) { if (sender.hasPermission("admin.report")) { openReportMenu((Player) sender); } else { sender.sendMessage(ChatColor.RED + "No tienes permiso para ver la lista de reportes."); } } else { sender.sendMessage(ChatColor.RED + "Este comando solo puede ser ejecutado por jugadores."); } return true; } if (args[0].equalsIgnoreCase("lista")) { if (sender.hasPermission("admin.report")) { mostrarReportes(sender); } else { sender.sendMessage(ChatColor.RED + "No tienes permiso para usar este comando."); } return true; } if (sender instanceof Player) { Player player = (Player) sender; 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; } 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; } else { sender.sendMessage(ChatColor.RED + "Este comando solo puede ser ejecutado por jugadores."); } } return false; } private void openReportMenu(Player player) { Inventory inventory = Bukkit.createInventory(null, 9, ChatColor.YELLOW + "Menú de Reportes"); ItemStack listaReportes = new ItemStack(Material.PAPER); ItemMeta meta1 = listaReportes.getItemMeta(); meta1.setDisplayName(ChatColor.AQUA + "Ver Reportes"); listaReportes.setItemMeta(meta1); inventory.addItem(listaReportes); player.openInventory(inventory); } private void mostrarReportes(CommandSender sender) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "Este comando solo puede ser ejecutado por jugadores."); return; } Player player = (Player) sender; String query = "SELECT Jugador, Razon, fecha FROM Reportes WHERE DATE(fecha) = CURDATE()"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query); ResultSet rs = stmt.executeQuery()) { if (!rs.next()) { player.sendMessage(ChatColor.RED + "No hay reportes para mostrar."); return; } int size = Math.max(9, (rs.getFetchSize() / 9 + 1) * 9); Inventory inventory = Bukkit.createInventory(null, size, ChatColor.YELLOW + "Reportes Activos"); do { String jugador = rs.getString("Jugador"); String razon = rs.getString("Razon"); String fecha = rs.getString("fecha"); ItemStack item = getPlayerHead(jugador); ItemMeta meta = item.getItemMeta(); if (meta != null) { meta.setLore(Arrays.asList(ChatColor.GRAY + "Razón: " + razon + " Fecha: " + fecha, ChatColor.YELLOW + "Clic para gestionar reporte")); item.setItemMeta(meta); } inventory.addItem(item); } while (rs.next()); player.openInventory(inventory); // Abre el inventario // Simular clic en un ítem (esto solo es un ejemplo conceptual, no funcionará directamente) for (ItemStack item : inventory.getContents()) { if (item != null && item.hasItemMeta()) { ItemMeta meta = item.getItemMeta(); if (meta != null && meta.getLore() != null && meta.getLore().contains(ChatColor.YELLOW + "Clic para gestionar reporte")) { // Llama a la lógica de clic en el inventario // Aquí puedes llamar a openActionMenu o la lógica que necesites openActionMenu(player, player.getName()); // O el nombre del jugador que corresponde break; // Sale del bucle después de manejar un clic } } } } catch (SQLException e) { e.printStackTrace(); sender.sendMessage(ChatColor.RED + "Error al obtener los reportes: " + e.getMessage()); } } private ItemStack getPlayerHead(String playerName) { ItemStack head = new ItemStack(Material.PLAYER_HEAD); SkullMeta meta = (SkullMeta) head.getItemMeta(); meta.setOwningPlayer(Bukkit.getOfflinePlayer(playerName)); meta.setDisplayName(playerName); head.setItemMeta(meta); return head; } @EventHandler public void onInventoryClick(InventoryClickEvent event) { if (event.getView().getTitle().equals(ChatColor.YELLOW + "Reportes Activos")) { if (event.getCurrentItem() != null && event.getCurrentItem().hasItemMeta()) { ItemMeta meta = event.getCurrentItem().getItemMeta(); if (meta != null && meta.getLore() != null && !meta.getLore().isEmpty()) { String jugador = meta.getDisplayName(); if (event.getWhoClicked() instanceof Player) { Player player = (Player) event.getWhoClicked(); openActionMenu(player, jugador); } } } } } private void openActionMenu(Player player, String jugador) { Inventory actionMenu = Bukkit.createInventory(null, 9, ChatColor.YELLOW + "Acciones sobre " + jugador); ItemStack banear = new ItemStack(Material.BARRIER); ItemMeta metaBanear = banear.getItemMeta(); metaBanear.setDisplayName(ChatColor.RED + "Banear"); banear.setItemMeta(metaBanear); ItemStack mutear = new ItemStack(Material.OAK_SIGN); ItemMeta metaMutear = mutear.getItemMeta(); metaMutear.setDisplayName(ChatColor.GOLD + "Mutear"); mutear.setItemMeta(metaMutear); ItemStack sumarPunto = new ItemStack(Material.EMERALD); ItemMeta metaSumarPunto = sumarPunto.getItemMeta(); metaSumarPunto.setDisplayName(ChatColor.GREEN + "Sumar 1 Punto"); sumarPunto.setItemMeta(metaSumarPunto); actionMenu.addItem(banear, mutear, sumarPunto); player.openInventory(actionMenu); } @EventHandler public void onActionMenuClick(InventoryClickEvent event) { if (event.getView().getTitle().startsWith(ChatColor.YELLOW + "Acciones sobre ")) { event.setCancelled(true); if (event.getCurrentItem() != null && event.getCurrentItem().hasItemMeta()) { String name = event.getCurrentItem().getItemMeta().getDisplayName(); Player player = (Player) event.getWhoClicked(); String jugador = event.getView().getTitle().replace(ChatColor.YELLOW + "Acciones sobre ", ""); if (name.equals(ChatColor.RED + "Banear")) { banearJugador(jugador); player.sendMessage(ChatColor.GREEN + "Jugador " + jugador + " ha sido baneado."); player.closeInventory(); } else if (name.equals(ChatColor.GOLD + "Mutear")) { mutearJugador(jugador); player.sendMessage(ChatColor.GREEN + "Jugador " + jugador + " ha sido muteado."); player.closeInventory(); } else if (name.equals(ChatColor.GREEN + "Sumar 1 Punto")) { sumarPunto(jugador); player.sendMessage(ChatColor.GREEN + "Se ha sumado 1 punto a " + jugador + "."); player.closeInventory(); } } } } private void banearJugador(String jugadorABanear) { Bukkit.getBanList(BanList.Type.NAME).addBan(jugadorABanear, "Baneado por un administrador", null, null); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + jugadorABanear + " 10d Baneado por el sistema de reportes"); Bukkit.getConsoleSender().sendMessage("Jugador " + jugadorABanear + " ha sido baneado 10d por el sistema de reportes."); } private void mutearJugador(String jugadorAMutear) { // Implementa la lógica para mutear al jugador aquí // Puedes usar un sistema similar al de banearJugador Bukkit.getConsoleSender().sendMessage("Jugador " + jugadorAMutear + " ha sido muteado."); } private void sumarPunto(String jugador) { String query = "UPDATE Jugadores SET puntos = puntos + 1 WHERE nombre = ?"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query)) { stmt.setString(1, jugador); stmt.executeUpdate(); Bukkit.getConsoleSender().sendMessage("Se ha sumado 1 punto a " + jugador); // Verificar el número de puntos y aplicar las acciones correspondientes verificarPuntos(jugador); } catch (SQLException e) { e.printStackTrace(); Bukkit.getConsoleSender().sendMessage("Error al sumar punto a " + jugador + ": " + e.getMessage()); } } private void verificarPuntos(String jugador) { String query = "SELECT puntos FROM Jugadores WHERE nombre = ?"; try (PreparedStatement stmt = dbManager.getConnection().prepareStatement(query)) { stmt.setString(1, jugador); ResultSet rs = stmt.executeQuery(); if (rs.next()) { int puntos = rs.getInt("puntos"); if (puntos == 2) { // Dar un warn Bukkit.getConsoleSender().sendMessage("El jugador " + jugador + " ha recibido un warn por el sistema de reportes (2 infracciones)."); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "warn " + jugador + " Warneado automáticamente por el sistema de reportes por tener 2 infracciones."); } else if (puntos >= 5) { // Mutear Bukkit.getConsoleSender().sendMessage("El jugador " + jugador + " ha recibido un muteo de 30d por el sistema de reportes (5 infracciones)."); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "mute " + jugador + " 30d muteado por el sistema de reportes por tener 5 infracciones"); } else if (puntos >= 7) { // Banear Bukkit.getConsoleSender().sendMessage("El jugador " + jugador + " ha recibido un baneo de 30d por el sistema de reportes (7 infracciones)."); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + jugador + " 30d Baneado por el sistema de reportes por tener 7 infracciones"); banearJugador(jugador); } } } catch (SQLException e) { e.printStackTrace(); Bukkit.getConsoleSender().sendMessage("Error al verificar puntos de " + jugador + ": " + e.getMessage()); } } 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