Skip to content

Commit d25b6b7

Browse files
authored
Colour update
this update add colour to chat messages and gui headers
1 parent fea14b3 commit d25b6b7

File tree

16 files changed

+1002
-163
lines changed

16 files changed

+1002
-163
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.7</version>
7+
<version>3.1.1</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.7</version>
9+
<version>3.1.1</version>
1010
<packaging>jar</packaging>
1111

1212
<name>YETIsUtils</name>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.yetiman.yetisutils.Reportfeatures;
2+
3+
import org.bukkit.Location;
4+
5+
public class Report {
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;
11+
12+
public Report(String playerName, String report, String date, String time, Location location) {
13+
this.playerName = playerName;
14+
this.report = report;
15+
this.date = date;
16+
this.time = time;
17+
this.location = location;
18+
}
19+
20+
public String getPlayerName() {
21+
return playerName;
22+
}
23+
24+
public String getReport() {
25+
return report;
26+
}
27+
28+
public String getDate() {
29+
return date;
30+
}
31+
32+
public String getTime() {
33+
return time;
34+
}
35+
36+
public Location getLocation() {
37+
return location;
38+
}
39+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.yetiman.yetisutils.Reportfeatures;
2+
3+
import org.bukkit.ChatColor;
4+
import org.bukkit.Location;
5+
import org.bukkit.command.Command;
6+
import org.bukkit.command.CommandExecutor;
7+
import org.bukkit.command.CommandSender;
8+
import org.bukkit.command.TabCompleter;
9+
import org.bukkit.entity.Player;
10+
11+
import java.util.Collections;
12+
import java.util.List;
13+
14+
public class ReportCommand implements CommandExecutor, TabCompleter {
15+
private final ReportHandler reportHandler;
16+
17+
public ReportCommand(ReportHandler reportHandler) {
18+
this.reportHandler = reportHandler;
19+
}
20+
21+
@Override
22+
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
23+
if (!(sender instanceof Player)) {
24+
sender.sendMessage(ChatColor.RED + "Only players can use this command.");
25+
return true;
26+
}
27+
28+
if (args.length < 1) {
29+
sender.sendMessage(ChatColor.RED + "Usage: /report <issue>");
30+
return true;
31+
}
32+
33+
Player player = (Player) sender;
34+
String issue = String.join(" ", args);
35+
Location location = player.getLocation();
36+
reportHandler.addReport(player, issue, location);
37+
sender.sendMessage(ChatColor.GREEN + "Report submitted. Thank you!");
38+
return true;
39+
}
40+
41+
@Override
42+
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
43+
return Collections.emptyList(); // No tab completion needed for the report command
44+
}
45+
}
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
package org.yetiman.yetisutils.Reportfeatures;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.ChatColor;
5+
import org.bukkit.Location;
6+
import org.bukkit.Material;
7+
import org.bukkit.entity.Player;
8+
import org.bukkit.event.EventHandler;
9+
import org.bukkit.event.Listener;
10+
import org.bukkit.event.inventory.InventoryClickEvent;
11+
import org.bukkit.inventory.Inventory;
12+
import org.bukkit.inventory.ItemStack;
13+
import org.bukkit.inventory.meta.ItemMeta;
14+
import org.yetiman.yetisutils.YETIsUtils;
15+
16+
import java.util.Arrays;
17+
import java.util.Comparator;
18+
import java.util.List;
19+
import java.util.Map;
20+
21+
public class ReportGUI implements Listener {
22+
private final ReportHandler reportHandler;
23+
private final YETIsUtils plugin;
24+
private boolean eventsRegistered = false;
25+
26+
public ReportGUI(YETIsUtils plugin, ReportHandler reportHandler) {
27+
this.reportHandler = reportHandler;
28+
this.plugin = plugin;
29+
if (!eventsRegistered) {
30+
Bukkit.getPluginManager().registerEvents(this, plugin);
31+
eventsRegistered = true;
32+
}
33+
}
34+
35+
public void openReportMenu(Player player) {
36+
List<Map.Entry<String, Map<String, String>>> reports = reportHandler.getAllReports();
37+
reports.sort(Comparator.comparing(o -> o.getValue().get("date"))); // Sort by date
38+
39+
Inventory reportMenu = Bukkit.createInventory(null, 54, "Reports");
40+
41+
for (int i = 0; i < reports.size(); i++) {
42+
Map.Entry<String, Map<String, String>> reportEntry = reports.get(i);
43+
Map<String, String> report = reportEntry.getValue();
44+
ItemStack item = new ItemStack(Material.BOOK);
45+
ItemMeta meta = item.getItemMeta();
46+
if (meta != null) {
47+
meta.setDisplayName(ChatColor.YELLOW + "Report ID: " + reportEntry.getKey());
48+
meta.setLore(Arrays.asList(
49+
ChatColor.GREEN + "Player: " + ChatColor.WHITE + report.get("player"),
50+
ChatColor.RED + "Issue: " + ChatColor.WHITE + report.get("issue"),
51+
ChatColor.BLUE + "Date: " + ChatColor.WHITE + report.get("date")
52+
));
53+
item.setItemMeta(meta);
54+
}
55+
reportMenu.addItem(item);
56+
}
57+
58+
player.openInventory(reportMenu);
59+
}
60+
61+
public void openReportDetails(Player player, String reportId) {
62+
Map<String, String> report = reportHandler.getReport(reportId);
63+
if (report == null) {
64+
player.sendMessage(ChatColor.RED + "Report not found.");
65+
return;
66+
}
67+
68+
Inventory reportDetails = Bukkit.createInventory(null, 27, "Report Details");
69+
70+
ItemStack reportItem = new ItemStack(Material.PAPER);
71+
ItemMeta reportMeta = reportItem.getItemMeta();
72+
if (reportMeta != null) {
73+
reportMeta.setDisplayName(ChatColor.YELLOW + "Report ID: " + reportId);
74+
reportMeta.setLore(Arrays.asList(
75+
ChatColor.GREEN + "Player: " + ChatColor.WHITE + report.get("player"),
76+
ChatColor.RED + "Issue: " + ChatColor.WHITE + report.get("issue"),
77+
ChatColor.BLUE + "Date: " + ChatColor.WHITE + report.get("date")
78+
));
79+
reportItem.setItemMeta(reportMeta);
80+
}
81+
82+
ItemStack backButton = new ItemStack(Material.BARRIER);
83+
ItemMeta backMeta = backButton.getItemMeta();
84+
if (backMeta != null) {
85+
backMeta.setDisplayName(ChatColor.RED + "Back");
86+
backButton.setItemMeta(backMeta);
87+
}
88+
89+
ItemStack teleportButton = new ItemStack(Material.ENDER_PEARL);
90+
ItemMeta teleportMeta = teleportButton.getItemMeta();
91+
if (teleportMeta != null) {
92+
teleportMeta.setDisplayName(ChatColor.GREEN + "Teleport to Location");
93+
teleportButton.setItemMeta(teleportMeta);
94+
}
95+
96+
ItemStack closeButton = new ItemStack(Material.RED_STAINED_GLASS_PANE);
97+
ItemMeta closeMeta = closeButton.getItemMeta();
98+
if (closeMeta != null) {
99+
closeMeta.setDisplayName(ChatColor.RED + "Close Report");
100+
closeButton.setItemMeta(closeMeta);
101+
}
102+
103+
reportDetails.setItem(10, reportItem);
104+
reportDetails.setItem(12, teleportButton);
105+
reportDetails.setItem(14, closeButton);
106+
reportDetails.setItem(16, backButton);
107+
108+
player.openInventory(reportDetails);
109+
}
110+
111+
@EventHandler
112+
public void onInventoryClick(InventoryClickEvent event) {
113+
if (!(event.getWhoClicked() instanceof Player)) return;
114+
Player player = (Player) event.getWhoClicked();
115+
116+
if (event.getView().getTitle().equals("Reports")) {
117+
event.setCancelled(true);
118+
ItemStack clickedItem = event.getCurrentItem();
119+
if (clickedItem == null || !clickedItem.hasItemMeta()) return;
120+
121+
String reportId = clickedItem.getItemMeta().getDisplayName().replace(ChatColor.YELLOW + "Report ID: ", "");
122+
openReportDetails(player, reportId);
123+
} else if (event.getView().getTitle().equals("Report Details")) {
124+
event.setCancelled(true);
125+
ItemStack clickedItem = event.getCurrentItem();
126+
if (clickedItem == null || !clickedItem.hasItemMeta()) return;
127+
128+
ItemMeta meta = clickedItem.getItemMeta();
129+
if (meta == null) return;
130+
131+
String displayName = meta.getDisplayName();
132+
String reportId = event.getInventory().getItem(10).getItemMeta().getDisplayName().replace(ChatColor.YELLOW + "Report ID: ", "");
133+
134+
if (displayName.equals(ChatColor.RED + "Back")) {
135+
openReportMenu(player);
136+
} else if (displayName.equals(ChatColor.GREEN + "Teleport to Location")) {
137+
Map<String, String> report = reportHandler.getReport(reportId);
138+
if (report == null) {
139+
player.sendMessage(ChatColor.RED + "Report location not found.");
140+
return;
141+
}
142+
Location location = new Location(
143+
Bukkit.getWorld(report.get("world")),
144+
Double.parseDouble(report.get("x")),
145+
Double.parseDouble(report.get("y")),
146+
Double.parseDouble(report.get("z"))
147+
);
148+
player.teleport(location);
149+
player.sendMessage(ChatColor.GREEN + "Teleported to the report location.");
150+
} else if (displayName.equals(ChatColor.RED + "Close Report")) {
151+
reportHandler.removeReport(reportId);
152+
player.sendMessage(ChatColor.RED + "Report ID: " + reportId + " has been closed.");
153+
openReportMenu(player);
154+
}
155+
}
156+
}
157+
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package org.yetiman.yetisutils.Reportfeatures;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.Location;
5+
import org.bukkit.OfflinePlayer;
6+
import org.bukkit.entity.Player;
7+
import org.bukkit.configuration.file.FileConfiguration;
8+
import org.bukkit.configuration.file.YamlConfiguration;
9+
import org.bukkit.ChatColor;
10+
import org.yetiman.yetisutils.YETIsUtils;
11+
12+
import java.io.File;
13+
import java.io.IOException;
14+
import java.text.SimpleDateFormat;
15+
import java.util.*;
16+
17+
public class ReportHandler {
18+
private final YETIsUtils plugin;
19+
private final Map<String, Map<String, String>> reports = new HashMap<>();
20+
private final ReportNotification reportNotification;
21+
22+
public ReportHandler(YETIsUtils plugin) {
23+
this.plugin = plugin;
24+
this.reportNotification = new ReportNotification(this);
25+
loadReports();
26+
}
27+
28+
public YETIsUtils getPlugin() {
29+
return plugin;
30+
}
31+
32+
public void addReport(OfflinePlayer player, String issue, Location location) {
33+
String reportId = generateReportId(player);
34+
Map<String, String> reportData = new HashMap<>();
35+
reportData.put("player", player.getName());
36+
reportData.put("issue", issue);
37+
reportData.put("world", location.getWorld().getName());
38+
reportData.put("x", String.valueOf(location.getX()));
39+
reportData.put("y", String.valueOf(location.getY()));
40+
reportData.put("z", String.valueOf(location.getZ()));
41+
reportData.put("date", new SimpleDateFormat("dd-MM-yy HH:mm").format(new Date()));
42+
43+
reports.put(reportId, reportData);
44+
saveReportToFile(reportId, reportData);
45+
notifyAdmins(player.getName(), issue);
46+
}
47+
48+
private String generateReportId(OfflinePlayer player) {
49+
int count = 1;
50+
while (reports.containsKey(player.getName() + count)) {
51+
count++;
52+
}
53+
return player.getName() + count;
54+
}
55+
56+
public int getOpenReportsCount() {
57+
return reports.size();
58+
}
59+
60+
public List<Map.Entry<String, Map<String, String>>> getAllReports() {
61+
return new ArrayList<>(reports.entrySet());
62+
}
63+
64+
public Map<String, String> getReport(String reportId) {
65+
return reports.get(reportId);
66+
}
67+
68+
public void removeReport(String reportId) {
69+
reports.remove(reportId);
70+
File reportFile = new File(plugin.getDataFolder(), "reports/" + reportId + ".yml");
71+
if (reportFile.exists()) {
72+
reportFile.delete();
73+
}
74+
}
75+
76+
private void saveReportToFile(String reportId, Map<String, String> reportData) {
77+
File reportFile = new File(plugin.getDataFolder(), "reports/" + reportId + ".yml");
78+
FileConfiguration config = YamlConfiguration.loadConfiguration(reportFile);
79+
for (Map.Entry<String, String> entry : reportData.entrySet()) {
80+
config.set(entry.getKey(), entry.getValue());
81+
}
82+
try {
83+
config.save(reportFile);
84+
} catch (IOException e) {
85+
e.printStackTrace();
86+
}
87+
}
88+
89+
public void loadReports() {
90+
reports.clear();
91+
File reportsFolder = new File(plugin.getDataFolder(), "reports");
92+
if (!reportsFolder.exists()) {
93+
reportsFolder.mkdirs();
94+
}
95+
File[] files = reportsFolder.listFiles((dir, name) -> name.endsWith(".yml"));
96+
if (files != null) {
97+
for (File file : files) {
98+
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
99+
Map<String, String> reportData = new HashMap<>();
100+
for (String key : config.getKeys(false)) {
101+
reportData.put(key, config.getString(key));
102+
}
103+
reports.put(file.getName().replace(".yml", ""), reportData);
104+
}
105+
}
106+
}
107+
108+
public void saveReports() {
109+
for (Map.Entry<String, Map<String, String>> entry : reports.entrySet()) {
110+
saveReportToFile(entry.getKey(), entry.getValue());
111+
}
112+
}
113+
114+
private void notifyAdmins(String playerName, String issue) {
115+
reportNotification.notifyNewReport(playerName, issue);
116+
}
117+
}

0 commit comments

Comments
 (0)