idk
Java CI with Maven / build (push) Successful in 27s

This commit is contained in:
2025-08-28 23:06:35 +01:00
parent 14452adf08
commit 03d01f9422
6 changed files with 255 additions and 79 deletions
@@ -1,8 +1,11 @@
package dev.zxq5.fantasysmp;
import dev.zxq5.fantasysmp.events.Chat;
import dev.zxq5.fantasysmp.events.HereticWarner;
import dev.zxq5.fantasysmp.events.StevenKillCheck;
import dev.zxq5.fantasysmp.events.XrayDetector;
import dev.zxq5.fantasysmp.groups.Commands;
import dev.zxq5.fantasysmp.groups.Team;
import dev.zxq5.fantasysmp.items.*;
import dev.zxq5.fantasysmp.warps.Warp;
import dev.zxq5.fantasysmp.warps.Warper;
@@ -19,6 +22,7 @@ public final class Fantasysmp extends JavaPlugin {
try {
Warp.loadWarps();
Team.loadTeams();
} catch (Exception e) {
e.printStackTrace();
}
@@ -30,6 +34,9 @@ public final class Fantasysmp extends JavaPlugin {
getCommand("warp").setExecutor(new Warper());
getCommand("rewarps").setExecutor(new Warper());
getCommand("warps").setExecutor(new Warper());
getCommand("team").setExecutor(new Commands());
getServer().getPluginManager().registerEvents(new Chat(), this);
getServer().getPluginManager().registerEvents(new StevenKillCheck(), this);
@@ -42,6 +49,11 @@ public final class Fantasysmp extends JavaPlugin {
@Override
public void onDisable() {
// Plugin shutdown logic
try {
Warp.saveWarps();
Team.saveTeams();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,16 @@
package dev.zxq5.fantasysmp.events;
import dev.zxq5.fantasysmp.groups.Team;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class Chat implements Listener {
@EventHandler
public void onChat(org.bukkit.event.player.AsyncPlayerChatEvent event) {
Team team = Team.fromMember(event.getPlayer());
if (team != null) {
event.setFormat(ChatColor.WHITE + "[" + team.getTag() + ChatColor.WHITE + "]" + ChatColor.RESET + " <%s> %s");
}
}
}
@@ -62,6 +62,7 @@ public class Commands implements CommandExecutor {
case "disband" -> this.handleDisband(player, args);
case "setwarp" -> this.handleSetWarp(player, args);
case "delwarp" -> this.handleDelWarp(player, args);
case "colour" -> this.handleSetColour(player, args);
case "warp" -> this.handleWarp(player, args);
case "kick" -> this.handleKick(player, args);
case "log" -> this.handleLog(player, args);
@@ -99,6 +100,18 @@ public class Commands implements CommandExecutor {
Team.createTeam(player, args[1]);
}
public void handleSetColour(Player player, String[] args) {
if (args.length != 2) {
Chat.error(player, "Usage: /team colour <color>");
return;
}
Team team = Team.fromMember(player);
if (team == null) return;
team.setColour(player, args[1]);
}
public void handleRename(Player player, String[] args) {
if (args.length != 2) {
Chat.error(player, "Usage: /team rename <new name>");
@@ -110,7 +123,10 @@ public class Commands implements CommandExecutor {
return;
}
Team.renameTeam(player, args[1]);
Team team = Team.fromMember(player);
if (team == null) return;
team.renameTeam(player, args[1]);
}
public void handleSetTag(Player player, String[] args) {
@@ -119,10 +135,16 @@ public class Commands implements CommandExecutor {
return;
}
if (args[1].length < 3 || args[1].contains(" ") || args[1].contains("\t") || args.length > 8) {
if (args[1].length() < 3 || args[1].contains(" ") || args[1].contains("\t") || args[1].length() > 8) {
Chat.error(player, "Invalid tag!");
Chat.error(player, "tags should be 3-8 chars, alphanumeric and have no spaces");
return;
}
Team team = Team.fromMember(player);
if (team == null) return;
team.changeTeamTag(player, args[1]);
}
public void handleTransfer(Player player, String[] args) {
@@ -151,8 +173,10 @@ public class Commands implements CommandExecutor {
Chat.error(player, "Usage: /team leave");
return;
}
Team team = Team.fromMember(player);
if (team == null) return;
Team.leaveTeam(player);
team.leaveTeam(player);
}
public void handleDisband(Player player, String[] args) {
@@ -160,8 +184,10 @@ public class Commands implements CommandExecutor {
Chat.error(player, "Usage: /team disband");
return;
}
Team team = Team.fromMember(player);
if (team == null) return;
Team.disbandTeam(player);
team.disbandTeam(player);
}
public void handleSetWarp(Player player, String[] args) {
@@ -183,6 +209,8 @@ public class Commands implements CommandExecutor {
return;
}
Team team = Team.fromMember(player);
if (team == null) return;
Warp warp = Warp.getTeamWarp(team, args[1]);
}
@@ -191,8 +219,10 @@ public class Commands implements CommandExecutor {
Chat.error(player, "Usage: /team kick <player>");
return;
}
Team team = Team.fromMember(player);
if (team == null) return;
Team.removePlayer(player, args[1]);
team.removePlayer(player, args[1]);
}
public void handleLog(Player player, String[] args) {
@@ -201,7 +231,10 @@ public class Commands implements CommandExecutor {
return;
}
ArrayList<String> logs = Team.getLogs(player);
Team team = Team.fromMember(player);
if (team == null) return;
ArrayList<String> logs = team.getLogs(player);
String result = "Logs: [\n " + String.join("\n ", logs) + "\n]";
Chat.info(player, result);
}
@@ -3,16 +3,19 @@ package dev.zxq5.fantasysmp.groups;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import dev.zxq5.fantasysmp.chatutils.Chat;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.io.*;
import java.util.ArrayList;
import java.util.UUID;
import static org.bukkit.Bukkit.broadcastMessage;
import static org.bukkit.Bukkit.getServer;
public class Team {
private static ArrayList<Team> teams;
private final static String FILENAME = "teams.json";
private String name;
private String ownerUUID;
@@ -27,12 +30,21 @@ public class Team {
this.teamUUID = UUID.randomUUID().toString();
this.ownerUUID = creator.getUniqueId().toString();
this.members = new ArrayList<>();
this.logs = new ArrayList<>();
members.add(creator.getUniqueId().toString());
}
public static Team createTeam(Player creator, String name) {
if (Team.fromMember(creator) != null) {
Team.error(creator, Error.SELF_IN_TEAM);
return null;
}
Team team = new Team(creator, name, name);
team.logs.add(creator.getName() + " created the team.");
teams.add(team);
Chat.success(creator, "You created " + team.name + ".");
return team;
}
@@ -40,6 +52,8 @@ public class Team {
for (Team team : teams) {
if (team.members.contains(member.getUniqueId().toString())) return team;
}
Team.error(member, Error.TEAM_NOT_FOUND);
return null;
}
@@ -51,111 +65,166 @@ public class Team {
return names;
}
public static void renameTeam(Player player, String newName) {
for (Team team : teams) {
if (!team.ownerUUID.equals(player.getUniqueId().toString())) continue;
team.name = newName;
team.log(player.getName() + " renamed the team to " + newName + ".");
public void renameTeam(Player player, String newName) {
if (!this.ownerUUID.equals(player.getUniqueId().toString())) {
Team.error(player, Error.NO_PERMISSION);
return;
}
String oldName = this.name;
this.name = newName;
this.log(player.getName() + " renamed the team to " + newName + ".");
Chat.success(player, "You renamed " + oldName + " to " + newName + ".");
}
public static void transferTeam(Player player, String playerName) {
public void changeTeamTag(Player player, String newTag) {
if (!this.ownerUUID.equals(player.getUniqueId().toString())) {
Team.error(player, Error.NO_PERMISSION);
return;
}
this.tag = newTag;
this.log(player.getName() + " changed the team tag to " + newTag + ".");
Chat.success(player, "You changed the tag of " + this.name + " to " + newTag + ".");
}
public void setColour (Player player, String colour) {
if (!this.ownerUUID.equals(player.getUniqueId().toString())) {
Team.error(player, Error.NO_PERMISSION);
return;
}
switch (colour) {
case "red" -> this.tag = ChatColor.RED + this.tag;
case "green" -> this.tag = ChatColor.GREEN + this.tag;
case "blue" -> this.tag = ChatColor.BLUE + this.tag;
case "yellow" -> this.tag = ChatColor.YELLOW + this.tag;
case "aqua" -> this.tag = ChatColor.AQUA + this.tag;
case "dark_aqua" -> this.tag = ChatColor.DARK_AQUA + this.tag;
case "dark_blue" -> this.tag = ChatColor.DARK_BLUE + this.tag;
case "dark_gray" -> this.tag = ChatColor.DARK_GRAY + this.tag;
case "dark_green" -> this.tag = ChatColor.DARK_GREEN + this.tag;
case "dark_purple" -> this.tag = ChatColor.DARK_PURPLE + this.tag;
case "gold" -> this.tag = ChatColor.GOLD + this.tag;
case "gray" -> this.tag = ChatColor.GRAY + this.tag;
case "light_purple" -> this.tag = ChatColor.LIGHT_PURPLE + this.tag;
case "white" -> this.tag = ChatColor.WHITE + this.tag;
case "black" -> this.tag = ChatColor.BLACK + this.tag;
}
this.log(player.getName() + " changed the team colour to " + colour + ".");
Chat.success(player, "You changed the colour of " + this.name + " to " + colour + ".");
}
public void transferTeam(Player player, String playerName) {
if (!this.ownerUUID.equals(player.getUniqueId().toString())) {
Team.error(player, Error.NO_PERMISSION);
return;
}
Player newOwner = getServer().getPlayer(playerName);
for (Team team : teams) {
if (!team.ownerUUID.equals(player.getUniqueId().toString())) continue;
team.ownerUUID = newOwner.getUniqueId().toString();
team.log(player.getName() + " transferred ownership to " + newOwner.getName() + ".");
if (newOwner == null) {
Team.error(player, Error.PLAYER_NOT_FOUND);
return;
}
String newUUID = newOwner.getUniqueId().toString();
if (!this.members.contains(newUUID)) {
Team.error(player, Error.PLAYER_NOT_FOUND);
return;
}
this.ownerUUID = newUUID;
this.log(player.getName() + " transferred ownership to " + newOwner.getName() + ".");
Chat.success(player, "You transferred ownership of " + this.name + " to " + newOwner.getName() + ".");
}
public static void removePlayer(Player remover, String playerName) {
public void removePlayer(Player remover, String playerName) {
Player removedPlayer = getServer().getPlayer(playerName);
if (removedPlayer == null) {
Chat.error(remover, "Player not found!");
Team.error(remover, Error.PLAYER_NOT_FOUND);
return;
}
String removerUUID = remover.getUniqueId().toString();
String removedPlayerUUID = removedPlayer.getUniqueId().toString();
for (Team team : teams) {
if (!team.members.contains(removerUUID)) continue;
if (!team.ownerUUID.equals(removerUUID)) {
Chat.error(remover, "You do not have permission to remove players from this team.");
return;
}
if (!team.members.contains(removedPlayerUUID)) {
Chat.error(remover, "This player is not in your team.");
return;
}
if (removedPlayerUUID.equals(team.ownerUUID)) {
Chat.error(remover, "You cannot remove yourself!");
return;
}
team.members.remove(removedPlayerUUID);
team.log(remover.getName() + " removed " + removedPlayer.getName() + " from the team.");
if (removedPlayerUUID.equals(this.ownerUUID)) {
Team.error(remover, Error.TEAM_OWNER);
return;
}
}
public static void leaveTeam(Player player) {
for (Team team : teams) {
if (!team.members.contains(player.getUniqueId().toString())) continue;
if (team.ownerUUID.equals(player.getUniqueId().toString())) {
player.sendMessage("You cannot leave a team that you own!");
}
team.members.remove(player.getUniqueId().toString());
team.log(player.getName() + " left the team.");
if (!this.ownerUUID.equals(removerUUID)) {
Team.error(remover, Error.NO_PERMISSION);
return;
}
}
public static void disbandTeam(Player player) {
for (Team team : teams) {
if (!team.ownerUUID.equals(player.getUniqueId().toString())) continue;
teams.remove(team);
team.log(player.getName() + " disbanded the team.");
if (!this.members.contains(removedPlayerUUID)) {
Team.error(remover, Error.PLAYER_NOT_FOUND);
return;
}
this.members.remove(removedPlayerUUID);
this.log(remover.getName() + " removed " + removedPlayer.getName() + " from the team.");
Chat.success(remover, "You removed " + removedPlayer.getName() + " from " + this.name + ".");
}
public static void addMember(Player player) {
for (Team team : teams) {
if (!team.ownerUUID.equals(player.getUniqueId().toString())) continue;
team.members.add(player.getUniqueId().toString());
team.log(player.getName() + " joined the team.");
public void leaveTeam(Player member) {
if (this.ownerUUID.equals(member.getUniqueId().toString())) {
Team.error(member, Error.TEAM_OWNER);
return;
}
this.members.remove(member.getUniqueId().toString());
this.log(member.getName() + " left the team.");
Chat.success(member, "You left " + this.name + ".");
}
public static ArrayList<String> getLogs(Player player) {
for (Team team : teams) {
if (team.ownerUUID.equals(player.getUniqueId().toString())) {
return team.logs;
}
public void disbandTeam(Player member) {
if (!this.ownerUUID.equals(member.getUniqueId().toString())) {
Team.error(member, Error.NO_PERMISSION);
return;
}
teams.remove(this);
this.log(member.getName() + " disbanded the team.");
Chat.success(member, "You disbanded " + this.name + ".");
}
public void addMember(Player member) {
if (!this.ownerUUID.equals(member.getUniqueId().toString())) {
Team.error(member, Error.NO_PERMISSION);
return;
}
this.members.add(member.getUniqueId().toString());
this.log(member.getName() + " joined the team.");
Chat.success(member, "You joined " + this.name + ".");
}
public ArrayList<String> getLogs(Player member) {
if (this.ownerUUID.equals(member.getUniqueId().toString())) return this.logs;
Team.error(member, Error.NO_PERMISSION);
return null;
}
public void log(String message) {
this.logs.add(message);
Team.saveTeams();
}
public static void loadTeams() throws Exception {
File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
File file = new File(dataFolder, "warps.json");
File file = new File(dataFolder, FILENAME);
if (!file.exists()) {
createTeamsFile();
@@ -170,20 +239,26 @@ public class Team {
reader.close();
}
public static void saveTeams() throws Exception {
public static void saveTeams() {
File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
File file = new File(dataFolder, "teams.json");
File file = new File(dataFolder, FILENAME);
Gson gson = new Gson();
String json = gson.toJson(teams);
Writer writer = new FileWriter(file);
writer.write(json);
writer.close();
try {
Writer writer = new FileWriter(file);
writer.write(json);
writer.close();
} catch (Exception e) {
broadcastMessage("Error saving teams. Please contact an admin.");
e.printStackTrace();
}
}
public static void createTeamsFile() {
File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
File file = new File(dataFolder, "teams.json");
File file = new File(dataFolder, FILENAME);
if (!file.exists()) {
try {
@@ -202,4 +277,32 @@ public class Team {
public String getUUID() {
return this.teamUUID;
}
public String getTag() {
return this.tag;
}
public static void error(Player player, Error error) {
Chat.error(player, switch (error) {
case NO_PERMISSION -> "You do not have permission to do that!";
case SELF_IN_TEAM -> "You are already in a team!";
case NOT_IN_TEAM -> "You are not in a team!";
case TEAM_NOT_FOUND -> "Team not found!";
case PLAYER_NOT_FOUND -> "Player not found!";
case ALREADY_TAKEN -> "That name is already taken!";
case PLAYER_IN_TEAM -> "That player is already in a team!";
case TEAM_OWNER -> "You cannot do this to/as the owner!";
});
}
}
enum Error {
NO_PERMISSION,
TEAM_OWNER,
SELF_IN_TEAM,
NOT_IN_TEAM,
TEAM_NOT_FOUND,
PLAYER_NOT_FOUND,
ALREADY_TAKEN,
PLAYER_IN_TEAM,
}
@@ -17,11 +17,13 @@ import static org.bukkit.Bukkit.getServer;
public class Warp {
private static final String FILENAME = "warps.json";
private static Warp[] warps;
private String name;
private String setby;
private String world;
private String teamUUID;
private WarpType type;
private int x;
private int y;
@@ -37,7 +39,7 @@ public class Warp {
public static void loadWarps() throws Exception {
File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
File file = new File(dataFolder, "warps.json");
File file = new File(dataFolder, FILENAME);
if (!file.exists()) {
createWarpFile();
@@ -54,7 +56,7 @@ public class Warp {
public static void saveWarps() throws Exception {
File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
File file = new File(dataFolder, "warps.json");
File file = new File(dataFolder, FILENAME);
Gson gson = new Gson();
String json = gson.toJson(warps);
@@ -65,7 +67,7 @@ public class Warp {
public static void createWarpFile() {
File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
File file = new File(dataFolder, "warps.json");
File file = new File(dataFolder, FILENAME);
if (!file.exists()) {
try {
+10
View File
@@ -47,12 +47,21 @@ commands:
usage: /warp <warp name>
permission: fantasysmp.warps
team:
description: team commands
usage: /team <subcommand>
permission: fantasysmp.teams
permissions:
fantasysmp.items:
description: create custom items from plugin
default: false
fantasysmp.teams:
description: team commands
default: true
fantasysmp.warps:
description: teleport to custom warps
default: true
@@ -73,4 +82,5 @@ permissions:
fantasysmp.manage_warps: true
fantasysmp.home: true
fantasysmp.warps: true
fantasysmp.teams: true