diff --git a/src/me/yaruma/fightsystem/FightSystem.java b/src/me/yaruma/fightsystem/FightSystem.java index 665dc97..e5a2c3b 100644 --- a/src/me/yaruma/fightsystem/FightSystem.java +++ b/src/me/yaruma/fightsystem/FightSystem.java @@ -1,7 +1,7 @@ package me.yaruma.fightsystem; import de.warking.hunjy.CoinSystem.CoinSystem; -import me.yaruma.fightsystem.commands.AkCommand; +import me.yaruma.fightsystem.commands.*; import me.yaruma.fightsystem.fight.*; import me.yaruma.fightsystem.kit.KitManager; import me.yaruma.fightsystem.listener.*; @@ -98,6 +98,11 @@ public class FightSystem extends JavaPlugin { if(Config.PercentSystem) pm.registerEvents(new WinconditionPercentSystem(), plugin); getCommand("ak").setExecutor(new AkCommand()); + getCommand("invite").setExecutor(new InviteCommand()); + getCommand("leave").setExecutor(new LeaveCommand()); + getCommand("accept").setExecutor(new AcceptCommand()); + getCommand("decline").setExecutor(new DeclineCommand()); + getCommand("ready").setExecutor(new ReadyCommand()); } private void loadConfig() { diff --git a/src/me/yaruma/fightsystem/commands/AcceptCommand.java b/src/me/yaruma/fightsystem/commands/AcceptCommand.java new file mode 100644 index 0000000..d474495 --- /dev/null +++ b/src/me/yaruma/fightsystem/commands/AcceptCommand.java @@ -0,0 +1,19 @@ +package me.yaruma.fightsystem.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class AcceptCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if(!(sender instanceof Player)) { + return false; + } + Player player = (Player) sender; + + Commands.acceptInvitation(player); + return false; + } +} diff --git a/src/me/yaruma/fightsystem/commands/AkCommand.java b/src/me/yaruma/fightsystem/commands/AkCommand.java index 3bdf79c..28381b1 100644 --- a/src/me/yaruma/fightsystem/commands/AkCommand.java +++ b/src/me/yaruma/fightsystem/commands/AkCommand.java @@ -12,7 +12,6 @@ import me.yaruma.fightsystem.kit.Kit; import me.yaruma.fightsystem.kit.KitManager; import me.yaruma.fightsystem.utils.Config; import org.bukkit.Bukkit; -import org.bukkit.GameMode; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -28,44 +27,17 @@ public class AkCommand implements CommandExecutor { } Player player = (Player) sender; - if(FightSystem.getPlugin().getFightState() == FightState.SETUP) { - - if(args.length == 1) { - - if(args[0].equalsIgnoreCase("help")) { - sendHelp(player); - - }else if(args[0].equalsIgnoreCase("ready") && FightSystem.getPlugin().getFightState() == FightState.SETUP){ - FightTeam fightTeam = Fight.getPlayerTeam(player); - if(fightTeam != null) { - fightTeam.setReady(!fightTeam.isReady()); - } - - }else if(args[0].equalsIgnoreCase("accept") && FightSystem.getPlugin().getFightState() == FightState.SETUP){ - FightTeam team = Fight.getInvitedTeam(player); - if(team != null){ - FightPlayer leader = team.getLeader(); - team.addMember(player); - player.setGameMode(GameMode.ADVENTURE); - if(team == Fight.getRedTeam()) - player.teleport(Config.TeamRedSpawn); - else - player.teleport(Config.TeamBlueSpawn); - player.sendMessage(FightSystem.PREFIX + "§aDu bist dem Team von §6" + leader.getPlayer().getName() + " §abeigetreten!"); - leader.sendMessage(FightSystem.PREFIX + "§aDer Spieler §6" + player.getName() + " §aist deinem Team beigetreten"); - } - - }else if(args[0].equalsIgnoreCase("decline") && FightSystem.getPlugin().getFightState() == FightState.SETUP){ - FightTeam team = Fight.getInvitedTeam(player); - if(team != null){ - FightPlayer leader = team.getLeader(); - team.getInvited().remove(player); - player.sendMessage(FightSystem.PREFIX + "§aDu hast die Einladung von §6" + leader.getPlayer().getName() + " §aabgelehnt!"); - leader.sendMessage(FightSystem.PREFIX + "§cDer Spieler §6" + player.getName() + " §chat deine Einladung abgelehnt!"); - } - - }else if(args[0].equalsIgnoreCase("leader")){ - + switch(args.length){ + case 1: + if(args[0].equalsIgnoreCase("ready")) + Commands.toggleReady(player); + else if(args[0].equalsIgnoreCase("accept")) + Commands.acceptInvitation(player); + else if(args[0].equalsIgnoreCase("decline")) + Commands.declineInvitation(player); + else if(args[0].equalsIgnoreCase("leave")) + Commands.leaveTeam(player); + else if(args[0].equalsIgnoreCase("leader")){ if(!Fight.getBlueTeam().hasTeamLeader()){ FightPlayer fightPlayer = new FightPlayer(player, false); Fight.getBlueTeam().setLeader(fightPlayer); @@ -78,44 +50,15 @@ public class AkCommand implements CommandExecutor { } else player.sendMessage(FightSystem.PREFIX + "§cEs sind bereits zwei Leader vorhanden!"); - } else if(args[0].equalsIgnoreCase("leave")) { - FightTeam fightTeam = Fight.getPlayerTeam(player); - if(fightTeam != null) { - fightTeam.removePlayer(player); - player.setGameMode(GameMode.SPECTATOR); - player.teleport(Config.SpecSpawn); - player.sendMessage(FightSystem.PREFIX + "§aDu hast das Team verlassen!"); - } else - player.sendMessage(FightSystem.PREFIX + "§cDu befindest dich in keinem Team!"); - } - - }else if(args.length == 2) { - - if(args[0].equalsIgnoreCase("invite") && FightSystem.getPlugin().getFightState() == FightState.SETUP){ - FightTeam fightTeam = Fight.getPlayerTeam(player); - if(fightTeam != null) { - FightPlayer fightPlayer = fightTeam.getFightPlayer(player); - if(fightPlayer.isLeader()){ - - Player target = Bukkit.getPlayer(args[1]); - if(target != null) { - if(Fight.getPlayerTeam(target) != null) { - player.sendMessage(FightSystem.PREFIX + "§cDer Spieler §6" + target.getName() + " §cist bereits in einem Team!"); - } else if(!(Fight.getOpposite(fightTeam).getInvited().contains(target) && fightTeam.getInvited().contains(target))) { - fightTeam.getInvited().add(target); - target.sendMessage(FightSystem.PREFIX + "§aDu wurdest von §6" + player.getName() + " §ain sein Team eingeladen!"); - player.sendMessage(FightSystem.PREFIX + "§aDu hast den Spieler §6" + target.getName() + " §ain dein Team eingeladen!"); - } else - player.sendMessage(FightSystem.PREFIX + "§cDieser Spieler wurde bereits eingeladen!"); - } else - player.sendMessage(FightSystem.PREFIX + "§cDieser Spieler ist nicht online!"); - } else - player.sendMessage(FightSystem.PREFIX + "§cDu bist nicht der Leader des Teams!"); - } else - player.sendMessage(FightSystem.PREFIX + "§cDu befindest dich in keinem Team!"); + }else + Commands.sendHelp(player); + break; + case 2: + if(args[0].equalsIgnoreCase("invite")){ + Commands.invite(player, args[1]); }else if(args[0].equalsIgnoreCase("remove")){ - if(FightSystem.getPlugin().getFightState() == FightState.SETUP) { + if(FightSystem.getFightState() == FightState.SETUP) { FightTeam fightTeam = Fight.getPlayerTeam(player); if(fightTeam != null) { Player target = Bukkit.getPlayer(args[1]); @@ -130,7 +73,7 @@ public class AkCommand implements CommandExecutor { } } }else if(args[0].equalsIgnoreCase("kit")) { - if(FightSystem.getPlugin().getFightState() != FightState.SETUP) { + if(FightSystem.getFightState() != FightState.SETUP) { player.sendMessage(FightSystem.PREFIX + "§cDu kannst dein Kit nicht mehr wechseln!"); return false; } @@ -163,15 +106,14 @@ public class AkCommand implements CommandExecutor { } else if(args[0].equalsIgnoreCase("addkit")){ if(WarkingUser.get(player.getUniqueId()).getUserGroup() != UserGroup.Developer){ - sendHelp(player); + Commands.sendHelp(player); return false; } KitManager.saveInventory(args[1], player); - } else if(args[0].equalsIgnoreCase("schemlist") && FightSystem.getPlugin().getFightState() == FightState.SETUP) { + } else if(args[0].equalsIgnoreCase("schemlist") && FightSystem.getFightState() == FightState.SETUP) { try { FightTeam fightTeam = Fight.getPlayerTeam(player); - if(fightTeam != null) { - if(fightTeam.getFightPlayer(player).isLeader()) { + if(fightTeam != null && fightTeam.getFightPlayer(player).isLeader()) { if(args[1].equalsIgnoreCase("public")) { Fight.getPlayerTeam(player).sendPlayerSchematicList(true, 0, 15, player, Config.SchematicType); return false; @@ -185,13 +127,14 @@ public class AkCommand implements CommandExecutor { Fight.getPlayerTeam(player).sendPlayerSchematicList(false, page, 15, player, Config.SchematicType); } } - } } catch (NumberFormatException ex) { player.sendMessage(FightSystem.PREFIX + "§cDu musst eine Seitenzahl angeben!"); return false; } - } - }else if(args.length == 3) { + }else + Commands.sendHelp(player); + break; + case 3: if(args[0].equalsIgnoreCase("schem")) { FightTeam fightTeam = Fight.getPlayerTeam(player); if(fightTeam == null) { @@ -225,25 +168,14 @@ public class AkCommand implements CommandExecutor { fightTeam.setSchematic(schem); Fight.getPlayerTeam(player).broadcast(FightSystem.PREFIX + "Schematic §6" + args[1] + " §8wird für den Kampf verwendet!"); - } - } else { - sendHelp(player); - } - } else - player.sendMessage(FightSystem.PREFIX + "§cDer Fight hat bereits begonnen!"); + }else + Commands.sendHelp(player); + break; + default: + Commands.sendHelp(player); + } + return false; } - private void sendHelp(Player p) { - p.sendMessage(FightSystem.PREFIX + "§7Hilfe für den §6/ak§7-Befehl"); - p.sendMessage("§8/§6ak help §8- §7Zeigt diese Hilfeseite"); - p.sendMessage("§8/§6ak ready §8- §7Setzt das eigene Team auf bereit"); - p.sendMessage("§8/§6ak leader §8- §7Tritt einem Team als Leader bei"); - p.sendMessage("§8/§6ak invite [Spieler] §8- §7Lade den Spieler in dein Team bei"); - p.sendMessage("§8/§6ak accept §8- §7Einladung annehmen"); - p.sendMessage("§8/§6ak decline §8- §7Einladung ablehnen"); - p.sendMessage("§8/ak leave §8- §7Team verlassen"); - p.sendMessage("§8/§6ak kit §8- §7Wähle ein Kit"); - p.sendMessage("§8/§6ak schem §8- §7Setze deine Schematic"); - } } diff --git a/src/me/yaruma/fightsystem/commands/Commands.java b/src/me/yaruma/fightsystem/commands/Commands.java new file mode 100644 index 0000000..2db94f2 --- /dev/null +++ b/src/me/yaruma/fightsystem/commands/Commands.java @@ -0,0 +1,168 @@ +package me.yaruma.fightsystem.commands; + +import me.yaruma.fightsystem.FightSystem; +import me.yaruma.fightsystem.fight.Fight; +import me.yaruma.fightsystem.fight.FightPlayer; +import me.yaruma.fightsystem.fight.FightState; +import me.yaruma.fightsystem.fight.FightTeam; +import me.yaruma.fightsystem.utils.Config; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; + +public class Commands { + + private static void errNoTeam(Player p){ + p.sendMessage(FightSystem.PREFIX + "§cDu bist in keinem Team!"); + } + + private static boolean checkSetupOver(Player p){ + if(FightSystem.getFightState() != FightState.SETUP){ + p.sendMessage(FightSystem.PREFIX + "§cDer Kampf hat bereits begonnen!"); + return false; + } + return true; + } + + private static FightTeam checkGetInvitedTeam(Player p){ + FightTeam fightTeam = Fight.getInvitedTeam(p); + if(fightTeam == null){ + p.sendMessage(FightSystem.PREFIX + "§cDu wurdest von keinem Team eingeladen!"); + } + return fightTeam; + } + + private static FightPlayer checkGetPlayer(Player p){ + FightPlayer fightPlayer = Fight.getFightPlayer(p); + if(fightPlayer == null){ + errNoTeam(p); + } + return fightPlayer; + } + + private static FightPlayer checkGetLeader(Player p){ + FightPlayer fightPlayer = checkGetPlayer(p); + if(fightPlayer != null && !fightPlayer.isLeader()){ + p.sendMessage(FightSystem.PREFIX + "§cDu bist kein Leader!"); + fightPlayer = null; + } + return fightPlayer; + } + + private static FightTeam checkGetTeam(Player p){ + FightTeam fightTeam = Fight.getPlayerTeam(p); + if(fightTeam == null){ + errNoTeam(p); + } + return fightTeam; + } + + private static Player checkGetPlayer(Player p, String t){ + Player target = Bukkit.getPlayer(t); + if(target == null) { + p.sendMessage(FightSystem.PREFIX + "§cDer Spieler ist nicht online!"); + } + return target; + } + + static void toggleReady(Player p){ + if(!checkSetupOver(p)) + return; + + FightTeam fightTeam = checkGetTeam(p); + if(fightTeam == null || checkGetLeader(p) == null) + return; + + fightTeam.setReady(!fightTeam.isReady()); + } + + static void acceptInvitation(Player p){ + if(!checkSetupOver(p)) + return; + + FightTeam team = checkGetInvitedTeam(p); + if(team == null) + return; + + FightPlayer leader = team.getLeader(); + team.addMember(p); + p.setGameMode(GameMode.ADVENTURE); + p.teleport(team.getSpawn()); + p.sendMessage(FightSystem.PREFIX + "§aDu bist Team " + team.getName() + " §abeigetreten!"); + leader.sendMessage(FightSystem.PREFIX + "§aDer Spieler §6" + p.getName() + " §aist deinem Team beigetreten!"); + } + + static void declineInvitation(Player p){ + if(!checkSetupOver(p)) + return; + + FightTeam team = checkGetInvitedTeam(p); + if(team == null) + return; + + FightPlayer leader = team.getLeader(); + team.getInvited().remove(p); + p.sendMessage(FightSystem.PREFIX + "§aDu hast die Einladung von " + team.getName() + " §aabgelehnt!"); + leader.sendMessage(FightSystem.PREFIX + "§cDer Spieler §6" + p.getName() + " §chat deine Einladung abgelehnt!"); + } + + static void leaveTeam(Player p){ + if(!checkSetupOver(p)) + return; + + FightTeam fightTeam = checkGetTeam(p); + if(fightTeam == null) + return; + + fightTeam.removePlayer(p); + p.setGameMode(GameMode.SPECTATOR); + p.teleport(Config.SpecSpawn); + p.sendMessage(FightSystem.PREFIX + "§aDu hast das Team " + fightTeam.getName() + " §averlassen!"); + } + + static void invite(Player p, String invited){ + if(!checkSetupOver(p)) + return; + + FightTeam fightTeam = checkGetTeam(p); + if(fightTeam == null) + return; + + FightPlayer fightPlayer = checkGetLeader(p); + if(fightPlayer == null) + return; + + Player target = checkGetPlayer(p, invited); + if(target == null) + return; + + if(Fight.getPlayerTeam(target) != null) { + p.sendMessage(FightSystem.PREFIX + "§cDer Spieler §6" + target.getName() + " §cist bereits in einem Team!"); + return; + } + + if(Fight.getOpposite(fightTeam).getInvited().contains(target) || fightTeam.getInvited().contains(target)) { + p.sendMessage(FightSystem.PREFIX + "§cDieser Spieler wurde bereits eingeladen!"); + return; + } + + fightTeam.getInvited().add(target); + target.sendMessage(FightSystem.PREFIX + "§aDu wurdest in das Team von §6" + p.getName() + " §aeingeladen!"); + p.sendMessage(FightSystem.PREFIX + "§aDu hast den Spieler §6" + target.getName() + " §ain dein Team eingeladen!"); + GUI.invitation(p, target); + } + + static void sendHelp(Player p) { + p.sendMessage(FightSystem.PREFIX + "§7Hilfe für das Kampfsystem"); + p.sendMessage("§8/§6ak help §8- §7Zeigt diese Hilfeseite"); + p.sendMessage("§8/§6ak leader §8- §7Tritt einem Team als Leader bei"); + p.sendMessage("§8/§6ak kit §8- §7Wähle ein Kit"); + p.sendMessage("§8/§6ak schem §8- §7Setze deine Schematic"); + p.sendMessage("§8/§6ready §8- §7Setzt das eigene Team auf bereit"); + p.sendMessage("§8/§6invite [Spieler] §8- §7Lade den Spieler in dein Team bei"); + p.sendMessage("§8/§6accept §8- §7Einladung annehmen"); + p.sendMessage("§8/§6decline §8- §7Einladung ablehnen"); + p.sendMessage("§8/§6leave §8- §7Team verlassen"); + + } +} \ No newline at end of file diff --git a/src/me/yaruma/fightsystem/commands/DeclineCommand.java b/src/me/yaruma/fightsystem/commands/DeclineCommand.java new file mode 100644 index 0000000..5a7f95d --- /dev/null +++ b/src/me/yaruma/fightsystem/commands/DeclineCommand.java @@ -0,0 +1,19 @@ +package me.yaruma.fightsystem.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class DeclineCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if(!(sender instanceof Player)) { + return false; + } + Player player = (Player) sender; + + Commands.declineInvitation(player); + return false; + } +} diff --git a/src/me/yaruma/fightsystem/commands/GUI.java b/src/me/yaruma/fightsystem/commands/GUI.java new file mode 100644 index 0000000..f6401bf --- /dev/null +++ b/src/me/yaruma/fightsystem/commands/GUI.java @@ -0,0 +1,30 @@ +package me.yaruma.fightsystem.commands; + +import de.steamwar.inventory.SWInventory; +import me.yaruma.fightsystem.FightSystem; +import me.yaruma.fightsystem.fight.Fight; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +public class GUI { + + public static void invitation(Player p, Player target){ + SWInventory inv = new SWInventory(target, 9, "Einladung von " + p.getName()); + inv.setItem(0, Material.INK_SACK, (byte)10, "§aAnnehmen", () ->{ + target.performCommand("ak accept"); + target.closeInventory(); + }); + inv.setItem(8, Material.INK_SACK, (byte)1, "§cAblehnen", () ->{ + target.performCommand("ak decline"); + target.closeInventory(); + }); + inv.addCloseCallback(() ->{ + if(Fight.getInvitedTeam(target) != null){ + target.sendMessage(FightSystem.PREFIX + "§7Tippe §8/§aaccept§7, um die Einladung §aanzunehmen"); + target.sendMessage(FightSystem.PREFIX + "§7Tippe §8/§cdecline§7, um die Einladung §cabzulehnen"); + } + }); + inv.setCallback(-999, target::closeInventory); + inv.open(); + } +} diff --git a/src/me/yaruma/fightsystem/commands/InviteCommand.java b/src/me/yaruma/fightsystem/commands/InviteCommand.java new file mode 100644 index 0000000..5f84c5b --- /dev/null +++ b/src/me/yaruma/fightsystem/commands/InviteCommand.java @@ -0,0 +1,24 @@ +package me.yaruma.fightsystem.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class InviteCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if(!(sender instanceof Player)) { + return false; + } + Player player = (Player) sender; + + if(args.length != 1){ + Commands.sendHelp(player); + return false; + } + + Commands.invite(player, args[0]); + return false; + } +} diff --git a/src/me/yaruma/fightsystem/commands/LeaveCommand.java b/src/me/yaruma/fightsystem/commands/LeaveCommand.java new file mode 100644 index 0000000..5e01506 --- /dev/null +++ b/src/me/yaruma/fightsystem/commands/LeaveCommand.java @@ -0,0 +1,19 @@ +package me.yaruma.fightsystem.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class LeaveCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if(!(sender instanceof Player)) { + return false; + } + Player player = (Player) sender; + + Commands.leaveTeam(player); + return false; + } +} diff --git a/src/me/yaruma/fightsystem/commands/ReadyCommand.java b/src/me/yaruma/fightsystem/commands/ReadyCommand.java new file mode 100644 index 0000000..6e6ee12 --- /dev/null +++ b/src/me/yaruma/fightsystem/commands/ReadyCommand.java @@ -0,0 +1,19 @@ +package me.yaruma.fightsystem.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ReadyCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if(!(sender instanceof Player)) { + return false; + } + Player player = (Player) sender; + + Commands.toggleReady(player); + return false; + } +} diff --git a/src/me/yaruma/fightsystem/fight/FightTeam.java b/src/me/yaruma/fightsystem/fight/FightTeam.java index 816a8df..fddb332 100644 --- a/src/me/yaruma/fightsystem/fight/FightTeam.java +++ b/src/me/yaruma/fightsystem/fight/FightTeam.java @@ -38,6 +38,7 @@ public class FightTeam { private final String name; private final String prefix; private Schematic schematic; + private final Location spawn; private final Vector paste; private final boolean rotate; @@ -207,6 +208,9 @@ public class FightTeam { return prefix; } + public Location getSpawn() { + return spawn; + } public void sendPlayerSchematicList(boolean publicSchematics, int currentPage, int filesPerPage, Player player, SchematicType schematicType) { diff --git a/src/plugin.yml b/src/plugin.yml index aab0365..12c7931 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -5,4 +5,9 @@ main: me.yaruma.fightsystem.FightSystem depend: [CoreSystem, WorldEdit, FastAsyncWorldEdit, ProtocolLib] commands: - ak: \ No newline at end of file + ak: + accept: + decline: + leave: + invite: + ready: \ No newline at end of file