diff --git a/src/main/java/dev/zxq5/fantasysmp/groups/Commands.java b/src/main/java/dev/zxq5/fantasysmp/groups/Commands.java index 248fdbf..4b86534 100644 --- a/src/main/java/dev/zxq5/fantasysmp/groups/Commands.java +++ b/src/main/java/dev/zxq5/fantasysmp/groups/Commands.java @@ -1,9 +1,15 @@ package dev.zxq5.fantasysmp.groups; import dev.zxq5.fantasysmp.chatutils.Chat; +import dev.zxq5.fantasysmp.warps.Warp; +import dev.zxq5.fantasysmp.warps.WarpType; import org.bukkit.command.CommandExecutor; import org.bukkit.entity.Player; +import java.util.ArrayList; + +import static org.bukkit.Bukkit.getServer; + /* * Commands: * @@ -48,6 +54,7 @@ public class Commands implements CommandExecutor { case "list" -> this.handleList(player, args); case "create" -> this.handleCreate(player, args); case "rename" -> this.handleRename(player, args); + case "tag" -> this.handleSetTag(player, args); case "transfer" -> this.handleTransfer(player, args); case "join" -> this.handleJoin(player, args); case "invite" -> this.handleInvite(player, args); @@ -77,31 +84,127 @@ public class Commands implements CommandExecutor { } } - public void handleList(Player player, String[] args) {} + public void handleList(Player player, String[] args) { + String[] teams = Team.getTeams(); + String result = "Teams: [\n " + String.join("\n ", teams) + "\n]"; + Chat.info(player, result); + } - public void handleCreate(Player player, String[] args) {} + public void handleCreate(Player player, String[] args) { + if (args.length != 2) { + Chat.error(player, "Usage: /team create "); + return; + } - public void handleRename(Player player, String[] args) {} + Team.createTeam(player, args[1]); + } - public void handleTransfer(Player player, String[] args) {} + public void handleRename(Player player, String[] args) { + if (args.length != 2) { + Chat.error(player, "Usage: /team rename "); + return; + } - public void handleJoin(Player player, String[] args) {} + if (args[1].isEmpty() || args[1].contains(" ") || args[1].contains("\t")) { + Chat.error(player, "Invalid name!"); + return; + } - public void handleInvite(Player player, String[] args) {} + Team.renameTeam(player, args[1]); + } - public void handleLeave(Player player, String[] args) {} + public void handleSetTag(Player player, String[] args) { + if (args.length != 2) { + Chat.error(player, "Usage: /team tag "); + return; + } - public void handleDisband(Player player, String[] args) {} + if (args[1].length < 3 || args[1].contains(" ") || args[1].contains("\t") || args.length > 8) { + Chat.error(player, "Invalid tag!"); + Chat.error(player, "tags should be 3-8 chars, alphanumeric and have no spaces"); + } + } - public void handleSetWarp(Player player, String[] args) {} + public void handleTransfer(Player player, String[] args) { + if (args.length != 2) { + Chat.error(player, "Usage: /team transfer "); + return; + } + } - public void handleDelWarp(Player player, String[] args) {} + public void handleJoin(Player player, String[] args) { + if (args.length != 2) { + Chat.error(player, "Usage: /team join "); + return; + } + } - public void handleWarp(Player player, String[] args) {} + public void handleInvite(Player player, String[] args) { + if (args.length != 2) { + Chat.error(player, "Usage: /team invite "); + return; + } + } - public void handleKick(Player player, String[] args) {} + public void handleLeave(Player player, String[] args) { + if (args.length != 1) { + Chat.error(player, "Usage: /team leave"); + return; + } - public void handleLog(Player player, String[] args) {} + Team.leaveTeam(player); + } + + public void handleDisband(Player player, String[] args) { + if (args.length != 1) { + Chat.error(player, "Usage: /team disband"); + return; + } + + Team.disbandTeam(player); + } + + public void handleSetWarp(Player player, String[] args) { + if (args.length != 2) { + Chat.error(player, "Usage: /team setwarp "); + return; + } + + Warp.setWarp(args[1], player, WarpType.TEAM); + } + + public void handleDelWarp(Player player, String[] args) { + + } + + public void handleWarp(Player player, String[] args) { + if (args.length != 2) { + Chat.error(player, "Usage: /team warp "); + return; + } + Team team = Team.fromMember(player); + Warp warp = Warp.getTeamWarp(team, args[1]); + } + + public void handleKick(Player player, String[] args) { + if (args.length != 2) { + Chat.error(player, "Usage: /team kick "); + return; + } + + Team.removePlayer(player, args[1]); + } + + public void handleLog(Player player, String[] args) { + if (args.length != 1) { + Chat.error(player, "Usage: /team log"); + return; + } + + ArrayList logs = Team.getLogs(player); + String result = "Logs: [\n " + String.join("\n ", logs) + "\n]"; + Chat.info(player, result); + } public void handleCreateRank(Player player, String[] args) {} diff --git a/src/main/java/dev/zxq5/fantasysmp/groups/Team.java b/src/main/java/dev/zxq5/fantasysmp/groups/Team.java index 17984cf..620b395 100644 --- a/src/main/java/dev/zxq5/fantasysmp/groups/Team.java +++ b/src/main/java/dev/zxq5/fantasysmp/groups/Team.java @@ -1,55 +1,157 @@ 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.entity.Player; import java.io.*; import java.util.ArrayList; +import java.util.UUID; import static org.bukkit.Bukkit.getServer; public class Team { - private static Team[] teams; + private static ArrayList teams; private String name; private String ownerUUID; private ArrayList members; + private ArrayList logs; + private String teamUUID; private String tag; public Team(Player creator, String name, String tag) { this.name = name; this.tag = tag; + this.teamUUID = UUID.randomUUID().toString(); this.ownerUUID = creator.getUniqueId().toString(); this.members = new ArrayList<>(); members.add(creator.getUniqueId().toString()); } - public Team createTeam(Player creator, String name) { + public static Team createTeam(Player creator, String name) { Team team = new Team(creator, name, name); - - - + teams.add(team); return team; } + public static Team fromMember(Player member) { + for (Team team : teams) { + if (team.members.contains(member.getUniqueId().toString())) return team; + } + return null; + } + public static String[] getTeams() { + String[] names = new String[teams.size()]; + for (int i = 0; i < teams.size(); i++) { + names[i] = teams.get(i).name; + } + 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 + "."); + return; + } + } + public static void transferTeam(Player player, String playerName) { + 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() + "."); + return; + } + } + public static void removePlayer(Player remover, String playerName) { + Player removedPlayer = getServer().getPlayer(playerName); + if (removedPlayer == null) { + Chat.error(remover, "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."); + 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."); + 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."); + return; + } + } + 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."); + return; + } + } + + public static ArrayList getLogs(Player player) { + for (Team team : teams) { + if (team.ownerUUID.equals(player.getUniqueId().toString())) { + return team.logs; + } + } + return null; + } + + public void log(String message) { + this.logs.add(message); + } public static void loadTeams() throws Exception { File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder(); @@ -63,7 +165,7 @@ public class Team { reader = new BufferedReader(new FileReader(file)); Gson gson = new Gson(); - teams = gson.fromJson(reader, Team[].class); + teams = gson.fromJson(reader, new TypeToken>(){}.getType()); reader.close(); } @@ -96,4 +198,8 @@ public class Team { } } } + + public String getUUID() { + return this.teamUUID; + } } diff --git a/src/main/java/dev/zxq5/fantasysmp/warps/Warp.java b/src/main/java/dev/zxq5/fantasysmp/warps/Warp.java index 371c22f..3f4b6e3 100644 --- a/src/main/java/dev/zxq5/fantasysmp/warps/Warp.java +++ b/src/main/java/dev/zxq5/fantasysmp/warps/Warp.java @@ -1,6 +1,7 @@ package dev.zxq5.fantasysmp.warps; import com.google.gson.Gson; +import dev.zxq5.fantasysmp.groups.Team; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.World; @@ -105,6 +106,17 @@ public class Warp { return null; } + public static Warp getTeamWarp(Team team, String name) { + for (Warp warp : warps) { + if (warp.type.equals(WarpType.TEAM)) { + if (warp.name.equals(name) && warp.setby.equals(team.getUUID())) { + return warp; + } + } + } + return null; + } + public static String listWarps(UUID player) { String message = ChatColor.WHITE + "All Warps: [\n" + ChatColor.GREEN; @@ -162,13 +174,6 @@ public class Warp { } } -enum WarpType { - HOME, - PUBLIC, - DEATH, - TEAM, -} - diff --git a/src/main/java/dev/zxq5/fantasysmp/warps/WarpType.java b/src/main/java/dev/zxq5/fantasysmp/warps/WarpType.java new file mode 100644 index 0000000..c78b198 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/warps/WarpType.java @@ -0,0 +1,8 @@ +package dev.zxq5.fantasysmp.warps; + +public enum WarpType { + HOME, + PUBLIC, + DEATH, + TEAM, +}