Add GUI for reporting player

This commit is contained in:
FirephoenixX02 2024-05-09 14:50:02 +02:00
parent 1bad1bd6f3
commit ef9a039d25
5 changed files with 143 additions and 11 deletions

View file

@ -3,6 +3,8 @@ package me.firephoenix.rapidreport.commands;
import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.command.SimpleCommand; import com.velocitypowered.api.command.SimpleCommand;
import com.velocitypowered.api.proxy.Player; 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.RapidReport;
import me.firephoenix.rapidreport.utils.DataBaseManager; import me.firephoenix.rapidreport.utils.DataBaseManager;
import me.firephoenix.rapidreport.utils.Report; import me.firephoenix.rapidreport.utils.Report;
@ -27,6 +29,31 @@ public class ReportCommand implements SimpleCommand {
String[] args = invocation.arguments(); String[] args = invocation.arguments();
if (args.length == 0) {
commandSource.sendRichMessage(RapidReport.INSTANCE.getChatPrefix() + "<red>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() + "<red>The player <gray>" + args[0] + "<red> is not online!");
return;
}
if (args.length == 1) {
//GUI
if (!(commandSource instanceof Player)) {
commandSource.sendRichMessage(RapidReport.INSTANCE.getChatPrefix() + "<red>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) { if (args.length != 2) {
commandSource.sendRichMessage(RapidReport.INSTANCE.getChatPrefix() + "<red>Please enter in a player you want to report and a reason."); commandSource.sendRichMessage(RapidReport.INSTANCE.getChatPrefix() + "<red>Please enter in a player you want to report and a reason.");
return; return;
@ -37,10 +64,6 @@ public class ReportCommand implements SimpleCommand {
return; 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"); Report report = new Report(reporterName, reportedPlayer.getUsername(), reportedPlayerUUID, args[1], "Unresolved");
RapidReport.INSTANCE.getDataBaseManager().submitNewReportToDB(report); RapidReport.INSTANCE.getDataBaseManager().submitNewReportToDB(report);

View file

@ -15,14 +15,18 @@ public class UIComponent {
private ItemStack itemStack; private ItemStack itemStack;
@Setter @Setter
private Runnable clickListener; private Runnable clickListener;
@Setter
private String permission;
public UIComponent(ItemStack itemStack) { public UIComponent(ItemStack itemStack, String permission) {
this.itemStack = itemStack; this.itemStack = itemStack;
this.permission = permission;
} }
public UIComponent(ItemStack itemStack, Runnable clickListener) { public UIComponent(ItemStack itemStack, Runnable clickListener, String permission) {
this.itemStack = itemStack; this.itemStack = itemStack;
this.clickListener = clickListener; this.clickListener = clickListener;
this.permission = permission;
} }
public void runClickListener(ProtocolizePlayer protocolizePlayer) { public void runClickListener(ProtocolizePlayer protocolizePlayer) {
@ -32,6 +36,6 @@ public class UIComponent {
public boolean hasPermission(ProtocolizePlayer protocolizePlayer) { public boolean hasPermission(ProtocolizePlayer protocolizePlayer) {
if (RapidReport.INSTANCE.getProxy().getPlayer(protocolizePlayer.uniqueId()).isEmpty()) return false; 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);
} }
} }

View file

@ -1,6 +1,8 @@
package me.firephoenix.rapidreport.ui; package me.firephoenix.rapidreport.ui;
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.command.SimpleCommand; import com.velocitypowered.api.command.SimpleCommand;
import com.velocitypowered.api.proxy.Player;
import dev.simplix.protocolize.api.ClickType; import dev.simplix.protocolize.api.ClickType;
import dev.simplix.protocolize.api.chat.ChatElement; import dev.simplix.protocolize.api.chat.ChatElement;
import dev.simplix.protocolize.api.item.ItemStack; import dev.simplix.protocolize.api.item.ItemStack;
@ -12,6 +14,8 @@ import me.firephoenix.rapidreport.utils.Report;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.UUID;
/** /**
* @author NieGestorben * @author NieGestorben
@ -42,7 +46,7 @@ public class UIManager {
reportItemStack.displayName(ChatElement.ofLegacyText("§c" + report.reportedPlayerName)); reportItemStack.displayName(ChatElement.ofLegacyText("§c" + report.reportedPlayerName));
reportItemStack.lore(lore); reportItemStack.lore(lore);
UIComponent reportComponent = new UIComponent(reportItemStack); UIComponent reportComponent = new UIComponent(reportItemStack, "rapidreport.gui");
reportComponent.setClickListener(() -> { reportComponent.setClickListener(() -> {
protocolizePlayer.openInventory(createReportEditGUI(report, protocolizePlayer)); protocolizePlayer.openInventory(createReportEditGUI(report, protocolizePlayer));
@ -79,7 +83,7 @@ public class UIManager {
closeItemStack.displayName(ChatElement.ofLegacyText("§c" + "Close Report")); closeItemStack.displayName(ChatElement.ofLegacyText("§c" + "Close Report"));
UIComponent closeComponent = new UIComponent(closeItemStack); UIComponent closeComponent = new UIComponent(closeItemStack, "rapidreport.gui");
closeComponent.setClickListener(() -> { closeComponent.setClickListener(() -> {
RapidReport.INSTANCE.getDataBaseManager().closeReport(report); RapidReport.INSTANCE.getDataBaseManager().closeReport(report);
@ -89,6 +93,55 @@ public class UIManager {
inventory.item(20, closeComponent); 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<String, Object> reasons = RapidReport.INSTANCE.getConfig().getTable("report_reasons").toMap();
for (String key : reasons.keySet()) {
Map<String, String> reason = (Map<String, String>) 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() + "<red>Player <gray>" + reportedPlayer.getUsername() + "<red> for <gray>" + reason.get("description"));
protocolizePlayer.closeInventory();
});
inventory.item(slot, component);
slot++;
if (slot >= 35) break;
}
// Bottom Row of Glass // Bottom Row of Glass
for (int i = 36; i < 45; i++) { for (int i = 36; i < 45; i++) {
inventory.item(i, new ItemStack(ItemType.GRAY_STAINED_GLASS_PANE)); inventory.item(i, new ItemStack(ItemType.GRAY_STAINED_GLASS_PANE));

View file

@ -94,7 +94,7 @@ public class DataBaseManager {
} }
public void closeReport(Report report) { 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() { public void initDB() {

View file

@ -4,3 +4,55 @@ port = "3306"
user = "user" user = "user"
password = "changeme" password = "changeme"
db = "your-database" 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"