diff --git a/src/main/java/me/firephoenix/rapidreport/commands/ReportCommand.java b/src/main/java/me/firephoenix/rapidreport/commands/ReportCommand.java index ef872e0..dd1bc4d 100644 --- a/src/main/java/me/firephoenix/rapidreport/commands/ReportCommand.java +++ b/src/main/java/me/firephoenix/rapidreport/commands/ReportCommand.java @@ -3,6 +3,8 @@ package me.firephoenix.rapidreport.commands; import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.command.SimpleCommand; import com.velocitypowered.api.proxy.Player; +import dev.simplix.protocolize.api.Protocolize; +import dev.simplix.protocolize.api.player.ProtocolizePlayer; import me.firephoenix.rapidreport.RapidReport; import me.firephoenix.rapidreport.utils.DataBaseManager; import me.firephoenix.rapidreport.utils.Report; @@ -27,6 +29,31 @@ public class ReportCommand implements SimpleCommand { String[] args = invocation.arguments(); + if (args.length == 0) { + commandSource.sendRichMessage(RapidReport.INSTANCE.getChatPrefix() + "No arguments provided!"); + return; + } + + Player reportedPlayer = RapidReport.INSTANCE.getProxy().getPlayer(args[0]).get(); + + UUID reportedPlayerUUID = reportedPlayer.getUniqueId(); + + if (RapidReport.INSTANCE.getProxy().getPlayer(args[0]).isEmpty()) { + commandSource.sendRichMessage(RapidReport.INSTANCE.getChatPrefix() + "The player " + args[0] + " is not online!"); + return; + } + + if (args.length == 1) { + //GUI + if (!(commandSource instanceof Player)) { + commandSource.sendRichMessage(RapidReport.INSTANCE.getChatPrefix() + "This command can only be executed by a player!"); + } + assert commandSource instanceof Player; + ProtocolizePlayer protocolizePlayer = Protocolize.playerProvider().player(((Player) commandSource).getUniqueId()); + protocolizePlayer.openInventory(RapidReport.INSTANCE.getUiManager().createReportingGUI((Player) commandSource, reportedPlayer, reportedPlayerUUID, protocolizePlayer)); + return; + } + if (args.length != 2) { commandSource.sendRichMessage(RapidReport.INSTANCE.getChatPrefix() + "Please enter in a player you want to report and a reason."); return; @@ -37,10 +64,6 @@ public class ReportCommand implements SimpleCommand { return; } - Player reportedPlayer = RapidReport.INSTANCE.getProxy().getPlayer(args[0]).get(); - - UUID reportedPlayerUUID = reportedPlayer.getUniqueId(); - Report report = new Report(reporterName, reportedPlayer.getUsername(), reportedPlayerUUID, args[1], "Unresolved"); RapidReport.INSTANCE.getDataBaseManager().submitNewReportToDB(report); diff --git a/src/main/java/me/firephoenix/rapidreport/ui/UIComponent.java b/src/main/java/me/firephoenix/rapidreport/ui/UIComponent.java index 2219209..710a9c2 100644 --- a/src/main/java/me/firephoenix/rapidreport/ui/UIComponent.java +++ b/src/main/java/me/firephoenix/rapidreport/ui/UIComponent.java @@ -15,14 +15,18 @@ public class UIComponent { private ItemStack itemStack; @Setter private Runnable clickListener; + @Setter + private String permission; - public UIComponent(ItemStack itemStack) { + public UIComponent(ItemStack itemStack, String permission) { this.itemStack = itemStack; + this.permission = permission; } - public UIComponent(ItemStack itemStack, Runnable clickListener) { + public UIComponent(ItemStack itemStack, Runnable clickListener, String permission) { this.itemStack = itemStack; this.clickListener = clickListener; + this.permission = permission; } public void runClickListener(ProtocolizePlayer protocolizePlayer) { @@ -32,6 +36,6 @@ public class UIComponent { public boolean hasPermission(ProtocolizePlayer protocolizePlayer) { if (RapidReport.INSTANCE.getProxy().getPlayer(protocolizePlayer.uniqueId()).isEmpty()) return false; - return RapidReport.INSTANCE.getProxy().getPlayer(protocolizePlayer.uniqueId()).get().hasPermission("rapidreport.gui"); + return RapidReport.INSTANCE.getProxy().getPlayer(protocolizePlayer.uniqueId()).get().hasPermission(permission); } } diff --git a/src/main/java/me/firephoenix/rapidreport/ui/UIManager.java b/src/main/java/me/firephoenix/rapidreport/ui/UIManager.java index 79b03d0..173ae80 100644 --- a/src/main/java/me/firephoenix/rapidreport/ui/UIManager.java +++ b/src/main/java/me/firephoenix/rapidreport/ui/UIManager.java @@ -1,6 +1,8 @@ package me.firephoenix.rapidreport.ui; +import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.command.SimpleCommand; +import com.velocitypowered.api.proxy.Player; import dev.simplix.protocolize.api.ClickType; import dev.simplix.protocolize.api.chat.ChatElement; import dev.simplix.protocolize.api.item.ItemStack; @@ -12,6 +14,8 @@ import me.firephoenix.rapidreport.utils.Report; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.UUID; /** * @author NieGestorben @@ -42,7 +46,7 @@ public class UIManager { reportItemStack.displayName(ChatElement.ofLegacyText("§c" + report.reportedPlayerName)); reportItemStack.lore(lore); - UIComponent reportComponent = new UIComponent(reportItemStack); + UIComponent reportComponent = new UIComponent(reportItemStack, "rapidreport.gui"); reportComponent.setClickListener(() -> { protocolizePlayer.openInventory(createReportEditGUI(report, protocolizePlayer)); @@ -79,7 +83,7 @@ public class UIManager { closeItemStack.displayName(ChatElement.ofLegacyText("§c" + "Close Report")); - UIComponent closeComponent = new UIComponent(closeItemStack); + UIComponent closeComponent = new UIComponent(closeItemStack, "rapidreport.gui"); closeComponent.setClickListener(() -> { RapidReport.INSTANCE.getDataBaseManager().closeReport(report); @@ -89,6 +93,55 @@ public class UIManager { inventory.item(20, closeComponent); + // Bottom Row of Glass + for (int i = 36; i < 45; i++) { + inventory.item(i, new ItemStack(ItemType.GRAY_STAINED_GLASS_PANE)); + } + + inventory.onClick(click -> { + if (click.clickType() != ClickType.LEFT_CLICK) return; + if (inventory.getSlotToComponentMap().containsKey(click.slot())) { + inventory.getSlotToComponentMap().get(click.slot()).runClickListener(click.player()); + } + }); + + return inventory; + } + + public CustomInventory createReportingGUI(Player player, Player reportedPlayer, UUID reportedPlayerUUID, ProtocolizePlayer protocolizePlayer) { + CustomInventory inventory = new CustomInventory(InventoryType.GENERIC_9X5); + inventory.title(ChatElement.ofLegacyText("§cReport-Player")); + + //Top Row of Glass + for (int i = 0; i < 9; i++) { + inventory.item(i, new ItemStack(ItemType.GRAY_STAINED_GLASS_PANE)); + } + + //Load Report Reasons from config and add items + int slot = 9; + Map reasons = RapidReport.INSTANCE.getConfig().getTable("report_reasons").toMap(); + for (String key : reasons.keySet()) { + Map reason = (Map) reasons.get(key); + + ItemStack itemStack = new ItemStack(ItemType.valueOf(reason.get("item_material"))); + + itemStack.displayName(ChatElement.ofLegacyText(reason.get("display_name"))); + + UIComponent component = new UIComponent(itemStack, "rapidreport.report"); + + Report report = new Report(player.getUsername(), reportedPlayer.getUsername(), reportedPlayerUUID, reason.get("description"), "Unresolved"); + + component.setClickListener(() -> { + RapidReport.INSTANCE.getDataBaseManager().submitNewReportToDB(report); + reportedPlayer.sendRichMessage(RapidReport.INSTANCE.getChatPrefix() + "Player " + reportedPlayer.getUsername() + " for " + reason.get("description")); + protocolizePlayer.closeInventory(); + }); + + inventory.item(slot, component); + slot++; + if (slot >= 35) break; + } + // Bottom Row of Glass for (int i = 36; i < 45; i++) { inventory.item(i, new ItemStack(ItemType.GRAY_STAINED_GLASS_PANE)); diff --git a/src/main/java/me/firephoenix/rapidreport/utils/DataBaseManager.java b/src/main/java/me/firephoenix/rapidreport/utils/DataBaseManager.java index a63ea76..16b5b7c 100644 --- a/src/main/java/me/firephoenix/rapidreport/utils/DataBaseManager.java +++ b/src/main/java/me/firephoenix/rapidreport/utils/DataBaseManager.java @@ -94,7 +94,7 @@ public class DataBaseManager { } public void closeReport(Report report) { - runStatementAsync("UPDATE rapid_report_reports SET status = 'resolved' WHERE id = " + report.databaseID + " AND status = 'unresolved'"); + runStatementAsync("UPDATE rapid_report_reports SET status = 'Resolved' WHERE id = " + report.databaseID + " AND status = 'unresolved'"); } public void initDB() { diff --git a/src/main/resources/config.toml b/src/main/resources/config.toml index a979b0c..6af01f5 100644 --- a/src/main/resources/config.toml +++ b/src/main/resources/config.toml @@ -3,4 +3,56 @@ host = "localhost" port = "3306" user = "user" password = "changeme" -db = "your-database" \ No newline at end of file +db = "your-database" + +[report_reasons] + +[report_reasons.cheating] +description = "Cheating" +display_name = "§cCheating" +item_material = "DIAMOND_SWORD" + +[report_reasons.inappropriate_name] +description = "Inappropriate name" +display_name = "§eInappropriate Name" +item_material = "NAME_TAG" + +[report_reasons.inappropriate_skin] +description = "Inappropriate skin" +display_name = "§aInappropriate Skin" +item_material = "LEATHER" + +[report_reasons.offsensive_chat] +description = "Offensive chat" +display_name = "§bAbusive Chat" +item_material = "BOOK" + +[report_reasons.unsportsmanlike_conduct] +description = "Unsportsmanlike Behavior" +display_name = "§4Unsportsmanlike Behavior" +item_material = "BARRIER" + +[report_reasons.advertising] +description = "Advertising" +display_name = "§5Advertising" +item_material = "OAK_SIGN" + +[report_reasons.impersonation] +description = "Impersonation" +display_name = "§fImpersonation" +item_material = "PLAYER_HEAD" + +[report_reasons.account_sharing] +description = "Account sharing" +display_name = "§bAccount Sharing" +item_material = "ARMOR_STAND" + +[report_reasons.boosting] +description = "Boosting" +display_name = "§cBoosting" +item_material = "LEVER" + +[report_reasons.evasion] +description = "Ban Evasion" +display_name = "§cBan Evasion" +item_material = "ENDER_PEARL" \ No newline at end of file