Skip to content

Commit 1523bc6

Browse files
authored
Report system patch
some quick fixes and polish of reports system
1 parent d58a970 commit 1523bc6

File tree

13 files changed

+391
-420
lines changed

13 files changed

+391
-420
lines changed

dependency-reduced-pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>org.yetiman</groupId>
55
<artifactId>YETIsUtils</artifactId>
66
<name>YETIsUtils</name>
7-
<version>2.6</version>
7+
<version>2.7</version>
88
<build>
99
<resources>
1010
<resource>

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>org.yetiman</groupId>
88
<artifactId>YETIsUtils</artifactId>
9-
<version>2.6</version>
9+
<version>2.7</version>
1010
<packaging>jar</packaging>
1111

1212
<name>YETIsUtils</name>

src/main/java/org/yetiman/yetisutils/MyWarningsCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
3030
String reason = warningHandler.getWarningReason(player.getUniqueId(), i);
3131
String issuer = warningHandler.getWarningIssuer(player.getUniqueId(), i);
3232
String date = warningHandler.getWarningDate(player.getUniqueId(), i);
33-
player.sendMessage((i + 1) + ". " + reason + " | Issued by: " + issuer + " | Date: " + date);
33+
player.sendMessage((i + 1) + ". " + reason + " - " + issuer + " - " + date);
3434
}
3535
}
3636
return true;
Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,39 @@
11
package org.yetiman.yetisutils;
22

3-
import java.util.Date;
3+
import org.bukkit.Location;
44

