mirror of
https://github.com/FirephoenixX02/RapidReport.git
synced 2026-04-30 13:26:21 +02:00
Add GUI for reporting player
This commit is contained in:
parent
1bad1bd6f3
commit
ef9a039d25
5 changed files with 143 additions and 11 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue