Untitled
unknown
plain_text
a year ago
11 kB
17
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