55
public class Report {
6-
private final String reporter;
7-
private final String issue;
8-
private final Date date;
6+
private final String playerName;
7+
private final String report;
8+
private final String date;
9+
private final String time;
10+
private final Location location;
911

10-
public Report(String reporter, String issue, Date date) {
11-
this.reporter = reporter;
12-
this.issue = issue;
12+
public Report(String playerName, String report, String date, String time, Location location) {
13+
this.playerName = playerName;
14+
this.report = report;
1315
this.date = date;
16+
this.time = time;
17+
this.location = location;
1418
}
1519

16-
public String getReporter() {
17-
return reporter;
20+
public String getPlayerName() {
21+
return playerName;
1822
}
1923

20-
public String getIssue() {
21-
return issue;
24+
public String getReport() {
25+
return report;
2226
}
2327

24-
public Date getDate() {
28+
public String getDate() {
2529
return date;
2630
}
31+
32+
public String getTime() {
33+
return time;
34+
}
35+
36+
public Location getLocation() {
37+
return location;
38+
}
2739
}
Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
package org.yetiman.yetisutils;
22

3-
import org.bukkit.Bukkit;
4-
import org.bukkit.OfflinePlayer;
53
import org.bukkit.command.Command;
64
import org.bukkit.command.CommandExecutor;
75
import org.bukkit.command.CommandSender;
86
import org.bukkit.command.TabCompleter;
97
import org.bukkit.entity.Player;
8+
import org.bukkit.Location;
109

11-
import java.util.ArrayList;
1210
import java.util.Collections;
1311
import java.util.List;
14-
import java.util.UUID;
1512

1613
public class ReportCommand implements CommandExecutor, TabCompleter {
1714
private final ReportHandler reportHandler;
@@ -27,24 +24,22 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
2724
return true;
2825
}
2926

27+
Player player = (Player) sender;
3028
if (args.length == 0) {
31-
sender.sendMessage("Usage: /report <issue>");
29+
player.sendMessage("Usage: /report <issue>");
3230
return true;
3331
}
3432

35-
Player player = (Player) sender;
36-
UUID playerId = player.getUniqueId();
37-
String playerName = player.getName();
3833
String issue = String.join(" ", args);
39-
40-
reportHandler.addReport(playerId, playerName, issue);
41-
sender.sendMessage("Your report has been submitted.");
42-
34+
Location location = player.getLocation();
35+
reportHandler.addReport(player, issue, location);
36+
player.sendMessage("Your report has been submitted.");
4337
return true;
4438
}
4539

4640
@Override
4741
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
42+
// Return an empty list to disable tab completion for arguments
4843
return Collections.emptyList();
4944
}
5045
}
Lines changed: 102 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.yetiman.yetisutils;
22

33
import org.bukkit.Bukkit;
4-
import org.bukkit.ChatColor;
4+
import org.bukkit.Location;
55
import org.bukkit.Material;
66
import org.bukkit.entity.Player;
77
import org.bukkit.event.EventHandler;
@@ -11,10 +11,9 @@
1111
import org.bukkit.inventory.ItemStack;
1212
import org.bukkit.inventory.meta.ItemMeta;
1313

14+
import java.text.ParseException;
1415
import java.text.SimpleDateFormat;
15-
import java.util.ArrayList;
16-
import java.util.List;
17-
import java.util.UUID;
16+
import java.util.*;
1817

1918
public class ReportGUI implements Listener {
2019
private final YETIsUtils plugin;
@@ -23,117 +22,134 @@ public class ReportGUI implements Listener {
2322
public ReportGUI(YETIsUtils plugin, ReportHandler reportHandler) {
2423
this.plugin = plugin;
2524
this.reportHandler = reportHandler;
25+
Bukkit.getPluginManager().registerEvents(this, plugin);
2626
}
2727

28-
public static void openReportGUI(Player player, ReportHandler reportHandler) {
29-
Inventory inv = Bukkit.createInventory(null, 54, "Player Reports");
28+
public void openReportMenu(Player player) {
29+
List<Map.Entry<String, Map<String, String>>> sortedReports = getSortedReports();
30+
Inventory reportMenu = Bukkit.createInventory(null, 54, "Reports");
3031

31-
List<Report> allReports = reportHandler.getAllReports();
32-
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yy HH-mm");
32+
for (int i = 0; i < sortedReports.size(); i++) {
33+
Map.Entry<String, Map<String, String>> entry = sortedReports.get(i);
34+
String reportId = entry.getKey();
35+
Map<String, String> report = entry.getValue();
3336

34-
for (int i = 0; i < allReports.size(); i++) {
35-
Report report = allReports.get(i);
36-
ItemStack paper = new ItemStack(Material.PAPER);
37-
ItemMeta meta = paper.getItemMeta();
37+
ItemStack item = new ItemStack(Material.PAPER);
38+
ItemMeta meta = item.getItemMeta();
3839
if (meta != null) {
39-
meta.setDisplayName(ChatColor.YELLOW + "Report #" + (i + 1));
40-
List<String> lore = new ArrayList<>();
41-
lore.add(ChatColor.GOLD + "Reporter: " + report.getReporter());
42-
lore.add(ChatColor.GOLD + "Issue: " + report.getIssue());
43-
lore.add(ChatColor.AQUA + "Date: " + dateFormatter.format(report.getDate()));
44-
meta.setLore(lore);
45-
paper.setItemMeta(meta);
40+
meta.setDisplayName("Report #" + reportId);
41+
meta.setLore(Arrays.asList(
42+
"Player: " + report.get("player"),
43+
"Issue: " + report.get("issue"),
44+
"Date: " + report.get("date")
45+
));
46+
item.setItemMeta(meta);
4647
}
47-
inv.addItem(paper);
48+
reportMenu.addItem(item);
4849
}
4950

50-
player.openInventory(inv);
51+
player.openInventory(reportMenu);
5152
}
5253

53-
public static void openReportDetailGUI(Player player, Report report, int reportIndex) {
54-
Inventory inv = Bukkit.createInventory(null, 27, "Report Details");
55-
56-
ItemStack paper = new ItemStack(Material.PAPER);
57-
ItemMeta meta = paper.getItemMeta();
58-
if (meta != null) {
59-
meta.setDisplayName(ChatColor.YELLOW + "Report Details");
60-
List<String> lore = new ArrayList<>();
61-
lore.add(ChatColor.GOLD + "Reporter: " + report.getReporter());
62-
lore.add(ChatColor.GOLD + "Issue: " + report.getIssue());
63-
lore.add(ChatColor.AQUA + "Date: " + new SimpleDateFormat("dd-MM-yy HH-mm").format(report.getDate()));
64-
meta.setLore(lore);
65-
paper.setItemMeta(meta);
54+
public void openReportDetails(Player player, String reportId) {
55+
Map<String, String> report = reportHandler.getReports().get(reportId);
56+
Inventory reportDetails = Bukkit.createInventory(null, 27, "Report Details");
57+
58+
ItemStack reportItem = new ItemStack(Material.PAPER);
59+
ItemMeta reportMeta = reportItem.getItemMeta();
60+
if (reportMeta != null) {
61+
reportMeta.setDisplayName("Report #" + reportId);
62+
reportMeta.setLore(Arrays.asList(
63+
"Player: " + report.get("player"),
64+
"Issue: " + report.get("issue"),
65+
"Date: " + report.get("date")
66+
));
67+
reportItem.setItemMeta(reportMeta);
6668
}
67-
inv.setItem(13, paper); // Center the paper in the inventory
6869

69-
ItemStack closeButton = createGuiItem(Material.RED_STAINED_GLASS_PANE, ChatColor.RED + "Close Report");
70-
inv.setItem(26, closeButton); // Place the close button in the bottom right
70+
ItemStack backButton = new ItemStack(Material.BARRIER);
71+
ItemMeta backMeta = backButton.getItemMeta();
72+
if (backMeta != null) {
73+
backMeta.setDisplayName("Back");
74+
backButton.setItemMeta(backMeta);
75+
}
76+
77+
ItemStack teleportButton = new ItemStack(Material.ENDER_PEARL);
78+
ItemMeta teleportMeta = teleportButton.getItemMeta();
79+
if (teleportMeta != null) {
80+
teleportMeta.setDisplayName("Teleport to Location");
81+
teleportButton.setItemMeta(teleportMeta);
82+
}
83+
84+
ItemStack closeButton = new ItemStack(Material.RED_STAINED_GLASS_PANE);
85+
ItemMeta closeMeta = closeButton.getItemMeta();
86+
if (closeMeta != null) {
87+
closeMeta.setDisplayName("Close Report");
88+
closeButton.setItemMeta(closeMeta);
89+
}
7190

72-
inv.setItem(18, createGuiItem(Material.ARROW, ChatColor.GREEN + "Back to Reports"));
91+
reportDetails.setItem(10, reportItem);
92+
reportDetails.setItem(12, teleportButton);
93+
reportDetails.setItem(14, closeButton);
94+
reportDetails.setItem(16, backButton);
7395

74-
player.openInventory(inv);
96+
player.openInventory(reportDetails);
7597
}
7698

7799
@EventHandler
78100
public void onInventoryClick(InventoryClickEvent event) {
79-
if (event.getView().getTitle().equals("Player Reports")) {
101+
if (!(event.getWhoClicked() instanceof Player)) return;
102+
Player player = (Player) event.getWhoClicked();
103+
104+
if (event.getView().getTitle().equals("Reports")) {
80105
event.setCancelled(true);
81-
if (event.getCurrentItem() == null || event.getCurrentItem().getType() != Material.PAPER) {
82-
return;
83-
}
106+
ItemStack clickedItem = event.getCurrentItem();
107+
if (clickedItem == null || !clickedItem.hasItemMeta()) return;
84108

85-
Player player = (Player) event.getWhoClicked();
86-
int reportIndex = event.getSlot();
87-
List<Report> allReports = reportHandler.getAllReports();
88-
if (reportIndex < allReports.size()) {
89-
Report report = allReports.get(reportIndex);
90-
openReportDetailGUI(player, report, reportIndex);
91-
}
109+
String reportId = clickedItem.getItemMeta().getDisplayName().split("#")[1];
110+
openReportDetails(player, reportId);
92111
} else if (event.getView().getTitle().equals("Report Details")) {
93112
event.setCancelled(true);
94-
if (event.getCurrentItem() == null) {
95-
return;
96-
}
97-
98-
Player player = (Player) event.getWhoClicked();
99113
ItemStack clickedItem = event.getCurrentItem();
100-
ItemMeta meta = clickedItem.getItemMeta();
101-
if (meta == null) {
102-
return;
103-
}
114+
if (clickedItem == null || !clickedItem.hasItemMeta()) return;
104115

105-
if (clickedItem.getType() == Material.RED_STAINED_GLASS_PANE && meta.getDisplayName().equals(ChatColor.RED + "Close Report")) {
106-
int reportIndex = event.getInventory().getItem(13).getAmount() - 1;
107-
List<Report> allReports = reportHandler.getAllReports();
108-
if (reportIndex < allReports.size()) {
109-
Report report = allReports.get(reportIndex);
110-
UUID reporterId = reportHandler.getReporterUUID(report);
111-
if (reporterId != null) {
112-
reportHandler.removeReport(reporterId, reportIndex);
113-
player.sendMessage(ChatColor.GREEN + "Report closed.");
114-
player.closeInventory();
115-
openReportGUI(player, reportHandler);
116-
}
116+
ItemMeta meta = clickedItem.getItemMeta();
117+
if (meta == null) return;
118+
119+
String displayName = meta.getDisplayName();
120+
String reportId = event.getInventory().getItem(10).getItemMeta().getDisplayName().split("#")[1];
121+
122+
if (displayName.equals("Back")) {
123+
openReportMenu(player);
124+
} else if (displayName.equals("Teleport to Location")) {
125+
Location location = reportHandler.getReportLocation(reportId);
126+
if (location != null) {
127+
player.teleport(location);
128+
player.sendMessage("Teleported to the report location.");
129+
} else {
130+
player.sendMessage("Failed to find the report location.");
117131
}
118-
} else if (clickedItem.getType() == Material.ARROW && meta.getDisplayName().equals(ChatColor.GREEN + "Back to Reports")) {
119-
player.closeInventory();
120-
openReportGUI(player, reportHandler);
132+
} else if (displayName.equals("Close Report")) {
133+
reportHandler.clearReport(reportId);
134+
player.sendMessage("Report #" + reportId + " has been closed.");
135+
openReportMenu(player);
121136
}
122137
}
123138
}
124139

125-
private static ItemStack createGuiItem(Material material, String name, String... lore) {
126-
ItemStack item = new ItemStack(material);
127-
ItemMeta meta = item.getItemMeta();
128-
if (meta != null) {
129-
meta.setDisplayName(name);
130-
List<String> metaLore = new ArrayList<>();
131-
for (String loreEntry : lore) {
132-
metaLore.add(loreEntry);
140+
private List<Map.Entry<String, Map<String, String>>> getSortedReports() {
141+
List<Map.Entry<String, Map<String, String>>> entries = new ArrayList<>(reportHandler.getReports().entrySet());
142+
143+
entries.sort(Comparator.comparing(entry -> {
144+
String dateString = entry.getValue().get("date");
145+
try {
146+
return new SimpleDateFormat("dd-MM-yy HH:mm").parse(dateString);
147+
} catch (ParseException e) {
148+
e.printStackTrace();
149+
return new Date(0); // fallback to epoch time in case of parse error
133150
}
134-
meta.setLore(metaLore);
135-
item.setItemMeta(meta);
136-
}
137-
return item;
151+
}));
152+
153+
return entries;
138154
}
139155
}

0 commit comments

Comments
 (0)