diff --git a/fightsystem.iml b/fightsystem.iml
index 832cd58..d2293ab 100644
--- a/fightsystem.iml
+++ b/fightsystem.iml
@@ -18,9 +18,5 @@
-
-
-
-
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index c5babbe..fdf949b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- me.yaruma
+ de.steamwar
FightSystem
1.0
jar
@@ -36,10 +36,9 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.6.1
- 1.8
- 1.8
+ 8
+ 8
diff --git a/src/de/steamwar/fightsystem/FightSystem.java b/src/de/steamwar/fightsystem/FightSystem.java
new file mode 100644
index 0000000..71e978b
--- /dev/null
+++ b/src/de/steamwar/fightsystem/FightSystem.java
@@ -0,0 +1,235 @@
+package de.steamwar.fightsystem;
+
+import de.steamwar.fightsystem.commands.*;
+import de.steamwar.fightsystem.countdown.*;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightPlayer;
+import de.steamwar.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.kit.KitManager;
+import de.steamwar.fightsystem.listener.*;
+import de.steamwar.fightsystem.utils.Config;
+import de.steamwar.fightsystem.utils.FightScoreboard;
+import de.steamwar.fightsystem.utils.TechHider;
+import de.steamwar.fightsystem.utils.WaterRemover;
+import de.steamwar.fightsystem.utils.sql.EventFight;
+import de.steamwar.fightsystem.winconditions.*;
+import javafx.util.Pair;
+import org.bukkit.Bukkit;
+import org.bukkit.GameMode;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.util.List;
+
+public class FightSystem extends JavaPlugin {
+
+ public static final String PREFIX = "§eArena§8» ";
+ private static FightSystem plugin;
+
+ private static FightState fightState = FightState.SETUP;
+ private static int fightTime = 0;
+ private static boolean entern = false;
+
+ private static EventFight eventFight;
+ private static Player eventLeiter;
+
+ @Override
+ public void onEnable() {
+ setPlugin(this);
+ Config.load();
+ KitManager.loadAllKits();
+
+ new EntityDamageListener();
+ new EntityExplodeListener();
+ new FoodLevelChangeListener();
+ new InventoryListener();
+ new PistonListener();
+ new PlayerChatListener();
+ new PlayerDeathListener();
+ new HotbarGUIListener();
+ new PlayerMoveListener();
+ new PlayerConnectionListener();
+ new PlayerRespawnListener();
+ new PlayerTeleportListener();
+ new ProjectileLaunchListener();
+
+ if(!Config.test()){
+ new BlockListener();
+ TechHider.init();
+ }
+
+ FightScoreboard.init();
+
+ getCommand("leave").setExecutor(new LeaveCommand());
+ getCommand("kit").setExecutor(new KitCommand());
+ getCommand("remove").setExecutor(new RemoveCommand());
+ getCommand("accept").setExecutor(new AcceptCommand());
+ getCommand("decline").setExecutor(new DeclineCommand());
+ getCommand("invite").setExecutor(new InviteCommand());
+ getCommand("ready").setExecutor(new ReadyCommand());
+ getCommand("ak").setExecutor(new AkCommand());
+ getCommand("leader").setExecutor(new LeaderCommand());
+
+ if(Config.event()) {
+ new EventJoinListener();
+
+ getCommand("invite").setExecutor(new EventDummyCommand());
+ getCommand("ready").setExecutor(new EventDummyCommand());
+ getCommand("ak").setExecutor(new EventDummyCommand());
+ getCommand("leader").setExecutor(new EventDummyCommand());
+
+ new EventStartCountdown();
+ }else if(Config.test()){
+ new TestListener();
+
+ Bukkit.getScheduler().runTaskLater(this, Fight.getBlueTeam()::pasteDummy, 0);
+ Bukkit.getScheduler().runTaskLater(this, Fight.getRedTeam()::pasteDummy, 0);
+
+ new NoPlayersOnlineCountdown();
+ }else{
+ new NormalJoinListener();
+
+ new NoPlayersOnlineCountdown();
+ }
+ }
+
+ public static void setPreRunningState() {
+ if(fightState != FightState.SETUP)
+ return;
+ setFightState(FightState.PRE_RUNNING);
+ Countdown.cancelAllTimers();
+
+ loadKits(Fight.getBlueTeam());
+ loadKits(Fight.getRedTeam());
+ setAllPlayersGM(GameMode.SURVIVAL);
+ Bukkit.broadcastMessage(PREFIX + "§aDer Kampf beginnt!");
+
+ new WinconditionAllDead();
+ new WinconditionCaptainDead();
+ new WinconditionWaterTechKO();
+ new WinconditionPercentSystem();
+
+ if(Config.event()){
+ new EventTeamOffWincondition();
+ }
+
+ new PreRunningCountdown();
+ }
+
+ public static void setRunningState() {
+ if(fightState != FightState.PRE_RUNNING)
+ return;
+ setFightState(FightState.RUNNING);
+ Countdown.cancelAllTimers();
+
+ setAllPlayersGM(GameMode.SURVIVAL);
+
+ new WinconditionTechKO();
+ new WinconditionTimeout();
+ new WinconditionEntern();
+
+ WaterRemover.init();
+
+ Bukkit.broadcastMessage(PREFIX + "§aArena freigegeben!");
+ }
+
+ public static void setSpectateState(FightTeam winFightTeam) {
+ if(fightState != FightState.RUNNING && fightState != FightState.PRE_RUNNING)
+ return;
+ setFightState(FightState.SPECTATE);
+ Countdown.cancelAllTimers();
+
+ setAllPlayersGM(GameMode.SPECTATOR);
+ Fight.getBlueTeam().teleportToSpawn();
+ Fight.getRedTeam().teleportToSpawn();
+ Bukkit.getOnlinePlayers().forEach(player -> player.getInventory().clear());
+
+ Bukkit.broadcastMessage(" ");
+
+ if(winFightTeam != null) {
+ Bukkit.broadcastMessage(PREFIX + "§aDas Team " + winFightTeam.getName() + " §ahat gewonnen!");
+ } else {
+ Bukkit.broadcastMessage(PREFIX + "§aKein Team hat gewonnen!");
+ }
+
+ if(Config.event())
+ eventFight.setErgebnis(winFightTeam);
+
+ if(!Config.test())
+ new SpectateOverCountdown();
+ }
+
+ public static void setFightTime(int fightTime) {
+ FightSystem.fightTime = fightTime;
+ }
+
+ public static void setEntern(boolean entern) {
+ final List> chunksBlue = TechHider.prepareChunkReload(Fight.getBlueTeam().getPlayers().iterator().next().getPlayer());
+ final List> chunksRed = TechHider.prepareChunkReload(Fight.getRedTeam().getPlayers().iterator().next().getPlayer());
+ FightSystem.entern = entern;
+ for(FightPlayer player : Fight.getBlueTeam().getPlayers()){
+ TechHider.reloadChunks(player.getPlayer(), chunksBlue);
+ }
+ for(FightPlayer player : Fight.getRedTeam().getPlayers()){
+ TechHider.reloadChunks(player.getPlayer(), chunksRed);
+ }
+ }
+
+ private static void loadKits(FightTeam team){
+ for(FightPlayer allFightPlayers : team.getPlayers()) {
+ allFightPlayers.getPlayer().getInventory().clear();
+ allFightPlayers.getKit().loadToPlayer(allFightPlayers.getPlayer());
+ }
+ }
+
+ private static void setAllPlayersGM(GameMode gm) {
+ for(FightPlayer fightPlayer: Fight.getBlueTeam().getPlayers()){
+ fightPlayer.getPlayer().setGameMode(gm);
+ }
+ for(FightPlayer fightPlayer: Fight.getRedTeam().getPlayers()){
+ fightPlayer.getPlayer().setGameMode(gm);
+ }
+ }
+
+ private static void setFightState(FightState state){
+ fightState = state;
+ BasicListener.fightStateChange(state);
+ }
+
+ public static void setEventFight(EventFight ef){
+ eventFight = ef;
+ }
+
+ public static void setEventLeiter(Player el){
+ eventLeiter = el;
+ }
+
+ public static Player getEventLeiter(){
+ return eventLeiter;
+ }
+
+ public static EventFight getEventFight(){
+ return eventFight;
+ }
+
+ private static void setPlugin(FightSystem pl){
+ plugin = pl;
+ }
+
+ public static FightSystem getPlugin() {
+ return plugin;
+ }
+
+ public static FightState getFightState() {
+ return fightState;
+ }
+
+ public static int getFightTime() {
+ return fightTime;
+ }
+
+ public static boolean isEntern() {
+ return entern;
+ }
+}
\ No newline at end of file
diff --git a/src/me/yaruma/fightsystem/commands/AcceptCommand.java b/src/de/steamwar/fightsystem/commands/AcceptCommand.java
similarity index 92%
rename from src/me/yaruma/fightsystem/commands/AcceptCommand.java
rename to src/de/steamwar/fightsystem/commands/AcceptCommand.java
index d474495..880bdd6 100644
--- a/src/me/yaruma/fightsystem/commands/AcceptCommand.java
+++ b/src/de/steamwar/fightsystem/commands/AcceptCommand.java
@@ -1,4 +1,4 @@
-package me.yaruma.fightsystem.commands;
+package de.steamwar.fightsystem.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
diff --git a/src/me/yaruma/fightsystem/commands/AkCommand.java b/src/de/steamwar/fightsystem/commands/AkCommand.java
similarity index 50%
rename from src/me/yaruma/fightsystem/commands/AkCommand.java
rename to src/de/steamwar/fightsystem/commands/AkCommand.java
index 37ef7e3..6ed582d 100644
--- a/src/me/yaruma/fightsystem/commands/AkCommand.java
+++ b/src/de/steamwar/fightsystem/commands/AkCommand.java
@@ -1,14 +1,15 @@
-package me.yaruma.fightsystem.commands;
+package de.steamwar.fightsystem.commands;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.kit.KitManager;
+import de.steamwar.fightsystem.utils.Config;
import de.warking.hunjy.MySQL.Schematic;
+import de.warking.hunjy.MySQL.SchematicType;
import de.warking.hunjy.MySQL.UserGroup;
import de.warking.hunjy.MySQL.WarkingUser;
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightState;
-import me.yaruma.fightsystem.fight.FightTeam;
-import me.yaruma.fightsystem.kit.KitManager;
-import me.yaruma.fightsystem.utils.Config;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
@@ -19,8 +20,14 @@ import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.util.ArrayList;
+import java.util.List;
+
public class AkCommand implements CommandExecutor {
+ private static final String SCHEMLIST_COMMAND = "/ak schemlist ";
+ private static final int FILES_PER_PAGE = 15;
+
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
@@ -31,25 +38,7 @@ public class AkCommand implements CommandExecutor {
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()) {
- Fight.getBlueTeam().setLeader(Fight.getBlueTeam().addMember(player));
- player.sendMessage(FightSystem.PREFIX + "§aDu bist nun Leader von " + Fight.getBlueTeam().getName());
- } else if (!Fight.getRedTeam().hasTeamLeader()) {
- Fight.getRedTeam().setLeader(Fight.getRedTeam().addMember(player));
- player.sendMessage(FightSystem.PREFIX + "§aDu bist nun Leader von " + Fight.getRedTeam().getName());
-
- } else
- player.sendMessage(FightSystem.PREFIX + "§cEs sind bereits zwei Leader vorhanden!");
- }else if(args[0].equalsIgnoreCase("schem") || args[0].equalsIgnoreCase("schemlist")){
+ if(args[0].equalsIgnoreCase("schem") || args[0].equalsIgnoreCase("schemlist")){
//TEXT COMPONENTS
TextComponent publicList = new TextComponent("PUBLIC");
@@ -71,13 +60,7 @@ public class AkCommand implements CommandExecutor {
Commands.sendHelp(player);
break;
case 2:
- if(args[0].equalsIgnoreCase("invite")){
- Commands.invite(player, args[1]);
- }else if(args[0].equalsIgnoreCase("remove")){
- Commands.kick(player, args[1]);
- }else if(args[0].equalsIgnoreCase("kit")) {
- Commands.kit(player, args[1]);
- } else if(args[0].equalsIgnoreCase("addkit")){
+ if(args[0].equalsIgnoreCase("addkit")){
if(WarkingUser.get(player.getUniqueId()).getUserGroup() != UserGroup.Developer){
Commands.sendHelp(player);
return false;
@@ -88,16 +71,12 @@ public class AkCommand implements CommandExecutor {
FightTeam fightTeam = Fight.getPlayerTeam(player);
if(fightTeam != null && fightTeam.getFightPlayer(player).isLeader()) {
if(args[1].equalsIgnoreCase("public")) {
- Fight.getPlayerTeam(player).sendPlayerSchematicList(true, 0, 15, player, Config.SchematicType);
+ sendPlayerSchematicList(true, 0, player, Config.SchematicType);
return false;
} else {
int page;
- try {
- page = Integer.parseInt(args[1]);
- } catch (NumberFormatException ex) {
- return false;
- }
- Fight.getPlayerTeam(player).sendPlayerSchematicList(false, page, 15, player, Config.SchematicType);
+ page = Integer.parseInt(args[1]);
+ sendPlayerSchematicList(false, page, player, Config.SchematicType);
}
}
} catch (NumberFormatException ex) {
@@ -150,4 +129,82 @@ public class AkCommand implements CommandExecutor {
return false;
}
+ private void sendPlayerSchematicList(boolean publicSchematics, int currentPage, Player player, SchematicType schematicType) {
+ List preSchematicList;
+ List schematicList = new ArrayList<>();
+ if(publicSchematics) {
+ preSchematicList = Schematic.getSchemsAccessibleByUser(0);
+ } else {
+ preSchematicList = Schematic.getSchemsAccessibleByUser(player.getUniqueId());
+ }
+
+ for(Schematic s : preSchematicList) {
+ if(s.getSchemType() == schematicType)
+ schematicList.add(s);
+ }
+
+ if(schematicList.isEmpty()) {
+ player.sendMessage(FightSystem.PREFIX + "§cDu hast noch keine Schematic(s)!");
+ return;
+ }
+
+ int pages;
+
+ double doublePages = (double) schematicList.size() / (double) FILES_PER_PAGE;
+ int intPages = schematicList.size() / FILES_PER_PAGE;
+
+ if(schematicList.size() <= FILES_PER_PAGE) {
+ pages = 1;
+ } else if(doublePages > intPages) {
+ pages = (intPages + 1);
+ } else
+ pages = intPages;
+
+ if(currentPage >= pages) return;
+
+ player.sendMessage("§5======§8[§dSeite " + (currentPage + 1) + " §7/ §d" + pages + " §7| §d" + schematicList.size() + " Schematic(s)§8]§5======");
+
+ for(int i = currentPage * FILES_PER_PAGE; i < (currentPage * FILES_PER_PAGE) + FILES_PER_PAGE; i++) {
+ if(schematicList.size() <= i) break;
+
+ Schematic schem = schematicList.get(i);
+
+ TextComponent schematics = new TextComponent("§b" + schem.getSchemName());
+ schematics.setBold(true);
+
+ schematics.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Schematic benutzen...").create()));
+ schematics.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schem " + schem.getSchemName() + (publicSchematics ? " public" : " private")));
+
+ player.spigot().sendMessage(schematics);
+ }
+
+ if(pages <= 1) return;
+
+ if(currentPage == 0) {
+ TextComponent nextPage = new TextComponent("Nächste Seite >>");
+ nextPage.setColor(ChatColor.RED);
+ nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Nächste Seite...").create()));
+ nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, SCHEMLIST_COMMAND + "1"));
+ player.spigot().sendMessage(nextPage);
+ } else if((currentPage + 1) == pages) {
+ TextComponent beforePage = new TextComponent("<< Vorherige Seite");
+ beforePage.setColor(ChatColor.RED);
+ beforePage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Vorherige Seite...").create()));
+ beforePage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, SCHEMLIST_COMMAND + (currentPage - 1)));
+ player.spigot().sendMessage(beforePage);
+ } else {
+ TextComponent beforePage = new TextComponent("<< Seite ");
+ beforePage.setColor(ChatColor.RED);
+ beforePage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Vorherige Seite...").create()));
+ beforePage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, SCHEMLIST_COMMAND + (currentPage - 1)));
+
+ TextComponent nextPage = new TextComponent(">>");
+ nextPage.setColor(ChatColor.RED);
+ nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Nächste Seite...").create()));
+ nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, SCHEMLIST_COMMAND + (currentPage + 1)));
+
+ beforePage.addExtra(nextPage);
+ player.spigot().sendMessage(beforePage);
+ }
+ }
}
diff --git a/src/me/yaruma/fightsystem/commands/Commands.java b/src/de/steamwar/fightsystem/commands/Commands.java
similarity index 89%
rename from src/me/yaruma/fightsystem/commands/Commands.java
rename to src/de/steamwar/fightsystem/commands/Commands.java
index eb9f9dc..1426932 100644
--- a/src/me/yaruma/fightsystem/commands/Commands.java
+++ b/src/de/steamwar/fightsystem/commands/Commands.java
@@ -1,12 +1,12 @@
-package me.yaruma.fightsystem.commands;
+package de.steamwar.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.kit.Kit;
-import me.yaruma.fightsystem.kit.KitManager;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightPlayer;
+import de.steamwar.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.kit.Kit;
+import de.steamwar.fightsystem.kit.KitManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -18,12 +18,12 @@ class Commands {
p.sendMessage(FightSystem.PREFIX + "§cDu bist in keinem Team!");
}
- private static boolean checkSetupOver(Player p){
+ static boolean checkSetup(Player p){
if(FightSystem.getFightState() != FightState.SETUP){
p.sendMessage(FightSystem.PREFIX + "§cDer Kampf hat bereits begonnen!");
- return false;
+ return true;
}
- return true;
+ return false;
}
private static FightTeam checkGetInvitedTeam(Player p){
@@ -68,7 +68,7 @@ class Commands {
}
static void toggleReady(Player p){
- if(!checkSetupOver(p))
+ if(checkSetup(p))
return;
FightTeam fightTeam = checkGetTeam(p);
@@ -79,7 +79,7 @@ class Commands {
}
static void acceptInvitation(Player p){
- if(!checkSetupOver(p))
+ if(checkSetup(p))
return;
FightTeam team = checkGetInvitedTeam(p);
@@ -93,7 +93,7 @@ class Commands {
}
static void declineInvitation(Player p){
- if(!checkSetupOver(p))
+ if(checkSetup(p))
return;
FightTeam team = checkGetInvitedTeam(p);
@@ -107,7 +107,7 @@ class Commands {
}
static void leaveTeam(Player p){
- if(!checkSetupOver(p))
+ if(checkSetup(p))
return;
FightTeam fightTeam = checkGetTeam(p);
@@ -119,7 +119,7 @@ class Commands {
}
static void invite(Player p, String invited){
- if(!checkSetupOver(p))
+ if(checkSetup(p))
return;
FightTeam fightTeam = checkGetTeam(p);
@@ -151,7 +151,7 @@ class Commands {
}
static void kick(Player p, String kicked){
- if(!checkSetupOver(p))
+ if(checkSetup(p))
return;
FightTeam fightTeam = checkGetTeam(p);
@@ -177,7 +177,7 @@ class Commands {
}
static void kit(Player p, String kitName){
- if(!checkSetupOver(p))
+ if(checkSetup(p))
return;
FightPlayer fightPlayer = checkGetPlayer(p);
@@ -202,17 +202,18 @@ class Commands {
static void sendHelp(Player p) {
p.sendMessage(FightSystem.PREFIX + "§7Hilfe für das Kampfsystem");
- p.sendMessage("§8/§eak help §8- §7Zeigt diese Hilfeseite");
FightPlayer fightPlayer = Fight.getFightPlayer(p);
if(fightPlayer == null){
p.sendMessage("§8/§eaccept §8- §7Einladung annehmen");
p.sendMessage("§8/§edecline §8- §7Einladung ablehnen");
+ p.sendMessage("§8/§eleader §8- §7Werde der Leader eines Teams");
}else{
if(fightPlayer.isLeader()){
p.sendMessage("§8/§eak schem §8<§eSchematic§8> - §7Setze deine Schematic");
p.sendMessage("§8/§eready §8- §7Setzt das eigene Team auf bereit");
p.sendMessage("§8/§einvite §8<§eSpieler§8> - §7Lade einen Spieler in dein Team ein");
+ p.sendMessage("§8/§eremove §8<§eSpieler§8> - §7Wirft einen Spieler aus dem Team");
}
p.sendMessage("§8/§ekit §8<§eKit§8> - §7Wähle ein Kit");
p.sendMessage("§8/§eleave §8- §7Team verlassen");
diff --git a/src/me/yaruma/fightsystem/commands/DeclineCommand.java b/src/de/steamwar/fightsystem/commands/DeclineCommand.java
similarity index 92%
rename from src/me/yaruma/fightsystem/commands/DeclineCommand.java
rename to src/de/steamwar/fightsystem/commands/DeclineCommand.java
index 5a7f95d..8906529 100644
--- a/src/me/yaruma/fightsystem/commands/DeclineCommand.java
+++ b/src/de/steamwar/fightsystem/commands/DeclineCommand.java
@@ -1,4 +1,4 @@
-package me.yaruma.fightsystem.commands;
+package de.steamwar.fightsystem.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
diff --git a/src/de/steamwar/fightsystem/commands/EventDummyCommand.java b/src/de/steamwar/fightsystem/commands/EventDummyCommand.java
new file mode 100644
index 0000000..b6f05ce
--- /dev/null
+++ b/src/de/steamwar/fightsystem/commands/EventDummyCommand.java
@@ -0,0 +1,14 @@
+package de.steamwar.fightsystem.commands;
+
+import de.steamwar.fightsystem.FightSystem;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+
+public class EventDummyCommand implements CommandExecutor {
+ @Override
+ public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+ sender.sendMessage(FightSystem.PREFIX + "§cWährend des Events ist der Befehl nicht verfügbar.");
+ return false;
+ }
+}
diff --git a/src/me/yaruma/fightsystem/commands/GUI.java b/src/de/steamwar/fightsystem/commands/GUI.java
similarity index 79%
rename from src/me/yaruma/fightsystem/commands/GUI.java
rename to src/de/steamwar/fightsystem/commands/GUI.java
index 831f821..94393ca 100644
--- a/src/me/yaruma/fightsystem/commands/GUI.java
+++ b/src/de/steamwar/fightsystem/commands/GUI.java
@@ -1,18 +1,18 @@
-package me.yaruma.fightsystem.commands;
+package de.steamwar.fightsystem.commands;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightPlayer;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.kit.Kit;
+import de.steamwar.fightsystem.kit.KitManager;
+import de.steamwar.fightsystem.utils.Config;
import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv;
import de.warking.hunjy.MySQL.Schematic;
import de.warking.hunjy.MySQL.WarkingUser;
import javafx.util.Pair;
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightPlayer;
-import me.yaruma.fightsystem.fight.FightTeam;
-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.Material;
import org.bukkit.entity.Player;
@@ -29,11 +29,11 @@ public class GUI {
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", (ClickType click) ->{
- target.performCommand("accept");
+ Commands.acceptInvitation(target);
target.closeInventory();
});
inv.setItem(8, Material.INK_SACK, (byte)1, "§cAblehnen", (ClickType click) ->{
- target.performCommand("decline");
+ Commands.declineInvitation(target);
target.closeInventory();
});
inv.addCloseCallback((ClickType click) ->{
@@ -50,7 +50,7 @@ public class GUI {
List> players = SWListInv.createPlayerList(p);
players.removeIf(swItemUUIDPair -> Fight.getFightPlayer(Bukkit.getPlayer(swItemUUIDPair.getValue())) != null);
SWListInv inv = new SWListInv<>(p, "Spieler einladen", (ClickType click, UUID player) -> {
- p.performCommand("invite " + WarkingUser.get(player).getUserName());
+ Commands.invite(p, WarkingUser.get(player).getUserName());
p.closeInventory();
}, players);
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
@@ -60,9 +60,11 @@ public class GUI {
public static void chooseRemove(Player p){
List> players = SWListInv.createPlayerList(p);
FightTeam team = Fight.getPlayerTeam(p);
+ if(team == null)
+ return;
players.removeIf(swItemUUIDPair -> !team.equals(Fight.getPlayerTeam(Bukkit.getPlayer(swItemUUIDPair.getValue()))));
SWListInv inv = new SWListInv<>(p, "Spieler rauswerfen", (ClickType click, UUID player) -> {
- p.performCommand("ak remove " + WarkingUser.get(player).getUserName());
+ Commands.kick(p, WarkingUser.get(player).getUserName());
p.closeInventory();
}, players);
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
@@ -71,6 +73,8 @@ public class GUI {
public static void kitSelection(Player p){
FightPlayer fightPlayer = Fight.getFightPlayer(p);
+ if(fightPlayer == null)
+ return;
List> iconList = new ArrayList<>();
List kitList = KitManager.getKits(fightPlayer.isLeader());
@@ -79,7 +83,7 @@ public class GUI {
}
SWListInv inv = new SWListInv<>(p, "Kitauswahl", (ClickType click, Kit k) -> {
- p.performCommand("kit " + k.getName());
+ Commands.kit(p, k.getName());
p.closeInventory();
}, iconList);
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
@@ -89,7 +93,9 @@ public class GUI {
public static void preSchemDialog(Player p){
SWInventory inv = new SWInventory(p, 9, Config.GameName + "-Auswahl");
inv.setItem(8, Material.REDSTONE, "§eÖffentliches " + Config.GameName, (ClickType click) -> schemDialog(p, true));
- if(Schematic.getSchemsOfType(p.getUniqueId(), Config.SchematicType).isEmpty()){
+ if(Config.OnlyPublicSchematics){
+ inv.setItem(0, Material.INK_SACK, (byte)8, "§7Keine privaten Schematics erlaubt", (ClickType click)->{});
+ }else if(Schematic.getSchemsOfType(p.getUniqueId(), Config.SchematicType).isEmpty()){
inv.setItem(0, Material.INK_SACK, (byte)8, "§7Kein privates " + Config.GameName + " vorhanden", (ClickType click)->{});
}else{
inv.setItem(0, Material.CAULDRON_ITEM, "§ePrivates " + Config.GameName, (ClickType click) -> schemDialog(p, false));
@@ -102,10 +108,14 @@ public class GUI {
List> schems;
if(publicSchems)
schems = SWListInv.getSchemList(0, Config.SchematicType);
+ else if(Config.test())
+ schems = SWListInv.getSchemList(WarkingUser.get(p.getUniqueId()).getId(), null);
else
schems = SWListInv.getSchemList(WarkingUser.get(p.getUniqueId()).getId(), Config.SchematicType);
SWListInv inv = new SWListInv<>(p, Config.GameName + "-Auswahl", (ClickType click, Schematic s) -> {
FightTeam fightTeam = Fight.getPlayerTeam(p);
+ if(fightTeam == null)
+ return;
fightTeam.setSchematic(s);
p.closeInventory();
}, schems);
diff --git a/src/me/yaruma/fightsystem/commands/InviteCommand.java b/src/de/steamwar/fightsystem/commands/InviteCommand.java
similarity index 93%
rename from src/me/yaruma/fightsystem/commands/InviteCommand.java
rename to src/de/steamwar/fightsystem/commands/InviteCommand.java
index 5f84c5b..bee83f1 100644
--- a/src/me/yaruma/fightsystem/commands/InviteCommand.java
+++ b/src/de/steamwar/fightsystem/commands/InviteCommand.java
@@ -1,4 +1,4 @@
-package me.yaruma.fightsystem.commands;
+package de.steamwar.fightsystem.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
diff --git a/src/me/yaruma/fightsystem/commands/KitCommand.java b/src/de/steamwar/fightsystem/commands/KitCommand.java
similarity index 93%
rename from src/me/yaruma/fightsystem/commands/KitCommand.java
rename to src/de/steamwar/fightsystem/commands/KitCommand.java
index 6f0e30e..90cd9a3 100644
--- a/src/me/yaruma/fightsystem/commands/KitCommand.java
+++ b/src/de/steamwar/fightsystem/commands/KitCommand.java
@@ -1,4 +1,4 @@
-package me.yaruma.fightsystem.commands;
+package de.steamwar.fightsystem.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
diff --git a/src/de/steamwar/fightsystem/commands/LeaderCommand.java b/src/de/steamwar/fightsystem/commands/LeaderCommand.java
new file mode 100644
index 0000000..08fb3c1
--- /dev/null
+++ b/src/de/steamwar/fightsystem/commands/LeaderCommand.java
@@ -0,0 +1,35 @@
+package de.steamwar.fightsystem.commands;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class LeaderCommand 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(Commands.checkSetup(player))
+ return false;
+
+ if(args.length == 0){
+ if(Fight.getFightPlayer(player) == null){
+ if(!Fight.getBlueTeam().hasTeamLeader())
+ Fight.getBlueTeam().setLeader(Fight.getBlueTeam().addMember(player));
+ else if(!Fight.getRedTeam().hasTeamLeader())
+ Fight.getRedTeam().setLeader(Fight.getRedTeam().addMember(player));
+ else
+ player.sendMessage(FightSystem.PREFIX + "§cEs sind bereits 2 Teamleader vorhanden");
+ }else
+ player.sendMessage(FightSystem.PREFIX + "§cDu bist bereits in einem Team");
+ }else
+ Commands.sendHelp(player);
+
+ return false;
+ }
+}
diff --git a/src/me/yaruma/fightsystem/commands/LeaveCommand.java b/src/de/steamwar/fightsystem/commands/LeaveCommand.java
similarity index 92%
rename from src/me/yaruma/fightsystem/commands/LeaveCommand.java
rename to src/de/steamwar/fightsystem/commands/LeaveCommand.java
index 5e01506..9a7b74d 100644
--- a/src/me/yaruma/fightsystem/commands/LeaveCommand.java
+++ b/src/de/steamwar/fightsystem/commands/LeaveCommand.java
@@ -1,4 +1,4 @@
-package me.yaruma.fightsystem.commands;
+package de.steamwar.fightsystem.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
diff --git a/src/me/yaruma/fightsystem/commands/ReadyCommand.java b/src/de/steamwar/fightsystem/commands/ReadyCommand.java
similarity index 92%
rename from src/me/yaruma/fightsystem/commands/ReadyCommand.java
rename to src/de/steamwar/fightsystem/commands/ReadyCommand.java
index 6e6ee12..6feef93 100644
--- a/src/me/yaruma/fightsystem/commands/ReadyCommand.java
+++ b/src/de/steamwar/fightsystem/commands/ReadyCommand.java
@@ -1,4 +1,4 @@
-package me.yaruma.fightsystem.commands;
+package de.steamwar.fightsystem.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
diff --git a/src/de/steamwar/fightsystem/commands/RemoveCommand.java b/src/de/steamwar/fightsystem/commands/RemoveCommand.java
new file mode 100644
index 0000000..1c8d3e2
--- /dev/null
+++ b/src/de/steamwar/fightsystem/commands/RemoveCommand.java
@@ -0,0 +1,24 @@
+package de.steamwar.fightsystem.commands;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class RemoveCommand 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.kick(player, args[0]);
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/src/de/steamwar/fightsystem/countdown/Countdown.java b/src/de/steamwar/fightsystem/countdown/Countdown.java
new file mode 100644
index 0000000..639565d
--- /dev/null
+++ b/src/de/steamwar/fightsystem/countdown/Countdown.java
@@ -0,0 +1,91 @@
+package de.steamwar.fightsystem.countdown;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import org.bukkit.Bukkit;
+import org.bukkit.Sound;
+import org.bukkit.scheduler.BukkitScheduler;
+
+import java.util.ArrayList;
+import java.util.logging.Level;
+
+public abstract class Countdown {
+
+ private static final ArrayList countdowns = new ArrayList<>();
+
+ private int time;
+ private final int taskID;
+ private final Sound sound;
+ private final boolean level;
+
+ abstract String countdownCounting();
+ abstract void countdownFinished();
+
+ Countdown(int time, Sound sound, boolean level) {
+ this.time = time;
+ this.sound = sound;
+ this.level = level;
+ countdowns.add(this);
+
+ BukkitScheduler bukkitScheduler = Bukkit.getServer().getScheduler();
+ this.taskID = bukkitScheduler.scheduleSyncRepeatingTask(FightSystem.getPlugin(), this::count, 0, 20);
+ }
+
+ public static void cancelAllTimers() {
+ while (!countdowns.isEmpty()) {
+ countdowns.get(0).cancelTimer();
+ }
+ }
+
+ public static void cancelTimerType(Class extends Countdown> type) {
+ for(int i = countdowns.size() - 1; i >= 0; i--)
+ if(type.isInstance(countdowns.get(i)))
+ countdowns.get(i).cancelTimer();
+ }
+
+ private void count(){
+ switch (time) {
+ case 900: case 600: case 300: case 180: case 120:
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §a" + time / 60 + " §7Minuten " + countdownCounting());
+ break;
+ case 60: case 30: case 20: case 15: case 10: case 5: case 4: case 3: case 2:
+ if(this.sound != null)
+ Fight.playSound(this.sound, 100.0F, 1.0F);
+
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §a" + time + " §7Sekunden " + countdownCounting());
+ break;
+ case 1:
+ if(this.sound != null)
+ Fight.playSound(this.sound, 100.0F, 1.0F);
+
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §aeine §7Sekunde " + countdownCounting());
+ break;
+ case 0:
+ if(this.sound != null)
+ Fight.playSound(this.sound, 100.0F, 2.0F);
+
+ cancelTimer();
+ countdownFinished();
+ break;
+ default:
+ }
+ if(this.level)
+ Fight.setLevel(time);
+
+ time--;
+ onTime(time);
+ }
+
+ void onTime(int time){
+ //Unused
+ }
+
+ public void cancelTimer() {
+ try {
+ Bukkit.getScheduler().cancelTask(this.taskID);
+ } catch (AssertionError ex) {
+ FightSystem.getPlugin().getLogger().log(Level.SEVERE, "Could not cancel timer", ex);
+ }
+ countdowns.remove(this);
+ }
+}
diff --git a/src/me/yaruma/fightsystem/utils/countdown/FinishNoneEntern.java b/src/de/steamwar/fightsystem/countdown/EnternCountdown.java
similarity index 51%
rename from src/me/yaruma/fightsystem/utils/countdown/FinishNoneEntern.java
rename to src/de/steamwar/fightsystem/countdown/EnternCountdown.java
index 9a4465f..204cdca 100644
--- a/src/me/yaruma/fightsystem/utils/countdown/FinishNoneEntern.java
+++ b/src/de/steamwar/fightsystem/countdown/EnternCountdown.java
@@ -1,9 +1,15 @@
-package me.yaruma.fightsystem.utils.countdown;
+package de.steamwar.fightsystem.countdown;
-import me.yaruma.fightsystem.FightSystem;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.utils.Config;
import org.bukkit.Bukkit;
+import org.bukkit.Sound;
-public class FinishNoneEntern implements CountdownCallback {
+public class EnternCountdown extends Countdown {
+
+ public EnternCountdown() {
+ super(Config.EnterPhaseBegin, Sound.BLOCK_NOTE_PLING, false);
+ }
@Override
public String countdownCounting() {
@@ -15,9 +21,4 @@ public class FinishNoneEntern implements CountdownCallback {
FightSystem.setEntern(true);
Bukkit.broadcastMessage(FightSystem.PREFIX + "§aEntern ist nun erlaubt!");
}
-
- @Override
- public CountdownType getType() {
- return CountdownType.NO_ENTERN;
- }
}
diff --git a/src/de/steamwar/fightsystem/countdown/EventStartCountdown.java b/src/de/steamwar/fightsystem/countdown/EventStartCountdown.java
new file mode 100644
index 0000000..6eed1a1
--- /dev/null
+++ b/src/de/steamwar/fightsystem/countdown/EventStartCountdown.java
@@ -0,0 +1,22 @@
+package de.steamwar.fightsystem.countdown;
+
+import de.steamwar.fightsystem.utils.Config;
+import de.steamwar.fightsystem.FightSystem;
+import org.bukkit.Sound;
+
+public class EventStartCountdown extends Countdown {
+
+ public EventStartCountdown() {
+ super(Config.SetupDuration, Sound.BLOCK_NOTE_PLING, false);
+ }
+
+ @Override
+ String countdownCounting() {
+ return "bis der Kampf beginnt!";
+ }
+
+ @Override
+ void countdownFinished() {
+ FightSystem.setPreRunningState();
+ }
+}
diff --git a/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java b/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java
new file mode 100644
index 0000000..3264a05
--- /dev/null
+++ b/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java
@@ -0,0 +1,21 @@
+package de.steamwar.fightsystem.countdown;
+
+import de.steamwar.fightsystem.utils.Config;
+import org.bukkit.Bukkit;
+
+public class NoPlayersOnlineCountdown extends Countdown {
+
+ public NoPlayersOnlineCountdown() {
+ super(Config.NoPlayerOnlineDuration, null, false);
+ }
+
+ @Override
+ public String countdownCounting() {
+ return "bis der Server gestoppt wird!";
+ }
+
+ @Override
+ public void countdownFinished() {
+ Bukkit.getServer().shutdown();
+ }
+}
diff --git a/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java b/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java
new file mode 100644
index 0000000..a4893db
--- /dev/null
+++ b/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java
@@ -0,0 +1,22 @@
+package de.steamwar.fightsystem.countdown;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.utils.Config;
+import org.bukkit.Sound;
+
+public class PreRunningCountdown extends Countdown {
+
+ public PreRunningCountdown() {
+ super(Config.PreFightDuration, Sound.BLOCK_NOTE_PLING, true);
+ }
+
+ @Override
+ public String countdownCounting() {
+ return "bis die Arena freigegeben ist!";
+ }
+
+ @Override
+ public void countdownFinished() {
+ FightSystem.getPlugin().setRunningState();
+ }
+}
diff --git a/src/me/yaruma/fightsystem/utils/countdown/FinishSetupOver.java b/src/de/steamwar/fightsystem/countdown/SetupOverCountdown.java
similarity index 55%
rename from src/me/yaruma/fightsystem/utils/countdown/FinishSetupOver.java
rename to src/de/steamwar/fightsystem/countdown/SetupOverCountdown.java
index 701d6e2..dd1764c 100644
--- a/src/me/yaruma/fightsystem/utils/countdown/FinishSetupOver.java
+++ b/src/de/steamwar/fightsystem/countdown/SetupOverCountdown.java
@@ -1,9 +1,14 @@
-package me.yaruma.fightsystem.utils.countdown;
+package de.steamwar.fightsystem.countdown;
-import me.yaruma.fightsystem.FightSystem;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.utils.Config;
import org.bukkit.Bukkit;
-public class FinishSetupOver implements CountdownCallback {
+public class SetupOverCountdown extends Countdown {
+
+ public SetupOverCountdown() {
+ super(Config.SetupDuration, null, false);
+ }
@Override
public String countdownCounting() {
@@ -15,9 +20,4 @@ public class FinishSetupOver implements CountdownCallback {
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cKampf wird abgebrochen!");
Bukkit.getServer().shutdown();
}
-
- @Override
- public CountdownType getType() {
- return CountdownType.SETUP_OVER;
- }
}
diff --git a/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java b/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java
new file mode 100644
index 0000000..27c4035
--- /dev/null
+++ b/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java
@@ -0,0 +1,22 @@
+package de.steamwar.fightsystem.countdown;
+
+import de.steamwar.fightsystem.utils.Config;
+import org.bukkit.Bukkit;
+import org.bukkit.Sound;
+
+public class SpectateOverCountdown extends Countdown {
+
+ public SpectateOverCountdown() {
+ super(Config.SpectatorDuration, Sound.BLOCK_NOTE_PLING, false);
+ }
+
+ @Override
+ public String countdownCounting() {
+ return "bis der Server gestoppt wird!";
+ }
+
+ @Override
+ public void countdownFinished() {
+ Bukkit.shutdown();
+ }
+}
diff --git a/src/de/steamwar/fightsystem/countdown/TechKOCountdown.java b/src/de/steamwar/fightsystem/countdown/TechKOCountdown.java
new file mode 100644
index 0000000..ec347a2
--- /dev/null
+++ b/src/de/steamwar/fightsystem/countdown/TechKOCountdown.java
@@ -0,0 +1,29 @@
+package de.steamwar.fightsystem.countdown;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.winconditions.WinconditionTechKO;
+import org.bukkit.Bukkit;
+import org.bukkit.Sound;
+
+public class TechKOCountdown extends Countdown {
+
+ private final FightTeam team;
+
+ public TechKOCountdown(FightTeam team) {
+ super(WinconditionTechKO.TECH_KO_COUNTDOWN_TIME, Sound.BLOCK_NOTE_PLING, false);
+ this.team = team;
+ }
+
+ @Override
+ final String countdownCounting() {
+ return "bis " + team.getName() + " §7einen Schuss abgegeben haben muss!";
+ }
+
+ @Override
+ void countdownFinished() {
+ Bukkit.broadcastMessage(FightSystem.PREFIX + team.getName() + "§7 ist §eTech K§8.§eO§8.!");
+ FightSystem.setSpectateState(Fight.getOpposite(team));
+ }
+}
diff --git a/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java b/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java
new file mode 100644
index 0000000..582e1c4
--- /dev/null
+++ b/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java
@@ -0,0 +1,29 @@
+package de.steamwar.fightsystem.countdown;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.utils.Config;
+import org.bukkit.Bukkit;
+import org.bukkit.Sound;
+
+public class TimeOverCountdown extends Countdown {
+
+ public TimeOverCountdown() {
+ super(Config.TimeoutTime, Sound.BLOCK_NOTE_BASS, false);
+ }
+
+ @Override
+ public String countdownCounting() {
+ return "bis der Kampf vorbei ist!";
+ }
+
+ @Override
+ public void countdownFinished() {
+ Bukkit.broadcastMessage(FightSystem.PREFIX +"§aZeit abgelaufen!");
+ FightSystem.setSpectateState(null);
+ }
+
+ @Override
+ void onTime(int time) {
+ FightSystem.setFightTime(time);
+ }
+}
diff --git a/src/me/yaruma/fightsystem/fight/Fight.java b/src/de/steamwar/fightsystem/fight/Fight.java
similarity index 72%
rename from src/me/yaruma/fightsystem/fight/Fight.java
rename to src/de/steamwar/fightsystem/fight/Fight.java
index fd5be52..2235632 100644
--- a/src/me/yaruma/fightsystem/fight/Fight.java
+++ b/src/de/steamwar/fightsystem/fight/Fight.java
@@ -1,15 +1,16 @@
-package me.yaruma.fightsystem.fight;
+package de.steamwar.fightsystem.fight;
-import me.yaruma.fightsystem.utils.Config;
+import de.steamwar.fightsystem.utils.Config;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
public class Fight {
- public static final FightTeam redTeam = new FightTeam(Config.TeamRedName, Config.TeamRedPrefix, Config.TeamRedSpawn, Config.TeamRedPaste, Config.TeamRedRotate, false);
- public static final FightTeam blueTeam = new FightTeam(Config.TeamBlueName, Config.TeamBluePrefix, Config.TeamBlueSpawn, Config.TeamBluePaste, Config.TeamBlueRotate, true);
+ private Fight(){}
+ public static final FightTeam redTeam = new FightTeam(Config.TeamRedName, Config.TeamRedPrefix, Config.TeamRedSpawn, Config.TeamRedPaste, Config.TeamRedCorner, Config.TeamRedRotate, false);
+ public static final FightTeam blueTeam = new FightTeam(Config.TeamBlueName, Config.TeamBluePrefix, Config.TeamBlueSpawn, Config.TeamBluePaste, Config.TeamBlueCorner, Config.TeamBlueRotate, true);
public static FightTeam getPlayerTeam(Player player) {
if(redTeam.isPlayerInTeam(player))
@@ -20,11 +21,14 @@ public class Fight {
}
public static FightTeam getOpposite(FightTeam fightTeam) {
+ if(fightTeam == null){
+ throw new IllegalArgumentException();
+ }
+
if(fightTeam == redTeam)
return blueTeam;
- if(fightTeam == blueTeam)
+ else
return redTeam;
- return null;
}
public static FightTeam getInvitedTeam(Player player){
@@ -52,14 +56,11 @@ public class Fight {
}
public static void playSound(Sound sound, float volume, float pitch) {
- for(Player player : Bukkit.getServer().getOnlinePlayers()) {
- player.playSound(player.getLocation(), sound, volume, pitch); //volume: max. 100, pitch: max. 2
- }
+ //volume: max. 100, pitch: max. 2
+ Bukkit.getServer().getOnlinePlayers().forEach(player -> player.playSound(player.getLocation(), sound, volume, pitch));
}
public static void setLevel(int level) {
- for(Player player : Bukkit.getServer().getOnlinePlayers()) {
- player.setLevel(level);
- }
+ Bukkit.getServer().getOnlinePlayers().forEach(player -> player.setLevel(level));
}
}
diff --git a/src/me/yaruma/fightsystem/fight/FightPlayer.java b/src/de/steamwar/fightsystem/fight/FightPlayer.java
similarity index 57%
rename from src/me/yaruma/fightsystem/fight/FightPlayer.java
rename to src/de/steamwar/fightsystem/fight/FightPlayer.java
index 22aa185..0de81a0 100644
--- a/src/me/yaruma/fightsystem/fight/FightPlayer.java
+++ b/src/de/steamwar/fightsystem/fight/FightPlayer.java
@@ -1,13 +1,14 @@
-package me.yaruma.fightsystem.fight;
+package de.steamwar.fightsystem.fight;
-import me.yaruma.fightsystem.kit.Kit;
-import me.yaruma.fightsystem.kit.KitManager;
-import me.yaruma.fightsystem.utils.Config;
+import de.steamwar.fightsystem.kit.KitManager;
+import de.steamwar.fightsystem.utils.Config;
+import de.steamwar.fightsystem.kit.Kit;
import org.bukkit.entity.Player;
public class FightPlayer {
private final Player player;
+ private final FightTeam team;
private boolean isOut;
private Kit kit;
@@ -16,26 +17,27 @@ public class FightPlayer {
this.player.sendMessage(message);
}
- FightPlayer(Player player, boolean isOut) {
+ FightPlayer(Player player, FightTeam team) {
this.player = player;
- this.isOut = isOut;
+ this.team = team;
+ this.isOut = false;
kit = KitManager.getKitByName(Config.MemberDefault);
}
- public void setOut(boolean isOut) {
- this.isOut = isOut;
+ public void setOut() {
+ isOut = true;
}
public Player getPlayer() {
return this.player;
}
- public boolean isOut() {
- return this.isOut;
+ public boolean isLiving() {
+ return !this.isOut;
}
public boolean isLeader() {
- FightPlayer leader = Fight.getPlayerTeam(player).getLeader();
+ FightPlayer leader = team.getLeader();
return leader != null && leader.getPlayer() == player;
}
@@ -46,4 +48,8 @@ public class FightPlayer {
public void setKit(Kit kit) {
this.kit = kit;
}
+
+ public FightTeam getTeam(){
+ return team;
+ }
}
diff --git a/src/me/yaruma/fightsystem/fight/FightState.java b/src/de/steamwar/fightsystem/fight/FightState.java
similarity index 67%
rename from src/me/yaruma/fightsystem/fight/FightState.java
rename to src/de/steamwar/fightsystem/fight/FightState.java
index 6e30788..017990b 100644
--- a/src/me/yaruma/fightsystem/fight/FightState.java
+++ b/src/de/steamwar/fightsystem/fight/FightState.java
@@ -1,7 +1,6 @@
-package me.yaruma.fightsystem.fight;
+package de.steamwar.fightsystem.fight;
public enum FightState {
-
SETUP,
PRE_RUNNING,
RUNNING,
diff --git a/src/de/steamwar/fightsystem/fight/FightTeam.java b/src/de/steamwar/fightsystem/fight/FightTeam.java
new file mode 100644
index 0000000..43f81f6
--- /dev/null
+++ b/src/de/steamwar/fightsystem/fight/FightTeam.java
@@ -0,0 +1,338 @@
+package de.steamwar.fightsystem.fight;
+
+import com.boydti.fawe.FaweAPI;
+import com.sk89q.worldedit.EditSession;
+import com.sk89q.worldedit.MaxChangedBlocksException;
+import com.sk89q.worldedit.Vector;
+import com.sk89q.worldedit.blocks.BaseBlock;
+import com.sk89q.worldedit.bukkit.BukkitWorld;
+import com.sk89q.worldedit.math.transform.AffineTransform;
+import com.sk89q.worldedit.regions.CuboidRegion;
+import com.sk89q.worldedit.world.World;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.kit.KitManager;
+import de.steamwar.fightsystem.utils.*;
+import de.warking.hunjy.MySQL.Schematic;
+import de.warking.hunjy.MySQL.WarkingUser;
+import javafx.util.Pair;
+import org.bukkit.*;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.scoreboard.Team;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+
+
+public class FightTeam {
+
+ @SuppressWarnings("deprecation")
+ private static final int COLOR_TO_REPLACE = DyeColor.PINK.getWoolData();
+
+ @SuppressWarnings("deprecation")
+ private static final BaseBlock WOOL = new BaseBlock(Material.WOOL.getId(), COLOR_TO_REPLACE);
+ @SuppressWarnings("deprecation")
+ private static final BaseBlock GLASS = new BaseBlock(Material.STAINED_GLASS.getId(), COLOR_TO_REPLACE);
+ @SuppressWarnings("deprecation")
+ private static final BaseBlock CLAY = new BaseBlock(Material.CLAY.getId(), COLOR_TO_REPLACE);
+ @SuppressWarnings("deprecation")
+ private static final BaseBlock GLASS_PANE = new BaseBlock(Material.STAINED_GLASS_PANE.getId(), COLOR_TO_REPLACE);
+ @SuppressWarnings("deprecation")
+ private static final BaseBlock CONCRETE = new BaseBlock(Material.CONCRETE.getId(), COLOR_TO_REPLACE);
+
+ private static final Set WOOL_SET = Collections.singleton(WOOL);
+ private static final Set CONCRETE_SET = Collections.singleton(CONCRETE);
+ private static final Set CLAY_SET = Collections.singleton(CLAY);
+ private static final Set GLASS_SET = Collections.singleton(GLASS);
+ private static final Set GLASS_PANE_SET = Collections.singleton(GLASS_PANE);
+
+ private FightPlayer leader;
+ private final Set players = new HashSet<>();
+ private boolean ready;
+ private final Set invited = new HashSet<>();
+ private final String name;
+ private final String prefix;
+ private final ChatColor color;
+ private Schematic schematic;
+ private final Team team;
+ private final boolean blue;
+
+ private final Location spawn;
+ private final Vector paste;
+ private final Vector corner;
+ private final boolean rotate;
+
+ public FightTeam(String name, String prefix, Location spawn, Vector paste, Vector corner, boolean rotate, boolean blue) {
+ this.spawn = spawn;
+ this.paste = paste;
+ this.name = name;
+ this.prefix = prefix;
+ this.ready = false;
+ this.rotate = rotate;
+ this.corner = corner;
+ this.blue = blue;
+ color = ChatColor.getByChar(ChatColor.getLastColors(prefix).replace("§", ""));
+ if(FightScoreboard.getScoreboard().getTeam(name) == null)
+ team = FightScoreboard.getScoreboard().registerNewTeam(name);
+ else
+ team = FightScoreboard.getScoreboard().getTeam(name);
+ team.setColor(color);
+ team.setAllowFriendlyFire(false);
+ team.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);
+ }
+
+ public void teleportToSpawn(){
+ for(FightPlayer player : players){
+ player.getPlayer().teleport(spawn);
+ }
+ }
+
+ public FightPlayer getFightPlayer(Player player) {
+ for(FightPlayer fightPlayer : players) {
+ if(fightPlayer.getPlayer().equals(player))
+ return fightPlayer;
+ }
+ return null;
+ }
+
+ public boolean allPlayersOut() {
+ for(FightPlayer fightPlayer : players) {
+ if(fightPlayer.isLiving())
+ return false;
+ }
+ return true;
+ }
+
+ public boolean isPlayerInTeam(Player player) {
+ for(FightPlayer fightPlayer : players) {
+ if(fightPlayer.getPlayer().equals(player))
+ return true;
+ }
+ return false;
+ }
+
+ public boolean isPlayerLeader(Player player) {
+ if(leader != null)
+ return leader.getPlayer().equals(player);
+ else
+ return false;
+ }
+
+ public void broadcast(String message) {
+ for(FightPlayer fightPlayer : players) {
+ fightPlayer.sendMessage(message);
+ }
+ }
+
+ public FightPlayer addMember(Player player) {
+ final List> chunksToReload = TechHider.prepareChunkReload(player);
+ FightPlayer fightPlayer = new FightPlayer(player, this);
+ players.add(fightPlayer);
+ invited.remove(player);
+ team.addEntry(player.getName());
+
+ player.setGameMode(GameMode.ADVENTURE);
+ player.teleport(spawn);
+ if(KitManager.getKits(false).size() > 1)
+ player.getInventory().setItem(1, new ItemBuilder(Material.LEATHER_CHESTPLATE).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§eKit wählen").build());
+ player.getInventory().setItem(4, new ItemBuilder(Material.BEACON).removeAllAtributs().setDisplayName("§eRespawn").build());
+ TechHider.reloadChunks(player, chunksToReload);
+ return fightPlayer;
+ }
+
+ public void removePlayer(Player player) {
+ FightPlayer fightPlayer = getFightPlayer(player);
+ if(fightPlayer == null)
+ return;
+
+ final List> chunksToReload = TechHider.prepareChunkReload(player);
+ players.remove(fightPlayer);
+ team.removeEntry(player.getName());
+ fightPlayer.getPlayer().getInventory().clear();
+ if(fightPlayer.equals(leader) && FightSystem.getFightState() == FightState.SETUP){
+ this.leader = null;
+ if(!players.isEmpty()) {
+ setLeader(players.iterator().next());
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§aDer Spieler §e" + leader.getPlayer().getName() + " §aist nun Leader von Team " + getName() + "§a!");
+ }else if(!Config.event()){
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§cTeam " + getName() + " §chat keine Spieler mehr.\n Arena schließt...");
+ Bukkit.shutdown();
+ }else{
+ setLeader(null);
+ }
+ }
+
+ player.setGameMode(GameMode.SPECTATOR);
+ player.teleport(Config.SpecSpawn);
+ TechHider.reloadChunks(player, chunksToReload);
+ }
+
+ public boolean hasTeamLeader() {
+ return leader != null;
+ }
+
+ public boolean isBlue(){
+ return blue;
+ }
+
+ public FightPlayer getLeader() {
+ return leader;
+ }
+
+ public void setLeader(FightPlayer leader) {
+ this.leader = leader;
+ if (leader == null)
+ return;
+
+ leader.setKit(KitManager.getKitByName(Config.LeaderDefault));
+ Inventory inventory = leader.getPlayer().getInventory();
+ if (KitManager.getKits(true).size() > 1)
+ inventory.setItem(1, new ItemBuilder(Material.LEATHER_CHESTPLATE).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§eKit wählen").build());
+ else
+ inventory.setItem(1, new ItemBuilder(Material.AIR).build());
+ if(!Config.event()){
+ inventory.setItem(0, new ItemBuilder(Material.PAPER).removeAllAtributs().setDisplayName("§eSpieler einladen").build());
+ inventory.setItem(2, new ItemBuilder(Material.FIREWORK_CHARGE).removeAllAtributs().setDisplayName("§cSpieler rauswerfen").build());
+ inventory.setItem(3, new ItemBuilder(Material.INK_SACK, (short) 10).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§cNicht bereit").build());
+ inventory.setItem(5, new ItemBuilder(Material.INK_SACK, (short) 1).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§4Abbrechen").build());
+ }
+ inventory.setItem(7, new ItemBuilder(Material.CAULDRON_ITEM).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§e" + Config.GameName + " wählen").build());
+ }
+
+ public Set getPlayers() {
+ return players;
+ }
+
+ public boolean isReady() {
+ return ready;
+ }
+
+ private void pasteSchematic(){
+ File file = new File(Config.SchematicDirectory + WarkingUser.get(schematic.getSchemOwner()).getUUID().toString(), schematic.getSchemName() + ".schematic");
+ com.boydti.fawe.object.schematic.Schematic schem;
+ try {
+ schem = FaweAPI.load(file);
+ if(schem.getClipboard() == null)
+ throw new IOException();
+ }catch(IOException e){
+ Bukkit.getLogger().log(Level.SEVERE, "Failed loading Schematic", e);
+ return;
+ }
+
+ World w = new BukkitWorld(Bukkit.getWorlds().get(0));
+ Vector dimensions = schem.getClipboard().getDimensions();
+ Vector v;
+ Vector offset = new Vector(schem.getClipboard().getRegion().getMinimumPoint()).subtract(schem.getClipboard().getOrigin());
+ AffineTransform aT = new AffineTransform();
+ if(rotate){
+ aT = aT.rotateY(180);
+ v = paste.add(dimensions.getX()/2 + dimensions.getX()%2, 0, dimensions.getZ()/2 + dimensions.getZ()%2).subtract(offset.multiply(-1, 1, -1)).subtract(1, 0, 1);
+ }else{
+ v = paste.subtract(dimensions.getX()/2 - dimensions.getX()%2, 0, dimensions.getZ()/2 - dimensions.getZ()%2).subtract(offset);
+ }
+
+ if(Config.AlignWater){
+ Vector it = schem.getClipboard().getMinimumPoint();
+ int depth = 0;
+ while(!schem.getClipboard().getBlock(it).isAir()){
+ depth++;
+ it = it.setY(it.getY()+1);
+ }
+ v = v.add(0, Config.WaterDepth - depth, 0);
+ }
+
+ EditSession e = schem.paste(w, v, false, true, aT);
+ replaceTeamColor(e);
+ Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), this::teleportToSpawn,40);
+ }
+
+ @SuppressWarnings("deprecation")
+ private void replaceTeamColor(EditSession e){
+ CuboidRegion region = new CuboidRegion(corner, corner.add(Config.Schemsize));
+
+ DyeColor c = ColorConverter.chat2dye(color);
+
+ try {
+ e.replaceBlocks(region, WOOL_SET, new BaseBlock(WOOL.getId(), c.getWoolData()));
+ e.replaceBlocks(region, CONCRETE_SET, new BaseBlock(CONCRETE.getId(), c.getWoolData()));
+ e.replaceBlocks(region, CLAY_SET, new BaseBlock(CLAY.getId(), c.getWoolData()));
+ e.replaceBlocks(region, GLASS_SET, new BaseBlock(GLASS.getId(), c.getWoolData()));
+ e.replaceBlocks(region, GLASS_PANE_SET, new BaseBlock(GLASS_PANE.getId(), c.getWoolData()));
+ } catch (MaxChangedBlocksException ex) {
+ // ignore, will never occur
+ }
+
+ e.flushQueue();
+ }
+
+ public void pasteDummy(){
+ List publics = Schematic.getSchemsOfType(0, Config.SchematicType);
+ if(publics.isEmpty())
+ return;
+
+ schematic = publics.get(0);
+ pasteSchematic();
+ }
+
+ public void setSchematic(Schematic schematic){
+ this.schematic = schematic;
+ broadcast(FightSystem.PREFIX + "§7Das §e" + Config.GameName + " " + schematic.getSchemName() + " §7wird für den Kampf verwendet!");
+
+ if(!Config.test())
+ leader.getPlayer().getInventory().clear(7);
+
+ if(Config.test())
+ pasteSchematic();
+ else if(Fight.getOpposite(this).hasSchematic()){
+ pasteSchematic();
+ Fight.getOpposite(this).pasteSchematic();
+ }
+ }
+
+ public boolean hasSchematic(){
+ return schematic != null;
+ }
+
+ public void setReady(boolean ready) {
+ Player l = leader.getPlayer();
+
+ if(schematic == null){
+ l.sendMessage(FightSystem.PREFIX + "§cZuerst muss eine Schematic gewählt sein!");
+ return;
+ }
+
+ this.ready = ready;
+ if(ready) {
+ l.getInventory().setItem(3, new ItemBuilder(Material.INK_SACK, (short) 8).removeAllAtributs().addEnchantment(Enchantment.DURABILITY,1 ).setDisplayName("§aBereit").build());
+ broadcast(FightSystem.PREFIX + "§aEuer Team ist nun bereit!");
+ if(Fight.getOpposite(this).isReady() || Config.test()) {
+ FightSystem.setPreRunningState();
+ }
+ } else {
+ l.getInventory().setItem(3, new ItemBuilder(Material.INK_SACK, (short) 10).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§cNicht bereit").build());
+ broadcast(FightSystem.PREFIX + "§cEuer Team ist nicht mehr bereit!");
+ }
+ }
+
+ public Set getInvited() {
+ return invited;
+ }
+
+ public String getName() {
+ return prefix + name;
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+
+ public Location getSpawn() {
+ return spawn;
+ }
+}
diff --git a/src/me/yaruma/fightsystem/kit/Kit.java b/src/de/steamwar/fightsystem/kit/Kit.java
similarity index 71%
rename from src/me/yaruma/fightsystem/kit/Kit.java
rename to src/de/steamwar/fightsystem/kit/Kit.java
index edb84cd..23fa397 100644
--- a/src/me/yaruma/fightsystem/kit/Kit.java
+++ b/src/de/steamwar/fightsystem/kit/Kit.java
@@ -1,4 +1,4 @@
-package me.yaruma.fightsystem.kit;
+package de.steamwar.fightsystem.kit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@@ -6,14 +6,12 @@ import org.bukkit.inventory.ItemStack;
public class Kit {
private String name;
- private int price;
private boolean leaderAllowed;
private boolean memberAllowed;
private ItemStack[] inventory;
- public Kit(String name, int price, boolean leaderAllowed, boolean memberAllowed, ItemStack[] inventory) {
+ Kit(String name, boolean leaderAllowed, boolean memberAllowed, ItemStack[] inventory) {
this.name = name;
- this.price = price;
this.leaderAllowed = leaderAllowed;
this.memberAllowed = memberAllowed;
this.inventory = inventory;
@@ -23,10 +21,6 @@ public class Kit {
return name;
}
- public int getPrice() {
- return price;
- }
-
public boolean isLeaderAllowed() {
return leaderAllowed;
}
@@ -35,7 +29,7 @@ public class Kit {
return memberAllowed;
}
- public ItemStack[] getInventory() {
+ ItemStack[] getInventory() {
return inventory;
}
diff --git a/src/me/yaruma/fightsystem/kit/KitManager.java b/src/de/steamwar/fightsystem/kit/KitManager.java
similarity index 50%
rename from src/me/yaruma/fightsystem/kit/KitManager.java
rename to src/de/steamwar/fightsystem/kit/KitManager.java
index 2f812eb..4d49e19 100644
--- a/src/me/yaruma/fightsystem/kit/KitManager.java
+++ b/src/de/steamwar/fightsystem/kit/KitManager.java
@@ -1,7 +1,7 @@
-package me.yaruma.fightsystem.kit;
+package de.steamwar.fightsystem.kit;
-import de.warking.hunjy.CoinSystem.CoinSystem;
-import me.yaruma.fightsystem.FightSystem;
+import de.steamwar.fightsystem.FightSystem;
+import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
@@ -11,53 +11,46 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.logging.Level;
public class KitManager {
- public static final FightSystem instance = FightSystem.getPlugin();
- private static final String kitsPath = "plugins/" + FightSystem.getPlugin().getName() + "/kits.data";
+ private KitManager(){}
+
+ private static final String KITS_PATH = "plugins/" + FightSystem.getPlugin().getName() + "/kits.data";
+ private static final File kits = new File(KITS_PATH);
+ private static final FileConfiguration kitData = YamlConfiguration.loadConfiguration(kits);
private static final ArrayList loadedKits = new ArrayList<>();
public static void saveInventory(String kitName, Player player){
- loadedKits.add(new Kit(kitName, 0, true, true, player.getInventory().getContents()));
+ loadedKits.add(new Kit(kitName, true, true, player.getInventory().getContents()));
saveAllKits();
}
- public static boolean canBuy(Player player, String kitName) {
- if(getKitByName(kitName).getPrice() <= CoinSystem.getCoinsManager(player).getCoins()) {
- return true;
- } else
- return false;
- }
-
- public void buyKit() {
- //wird spaeter gemacht
- }
-
- public static boolean ownsKit(Player player) {
- return true; //wird spaeter gemacht
- }
-
- public static Kit loadKitFromConfig(String name) {
- FileConfiguration data = instance.getKitData();
+ private static Kit loadKitFromConfig(String name) {
String path = "Kits." + name;
- if(data.contains(path)) {
- List items = (List) data.getList(path + ".Items");
+ if(kitData.contains(path)) {
+ List items = (List) kitData.getList(path + ".Items");
- int price = data.getInt(path + ".Price");
- boolean leaderAllowed = data.getBoolean(path + ".LeaderAllowed");
- boolean memberAllowed = data.getBoolean(path + ".MemberAllowed");
+ boolean leaderAllowed = kitData.getBoolean(path + ".LeaderAllowed");
+ boolean memberAllowed = kitData.getBoolean(path + ".MemberAllowed");
- Kit kit = new Kit(name, price, leaderAllowed, memberAllowed, items.toArray(new ItemStack[1]));
- return kit;
+ return new Kit(name, leaderAllowed, memberAllowed, items.toArray(new ItemStack[1]));
}
return null;
}
public static void loadAllKits() {
- if(instance.getKitData().getConfigurationSection("Kits") != null) {
- for(String key : instance.getKitData().getConfigurationSection("Kits").getKeys(false)) {
+ if(!new File(KITS_PATH).exists()) {
+ saveAllKits();
+ Bukkit.getLogger().log(Level.INFO, "kits.data erstellt!");
+ Bukkit.shutdown();
+ return;
+ }
+
+ if(kitData.getConfigurationSection("Kits") != null) {
+ for(String key : kitData.getConfigurationSection("Kits").getKeys(false)) {
loadedKits.add(loadKitFromConfig(key));
}
}
@@ -68,13 +61,15 @@ public class KitManager {
for(Kit k : loadedKits){
String path = "Kits." + k.getName();
yamlConfiguration.set(path + ".Items", k.getInventory());
- yamlConfiguration.set(path + ".Price", k.getPrice());
yamlConfiguration.set(path + ".LeaderAllowed", k.isLeaderAllowed());
yamlConfiguration.set(path + ".MemberAllowed", k.isMemberAllowed());
}
+
try {
- yamlConfiguration.save(new File(kitsPath));
- }catch(IOException ignored){}
+ yamlConfiguration.save(kits);
+ }catch(IOException e){
+ Bukkit.getLogger().log(Level.SEVERE, "Failed to save kits.data", e);
+ }
}
public static Kit getKitByName(String kitName) {
diff --git a/src/de/steamwar/fightsystem/listener/BasicListener.java b/src/de/steamwar/fightsystem/listener/BasicListener.java
new file mode 100644
index 0000000..522b5d7
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/BasicListener.java
@@ -0,0 +1,45 @@
+package de.steamwar.fightsystem.listener;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightState;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.Listener;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public abstract class BasicListener implements Listener {
+
+ private static final List listeners = new LinkedList<>();
+
+ BasicListener(){
+ Bukkit.getPluginManager().registerEvents(this, FightSystem.getPlugin());
+ listeners.add(this);
+ }
+
+ public static void fightStateChange(FightState state){
+ for (int i = listeners.size() - 1; i >= 0; i--) {
+ listeners.get(i).stateChange(state);
+ }
+ }
+
+ boolean notRunning(){
+ return FightSystem.getFightState() != FightState.RUNNING;
+ }
+
+ boolean notFighting(Player p){
+ return Fight.getFightPlayer(p) == null;
+ }
+
+ void stateChange(FightState state){
+ //Unused
+ }
+
+ void disable(){
+ HandlerList.unregisterAll(this);
+ listeners.remove(this);
+ }
+}
diff --git a/src/de/steamwar/fightsystem/listener/BlockListener.java b/src/de/steamwar/fightsystem/listener/BlockListener.java
new file mode 100644
index 0000000..96e80d3
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/BlockListener.java
@@ -0,0 +1,31 @@
+package de.steamwar.fightsystem.listener;
+
+import net.md_5.bungee.api.ChatMessageType;
+import net.md_5.bungee.api.chat.TextComponent;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.event.block.BlockPlaceEvent;
+
+public class BlockListener extends BasicListener {
+
+ @EventHandler
+ public void handleBlockBreak(BlockBreakEvent event) {
+ Player player = event.getPlayer();
+
+ if(notRunning() || notFighting(player)){
+ event.setCancelled(true);
+ player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst erst nach Fightbeginn Blöcke abbauen!"));
+ }
+ }
+
+ @EventHandler
+ public void handleBlockPlace(BlockPlaceEvent event) {
+ Player player = event.getPlayer();
+
+ if(notRunning() || notFighting(player)) {
+ event.setCancelled(true);
+ player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst erst nach Fightbeginn Blöcke setzen!"));
+ }
+ }
+}
diff --git a/src/de/steamwar/fightsystem/listener/EntityDamageListener.java b/src/de/steamwar/fightsystem/listener/EntityDamageListener.java
new file mode 100644
index 0000000..8fc6b01
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/EntityDamageListener.java
@@ -0,0 +1,69 @@
+package de.steamwar.fightsystem.listener;
+
+import de.steamwar.fightsystem.fight.Fight;
+import net.md_5.bungee.api.ChatMessageType;
+import net.md_5.bungee.api.chat.TextComponent;
+import org.bukkit.entity.Arrow;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+
+public class EntityDamageListener extends BasicListener {
+
+ @EventHandler
+ public void handleEntityDamage(EntityDamageEvent event) {
+ if(notRunning()){
+ event.setCancelled(true);
+ return;
+ }
+
+ if(!(event.getEntity() instanceof Player))
+ return;
+
+ if(notFighting((Player)event.getEntity()))
+ event.setCancelled(true);
+ }
+
+ @EventHandler
+ public void handleEntityDamageByEntity(EntityDamageByEntityEvent event) {
+ if(notRunning()) {
+ event.setCancelled(true);
+ return;
+ }
+
+ if(!(event.getEntity() instanceof Player))
+ //Target is not a player
+ return;
+
+ Player player = ((Player) event.getEntity()).getPlayer();
+ Player damager;
+
+ if(event.getDamager() instanceof Player) {
+ damager = ((Player) event.getDamager()).getPlayer();
+ }else if(event.getDamager() instanceof Arrow) {
+ Arrow damagerArrow = (Arrow) event.getDamager();
+ if(!(damagerArrow.getShooter() instanceof Player))
+ //Shooter is not a player
+ return;
+
+ damagerArrow.setFireTicks(0);
+ player.setFireTicks(0);
+ damager = (Player) damagerArrow.getShooter();
+ }else{
+ //Damager is not a player
+ return;
+ }
+
+ if(notFighting(damager)){
+ event.setCancelled(true);
+ //Damager is not fighting
+ return;
+ }
+
+ if(Fight.getPlayerTeam(player) == Fight.getPlayerTeam(damager)) {
+ event.setCancelled(true);
+ damager.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst deinen Teamkollegen keinen Schaden zufügen!"));
+ }
+ }
+}
diff --git a/src/de/steamwar/fightsystem/listener/EntityExplodeListener.java b/src/de/steamwar/fightsystem/listener/EntityExplodeListener.java
new file mode 100644
index 0000000..f7b5f6b
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/EntityExplodeListener.java
@@ -0,0 +1,19 @@
+package de.steamwar.fightsystem.listener;
+
+import de.steamwar.fightsystem.utils.WaterRemover;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.entity.EntityExplodeEvent;
+
+public class EntityExplodeListener extends BasicListener {
+
+ @EventHandler
+ public void handleEntityExplode(EntityExplodeEvent event) {
+ if(notRunning()){
+ event.setCancelled(true);
+ return;
+ }
+
+ event.setYield(0); //No drops (additionally to world config
+ WaterRemover.add(event.blockList());
+ }
+}
diff --git a/src/de/steamwar/fightsystem/listener/EventJoinListener.java b/src/de/steamwar/fightsystem/listener/EventJoinListener.java
new file mode 100644
index 0000000..2673b56
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/EventJoinListener.java
@@ -0,0 +1,50 @@
+package de.steamwar.fightsystem.listener;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightPlayer;
+import de.steamwar.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.utils.Config;
+import de.warking.hunjy.MySQL.WarkingUser;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+
+public class EventJoinListener extends BasicListener {
+
+ @EventHandler
+ public void handlePlayerJoin(PlayerJoinEvent event) {
+ Player player = event.getPlayer();
+ WarkingUser user = WarkingUser.get(player.getUniqueId());
+
+ FightTeam team = null;
+ if(user.getTeam() == Config.EventTeamBlueID)
+ team = Fight.getBlueTeam();
+ else if(user.getTeam() == Config.EventTeamRedID)
+ team = Fight.getRedTeam();
+
+ if(team != null && team.getPlayers().size() < Config.MaximumTeamMembers){
+ FightPlayer fp = team.addMember(player);
+ if(!team.hasTeamLeader())
+ team.setLeader(fp);
+ }
+
+ if(user.getId() == FightSystem.getEventFight().getKampfleiter())
+ FightSystem.setEventLeiter(player);
+ }
+
+ @EventHandler
+ public void handlePlayerLeave(PlayerQuitEvent event){
+ Player player = event.getPlayer();
+
+ if(player == FightSystem.getEventLeiter())
+ FightSystem.setEventLeiter(null);
+ }
+
+ @Override
+ void stateChange(FightState state){
+ disable();
+ }
+}
diff --git a/src/me/yaruma/fightsystem/listener/FoodLevelChangeListener.java b/src/de/steamwar/fightsystem/listener/FoodLevelChangeListener.java
similarity index 62%
rename from src/me/yaruma/fightsystem/listener/FoodLevelChangeListener.java
rename to src/de/steamwar/fightsystem/listener/FoodLevelChangeListener.java
index 287a9da..0bd866b 100644
--- a/src/me/yaruma/fightsystem/listener/FoodLevelChangeListener.java
+++ b/src/de/steamwar/fightsystem/listener/FoodLevelChangeListener.java
@@ -1,10 +1,9 @@
-package me.yaruma.fightsystem.listener;
+package de.steamwar.fightsystem.listener;
import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
import org.bukkit.event.entity.FoodLevelChangeEvent;
-public class FoodLevelChangeListener implements Listener {
+public class FoodLevelChangeListener extends BasicListener {
@EventHandler
public void handleFoodLevelChange(FoodLevelChangeEvent event) {
diff --git a/src/me/yaruma/fightsystem/listener/PlayerInteractListener.java b/src/de/steamwar/fightsystem/listener/HotbarGUIListener.java
similarity index 71%
rename from src/me/yaruma/fightsystem/listener/PlayerInteractListener.java
rename to src/de/steamwar/fightsystem/listener/HotbarGUIListener.java
index 70be055..595fa33 100644
--- a/src/me/yaruma/fightsystem/listener/PlayerInteractListener.java
+++ b/src/de/steamwar/fightsystem/listener/HotbarGUIListener.java
@@ -1,34 +1,35 @@
-package me.yaruma.fightsystem.listener;
+package de.steamwar.fightsystem.listener;
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.commands.GUI;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightState;
-import me.yaruma.fightsystem.fight.FightTeam;
-import me.yaruma.fightsystem.utils.Config;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.utils.Config;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.commands.GUI;
+import de.steamwar.fightsystem.fight.FightState;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.meta.ItemMeta;
-public class PlayerInteractListener implements Listener {
+public class HotbarGUIListener extends BasicListener {
@EventHandler
public void handlePlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
- if(FightSystem.getFightState() == FightState.SETUP &&
- event.getItem() != null &&
- Fight.getPlayerTeam(player) != null) {
+ if(event.getItem() != null) {
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+ if(fightTeam == null)
+ return;
+
ItemMeta itemMeta = event.getItem().getItemMeta();
String displayName = itemMeta.getDisplayName();
- event.setCancelled(true);
if(displayName == null)
return;
- FightTeam fightTeam = Fight.getPlayerTeam(player);
+ event.setCancelled(true);
+
if(displayName.equals("§e" + Config.GameName + " wählen")){
GUI.preSchemDialog(player);
return;
@@ -54,9 +55,15 @@ public class PlayerInteractListener implements Listener {
case "§eKit wählen":
GUI.kitSelection(player);
break;
+ case "§eRespawn":
+ player.teleport(fightTeam.getSpawn());
+ break;
}
}
}
-
-}
+ @Override
+ void stateChange(FightState state){
+ disable();
+ }
+}
\ No newline at end of file
diff --git a/src/me/yaruma/fightsystem/listener/InventoryListener.java b/src/de/steamwar/fightsystem/listener/InventoryListener.java
similarity index 68%
rename from src/me/yaruma/fightsystem/listener/InventoryListener.java
rename to src/de/steamwar/fightsystem/listener/InventoryListener.java
index 90a3013..7b0ebb3 100644
--- a/src/me/yaruma/fightsystem/listener/InventoryListener.java
+++ b/src/de/steamwar/fightsystem/listener/InventoryListener.java
@@ -1,17 +1,17 @@
-package me.yaruma.fightsystem.listener;
+package de.steamwar.fightsystem.listener;
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.FightState;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
+import org.bukkit.event.inventory.InventoryPickupItemEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
-public class InventoryListener implements Listener {
+public class InventoryListener extends BasicListener {
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
@@ -21,20 +21,21 @@ public class InventoryListener implements Listener {
}
Inventory clicked = event.getClickedInventory();
- if (event.getClick().isShiftClick()) {
+ if(event.getClick().isShiftClick()){
ItemStack clickedOn = event.getCurrentItem();
- if (clickedOn != null && event.getView().getTopInventory().getType() != InventoryType.CRAFTING && clicked == event.getWhoClicked().getInventory()) {
+ if(
+ clickedOn != null &&
+ event.getView().getTopInventory().getType() != InventoryType.CRAFTING &&
+ clicked == event.getWhoClicked().getInventory())
event.setCancelled(true);
- }
}else if (
clicked != event.getWhoClicked().getInventory() &&
clicked != null &&
clicked.getType() != InventoryType.PLAYER &&
event.getCursor() != null &&
- event.getCursor().getType() != Material.AIR){
+ event.getCursor().getType() != Material.AIR)
event.setCancelled(true);
- }
}
@EventHandler
@@ -55,4 +56,9 @@ public class InventoryListener implements Listener {
}
}
}
+
+ @EventHandler
+ public void onDropPickup(InventoryPickupItemEvent e){
+ e.setCancelled(true);
+ }
}
diff --git a/src/de/steamwar/fightsystem/listener/NormalJoinListener.java b/src/de/steamwar/fightsystem/listener/NormalJoinListener.java
new file mode 100644
index 0000000..bb5480e
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/NormalJoinListener.java
@@ -0,0 +1,39 @@
+package de.steamwar.fightsystem.listener;
+
+import de.steamwar.fightsystem.countdown.Countdown;
+import de.steamwar.fightsystem.countdown.NoPlayersOnlineCountdown;
+import de.steamwar.fightsystem.countdown.SetupOverCountdown;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.fight.FightTeam;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.player.PlayerJoinEvent;
+
+public class NormalJoinListener extends BasicListener {
+
+ @EventHandler
+ public void handlePlayerJoin(PlayerJoinEvent event) {
+ Player player = event.getPlayer();
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+
+ if (fightTeam == null) {
+ if(!Fight.getRedTeam().hasTeamLeader()) {
+ Fight.getRedTeam().setLeader(Fight.getRedTeam().addMember(player));
+ } else if(!Fight.getBlueTeam().hasTeamLeader()) {
+ Fight.getBlueTeam().setLeader(Fight.getBlueTeam().addMember(player));
+ }
+ }
+
+ if(Fight.getRedTeam().hasTeamLeader() && Fight.getBlueTeam().hasTeamLeader()
+ && (Fight.getRedTeam().getLeader().getPlayer() == player || Fight.getBlueTeam().getLeader().getPlayer() == player)) {
+ Countdown.cancelTimerType(NoPlayersOnlineCountdown.class);
+ new SetupOverCountdown();
+ }
+ }
+
+ @Override
+ void stateChange(FightState state){
+ disable();
+ }
+}
diff --git a/src/me/yaruma/fightsystem/listener/PistonListener.java b/src/de/steamwar/fightsystem/listener/PistonListener.java
similarity index 86%
rename from src/me/yaruma/fightsystem/listener/PistonListener.java
rename to src/de/steamwar/fightsystem/listener/PistonListener.java
index d40f30a..31e5055 100644
--- a/src/me/yaruma/fightsystem/listener/PistonListener.java
+++ b/src/de/steamwar/fightsystem/listener/PistonListener.java
@@ -1,17 +1,16 @@
-package me.yaruma.fightsystem.listener;
+package de.steamwar.fightsystem.listener;
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.FightState;
-import me.yaruma.fightsystem.utils.Config;
-import me.yaruma.fightsystem.utils.Region;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.utils.Config;
+import de.steamwar.fightsystem.utils.Region;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
-public class PistonListener implements Listener {
+public class PistonListener extends BasicListener {
@EventHandler
public void handlePistonExtend(BlockPistonExtendEvent e){
diff --git a/src/me/yaruma/fightsystem/listener/PlayerChatListener.java b/src/de/steamwar/fightsystem/listener/PlayerChatListener.java
similarity index 68%
rename from src/me/yaruma/fightsystem/listener/PlayerChatListener.java
rename to src/de/steamwar/fightsystem/listener/PlayerChatListener.java
index 07b53d8..f17c00a 100644
--- a/src/me/yaruma/fightsystem/listener/PlayerChatListener.java
+++ b/src/de/steamwar/fightsystem/listener/PlayerChatListener.java
@@ -1,15 +1,15 @@
-package me.yaruma.fightsystem.listener;
+package de.steamwar.fightsystem.listener;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightTeam;
-import me.yaruma.fightsystem.utils.Config;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.utils.Config;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChatEvent;
-public class PlayerChatListener implements Listener {
+public class PlayerChatListener extends BasicListener {
@EventHandler
public void handlePlayerChat(PlayerChatEvent event) {
@@ -25,6 +25,8 @@ public class PlayerChatListener implements Listener {
} else {
Bukkit.broadcastMessage(teamName + " " + player.getName() + "§8» §7" + message);
}
+ }else if(player == FightSystem.getEventLeiter()){
+ Bukkit.broadcastMessage("§e" + player.getName() + "§8» §e" + message);
}else{
Bukkit.broadcastMessage("§7" + player.getName() + "§8» §7" + message);
}
diff --git a/src/de/steamwar/fightsystem/listener/PlayerConnectionListener.java b/src/de/steamwar/fightsystem/listener/PlayerConnectionListener.java
new file mode 100644
index 0000000..5d29ce6
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/PlayerConnectionListener.java
@@ -0,0 +1,61 @@
+package de.steamwar.fightsystem.listener;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.utils.Config;
+import de.steamwar.fightsystem.fight.FightPlayer;
+import de.steamwar.fightsystem.fight.FightState;
+import org.bukkit.Bukkit;
+import org.bukkit.GameMode;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+
+public class PlayerConnectionListener extends BasicListener{
+
+ @EventHandler(priority = EventPriority.HIGH)
+ public void handlePlayerJoin(PlayerJoinEvent event) {
+ event.setJoinMessage(null);
+
+ Player player = event.getPlayer();
+ player.setHealth(20);
+ player.setFoodLevel(20);
+
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+
+ if (fightTeam == null) {
+ player.setGameMode(GameMode.SPECTATOR);
+ player.teleport(Config.SpecSpawn);
+ } else {
+ player.teleport(fightTeam.getSpawn());
+ if(FightSystem.getFightState() == FightState.SETUP)
+ player.setGameMode(GameMode.ADVENTURE);
+ else
+ player.setGameMode(GameMode.SPECTATOR);
+ }
+ }
+
+ @EventHandler(priority = EventPriority.HIGH)
+ public void handlePlayerQuit(PlayerQuitEvent event) {
+ event.setQuitMessage(null);
+
+ Player player = event.getPlayer();
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+ if(fightTeam == null)
+ return;
+
+ FightState fightState = FightSystem.getFightState();
+ if(fightState == FightState.SETUP){
+ fightTeam.removePlayer(player);
+ }else if(fightState == FightState.PRE_RUNNING || fightState == FightState.RUNNING){
+ FightPlayer fightPlayer = fightTeam.getFightPlayer(player);
+ if(fightPlayer.isLiving()) {
+ fightTeam.getFightPlayer(player).setOut();
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Spieler " + fightTeam.getPrefix() + player.getName() + " §chat den Kampf verlassen!");
+ }
+ }
+ }
+}
diff --git a/src/de/steamwar/fightsystem/listener/PlayerDeathListener.java b/src/de/steamwar/fightsystem/listener/PlayerDeathListener.java
new file mode 100644
index 0000000..b39a2f3
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/PlayerDeathListener.java
@@ -0,0 +1,29 @@
+package de.steamwar.fightsystem.listener;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import org.bukkit.GameMode;
+import org.bukkit.Sound;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.entity.PlayerDeathEvent;
+
+public class PlayerDeathListener extends BasicListener {
+
+ @EventHandler(priority = EventPriority.HIGH)
+ public void handlePlayerDeath(PlayerDeathEvent event) {
+ Player player = event.getEntity().getPlayer();
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+
+ if(fightTeam == null)
+ return;
+
+ event.setDeathMessage(FightSystem.PREFIX + "§cDer Spieler " + fightTeam.getPrefix() + player.getName() + " §cist gestorben!");
+ fightTeam.getFightPlayer(player).setOut();
+ player.setGameMode(GameMode.SPECTATOR);
+ player.teleport(fightTeam.getSpawn());
+ Fight.playSound(Sound.ENTITY_WITHER_DEATH, 100.0F, 1.0F);
+ }
+}
diff --git a/src/de/steamwar/fightsystem/listener/PlayerMoveListener.java b/src/de/steamwar/fightsystem/listener/PlayerMoveListener.java
new file mode 100644
index 0000000..064b9d5
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/PlayerMoveListener.java
@@ -0,0 +1,79 @@
+package de.steamwar.fightsystem.listener;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.utils.Config;
+import de.steamwar.fightsystem.utils.Region;
+import net.md_5.bungee.api.ChatMessageType;
+import net.md_5.bungee.api.chat.TextComponent;
+import org.bukkit.GameMode;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.player.PlayerMoveEvent;
+
+public class PlayerMoveListener extends BasicListener {
+
+ private static final String DENY_ARENA = "§cDu darfst die Arena nicht verlassen";
+ private static final String DENY_TEAM = "§cDu darfst nicht zu den Teams";
+ private static final String DENY_ENTERN = "§cDu darfst nicht entern";
+
+ @EventHandler
+ public void teamAreas(PlayerMoveEvent event) {
+ Player player = event.getPlayer();
+ if(player == FightSystem.getEventLeiter() || Config.test())
+ return;
+
+ Location to = event.getTo();
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+
+ boolean inArenaY = to.getY() + 1.8 <= Config.upperArenaBorder;
+
+ boolean inBlueArea = inArenaY && Region.isIn2DRange(to, Config.TeamBlueCornerX, Config.TeamBlueCornerZ, Config.SchemsizeX, Config.SchemsizeZ, Config.BorderFromSchematic);
+ boolean inRedArea = inArenaY && Region.isIn2DRange(to, Config.TeamRedCornerX, Config.TeamRedCornerZ, Config.SchemsizeX, Config.SchemsizeZ, Config.BorderFromSchematic);
+
+ if(inBlueArea || inRedArea) {
+ if(fightTeam == null)
+ reset(event, DENY_TEAM);
+ }else if(fightTeam != null && (
+ !FightSystem.isEntern() || player.getGameMode() == GameMode.SPECTATOR)){
+ reset(event, DENY_ENTERN);
+ }
+ }
+
+ @EventHandler
+ public void arenaBorder(PlayerMoveEvent event){
+ Player player = event.getPlayer();
+ Location to = event.getTo();
+
+ //Check in Arena
+ if(!Region.isIn2DRegion(to, Config.ArenaMinX, Config.ArenaMinZ, Config.ArenaMaxX, Config.ArenaMaxZ)){
+ reset(event, DENY_ARENA);
+ return;
+ }
+
+ FightTeam team = Fight.getPlayerTeam(player);
+ boolean inArenaY = to.getY() + 1.8 <= Config.upperArenaBorder;
+
+ if(to.getY() <= Config.underArenaBorder) {
+ if(player.getGameMode() == GameMode.SPECTATOR){
+ reset(event, DENY_ARENA);
+ }else if(FightSystem.getFightState() == FightState.RUNNING)
+ player.damage(2);
+ else if(team != null){
+ player.teleport(team.getSpawn());
+ }else
+ reset(event, DENY_ARENA);
+ }else if(team != null && !inArenaY){
+ reset(event, DENY_ARENA);
+ }
+ }
+
+ private void reset(PlayerMoveEvent event, String message){
+ Player player = event.getPlayer();
+ player.teleport(event.getFrom());
+ player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message));
+ }
+}
diff --git a/src/me/yaruma/fightsystem/listener/PlayerRespawnListener.java b/src/de/steamwar/fightsystem/listener/PlayerRespawnListener.java
similarity index 63%
rename from src/me/yaruma/fightsystem/listener/PlayerRespawnListener.java
rename to src/de/steamwar/fightsystem/listener/PlayerRespawnListener.java
index 7905a6d..5388f58 100644
--- a/src/me/yaruma/fightsystem/listener/PlayerRespawnListener.java
+++ b/src/de/steamwar/fightsystem/listener/PlayerRespawnListener.java
@@ -1,14 +1,13 @@
-package me.yaruma.fightsystem.listener;
+package de.steamwar.fightsystem.listener;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightTeam;
-import me.yaruma.fightsystem.utils.Config;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.utils.Config;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerRespawnEvent;
-public class PlayerRespawnListener implements Listener {
+public class PlayerRespawnListener extends BasicListener {
@EventHandler
public void handlePlayerRespawn(PlayerRespawnEvent event) {
diff --git a/src/de/steamwar/fightsystem/listener/PlayerTeleportListener.java b/src/de/steamwar/fightsystem/listener/PlayerTeleportListener.java
new file mode 100644
index 0000000..66cf3b9
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/PlayerTeleportListener.java
@@ -0,0 +1,17 @@
+package de.steamwar.fightsystem.listener;
+
+import net.md_5.bungee.api.ChatMessageType;
+import net.md_5.bungee.api.chat.TextComponent;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.player.PlayerTeleportEvent;
+
+public class PlayerTeleportListener extends BasicListener {
+
+ @EventHandler
+ public void onTpGM3(PlayerTeleportEvent e) {
+ if (e.getCause() == PlayerTeleportEvent.TeleportCause.SPECTATE) {
+ e.setCancelled(true);
+ e.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst diese Teleportfunktion nicht benutzen!"));
+ }
+ }
+}
diff --git a/src/me/yaruma/fightsystem/listener/ProjectileLaunchListener.java b/src/de/steamwar/fightsystem/listener/ProjectileLaunchListener.java
similarity index 52%
rename from src/me/yaruma/fightsystem/listener/ProjectileLaunchListener.java
rename to src/de/steamwar/fightsystem/listener/ProjectileLaunchListener.java
index ea10762..7bd857f 100644
--- a/src/me/yaruma/fightsystem/listener/ProjectileLaunchListener.java
+++ b/src/de/steamwar/fightsystem/listener/ProjectileLaunchListener.java
@@ -1,13 +1,14 @@
-package me.yaruma.fightsystem.listener;
+package de.steamwar.fightsystem.listener;
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.FightState;
+import net.md_5.bungee.api.ChatMessageType;
+import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
import org.bukkit.event.entity.ProjectileLaunchEvent;
-public class ProjectileLaunchListener implements Listener {
+public class ProjectileLaunchListener extends BasicListener {
@EventHandler
public void handleProjectileLaunch(ProjectileLaunchEvent event) {
@@ -15,7 +16,7 @@ public class ProjectileLaunchListener implements Listener {
event.setCancelled(true);
if(event.getEntity().getShooter() instanceof Player){
Player player = (Player) event.getEntity().getShooter();
- player.sendMessage(FightSystem.PREFIX + "§cDu kannst den Bogen erst nach Fightbeginn nutzen!");
+ player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst den Bogen erst nach Fightbeginn nutzen!"));
}
}
}
diff --git a/src/de/steamwar/fightsystem/listener/TestListener.java b/src/de/steamwar/fightsystem/listener/TestListener.java
new file mode 100644
index 0000000..a8a37dd
--- /dev/null
+++ b/src/de/steamwar/fightsystem/listener/TestListener.java
@@ -0,0 +1,48 @@
+package de.steamwar.fightsystem.listener;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.countdown.Countdown;
+import de.steamwar.fightsystem.countdown.NoPlayersOnlineCountdown;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.fight.FightTeam;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.permissions.PermissionAttachment;
+
+public class TestListener extends BasicListener {
+
+ @EventHandler
+ public void handlePlayerJoin(PlayerJoinEvent event) {
+ Player player = event.getPlayer();
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+
+ if (fightTeam == null && (!Fight.getRedTeam().hasTeamLeader() || !Fight.getBlueTeam().hasTeamLeader())) {
+ player.sendMessage(FightSystem.PREFIX + "§7Werde zum Teamleader mit §8/§eleader");
+ }
+
+ Countdown.cancelTimerType(NoPlayersOnlineCountdown.class);
+
+
+ PermissionAttachment attachment = player.addAttachment(FightSystem.getPlugin());
+ attachment.setPermission("fawe.permpack.basic", true);
+ attachment.setPermission("bukkit.command.gamemode", true);
+ attachment.setPermission("bukkit.command.teleport", true);
+ attachment.setPermission("worldedit.navigation.jumpto.tool", true);
+ attachment.setPermission("worldedit.navigation.thru.tool", true);
+ }
+
+ @EventHandler
+ public void handlePlayerQuit(PlayerQuitEvent event){
+ if(Bukkit.getOnlinePlayers().isEmpty())
+ Bukkit.shutdown();
+ }
+
+ @Override
+ void stateChange(FightState state){
+ disable();
+ }
+}
diff --git a/src/de/steamwar/fightsystem/utils/ColorConverter.java b/src/de/steamwar/fightsystem/utils/ColorConverter.java
new file mode 100644
index 0000000..9118751
--- /dev/null
+++ b/src/de/steamwar/fightsystem/utils/ColorConverter.java
@@ -0,0 +1,38 @@
+package de.steamwar.fightsystem.utils;
+
+import org.bukkit.ChatColor;
+import org.bukkit.DyeColor;
+
+import java.util.EnumMap;
+import java.util.Map;
+
+public class ColorConverter {
+ private ColorConverter(){}
+
+ private static final Map chat2dye = new EnumMap<>(ChatColor.class);
+
+ static{
+ chat2dye.put(ChatColor.WHITE, DyeColor.WHITE);
+ chat2dye.put(ChatColor.GOLD, DyeColor.ORANGE);
+ chat2dye.put(ChatColor.LIGHT_PURPLE, DyeColor.MAGENTA);
+ chat2dye.put(ChatColor.BLUE, DyeColor.LIGHT_BLUE);
+ chat2dye.put(ChatColor.YELLOW, DyeColor.YELLOW);
+ chat2dye.put(ChatColor.GREEN, DyeColor.LIME);
+ chat2dye.put(ChatColor.RED, DyeColor.RED);
+ chat2dye.put(ChatColor.DARK_GRAY, DyeColor.GRAY);
+ chat2dye.put(ChatColor.GRAY, DyeColor.SILVER);
+ chat2dye.put(ChatColor.DARK_AQUA, DyeColor.CYAN);
+ chat2dye.put(ChatColor.DARK_PURPLE, DyeColor.PURPLE);
+ chat2dye.put(ChatColor.DARK_BLUE, DyeColor.BLUE);
+ chat2dye.put(ChatColor.AQUA, DyeColor.CYAN);
+ chat2dye.put(ChatColor.DARK_GREEN, DyeColor.GREEN);
+ chat2dye.put(ChatColor.DARK_RED, DyeColor.RED);
+ chat2dye.put(ChatColor.BLACK, DyeColor.BLACK);
+
+ //Rosa 9pink, Braun 3brown
+ }
+
+ public static DyeColor chat2dye(ChatColor color){
+ return chat2dye.get(color);
+ }
+}
diff --git a/src/me/yaruma/fightsystem/utils/Config.java b/src/de/steamwar/fightsystem/utils/Config.java
similarity index 79%
rename from src/me/yaruma/fightsystem/utils/Config.java
rename to src/de/steamwar/fightsystem/utils/Config.java
index 2d184fe..1f36b1f 100644
--- a/src/me/yaruma/fightsystem/utils/Config.java
+++ b/src/de/steamwar/fightsystem/utils/Config.java
@@ -1,8 +1,11 @@
-package me.yaruma.fightsystem.utils;
+package de.steamwar.fightsystem.utils;
import com.sk89q.worldedit.Vector;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.utils.sql.Event;
+import de.steamwar.fightsystem.utils.sql.EventFight;
+import de.steamwar.fightsystem.utils.sql.Team;
import de.warking.hunjy.MySQL.SchematicType;
-import me.yaruma.fightsystem.FightSystem;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
@@ -11,9 +14,12 @@ import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.util.List;
+import java.util.logging.Level;
public class Config {
+ private Config(){}
+
public static int NoPlayerOnlineDuration;
public static int SetupDuration;
public static int PreFightDuration;
@@ -55,6 +61,7 @@ public class Config {
public static boolean PercentSystem;
public static boolean Entern;
public static boolean TechKO;
+ public static boolean WaterTechKO = false;
public static int TimeoutTime;
public static int EnterPhaseBegin;
@@ -77,6 +84,9 @@ public class Config {
public static Vector TeamBluePaste;
public static Vector TeamRedPaste;
+ public static Vector TeamBlueCorner;
+ public static Vector TeamRedCorner;
+ public static Vector Schemsize;
public static int ArenaMinX;
public static int ArenaMinZ;
@@ -87,6 +97,11 @@ public class Config {
public static List HiddenBlockEntities;
public static int ObfuscateWith;
+ public static int EventKampfID;
+ public static int EventTeamBlueID;
+ public static int EventTeamRedID;
+ public static int MaximumTeamMembers = Integer.MAX_VALUE;
+
public static void load(){
if(!new File(Bukkit.getWorldContainer().getPath() + '/' + Bukkit.getWorlds().get(0).getName() + "/config.yml").exists()) {
FightSystem.getPlugin().saveDefaultConfig();
@@ -181,14 +196,17 @@ public class Config {
TeamBluePaste = new Vector(teamBluePasteX, TeamBlueCornerY, teamBluePasteZ);
TeamRedPaste = new Vector(teamRedPasteX, TeamRedCornerY, teamRedPasteZ);
+ Schemsize = new Vector(SchemsizeX, SchemsizeY, SchemsizeZ);
+ TeamBlueCorner = new Vector(TeamBlueCornerX, TeamBlueCornerY, TeamBlueCornerZ);
+ TeamRedCorner = new Vector(TeamRedCornerX, TeamRedCornerY, TeamRedCornerZ);
World world = Bukkit.getWorlds().get(0);
TeamBlueSpawn = new Location(world, teamBluePasteX + 0.5, TeamBlueCornerY + SchemsizeY, teamBluePasteZ + 0.5);
TeamRedSpawn = new Location(world, teamRedPasteX + 0.5, TeamRedCornerY + SchemsizeY, teamRedPasteZ + 0.5);
SpecSpawn = new Location(world,
- teamBluePasteX + TeamBluetoReddistanceX/2,
- TeamBlueCornerY + TeamBluetoReddistanceY/2 + SchemsizeY/2,
- teamBluePasteZ + TeamBluetoReddistanceZ/2);
+ teamBluePasteX + TeamBluetoReddistanceX/2.0,
+ TeamBlueCornerY + TeamBluetoReddistanceY/2.0 + SchemsizeY/2.0,
+ teamBluePasteZ + TeamBluetoReddistanceZ/2.0);
if(TeamBluetoReddistanceX > 0){
ArenaMinX = TeamBlueCornerX - Schem2BorderX;
@@ -219,5 +237,42 @@ public class Config {
TeamRedRotate = false;
TeamBlueRotate = false;
}
+
+ EventKampfID = Integer.parseInt(System.getProperty("fightID", "0"));
+ if(event()){
+ EventFight eventFight = EventFight.get(EventKampfID);
+ if(eventFight == null){
+ Bukkit.getLogger().log(Level.SEVERE, "Failed to load EventFight");
+ Bukkit.shutdown();
+ return;
+ }
+
+ Team team1 = Team.get(eventFight.getTeamBlue());
+ Team team2 = Team.get(eventFight.getTeamRed());
+
+ if(team1 == null || team2 == null){
+ Bukkit.getLogger().log(Level.SEVERE, "Failed to load Team");
+ Bukkit.shutdown();
+ return;
+ }
+
+ TeamBlueName = team1.getTeamKuerzel();
+ TeamRedName = team2.getTeamKuerzel();
+ EventTeamBlueID = team1.getTeamId();
+ EventTeamRedID = team2.getTeamId();
+
+ FightSystem.setEventFight(eventFight);
+
+ Event event = Event.get(eventFight.getEventID());
+ MaximumTeamMembers = event.getMaximumTeamMembers();
+ OnlyPublicSchematics = event.publicSchemsOnly();
+ }
+ }
+
+ public static boolean event(){
+ return EventKampfID >= 1;
+ }
+ public static boolean test(){
+ return EventKampfID == -1;
}
}
diff --git a/src/de/steamwar/fightsystem/utils/FightScoreboard.java b/src/de/steamwar/fightsystem/utils/FightScoreboard.java
new file mode 100644
index 0000000..c408ecf
--- /dev/null
+++ b/src/de/steamwar/fightsystem/utils/FightScoreboard.java
@@ -0,0 +1,86 @@
+package de.steamwar.fightsystem.utils;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.winconditions.WinconditionPercentSystem;
+import de.steamwar.fightsystem.winconditions.WinconditionWaterTechKO;
+import org.bukkit.Bukkit;
+import org.bukkit.scoreboard.DisplaySlot;
+import org.bukkit.scoreboard.Objective;
+import org.bukkit.scoreboard.Scoreboard;
+
+public class FightScoreboard {
+
+ private FightScoreboard(){}
+
+ private static final Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
+ private static final Objective objective;
+ private static int index = 0;
+
+ static{
+ if(scoreboard.getObjective("AAA") == null)
+ objective = scoreboard.registerNewObjective("AAA", "BBB");
+ else
+ objective = scoreboard.getObjective("AAA");
+ }
+
+ public static void init(){
+ Bukkit.getScheduler().scheduleSyncRepeatingTask(FightSystem.getPlugin(), () -> {
+ objective.unregister();
+ scoreboard.registerNewObjective("AAA", "BBB");
+ objective.setDisplaySlot(DisplaySlot.SIDEBAR);
+
+ FightTeam fightTeam = getIndexDisplay();
+ if(fightTeam != null)
+ teamScoreboard(fightTeam);
+ else
+ generalScoreboard();
+
+ Bukkit.getOnlinePlayers().forEach(player -> player.setScoreboard(scoreboard));
+ }, 0, 200);
+ }
+
+ public static Scoreboard getScoreboard() {
+ return scoreboard;
+ }
+
+ private static void teamScoreboard(FightTeam fightTeam){
+ objective.setDisplayName(fightTeam.getName());
+ fightTeam.getPlayers().forEach(fp -> {
+ if(fp.isLiving())
+ objective.getScore(fightTeam.getPrefix() + fp.getPlayer().getName()).setScore((int) fp.getPlayer().getHealth());
+ });
+ }
+
+ private static void generalScoreboard(){
+ objective.setDisplayName("§6Kampf");
+ if (Config.Timeout) {
+ int fightTime = FightSystem.getFightTime();
+ if (fightTime >= 60)
+ objective.getScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s").setScore(3);
+ else
+ objective.getScore("§7Zeit: §a" + fightTime + "s").setScore(3);
+ }
+ if (Config.Entern)
+ objective.getScore("§7Entern: " + (FightSystem.isEntern() ? "§aja" : "§cnein")).setScore(2);
+ if (Config.PercentSystem){
+ objective.getScore(Fight.getRedTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%").setScore(1);
+ objective.getScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%").setScore(0);
+ }else if(Config.WaterTechKO){
+ objective.getScore(Fight.getRedTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamRedWater()).setScore(1);
+ objective.getScore(Fight.getBlueTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamBlueWater()).setScore(0);
+ }
+ }
+
+ private static FightTeam getIndexDisplay() {
+ index++;
+ if(index == 1)
+ return Fight.redTeam;
+ if(index == 2)
+ return Fight.blueTeam;
+ index = 0;
+ return null;
+ }
+
+}
diff --git a/src/me/yaruma/fightsystem/utils/ItemBuilder.java b/src/de/steamwar/fightsystem/utils/ItemBuilder.java
similarity index 97%
rename from src/me/yaruma/fightsystem/utils/ItemBuilder.java
rename to src/de/steamwar/fightsystem/utils/ItemBuilder.java
index 454c10f..87289fd 100644
--- a/src/me/yaruma/fightsystem/utils/ItemBuilder.java
+++ b/src/de/steamwar/fightsystem/utils/ItemBuilder.java
@@ -1,4 +1,4 @@
-package me.yaruma.fightsystem.utils;
+package de.steamwar.fightsystem.utils;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
diff --git a/src/me/yaruma/fightsystem/utils/Region.java b/src/de/steamwar/fightsystem/utils/Region.java
similarity index 97%
rename from src/me/yaruma/fightsystem/utils/Region.java
rename to src/de/steamwar/fightsystem/utils/Region.java
index dcf102a..7864cdb 100644
--- a/src/me/yaruma/fightsystem/utils/Region.java
+++ b/src/de/steamwar/fightsystem/utils/Region.java
@@ -1,4 +1,4 @@
-package me.yaruma.fightsystem.utils;
+package de.steamwar.fightsystem.utils;
import org.bukkit.Location;
diff --git a/src/me/yaruma/fightsystem/utils/TechHider.java b/src/de/steamwar/fightsystem/utils/TechHider.java
similarity index 96%
rename from src/me/yaruma/fightsystem/utils/TechHider.java
rename to src/de/steamwar/fightsystem/utils/TechHider.java
index 17d2110..42adf1c 100644
--- a/src/me/yaruma/fightsystem/utils/TechHider.java
+++ b/src/de/steamwar/fightsystem/utils/TechHider.java
@@ -1,4 +1,4 @@
-package me.yaruma.fightsystem.utils;
+package de.steamwar.fightsystem.utils;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
@@ -13,10 +13,10 @@ import com.comphenix.protocol.wrappers.WrappedBlockData;
import com.comphenix.protocol.wrappers.nbt.NbtCompound;
import com.comphenix.protocol.wrappers.nbt.NbtFactory;
import com.google.common.primitives.Bytes;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
import javafx.util.Pair;
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightTeam;
import net.minecraft.server.v1_12_R1.PacketPlayOutMapChunk;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
@@ -66,6 +66,10 @@ public class TechHider {
obfuscateShift4 = (short)(Config.ObfuscateWith << 4);
obfuscateMaterial = Material.getMaterial(Config.ObfuscateWith);
+ int threadMultiplier = 1;
+ if(Config.event())
+ threadMultiplier = 4;
+
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Server.MAP_CHUNK) {
@Override
public void onPacketSending(PacketEvent e) {
@@ -134,7 +138,6 @@ public class TechHider {
i += readVarIntLength(Bytes.toArray(newData), i);
i += dataArrayLength * 8;
}else{
- //System.out.println("Full chunk " + chunkX + " " + chunkZ + " " + chunkX*16 + " " + chunkZ*16);
int dataArrayLength = readVarInt(Bytes.toArray(newData), i);
i += readVarIntLength(Bytes.toArray(newData), i);
/*int arrayEnd = dataArrayLength * 8 + i;
@@ -165,8 +168,7 @@ public class TechHider {
byteArray.write(0, Bytes.toArray(newData));
}
}
- }).start(4);
-
+ }).start(4 * threadMultiplier);
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Server.BLOCK_CHANGE) {
@Override
public void onPacketSending(PacketEvent e) {
@@ -186,7 +188,7 @@ public class TechHider {
blockStructure.write(0, block);
}
}
- }).start();
+ }).start(threadMultiplier);
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Server.MULTI_BLOCK_CHANGE) {
@Override
public void onPacketSending(PacketEvent e) {
@@ -215,7 +217,7 @@ public class TechHider {
blockStructure.write(0, changes);
}
}
- }).start();
+ }).start(threadMultiplier);
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Server.BLOCK_ACTION) {
@Override
public void onPacketSending(PacketEvent e) {
@@ -238,7 +240,7 @@ public class TechHider {
e.setCancelled(true);
}
}
- }).start();
+ }).start(threadMultiplier);
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Client.USE_ENTITY) {
@Override
public void onPacketReceiving(PacketEvent e) {
@@ -248,10 +250,13 @@ public class TechHider {
e.setCancelled(true);
}
}
- }).start();
+ }).start(threadMultiplier);
}
private static boolean bypass(Player p, int chunkX, int chunkZ){
+ if(p == FightSystem.getEventLeiter())
+ return true;
+
FightTeam ft = Fight.getPlayerTeam(p);
if(ft == null){
//Außerhalb der Arena
diff --git a/src/de/steamwar/fightsystem/utils/WaterRemover.java b/src/de/steamwar/fightsystem/utils/WaterRemover.java
new file mode 100644
index 0000000..4a0e9ce
--- /dev/null
+++ b/src/de/steamwar/fightsystem/utils/WaterRemover.java
@@ -0,0 +1,97 @@
+package de.steamwar.fightsystem.utils;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.winconditions.WinconditionWaterTechKO;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+
+import java.util.*;
+
+public class WaterRemover {
+
+ private WaterRemover(){}
+
+ private static Map explodedBlocks = new HashMap<>();
+ private static Set waterList = new HashSet<>();
+
+ public static void init() {
+ Bukkit.getScheduler().runTaskTimerAsynchronously(FightSystem.getPlugin(), () -> {
+ wateredCheck();
+ removeWater();
+ }, 0, 20);
+ }
+
+ public static void add(List l) {
+ l.forEach((Block b) -> explodedBlocks.put(b.getLocation(), 0));
+ }
+
+ private static void wateredCheck() {
+ Iterator> it = explodedBlocks.entrySet().iterator();
+ while (it.hasNext()) {
+ Map.Entry e = it.next();
+ Block b = e.getKey().getBlock();
+ if (b.getType() == Material.WATER || b.getType() == Material.STATIONARY_WATER) {
+ waterList.add(b);
+ }
+
+ if(b.getType() != Material.AIR){
+ it.remove();
+ continue;
+ }
+ explodedBlocks.replace(e.getKey(), e.getValue() + 1);
+
+ if(explodedBlocks.get(e.getKey()) > 15){
+ it.remove();
+ }
+ }
+ }
+
+ private static void removeWater() {
+ List blocksToRemove = new LinkedList<>();
+ Iterator it = waterList.iterator();
+ while(it.hasNext()){
+ Block b = it.next();
+ blocksToRemove.addAll(getSourceBlocksOfWater(b));
+ if (b.getType() != Material.WATER && b.getType() != Material.STATIONARY_WATER) {
+ it.remove();
+ }
+ }
+
+ Bukkit.getScheduler().runTask(FightSystem.getPlugin(), () -> {
+ blocksToRemove.forEach((Block b) -> b.setType(Material.AIR));
+ WinconditionWaterTechKO.removeWater();
+ });
+ }
+
+ private static Set getSourceBlocksOfWater(Block startBlock) {
+ Set water = new HashSet<>();
+ collectBlocks(startBlock, water, new HashSet<>());
+ return water;
+ }
+
+ private static void collectBlocks(Block anchor, Set collected, Set visitedBlocks) {
+ if(
+ (anchor.getType() != Material.WATER && anchor.getType() != Material.STATIONARY_WATER) ||
+ visitedBlocks.contains(anchor)
+ )
+ return;
+
+ visitedBlocks.add(anchor);
+ if (anchor.getType() == Material.STATIONARY_WATER)
+ collected.add(anchor);
+
+ if(visitedBlocks.size() > 50) {
+ collected.clear();
+ return;
+ }
+ collectBlocks(anchor.getRelative(BlockFace.UP), collected, visitedBlocks);
+ collectBlocks(anchor.getRelative(BlockFace.NORTH), collected, visitedBlocks);
+ collectBlocks(anchor.getRelative(BlockFace.EAST), collected, visitedBlocks);
+ collectBlocks(anchor.getRelative(BlockFace.SOUTH), collected, visitedBlocks);
+ collectBlocks(anchor.getRelative(BlockFace.WEST), collected, visitedBlocks);
+ }
+
+}
diff --git a/src/de/steamwar/fightsystem/utils/sql/Event.java b/src/de/steamwar/fightsystem/utils/sql/Event.java
new file mode 100644
index 0000000..c0875ec
--- /dev/null
+++ b/src/de/steamwar/fightsystem/utils/sql/Event.java
@@ -0,0 +1,61 @@
+package de.steamwar.fightsystem.utils.sql;
+
+import org.bukkit.Bukkit;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.logging.Level;
+
+import static de.warking.hunjy.Core.sql;
+
+public class Event {
+
+ private final int eventID;
+ private final String eventName;
+ private final Timestamp start;
+ private final Timestamp end;
+ private final int maximumTeamMembers;
+ private final boolean publicSchemsOnly;
+
+ private Event(int eventID, String eventName, Timestamp start, Timestamp end, int maximumTeamMembers, boolean publicSchemsOnly){
+ this.eventID = eventID;
+ this.eventName = eventName;
+ this.start = start;
+ this.end = end;
+ this.maximumTeamMembers = maximumTeamMembers;
+ this.publicSchemsOnly = publicSchemsOnly;
+ }
+
+ public static Event get(int eventID){
+ ResultSet rs = sql.select("SELECT * FROM Event WHERE EventID = " + eventID);
+ try{
+ if(!rs.next())
+ throw new IllegalArgumentException();
+
+ return new Event(eventID, rs.getString("EventName"), rs.getTimestamp("Start"), rs.getTimestamp("End"), rs.getInt("MaximumTeamMembers"), rs.getBoolean("PublicSchemsOnly"));
+ }catch (SQLException e){
+ Bukkit.getLogger().log(Level.SEVERE, "Failed to load Event", e);
+ throw new SecurityException();
+ }
+ }
+
+ public int getEventID() {
+ return eventID;
+ }
+ public String getEventName() {
+ return eventName;
+ }
+ public Timestamp getStart() {
+ return start;
+ }
+ public Timestamp getEnd() {
+ return end;
+ }
+ public int getMaximumTeamMembers() {
+ return maximumTeamMembers;
+ }
+ public boolean publicSchemsOnly() {
+ return publicSchemsOnly;
+ }
+}
diff --git a/src/de/steamwar/fightsystem/utils/sql/EventFight.java b/src/de/steamwar/fightsystem/utils/sql/EventFight.java
new file mode 100644
index 0000000..98eaa5c
--- /dev/null
+++ b/src/de/steamwar/fightsystem/utils/sql/EventFight.java
@@ -0,0 +1,77 @@
+package de.steamwar.fightsystem.utils.sql;
+
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.warking.hunjy.Core;
+import org.bukkit.Bukkit;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.logging.Level;
+
+public class EventFight {
+ private int eventID;
+ private int fightID;
+ private int teamBlue;
+ private int teamRed;
+ private int kampfleiter;
+ private int ergebnis;
+
+ private EventFight(int eventID, int fightID, int teamBlue, int teamRed, int kampfleiter, int ergebnis){
+ this.eventID = eventID;
+ this.fightID = fightID;
+ this.teamBlue = teamBlue;
+ this.teamRed = teamRed;
+ this.kampfleiter = kampfleiter;
+ this.ergebnis = ergebnis;
+ }
+
+ public static EventFight get(int fightID){
+ ResultSet rs = Core.sql.select("SELECT * FROM EventFight WHERE FightID = " + fightID);
+ try{
+ return new EventFight(
+ rs.getInt("EventID"),
+ fightID,
+ rs.getInt("TeamBlue"),
+ rs.getInt("TeamRed"),
+ rs.getInt("Kampfleiter"),
+ rs.getInt("Ergebnis"));
+ }catch (SQLException e){
+ Bukkit.getLogger().log(Level.SEVERE, "Failed to load EventFight", e);
+ }
+ return null;
+ }
+
+ public void setErgebnis(FightTeam winner){
+ if (winner == null)
+ ergebnis = 0;
+ else if (winner.isBlue())
+ ergebnis = 1;
+ else
+ ergebnis = 2;
+ Core.sql.update("UPDATE EventFight SET Ergebnis = " + ergebnis + " WHERE FightID = " + fightID);
+ }
+
+ public int getTeamBlue() {
+ return teamBlue;
+ }
+
+ public int getTeamRed() {
+ return teamRed;
+ }
+
+ public int getEventID() {
+ return eventID;
+ }
+
+ public int getFightID() {
+ return fightID;
+ }
+
+ public int getKampfleiter() {
+ return kampfleiter;
+ }
+
+ public int getErgebnis() {
+ return ergebnis;
+ }
+}
diff --git a/src/de/steamwar/fightsystem/utils/sql/Team.java b/src/de/steamwar/fightsystem/utils/sql/Team.java
new file mode 100644
index 0000000..48909b4
--- /dev/null
+++ b/src/de/steamwar/fightsystem/utils/sql/Team.java
@@ -0,0 +1,75 @@
+package de.steamwar.fightsystem.utils.sql;
+
+import org.bukkit.Bukkit;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+
+import static de.warking.hunjy.Core.sql;
+
+public class Team {
+ private final int teamId;
+ private String teamKuerzel;
+ private String teamName;
+ private int teamLeader;
+
+ private Team(int id, String kuerzel, String name, int leader){
+ teamId = id;
+ teamKuerzel = kuerzel;
+ teamName = name;
+ teamLeader = leader;
+ }
+
+ public static Team get(int id){
+ return load(sql.select("SELECT * FROM Team WHERE TeamID = " + id));
+ }
+
+ private static Team load(ResultSet dbteam){
+ try {
+ if(!dbteam.next()){
+ return null;
+ }
+ int id = dbteam.getInt("TeamID");
+ String kuerzel = dbteam.getString("TeamKuerzel");
+ String name = dbteam.getString("TeamName");
+ int leader = dbteam.getInt("TeamLeader");
+ return new Team(id, kuerzel, name, leader);
+ } catch (SQLException e) {
+ Bukkit.getLogger().log(Level.SEVERE, "Could not load teammembers", e);
+ return null;
+ }
+ }
+
+ public int getTeamId() {
+ return teamId;
+ }
+
+ public String getTeamKuerzel() {
+ return teamKuerzel;
+ }
+
+ public String getTeamName() {
+ return teamName;
+ }
+
+ public int getTeamLeader() {
+ return teamLeader;
+ }
+
+ public List getMembers(){
+ try{
+ ResultSet memberlist = sql.select("SELECT id FROM UserData WHERE Team = '" + teamId + "'");
+ List members = new ArrayList<>();
+ while(memberlist.next()){
+ members.add(memberlist.getInt("id"));
+ }
+ return members;
+ }catch(SQLException e){
+ Bukkit.getLogger().log(Level.SEVERE, "Could not load Teammembers", e);
+ }
+ return new ArrayList<>();
+ }
+}
diff --git a/src/de/steamwar/fightsystem/winconditions/EventTeamOffWincondition.java b/src/de/steamwar/fightsystem/winconditions/EventTeamOffWincondition.java
new file mode 100644
index 0000000..139c7bf
--- /dev/null
+++ b/src/de/steamwar/fightsystem/winconditions/EventTeamOffWincondition.java
@@ -0,0 +1,21 @@
+package de.steamwar.fightsystem.winconditions;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import org.bukkit.Bukkit;
+
+public class EventTeamOffWincondition {
+
+ public EventTeamOffWincondition(){
+ teamOff(Fight.getBlueTeam());
+ teamOff(Fight.getRedTeam());
+ }
+
+ private void teamOff(FightTeam team){
+ if(team.allPlayersOut()){
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + team.getName() + " §6ist Offline!");
+ FightSystem.setSpectateState(team);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/de/steamwar/fightsystem/winconditions/ListenerWincondition.java b/src/de/steamwar/fightsystem/winconditions/ListenerWincondition.java
new file mode 100644
index 0000000..309526c
--- /dev/null
+++ b/src/de/steamwar/fightsystem/winconditions/ListenerWincondition.java
@@ -0,0 +1,15 @@
+package de.steamwar.fightsystem.winconditions;
+
+import de.steamwar.fightsystem.FightSystem;
+import org.bukkit.Bukkit;
+import org.bukkit.event.Listener;
+
+abstract class ListenerWincondition implements Listener {
+
+ void init(boolean condition){
+ if(!condition)
+ return;
+
+ Bukkit.getPluginManager().registerEvents(this, FightSystem.getPlugin());
+ }
+}
diff --git a/src/de/steamwar/fightsystem/winconditions/PlayerWincondition.java b/src/de/steamwar/fightsystem/winconditions/PlayerWincondition.java
new file mode 100644
index 0000000..416b4da
--- /dev/null
+++ b/src/de/steamwar/fightsystem/winconditions/PlayerWincondition.java
@@ -0,0 +1,22 @@
+package de.steamwar.fightsystem.winconditions;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.fight.FightState;
+import org.bukkit.entity.Player;
+
+abstract class PlayerWincondition extends ListenerWincondition {
+
+ boolean isTarget(Player player){
+ if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING)
+ return false;
+
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+ if(fightTeam == null)
+ return false;
+
+ fightTeam.getFightPlayer(player).setOut();
+ return true;
+ }
+}
diff --git a/src/de/steamwar/fightsystem/winconditions/WinconditionAllDead.java b/src/de/steamwar/fightsystem/winconditions/WinconditionAllDead.java
new file mode 100644
index 0000000..8350c4f
--- /dev/null
+++ b/src/de/steamwar/fightsystem/winconditions/WinconditionAllDead.java
@@ -0,0 +1,46 @@
+package de.steamwar.fightsystem.winconditions;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.utils.Config;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.entity.PlayerDeathEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+
+public class WinconditionAllDead extends PlayerWincondition {
+
+ public WinconditionAllDead(){
+ init(Config.AllDead);
+ }
+
+ @EventHandler
+ public void handlePlayerDeath(PlayerDeathEvent event) {
+ Player player = event.getEntity().getPlayer();
+
+ if(!isTarget(player))
+ return;
+
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+ if(fightTeam.allPlayersOut()) {
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer letzte Spieler aus " + fightTeam.getPrefix() + fightTeam.getName() + " §cist gestorben!");
+ FightSystem.setSpectateState(Fight.getOpposite(fightTeam));
+ }
+ }
+
+ @EventHandler
+ public void handlePlayerQuit(PlayerQuitEvent event) {
+ Player player = event.getPlayer();
+
+ if(!isTarget(player))
+ return;
+
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+ if(fightTeam.allPlayersOut()) {
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer letzte Spieler aus §6" + fightTeam.getPrefix() + fightTeam.getName() + " §chat den Kampf verlassen!");
+ FightSystem.setSpectateState(Fight.getOpposite(fightTeam));
+ }
+ }
+}
diff --git a/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java b/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java
new file mode 100644
index 0000000..9d8f06a
--- /dev/null
+++ b/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java
@@ -0,0 +1,46 @@
+package de.steamwar.fightsystem.winconditions;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.utils.Config;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.entity.PlayerDeathEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+
+public class WinconditionCaptainDead extends PlayerWincondition {
+
+ public WinconditionCaptainDead(){
+ init(Config.CaptainDead);
+ }
+
+ @EventHandler
+ public void handlePlayerDeath(PlayerDeathEvent event) {
+ Player player = event.getEntity().getPlayer();
+
+ if(!isTarget(player))
+ return;
+
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+ if(fightTeam.isPlayerLeader(player)) {
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Leader von " + fightTeam.getPrefix() + fightTeam.getName() + " §cist gestorben!");
+ FightSystem.setSpectateState(Fight.getOpposite(fightTeam));
+ }
+ }
+
+ @EventHandler
+ public void handlePlayerQuit(PlayerQuitEvent event) {
+ Player player = event.getPlayer();
+
+ if(!isTarget(player))
+ return;
+
+ FightTeam fightTeam = Fight.getPlayerTeam(player);
+ if(fightTeam.isPlayerLeader(player)) {
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Leader von " + fightTeam.getPrefix() + fightTeam.getName() + " §chat den Kampf verlassen!");
+ FightSystem.setSpectateState(Fight.getOpposite(fightTeam));
+ }
+ }
+}
diff --git a/src/de/steamwar/fightsystem/winconditions/WinconditionEntern.java b/src/de/steamwar/fightsystem/winconditions/WinconditionEntern.java
new file mode 100644
index 0000000..d4fd80c
--- /dev/null
+++ b/src/de/steamwar/fightsystem/winconditions/WinconditionEntern.java
@@ -0,0 +1,13 @@
+package de.steamwar.fightsystem.winconditions;
+
+import de.steamwar.fightsystem.countdown.EnternCountdown;
+import de.steamwar.fightsystem.utils.Config;
+
+public class WinconditionEntern {
+ public WinconditionEntern() {
+ if(!Config.Entern)
+ return;
+
+ new EnternCountdown();
+ }
+}
diff --git a/src/me/yaruma/fightsystem/winconditions/WinconditionPercentSystem.java b/src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java
similarity index 78%
rename from src/me/yaruma/fightsystem/winconditions/WinconditionPercentSystem.java
rename to src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java
index 2f21d3d..5f52f00 100644
--- a/src/me/yaruma/fightsystem/winconditions/WinconditionPercentSystem.java
+++ b/src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java
@@ -1,16 +1,15 @@
-package me.yaruma.fightsystem.winconditions;
+package de.steamwar.fightsystem.winconditions;
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightState;
-import me.yaruma.fightsystem.utils.Config;
-import me.yaruma.fightsystem.utils.Region;
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.utils.Config;
+import de.steamwar.fightsystem.utils.Region;
import org.bukkit.entity.Entity;
import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityExplodeEvent;
-public class WinconditionPercentSystem implements Listener {
+public class WinconditionPercentSystem extends ListenerWincondition {
private static double bluePercent = 0D;
private static double redPercent = 0D;
@@ -21,12 +20,13 @@ public class WinconditionPercentSystem implements Listener {
private static int schematicSize;
public WinconditionPercentSystem() {
+ init(Config.PercentSystem);
+
schematicSize = Math.abs(Config.SchemsizeX * Config.SchemsizeY * Config.SchemsizeZ);
}
@EventHandler
public void handleEntityExplode(EntityExplodeEvent event) {
- if(!Config.PercentSystem) return;
if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
Entity entity = event.getEntity();
@@ -37,7 +37,7 @@ public class WinconditionPercentSystem implements Listener {
double destroyPercent = doubleBlueDestroyedBlocks * 100 / schematicSize;
bluePercent = destroyPercent;
if(destroyPercent >= Config.PercentWin) {
- FightSystem.getPlugin().setSpectateState(Fight.blueTeam);
+ FightSystem.setSpectateState(Fight.redTeam);
}
//Team Red
}else if(Region.isInRange(entity.getLocation(), Config.TeamRedCornerX, Config.TeamRedCornerY, Config.TeamRedCornerZ, Config.SchemsizeX, Config.SchemsizeY, Config.SchemsizeZ, Config.BorderFromSchematic)) {
@@ -46,7 +46,7 @@ public class WinconditionPercentSystem implements Listener {
double destroyPercent = doubleRedDestroyedBlocks * 100 / schematicSize;
redPercent = destroyPercent;
if(destroyPercent >= Config.PercentWin) {
- FightSystem.getPlugin().setSpectateState(Fight.redTeam);
+ FightSystem.setSpectateState(Fight.blueTeam);
}
}
}
diff --git a/src/de/steamwar/fightsystem/winconditions/WinconditionTechKO.java b/src/de/steamwar/fightsystem/winconditions/WinconditionTechKO.java
new file mode 100644
index 0000000..8ccf90d
--- /dev/null
+++ b/src/de/steamwar/fightsystem/winconditions/WinconditionTechKO.java
@@ -0,0 +1,95 @@
+package de.steamwar.fightsystem.winconditions;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.countdown.TechKOCountdown;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.utils.Config;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.entity.TNTPrimed;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.EntityExplodeEvent;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class WinconditionTechKO implements Listener {
+
+ private static final int TECH_KO_TIME_IN_S = 90;
+ private static final int TECH_KO_HALF_TIME = TECH_KO_TIME_IN_S*10;
+ public static final int TECH_KO_COUNTDOWN_TIME = TECH_KO_HALF_TIME/20;
+
+ private World world;
+ private Map map = new HashMap<>(400);
+ private double toggle;
+ private int smallerZtime;
+ private int biggerZtime;
+ private TechKOCountdown smallerZcountdown = null;
+ private TechKOCountdown biggerZcountdown = null;
+
+ //Works only for z-Axis fight direction for performance reasons
+ public WinconditionTechKO(){
+ if(!Config.TechKO)
+ return;
+
+ world = Bukkit.getWorlds().get(0);
+ toggle = Config.SpecSpawn.getZ();
+ smallerZtime=TECH_KO_HALF_TIME;
+ biggerZtime=TECH_KO_HALF_TIME;
+
+ Bukkit.getScheduler().runTaskTimerAsynchronously(FightSystem.getPlugin(), this::run, 1, 1);
+ Bukkit.getPluginManager().registerEvents(this, FightSystem.getPlugin());
+ }
+
+ private void run(){
+ for(TNTPrimed tnt : world.getEntitiesByClass(TNTPrimed.class)){
+ int id = tnt.getEntityId();
+ boolean smallerZ = tnt.getLocation().getZ() < toggle;
+ Boolean old = map.put(id, smallerZ);
+ if(old != null && old != smallerZ){
+ if(old)
+ smallerZtime = TECH_KO_HALF_TIME;
+ else
+ biggerZtime = TECH_KO_HALF_TIME;
+ }
+ }
+
+ if(smallerZtime == TECH_KO_HALF_TIME && smallerZcountdown != null){
+ smallerZcountdown.cancelTimer();
+ smallerZcountdown = null;
+ }else if(smallerZtime == 0){
+ smallerZcountdown = new TechKOCountdown(smallerTeam());
+ }
+
+ if(biggerZtime == TECH_KO_HALF_TIME && biggerZcountdown != null){
+ biggerZcountdown.cancelTimer();
+ biggerZcountdown = null;
+ }else if(biggerZtime == 0){
+ biggerZcountdown = new TechKOCountdown(biggerTeam());
+ }
+
+ smallerZtime--;
+ biggerZtime--;
+ }
+
+ private FightTeam smallerTeam(){
+ if(Config.TeamBluetoReddistanceZ > 0)
+ return Fight.getBlueTeam();
+ else
+ return Fight.getRedTeam();
+ }
+
+ private FightTeam biggerTeam(){
+ if(Config.TeamBluetoReddistanceZ < 0)
+ return Fight.getBlueTeam();
+ else
+ return Fight.getRedTeam();
+ }
+
+ @EventHandler
+ public void onEntityDead(EntityExplodeEvent event){
+ map.remove(event.getEntity().getEntityId());
+ }
+}
diff --git a/src/de/steamwar/fightsystem/winconditions/WinconditionTimeout.java b/src/de/steamwar/fightsystem/winconditions/WinconditionTimeout.java
new file mode 100644
index 0000000..2509cb8
--- /dev/null
+++ b/src/de/steamwar/fightsystem/winconditions/WinconditionTimeout.java
@@ -0,0 +1,13 @@
+package de.steamwar.fightsystem.winconditions;
+
+import de.steamwar.fightsystem.countdown.TimeOverCountdown;
+import de.steamwar.fightsystem.utils.Config;
+
+public class WinconditionTimeout {
+ public WinconditionTimeout() {
+ if(!Config.Timeout)
+ return;
+
+ new TimeOverCountdown();
+ }
+}
diff --git a/src/de/steamwar/fightsystem/winconditions/WinconditionWaterTechKO.java b/src/de/steamwar/fightsystem/winconditions/WinconditionWaterTechKO.java
new file mode 100644
index 0000000..be3ae82
--- /dev/null
+++ b/src/de/steamwar/fightsystem/winconditions/WinconditionWaterTechKO.java
@@ -0,0 +1,95 @@
+package de.steamwar.fightsystem.winconditions;
+
+import de.steamwar.fightsystem.FightSystem;
+import de.steamwar.fightsystem.fight.Fight;
+import de.steamwar.fightsystem.fight.FightState;
+import de.steamwar.fightsystem.fight.FightTeam;
+import de.steamwar.fightsystem.utils.Config;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Material;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class WinconditionWaterTechKO {
+
+ private static final Set teamRedWater = new HashSet<>();
+ private static final Set teamBlueWater = new HashSet<>();
+
+ public WinconditionWaterTechKO() {
+ if(!Config.WaterTechKO)
+ return;
+
+ Bukkit.getScheduler().runTaskTimerAsynchronously(FightSystem.getPlugin(), this::addWater, 0, 200);
+ }
+
+ private void addWater() {
+ if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING)
+ return;
+
+ checkForWater(teamRedWater,
+ Config.TeamRedCornerX,
+ Config.TeamRedCornerY,
+ Config.TeamRedCornerZ,
+ Config.TeamRedCornerX + Config.SchemsizeX,
+ Config.TeamRedCornerY + Config.SchemsizeY,
+ Config.TeamRedCornerZ + Config.SchemsizeZ);
+ checkForWater(teamBlueWater,
+ Config.TeamBlueCornerX,
+ Config.TeamBlueCornerY,
+ Config.TeamBlueCornerZ,
+ Config.TeamBlueCornerX + Config.SchemsizeX,
+ Config.TeamBlueCornerY + Config.SchemsizeY,
+ Config.TeamBlueCornerZ + Config.SchemsizeZ);
+
+ checkEmpty(Fight.getRedTeam(), teamRedWater);
+ checkEmpty(Fight.getBlueTeam(), teamBlueWater);
+ }
+
+ public static void removeWater() {
+ if(!Config.WaterTechKO)
+ return;
+ if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING)
+ return;
+
+ checkWaterspots(teamRedWater);
+ checkWaterspots(teamBlueWater);
+
+ checkEmpty(Fight.getRedTeam(), teamRedWater);
+ checkEmpty(Fight.getBlueTeam(), teamBlueWater);
+ }
+
+ public static int getTeamBlueWater() {
+ return teamBlueWater.size();
+ }
+
+ public static int getTeamRedWater() {
+ return teamRedWater.size();
+ }
+
+ private void checkForWater(Set teamWater, int minX, int minY, int minZ, int maxX, int maxY, int maxZ){
+ teamWater.clear();
+
+ for(int x = minX; x <= maxX; x++) {
+ for(int y = minY; y <= maxY; y++) {
+ for (int z = minZ; z <= maxZ; z++) {
+ Location location = new Location(Bukkit.getWorlds().get(0), x, y, z);
+ if (location.getBlock().getType() == Material.STATIONARY_WATER)
+ teamRedWater.add(location);
+ }
+ }
+ }
+ }
+
+ private static void checkWaterspots(Set teamWater){
+ teamWater.removeIf(location -> location.getBlock().getType() != Material.STATIONARY_WATER);
+ }
+
+ private static void checkEmpty(FightTeam team, Set teamWater){
+ if(teamWater.isEmpty()){
+ Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + team.getName() + " §6ist Tech K.O.!");
+ FightSystem.setSpectateState(team);
+ }
+ }
+}
diff --git a/src/me/yaruma/fightsystem/FightSystem.java b/src/me/yaruma/fightsystem/FightSystem.java
deleted file mode 100644
index 1c1a37a..0000000
--- a/src/me/yaruma/fightsystem/FightSystem.java
+++ /dev/null
@@ -1,251 +0,0 @@
-package me.yaruma.fightsystem;
-
-import de.warking.hunjy.CoinSystem.CoinSystem;
-import javafx.util.Pair;
-import me.yaruma.fightsystem.commands.*;
-import me.yaruma.fightsystem.fight.*;
-import me.yaruma.fightsystem.kit.KitManager;
-import me.yaruma.fightsystem.listener.*;
-import me.yaruma.fightsystem.utils.Config;
-import me.yaruma.fightsystem.utils.TechHider;
-import me.yaruma.fightsystem.utils.countdown.Countdown;
-import me.yaruma.fightsystem.utils.countdown.FinishNoPlayersOnline;
-import me.yaruma.fightsystem.utils.countdown.FinishPreRunning;
-import me.yaruma.fightsystem.utils.countdown.FinishSpectateOver;
-import me.yaruma.fightsystem.utils.scoreboard.Scoreboard;
-import me.yaruma.fightsystem.winconditions.*;
-import org.bukkit.Bukkit;
-import org.bukkit.GameMode;
-import org.bukkit.Sound;
-import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.configuration.file.YamlConfiguration;
-import org.bukkit.entity.Player;
-import org.bukkit.plugin.PluginManager;
-import org.bukkit.plugin.java.JavaPlugin;
-
-import java.io.File;
-import java.util.List;
-
-public class FightSystem extends JavaPlugin {
-
- public static final String PREFIX = "§eArena§8» ";
-
- private static FightSystem plugin;
- private static Scoreboard scoreboard;
- private static WaterRemover waterRemover;
-
- private static FightState fightState = FightState.SETUP;
- private static int fightTime = 0;
-
-
- private static boolean entern = false;
-
- private final File kits = new File("plugins/" + this.getName(), "kits.data");
- private final FileConfiguration getKitData = YamlConfiguration.loadConfiguration(kits);
-
- private void saveKitData() {
- try { getKitData.save(kits); } catch (Exception ignored) { }
- }
-
- public FileConfiguration getKitData() {
- return getKitData;
- }
-
- @Override
- public void onEnable() {
-
- plugin = this;
- Config.load();
-
- scoreboard = new Scoreboard();
- waterRemover = new WaterRemover();
- entern = false;
-
- loadConfig();
-
- KitManager.loadAllKits();
-
- PluginManager pm = Bukkit.getPluginManager();
- pm.registerEvents(new PlayerJoinListener(), plugin);
- pm.registerEvents(new PlayerQuitListener(), plugin);
- pm.registerEvents(new PlayerDeathListener(), plugin);
- pm.registerEvents(new PlayerInteractListener(), plugin);
- pm.registerEvents(new PlayerChatListener(), plugin);
- pm.registerEvents(new BlockPlaceListener(), plugin);
- pm.registerEvents(new BlockBreakListener(), plugin);
- pm.registerEvents(new PlayerMoveListener(), plugin);
- pm.registerEvents(new EntityDamageByEntityListener(), plugin);
- pm.registerEvents(new FoodLevelChangeListener(), plugin);
- pm.registerEvents(new PlayerRespawnListener(), plugin);
- pm.registerEvents(new EntityDamageListener(), plugin);
- pm.registerEvents(new EntityExplodeListener(), plugin);
- pm.registerEvents(new PlayerTeleportListener(), plugin);
- pm.registerEvents(new ProjectileLaunchListener(), plugin);
- pm.registerEvents(new PistonListener(), plugin);
- pm.registerEvents(new InventoryListener(), plugin);
-
- //WinConditions
- if(Config.AllDead) pm.registerEvents(new WinconditionAllDead(), plugin);
- if(Config.CaptainDead) pm.registerEvents(new WinconditionCaptainDead(), plugin);
- 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());
- getCommand("kit").setExecutor(new KitCommand());
-
- Countdown countdown = new Countdown(Config.NoPlayerOnlineDuration, new FinishNoPlayersOnline(), null, false);
- countdown.startTimer(getPlugin());
-
- TechHider.init();
- }
-
- private void loadConfig() {
- if(!new File("plugins/" + this.getName() + "/kits.data").exists()) {
- saveKitData();
- System.out.println(PREFIX + "kits.data erstellt und geladen!");
- Bukkit.shutdown();
- }
- }
-
- public static FightSystem getPlugin() {
- return plugin;
- }
-
- public static FightState getFightState() {
- return fightState;
- }
-
- public Scoreboard getScoreboard() {
- return scoreboard;
- }
-
- public WaterRemover getWaterRemover() {
- return waterRemover;
- }
-
- public void setPreRunningState() {
- if(fightState != FightState.SETUP)
- return;
- fightState = FightState.PRE_RUNNING;
- Countdown.cancelAllTimers();
-
- Countdown countdown = new Countdown(Config.PreFightDuration, new FinishPreRunning(), Sound.BLOCK_NOTE_PLING, true);
- countdown.startTimer(this);
- for(FightPlayer allFightPlayers : Fight.getBlueTeam().getPlayers()) {
- allFightPlayers.getPlayer().getInventory().clear();
- allFightPlayers.getKit().loadToPlayer(allFightPlayers.getPlayer());
- }
- for(FightPlayer allFightPlayers : Fight.getRedTeam().getPlayers()) {
- allFightPlayers.getPlayer().getInventory().clear();
- allFightPlayers.getKit().loadToPlayer(allFightPlayers.getPlayer());
- }
-
- teleportAllToFightSpawn();
- setAllPlayersGM(GameMode.SURVIVAL);
- Bukkit.broadcastMessage(PREFIX + "§aDer Kampf beginnt!");
- WinconditionTechKO.startAutoChecker();
- }
-
- private void setAllPlayersGM(GameMode gm) {
- for(FightPlayer fightPlayer: Fight.getBlueTeam().getPlayers()){
- fightPlayer.getPlayer().setGameMode(gm);
- }
- for(FightPlayer fightPlayer: Fight.getRedTeam().getPlayers()){
- fightPlayer.getPlayer().setGameMode(gm);
- }
- }
-
- public void setRunningState() {
- if(fightState != FightState.PRE_RUNNING)
- return;
- fightState = FightState.RUNNING;
- Countdown.cancelAllTimers();
-
- getWaterRemover().start();
-
- setAllPlayersGM(GameMode.SURVIVAL);
-
- WinconditionTimeout.timeout();
- WinconditionEntern.entern();
-
- Bukkit.broadcastMessage(PREFIX + "§aArena freigegeben!");
- }
-
- public void setSpectateState(FightTeam winFightTeam) {
- if(fightState != FightState.RUNNING)
- return;
- fightState = FightState.SPECTATE;
- Countdown.cancelAllTimers();
- Bukkit.getScheduler().cancelTask(WinconditionTechKO.getTaskID());
-
- setAllPlayersGM(GameMode.SPECTATOR);
- for(Player p : Bukkit.getOnlinePlayers()){
- p.getInventory().clear();
- }
- Bukkit.broadcastMessage(" ");
-
- if(winFightTeam != null) {
- Bukkit.broadcastMessage(PREFIX + "§aDas Team " + winFightTeam.getName() + " §ahat gewonnen!");
- teleportAllToFightSpawn();
-
- for(FightPlayer fightPlayer : winFightTeam.getPlayers()) {
- CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(Config.MoneyWin);
- }
-
- for(FightPlayer fightPlayer : Fight.getOpposite(winFightTeam).getPlayers()) {
- CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(Config.MoneyLose);
- }
- } else {
- Bukkit.broadcastMessage(PREFIX + "§aKein Team hat gewonnen!");
- for(FightPlayer fightPlayer : Fight.getBlueTeam().getPlayers()) {
- CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(Config.MoneyDraw);
- }
-
- for(FightPlayer fightPlayer : Fight.getRedTeam().getPlayers()) {
- CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(Config.MoneyDraw);
- }
- }
-
- Countdown countdown = new Countdown(Config.SpectatorDuration, new FinishSpectateOver(), Sound.BLOCK_NOTE_PLING, false);
- countdown.startTimer(FightSystem.getPlugin());
- }
-
- public int getFightTime() {
- return fightTime;
- }
-
- public static boolean isEntern() {
- return entern;
- }
-
- private void teleportAllToFightSpawn() {
- Fight.getBlueTeam().teleportToSpawn();
- Fight.getRedTeam().teleportToSpawn();
-
- for(Player player : Bukkit.getServer().getOnlinePlayers()) {
- FightTeam fightTeam = Fight.getPlayerTeam(player);
- if(fightTeam == null) player.teleport(Config.SpecSpawn);
- }
-
- }
-
- public static void setFightTime(int fightTime) {
- FightSystem.fightTime = fightTime;
- }
-
- public static void setEntern(boolean entern) {
- final List> chunksBlue = TechHider.prepareChunkReload(Fight.getBlueTeam().getPlayers().get(0).getPlayer());
- final List> chunksRed = TechHider.prepareChunkReload(Fight.getRedTeam().getPlayers().get(0).getPlayer());
- FightSystem.entern = entern;
- for(FightPlayer player : Fight.getBlueTeam().getPlayers()){
- TechHider.reloadChunks(player.getPlayer(), chunksBlue);
- }
- for(FightPlayer player : Fight.getRedTeam().getPlayers()){
- TechHider.reloadChunks(player.getPlayer(), chunksRed);
- }
- }
-}
diff --git a/src/me/yaruma/fightsystem/fight/FightTeam.java b/src/me/yaruma/fightsystem/fight/FightTeam.java
deleted file mode 100644
index 6edda79..0000000
--- a/src/me/yaruma/fightsystem/fight/FightTeam.java
+++ /dev/null
@@ -1,343 +0,0 @@
-package me.yaruma.fightsystem.fight;
-
-import com.boydti.fawe.FaweAPI;
-import com.sk89q.worldedit.Vector;
-import com.sk89q.worldedit.bukkit.BukkitWorld;
-import com.sk89q.worldedit.math.transform.AffineTransform;
-import com.sk89q.worldedit.world.World;
-import de.warking.hunjy.MySQL.Schematic;
-import de.warking.hunjy.MySQL.SchematicType;
-import de.warking.hunjy.MySQL.WarkingUser;
-import javafx.util.Pair;
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.kit.KitManager;
-import me.yaruma.fightsystem.utils.Config;
-import me.yaruma.fightsystem.utils.ItemBuilder;
-import me.yaruma.fightsystem.utils.TechHider;
-import me.yaruma.fightsystem.winconditions.WinconditionTechKO;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.chat.ClickEvent;
-import net.md_5.bungee.api.chat.ComponentBuilder;
-import net.md_5.bungee.api.chat.HoverEvent;
-import net.md_5.bungee.api.chat.TextComponent;
-import org.bukkit.*;
-import org.bukkit.enchantments.Enchantment;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.Inventory;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class FightTeam {
-
- private FightPlayer leader;
- private final List players = new ArrayList<>();
- private boolean ready;
- private final List invited = new ArrayList<>();
- private final String name;
- private final String prefix;
- private Schematic schematic;
- private final boolean blue;
-
- private final Location spawn;
- private final Vector paste;
- private final boolean rotate;
-
- public FightTeam(String Name, String Prefix, Location Spawn, Vector Paste, boolean Rotate, boolean Blue) {
- spawn = Spawn;
- paste = Paste;
- name = Name;
- prefix = Prefix;
- ready = false;
- rotate = Rotate;
- blue = Blue;
- }
-
- public void teleportToSpawn(){
- for(FightPlayer player : players){
- player.getPlayer().teleport(spawn);
- }
- }
-
- public FightPlayer getFightPlayer(Player player) {
- for(FightPlayer fightPlayer : players) {
- if(fightPlayer.getPlayer().equals(player))
- return fightPlayer;
- }
- return null;
- }
-
- public boolean allPlayersOut() {
- for(FightPlayer fightPlayer : players) {
- if(!fightPlayer.isOut())
- return false;
- }
- return true;
- }
-
- public boolean isPlayerInTeam(Player player) {
- for(FightPlayer fightPlayer : players) {
- if(fightPlayer.getPlayer().equals(player))
- return true;
- }
- return false;
- }
-
- public boolean isPlayerLeader(Player player) {
- if(leader != null)
- return leader.getPlayer().equals(player);
- else
- return false;
- }
-
- public void broadcast(String message) {
- for(FightPlayer fightPlayer : players) {
- fightPlayer.sendMessage(message);
- }
- }
-
- public FightPlayer addMember(Player player) {
- final List> chunksToReload = TechHider.prepareChunkReload(player);
- FightPlayer fightPlayer = new FightPlayer(player, false);
- players.add(fightPlayer);
- invited.remove(player);
-
- player.setGameMode(GameMode.ADVENTURE);
- player.teleport(spawn);
- if(KitManager.getKits(false).size() > 1)
- player.getInventory().setItem(1, new ItemBuilder(Material.LEATHER_CHESTPLATE).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§eKit wählen").build());
- TechHider.reloadChunks(player, chunksToReload);
- return fightPlayer;
- }
-
- public void removePlayer(Player player) {
- FightPlayer fightPlayer = getFightPlayer(player);
- if(fightPlayer == null)
- return;
-
- final List> chunksToReload = TechHider.prepareChunkReload(player);
- players.remove(fightPlayer);
- fightPlayer.getPlayer().getInventory().clear();
- if(fightPlayer.equals(leader) && FightSystem.getFightState() == FightState.SETUP){
- this.leader = null;
- if(!players.isEmpty()) {
- setLeader(players.get(0));
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§aDer Spieler §e" + leader.getPlayer().getName() + " §aist nun Leader von Team " + getName() + "§a!");
- }else{
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§cTeam " + getName() + " §chat keine Spieler mehr.\n Arena schließt...");
- Bukkit.shutdown();
- }
- }
-
- player.setGameMode(GameMode.SPECTATOR);
- player.teleport(Config.SpecSpawn);
- TechHider.reloadChunks(player, chunksToReload);
- }
-
- public boolean hasTeamLeader() {
- return leader != null;
- }
-
- public boolean isBlue(){
- return blue;
- }
- public boolean isRed(){
- return !blue;
- }
-
- public FightPlayer getLeader() {
- return leader;
- }
-
- public void setLeader(FightPlayer leader) {
- this.leader = leader;
- leader.setKit(KitManager.getKitByName(Config.LeaderDefault));
- Inventory inventory = leader.getPlayer().getInventory();
- inventory.setItem(0, new ItemBuilder(Material.PAPER).removeAllAtributs().setDisplayName("§eSpieler einladen").build());
- if(KitManager.getKits(true).size() > 1)
- inventory.setItem(1, new ItemBuilder(Material.LEATHER_CHESTPLATE).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§eKit wählen").build());
- else
- inventory.setItem(1, new ItemBuilder(Material.AIR).build());
- inventory.setItem(2, new ItemBuilder(Material.FIREWORK_CHARGE).removeAllAtributs().setDisplayName("§cSpieler rauswerfen").build());
- inventory.setItem(3, new ItemBuilder(Material.INK_SACK, (short) 10).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§cNicht bereit").build());
- inventory.setItem(5, new ItemBuilder(Material.INK_SACK, (short) 1).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§4Abbrechen").build());
- inventory.setItem(7, new ItemBuilder(Material.CAULDRON_ITEM).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§e" + Config.GameName + " wählen").build());
- }
-
- public List getPlayers() {
- return players;
- }
-
- public boolean isReady() {
- return ready;
- }
-
- private void pasteSchematic(){
- File file = new File(Config.SchematicDirectory + WarkingUser.get(schematic.getSchemOwner()).getUUID().toString() + "/" + schematic.getSchemName() + ".schematic");
- com.boydti.fawe.object.schematic.Schematic schem;
- try {
- schem = FaweAPI.load(file);
- }catch(IOException e){
- e.printStackTrace();
- return;
- }
- World w = new BukkitWorld(Bukkit.getWorlds().get(0));
- Vector dimensions = schem.getClipboard().getDimensions();
- Vector v;
- Vector offset = new Vector(schem.getClipboard().getRegion().getMinimumPoint()).subtract(schem.getClipboard().getOrigin());
- AffineTransform aT = new AffineTransform();
- if(rotate){
- aT = aT.rotateY(180);
- v = paste.add(dimensions.getX()/2 + dimensions.getX()%2, 0, dimensions.getZ()/2 + dimensions.getZ()%2).subtract(offset.multiply(-1, 1, -1)).subtract(1, 0, 1);
- }else{
- v = paste.subtract(dimensions.getX()/2 - dimensions.getX()%2, 0, dimensions.getZ()/2 - dimensions.getZ()%2).subtract(offset);
- }
- if(Config.AlignWater){
- Vector it = schem.getClipboard().getMinimumPoint();
- int depth = 0;
- while(!schem.getClipboard().getBlock(it).isAir()){
- depth++;
- it = it.setY(it.getY()+1);
- }
- System.out.println(name + " " + Config.WaterDepth + " " + depth + " " + schem.getClipboard().getBlock(new Vector(0, 0, 0)));
- v = v.add(0, Config.WaterDepth - depth, 0);
- }
- schem.paste(w, v, false, true, aT).flushQueue();
- Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), () ->{
- teleportToSpawn();
- },20);
- }
-
- public void setSchematic(Schematic schematic){
- this.schematic = schematic;
- broadcast(FightSystem.PREFIX + "§7Das §e" + Config.GameName + " " + schematic.getSchemName() + " §7wird für den Kampf verwendet!");
- leader.getPlayer().getInventory().clear(7);
- if(Fight.getOpposite(this).hasSchematic()){
- pasteSchematic();
- Fight.getOpposite(this).pasteSchematic();
- Bukkit.getScheduler().scheduleSyncDelayedTask(FightSystem.getPlugin(), WinconditionTechKO::addWater, 20*10L);
- }
- }
-
- public boolean hasSchematic(){
- return schematic != null;
- }
-
- public void setReady(boolean ready) {
- Player leader = getLeader().getPlayer();
-
- if(schematic == null){
- leader.sendMessage(FightSystem.PREFIX + "§cZuerst muss eine Schematic gewählt sein!");
- return;
- }
-
- this.ready = ready;
- if(ready) {
- leader.getInventory().setItem(3, new ItemBuilder(Material.INK_SACK, (short) 8).removeAllAtributs().addEnchantment(Enchantment.DURABILITY,1 ).setDisplayName("§aBereit").build());
- broadcast(FightSystem.PREFIX + "§aEuer Team ist nun bereit!");
- if(Fight.getOpposite(this).isReady()) {
- FightSystem.getPlugin().setPreRunningState();
- }
- } else {
- leader.getInventory().setItem(3, new ItemBuilder(Material.INK_SACK, (short) 10).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§cNicht bereit").build());
- broadcast(FightSystem.PREFIX + "§cEuer Team ist nicht mehr bereit!");
- }
- }
-
- public List getInvited() {
- return invited;
- }
-
- public String getName() {
- return prefix + name;
- }
-
- public String getPrefix() {
- return prefix;
- }
-
- public Location getSpawn() {
- return spawn;
- }
-
- public void sendPlayerSchematicList(boolean publicSchematics, int currentPage, int filesPerPage, Player player, SchematicType schematicType) {
- List preSchematicList;
- List schematicList = new ArrayList<>();
- if(publicSchematics) {
- preSchematicList = Schematic.getSchemsAccessibleByUser(0);
- } else {
- preSchematicList = Schematic.getSchemsAccessibleByUser(player.getUniqueId());
- }
-
- for(Schematic s : preSchematicList) {
- if(s.getSchemType() == schematicType)
- schematicList.add(s);
- }
-
- if(schematicList.isEmpty()) {
- player.sendMessage(FightSystem.PREFIX + "§cDu hast noch keine Schematic(s)!");
- return;
- }
-
- int pages;
-
- double doublePages = (double) schematicList.size() / (double) filesPerPage;
- int intPages = schematicList.size() / filesPerPage;
-
- if(schematicList.size() <= filesPerPage) {
- pages = 1;
- } else if(doublePages > intPages) {
- pages = (intPages + 1);
- } else
- pages = intPages;
-
- if(currentPage >= pages) return;
-
- player.sendMessage("§5======§8[§dSeite " + (currentPage + 1) + " §7/ §d" + pages + " §7| §d" + schematicList.size() + " Schematic(s)§8]§5======");
-
- for(int i = currentPage * filesPerPage; i < (currentPage * filesPerPage) + filesPerPage; i++) {
- if(schematicList.size() <= i) break;
-
- Schematic schematic = schematicList.get(i);
-
- TextComponent schematics = new TextComponent("§b" + schematic.getSchemName());
- schematics.setBold(true);
-
- schematics.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Schematic benutzen...").create()));
- schematics.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schem " + schematic.getSchemName() + (publicSchematics ? " public" : " private")));
-
- player.spigot().sendMessage(schematics);
- }
-
- if(pages <= 1) return;
-
- if(currentPage == 0) {
- TextComponent nextPage = new TextComponent("Nächste Seite >>");
- nextPage.setColor(ChatColor.RED);
- nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Nächste Seite...").create()));
- nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schemlist 1"));
- player.spigot().sendMessage(nextPage);
- } else if((currentPage + 1) == pages) {
- TextComponent beforePage = new TextComponent("<< Vorherige Seite");
- beforePage.setColor(ChatColor.RED);
- beforePage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Vorherige Seite...").create()));
- beforePage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schemlist " + (currentPage - 1)));
- player.spigot().sendMessage(beforePage);
- } else {
- TextComponent beforePage = new TextComponent("<< Seite ");
- beforePage.setColor(ChatColor.RED);
- beforePage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Vorherige Seite...").create()));
- beforePage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schemlist " + (currentPage - 1)));
-
- TextComponent nextPage = new TextComponent(">>");
- nextPage.setColor(ChatColor.RED);
- nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Nächste Seite...").create()));
- nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schemlist " + (currentPage + 1)));
-
- beforePage.addExtra(nextPage);
- player.spigot().sendMessage(beforePage);
- }
- }
-}
diff --git a/src/me/yaruma/fightsystem/fight/WaterRemover.java b/src/me/yaruma/fightsystem/fight/WaterRemover.java
deleted file mode 100644
index cabc173..0000000
--- a/src/me/yaruma/fightsystem/fight/WaterRemover.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package me.yaruma.fightsystem.fight;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.winconditions.WinconditionTechKO;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.block.BlockFace;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.scheduler.BukkitTask;
-
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.List;
-
-public class WaterRemover {
-
- private List> explodedBlocks = new ArrayList<>();
- private List waterList = new ArrayList<>();
- private BukkitTask task;
-
- public void start() {
- this.stop();
- this.explodedBlocks = new ArrayList<>();
- this.waterList = new ArrayList<>();
- this.task = Bukkit.getScheduler().runTaskTimerAsynchronously((Plugin)FightSystem.getPlugin(), () -> {
- try {
- WaterRemover.this.wateredCheck();
- WaterRemover.this.removeWater();
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }, 0L, 20L);
- }
-
- public void stop() {
- if (this.task != null) {
- this.task.cancel();
- }
- }
-
- public void add(Location loc) {
- this.explodedBlocks.add(new AbstractMap.SimpleEntry<>(loc, 0));
- }
-
- private void wateredCheck() {
- for (int i = this.explodedBlocks.size() - 1; i >= 0; i--) {
- if (this.explodedBlocks.get(i).getValue() >= 15) {
- Block b = this.explodedBlocks.get(i).getKey().getBlock();
- if (b.getType() == Material.WATER || b.getType() == Material.STATIONARY_WATER) {
- this.waterList.add(b);
- }
- this.explodedBlocks.remove(i);
- continue;
- }
- this.explodedBlocks.get(i).setValue(this.explodedBlocks.get(i).getValue() + 1);
- }
- }
-
- private void removeWater() {
- ArrayList blocksToRemove = new ArrayList<>();
- for (int i = this.waterList.size() - 1; i > -1; --i) {
- Block current = this.waterList.get(i);
- blocksToRemove.addAll(this.getSourceBlocksOfWater(current));
- if (current.getType() != Material.AIR) continue;
- this.waterList.remove(i);
- }
- Bukkit.getScheduler().runTask((Plugin)FightSystem.getPlugin(), () -> {
- for (Block block : blocksToRemove) {
- block.setType(Material.AIR);
- }
- WinconditionTechKO.removeWater();
- });
- }
-
- private List getSourceBlocksOfWater(Block startBlock) {
- ArrayList water = new ArrayList<>();
- this.collectBlocks(startBlock, water, new ArrayList<>());
- return water;
- }
-
- private void collectBlocks(Block anchor, List collected, List visitedBlocks) {
- if (anchor.getType() != Material.WATER && anchor.getType() != Material.STATIONARY_WATER) {
- return;
- }
- if (visitedBlocks.contains((Object)anchor)) {
- return;
- }
- visitedBlocks.add(anchor);
- if (anchor.getType() == Material.STATIONARY_WATER) {
- collected.add(anchor);
- }
- if(visitedBlocks.size() > 50) {
- collected.clear();
- return;
- }
- this.collectBlocks(anchor.getRelative(BlockFace.UP), collected, visitedBlocks);
- this.collectBlocks(anchor.getRelative(BlockFace.NORTH), collected, visitedBlocks);
- this.collectBlocks(anchor.getRelative(BlockFace.EAST), collected, visitedBlocks);
- this.collectBlocks(anchor.getRelative(BlockFace.SOUTH), collected, visitedBlocks);
- this.collectBlocks(anchor.getRelative(BlockFace.WEST), collected, visitedBlocks);
- }
-
-}
diff --git a/src/me/yaruma/fightsystem/listener/BlockBreakListener.java b/src/me/yaruma/fightsystem/listener/BlockBreakListener.java
deleted file mode 100644
index 67f0b2f..0000000
--- a/src/me/yaruma/fightsystem/listener/BlockBreakListener.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package me.yaruma.fightsystem.listener;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightState;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.BlockBreakEvent;
-
-public class BlockBreakListener implements Listener {
-
- @EventHandler
- public void handleBlockBreak(BlockBreakEvent event) {
- Player player = event.getPlayer();
-
- if(Fight.getPlayerTeam(player) == null)
- event.setCancelled(true);
- else if(FightSystem.getFightState() != FightState.RUNNING) {
- event.setCancelled(true);
- if(FightSystem.getFightState() == FightState.SETUP || FightSystem.getFightState() == FightState.PRE_RUNNING) {
- player.sendMessage(FightSystem.PREFIX + "§cDu darfst erst nach Fightbeginn Blöcke abbauen!");
- } else
- player.sendMessage(FightSystem.PREFIX + "§cDu darfst keine Blöcke mehr abbauen!");
- }
- }
-
-}
diff --git a/src/me/yaruma/fightsystem/listener/BlockPlaceListener.java b/src/me/yaruma/fightsystem/listener/BlockPlaceListener.java
deleted file mode 100644
index 142e404..0000000
--- a/src/me/yaruma/fightsystem/listener/BlockPlaceListener.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package me.yaruma.fightsystem.listener;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightState;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.BlockPlaceEvent;
-
-public class BlockPlaceListener implements Listener {
-
- @EventHandler
- public void handleBlockPlace(BlockPlaceEvent event) {
- Player player = event.getPlayer();
-
- if(Fight.getPlayerTeam(player) == null)
- event.setCancelled(true);
- else if(FightSystem.getFightState() != FightState.RUNNING) {
- event.setCancelled(true);
- if(FightSystem.getFightState() == FightState.PRE_RUNNING || FightSystem.getFightState() == FightState.SETUP) {
- player.sendMessage(FightSystem.PREFIX + "§cDu darfst erst nach Fightbeginn Blöcke setzen!");
- } else
- player.sendMessage(FightSystem.PREFIX + "§cDu darfst keine Blöcke mehr setzen!");
- }
- }
-}
diff --git a/src/me/yaruma/fightsystem/listener/EntityDamageByEntityListener.java b/src/me/yaruma/fightsystem/listener/EntityDamageByEntityListener.java
deleted file mode 100644
index ef35167..0000000
--- a/src/me/yaruma/fightsystem/listener/EntityDamageByEntityListener.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package me.yaruma.fightsystem.listener;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightState;
-import org.bukkit.entity.Arrow;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-
-public class EntityDamageByEntityListener implements Listener {
-
- private final FightSystem instance = FightSystem.getPlugin();
-
- @EventHandler
- public void handleEntityDamageByEntity(EntityDamageByEntityEvent event) {
- if(instance.getFightState() != FightState.RUNNING) {
- event.setCancelled(true);
- } else if(event.getEntity() instanceof Player) {
- Player player = ((Player) event.getEntity()).getPlayer();
-
- if(event.getDamager() instanceof Player) {
- Player damager = ((Player) event.getDamager()).getPlayer();
-
- if(Fight.getPlayerTeam(player) != null) {
- if(Fight.getPlayerTeam(player) == Fight.getPlayerTeam(damager)) {
- event.setCancelled(true);
- damager.sendMessage(FightSystem.PREFIX + "§cDu darfst deinen Teamkollegen keinen Schaden zufügen!");
- }
- } else
- event.setCancelled(true);
- }else if(event.getDamager() instanceof Arrow) {
- Arrow damagerArrow = (Arrow) event.getDamager();
- if(!(damagerArrow.getShooter() instanceof Player)) {
- return;
- }
- Player damager = (Player) damagerArrow.getShooter();
- if(Fight.getPlayerTeam(player) == Fight.getPlayerTeam(damager)) {
- event.setCancelled(true);
- damager.sendMessage(FightSystem.PREFIX + "§cDu darfst deinen Teamkollegen keinen Schaden zufügen!");
- damagerArrow.setFireTicks(0);
- player.setFireTicks(0);
- }
- }
- }
- }
-
-
-}
diff --git a/src/me/yaruma/fightsystem/listener/EntityDamageListener.java b/src/me/yaruma/fightsystem/listener/EntityDamageListener.java
deleted file mode 100644
index 8c137e2..0000000
--- a/src/me/yaruma/fightsystem/listener/EntityDamageListener.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package me.yaruma.fightsystem.listener;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightState;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.EntityDamageEvent;
-
-public class EntityDamageListener implements Listener {
-
- @EventHandler
- public void handleEntityDamage(EntityDamageEvent event) {
- if(!(event.getEntity() instanceof Player)) return;
- Player player = (Player) event.getEntity();
- if(Fight.getPlayerTeam(player) != null) {
- if(FightSystem.getPlugin().getFightState() != FightState.RUNNING) event.setCancelled(true);
- } else
- event.setCancelled(true);
- }
-
-
-}
diff --git a/src/me/yaruma/fightsystem/listener/EntityExplodeListener.java b/src/me/yaruma/fightsystem/listener/EntityExplodeListener.java
deleted file mode 100644
index 4ba85d5..0000000
--- a/src/me/yaruma/fightsystem/listener/EntityExplodeListener.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package me.yaruma.fightsystem.listener;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.FightState;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.EntityExplodeEvent;
-
-public class EntityExplodeListener implements Listener {
-
- @EventHandler
- public void handleEntityExplode(EntityExplodeEvent event) {
- if(FightSystem.getFightState() != FightState.RUNNING){
- event.setCancelled(true);
- return;
- }
- for(Block block : event.blockList()) {
- if(block.getType() != Material.WATER || block.getType() != Material.STATIONARY_WATER)
- FightSystem.getPlugin().getWaterRemover().add(block.getLocation());
- }
- }
-
-
-}
diff --git a/src/me/yaruma/fightsystem/listener/PlayerDeathListener.java b/src/me/yaruma/fightsystem/listener/PlayerDeathListener.java
deleted file mode 100644
index 3b065df..0000000
--- a/src/me/yaruma/fightsystem/listener/PlayerDeathListener.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package me.yaruma.fightsystem.listener;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightTeam;
-import me.yaruma.fightsystem.utils.Config;
-import org.bukkit.GameMode;
-import org.bukkit.Sound;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.PlayerDeathEvent;
-
-public class PlayerDeathListener implements Listener {
-
- FightSystem instance = FightSystem.getPlugin();
-
- @EventHandler(priority = EventPriority.HIGH)
- public void handlePlayerDeath(PlayerDeathEvent event) {
- Player player = event.getEntity().getPlayer();
- if(Fight.getPlayerTeam(player) == null) return;
- FightTeam fightTeam = Fight.getPlayerTeam(player);
- event.setDeathMessage(FightSystem.PREFIX + "§cDer Spieler §6" + player.getName() + " §cist gestorben!");
- fightTeam.getFightPlayer(player).setOut(true);
- player.setGameMode(GameMode.SPECTATOR);
- if(fightTeam == Fight.redTeam)
- player.teleport(Config.TeamRedSpawn);
- else
- player.teleport(Config.TeamBlueSpawn);
-
- Fight.playSound(Sound.ENTITY_WITHER_DEATH, 100.0F, 1.0F);
- }
-
-
-}
diff --git a/src/me/yaruma/fightsystem/listener/PlayerJoinListener.java b/src/me/yaruma/fightsystem/listener/PlayerJoinListener.java
deleted file mode 100644
index 1a9e717..0000000
--- a/src/me/yaruma/fightsystem/listener/PlayerJoinListener.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package me.yaruma.fightsystem.listener;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightState;
-import me.yaruma.fightsystem.fight.FightTeam;
-import me.yaruma.fightsystem.utils.Config;
-import me.yaruma.fightsystem.utils.countdown.Countdown;
-import me.yaruma.fightsystem.utils.countdown.CountdownType;
-import me.yaruma.fightsystem.utils.countdown.FinishSetupOver;
-import org.bukkit.GameMode;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerJoinEvent;
-
-public class PlayerJoinListener implements Listener {
-
- @EventHandler
- public void handlePlayerJoin(PlayerJoinEvent event) {
- event.setJoinMessage(null);
-
- Player player = event.getPlayer();
- player.setHealth(20);
- player.setFoodLevel(20);
- player.getInventory().clear();
-
- FightTeam fightTeam = Fight.getPlayerTeam(player);
-
- if (fightTeam == null) {
- if(!Fight.getRedTeam().hasTeamLeader() && FightSystem.getFightState() == FightState.SETUP) {
- Fight.getRedTeam().setLeader(Fight.getRedTeam().addMember(player));
- } else if(!Fight.getBlueTeam().hasTeamLeader() && FightSystem.getFightState() == FightState.SETUP) {
- Fight.getBlueTeam().setLeader(Fight.getBlueTeam().addMember(player));
- } else {
- player.setGameMode(GameMode.SPECTATOR);
- player.teleport(Config.SpecSpawn);
- }
- } else {
- player.teleport(fightTeam.getSpawn());
- player.setGameMode(GameMode.SPECTATOR);
- }
-
- if(Fight.getRedTeam().hasTeamLeader() && Fight.getBlueTeam().hasTeamLeader() && FightSystem.getFightState() == FightState.SETUP
- && (Fight.getRedTeam().getLeader().getPlayer() == player || Fight.getBlueTeam().getLeader().getPlayer() == player)) {
- Countdown.cancelTimerType(CountdownType.NO_PLAYERS_ONLINE);
- new Countdown(Config.SetupDuration, new FinishSetupOver(), null, false).startTimer(FightSystem.getPlugin());
- }
-
- FightSystem.getPlugin().getScoreboard().setAutoScoreboard(20*10, player);
- }
-
-
-}
diff --git a/src/me/yaruma/fightsystem/listener/PlayerMoveListener.java b/src/me/yaruma/fightsystem/listener/PlayerMoveListener.java
deleted file mode 100644
index 58c0716..0000000
--- a/src/me/yaruma/fightsystem/listener/PlayerMoveListener.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package me.yaruma.fightsystem.listener;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightState;
-import me.yaruma.fightsystem.fight.FightTeam;
-import me.yaruma.fightsystem.utils.Config;
-import me.yaruma.fightsystem.utils.Region;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerMoveEvent;
-
-public class PlayerMoveListener implements Listener {
-
- private final FightSystem instance = FightSystem.getPlugin();
-
- @EventHandler
- public void handlePlayerMove(PlayerMoveEvent event) {
- Player player = event.getPlayer();
- Location to = event.getTo();
- Location from = event.getFrom();
- FightTeam fightTeam = Fight.getPlayerTeam(player);
-
- //Check in Arena
- if(!Region.isIn2DRegion(to, Config.ArenaMinX, Config.ArenaMinZ, Config.ArenaMaxX, Config.ArenaMaxZ)){
- player.teleport(from);
- player.sendMessage(FightSystem.PREFIX + "§cDu darfst die Arena nicht verlassen!");
- return;
- }
-
- boolean inArenaY = to.getY() + 1.8 <= Config.upperArenaBorder;
-
- //Check under Arena
- if(to.getY() <= Config.underArenaBorder) {
- if(fightTeam == null){
- player.teleport(from);
- player.sendMessage(FightSystem.PREFIX + "§cDu darfst die Arena nicht verlassen!");
- }else if(FightSystem.getFightState() == FightState.RUNNING)
- player.damage(2);
- else if(fightTeam == Fight.redTeam)
- player.teleport(Config.TeamRedSpawn);
- else
- player.teleport(Config.TeamBlueSpawn);
- return;
- }else if(fightTeam != null && !inArenaY){
- player.teleport(from);
- player.sendMessage(FightSystem.PREFIX + "§cDu darfst die Arena nicht verlassen!");
- return;
- }
-
- //Check TeamAreas
- boolean inBlueArea = inArenaY && Region.isIn2DRange(to, Config.TeamBlueCornerX, Config.TeamBlueCornerZ, Config.SchemsizeX, Config.SchemsizeZ, Config.BorderFromSchematic);
- boolean inRedArea = inArenaY && Region.isIn2DRange(to, Config.TeamRedCornerX, Config.TeamRedCornerZ, Config.SchemsizeX, Config.SchemsizeZ, Config.BorderFromSchematic);
-
- if(inBlueArea || inRedArea) {
- if(fightTeam == null){
- player.teleport(from);
- player.sendMessage(FightSystem.PREFIX + "§cDu darfst nicht weiter zu den Kämpfern!");
- }
- }else if(fightTeam != null && (
- (!FightSystem.isEntern() && !fightTeam.getFightPlayer(player).isOut()) ||
- FightSystem.getFightState() == FightState.SPECTATE)){
- player.teleport(from);
- player.sendMessage(FightSystem.PREFIX + "§cDu darfst nicht zu " + Fight.getOpposite(fightTeam).getName() + "§c!");
- }
- }
-}
diff --git a/src/me/yaruma/fightsystem/listener/PlayerQuitListener.java b/src/me/yaruma/fightsystem/listener/PlayerQuitListener.java
deleted file mode 100644
index 00eae77..0000000
--- a/src/me/yaruma/fightsystem/listener/PlayerQuitListener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package me.yaruma.fightsystem.listener;
-
-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 org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerQuitEvent;
-
-public class PlayerQuitListener implements Listener {
-
- @EventHandler(priority = EventPriority.HIGH)
- public void handlePlayerQuit(PlayerQuitEvent event) {
- event.setQuitMessage(null);
-
- Player player = event.getPlayer();
- FightTeam fightTeam = Fight.getPlayerTeam(player);
- if(fightTeam == null)
- return;
-
- FightState fightState = FightSystem.getFightState();
- if(fightState == FightState.SETUP){
- fightTeam.removePlayer(player);
- }else if(fightState == FightState.PRE_RUNNING || fightState == FightState.RUNNING){
- FightPlayer fightPlayer = fightTeam.getFightPlayer(player);
- if(!fightPlayer.isOut()) {
- fightTeam.getFightPlayer(player).setOut(true);
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Spieler §6" + player.getName() + " §chat den Kampf verlassen!");
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/me/yaruma/fightsystem/listener/PlayerTeleportListener.java b/src/me/yaruma/fightsystem/listener/PlayerTeleportListener.java
deleted file mode 100644
index 73872e7..0000000
--- a/src/me/yaruma/fightsystem/listener/PlayerTeleportListener.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package me.yaruma.fightsystem.listener;
-
-import me.yaruma.fightsystem.FightSystem;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerTeleportEvent;
-
-public class PlayerTeleportListener implements Listener {
-
- @EventHandler
- public void onTpGM3(PlayerTeleportEvent e) {
- if (e.getCause() == PlayerTeleportEvent.TeleportCause.SPECTATE) {
- e.setCancelled(true);
- e.getPlayer().sendMessage(FightSystem.PREFIX + "§cDu darfst die GM3 Teleportfunktion nicht benutzen!");
- }
- }
-
-
-}
diff --git a/src/me/yaruma/fightsystem/utils/countdown/Countdown.java b/src/me/yaruma/fightsystem/utils/countdown/Countdown.java
deleted file mode 100644
index 7c6fd07..0000000
--- a/src/me/yaruma/fightsystem/utils/countdown/Countdown.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package me.yaruma.fightsystem.utils.countdown;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import org.bukkit.Bukkit;
-import org.bukkit.Sound;
-import org.bukkit.scheduler.BukkitScheduler;
-
-import java.util.ArrayList;
-
-public class Countdown {
-
- private static final ArrayList countdowns = new ArrayList<>();
-
- private int time;
- private final CountdownCallback countdownCallback;
- private int taskID;
- private Sound sound;
- private boolean level;
-
- public Countdown(int time, CountdownCallback countdownCallback, Sound sound, boolean level) {
- this.time = time;
- this.countdownCallback = countdownCallback;
- this.sound = sound;
- this.level = level;
- countdowns.add(this);
- }
-
-
- public void startTimer(FightSystem plugin) {
- BukkitScheduler bukkitScheduler = Bukkit.getServer().getScheduler();
- this.taskID = bukkitScheduler.scheduleSyncRepeatingTask(plugin, () -> {
-
- switch (time) {
- case 900: case 600: case 300: case 180: case 120:
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §a" + time / 60 + " §7Minuten " + countdownCallback.countdownCounting());
- break;
- case 60: case 30: case 20: case 15: case 10: case 5: case 4: case 3: case 2:
- if(this.sound != null)
- Fight.playSound(this.sound, 100.0F, 1.0F);
-
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §a" + time + " §7Sekunden " + countdownCallback.countdownCounting());
- break;
- case 1:
- if(this.sound != null)
- Fight.playSound(this.sound, 100.0F, 1.0F);
-
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §aeine §7Sekunde " + countdownCallback.countdownCounting());
- break;
- case 0:
- if(this.sound != null)
- Fight.playSound(this.sound, 100.0F, 2.0F);
-
- cancelTimer();
- countdownCallback.countdownFinished();
- break;
- }
- if(this.level)
- Fight.setLevel(time);
-
- time--;
- if(countdownCallback instanceof FinishTimeOver) FightSystem.setFightTime(time);
- }, 0, 20);
- }
-
- private void cancelTimer() {
-
- try {
- Bukkit.getScheduler().cancelTask(this.taskID);
- } catch (AssertionError ex) {
- ex.printStackTrace();
- }
- countdowns.remove(this);
- }
-
- public static void cancelAllTimers() {
- while (!countdowns.isEmpty()) {
- countdowns.get(0).cancelTimer();
- }
- }
-
- public static void cancelTimerType(CountdownType countdownType) {
- for(int i = countdowns.size() - 1; i >= 0; i--) {
-
- if(countdowns.get(i).getType() == countdownType) countdowns.get(i).cancelTimer();
- }
- }
-
- private CountdownType getType() {
- return countdownCallback.getType();
- }
-}
diff --git a/src/me/yaruma/fightsystem/utils/countdown/CountdownCallback.java b/src/me/yaruma/fightsystem/utils/countdown/CountdownCallback.java
deleted file mode 100644
index b7d9d90..0000000
--- a/src/me/yaruma/fightsystem/utils/countdown/CountdownCallback.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package me.yaruma.fightsystem.utils.countdown;
-
-interface CountdownCallback {
- String countdownCounting();
- void countdownFinished();
- CountdownType getType();
-}
diff --git a/src/me/yaruma/fightsystem/utils/countdown/CountdownType.java b/src/me/yaruma/fightsystem/utils/countdown/CountdownType.java
deleted file mode 100644
index f148d78..0000000
--- a/src/me/yaruma/fightsystem/utils/countdown/CountdownType.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package me.yaruma.fightsystem.utils.countdown;
-
-public enum CountdownType {
-
- NO_ENTERN,
- NO_PLAYERS_ONLINE,
- PRE_RUNNING,
- SETUP_OVER,
- SPECTATE_OVER,
- TIME_OVER
-
-
-}
diff --git a/src/me/yaruma/fightsystem/utils/countdown/FinishNoPlayersOnline.java b/src/me/yaruma/fightsystem/utils/countdown/FinishNoPlayersOnline.java
deleted file mode 100644
index f83d81c..0000000
--- a/src/me/yaruma/fightsystem/utils/countdown/FinishNoPlayersOnline.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package me.yaruma.fightsystem.utils.countdown;
-
-import org.bukkit.Bukkit;
-
-public class FinishNoPlayersOnline implements CountdownCallback {
-
- @Override
- public String countdownCounting() {
- return "bis der Server gestoppt wird!";
- }
-
- @Override
- public void countdownFinished() {
- Bukkit.getServer().shutdown();
- }
-
- @Override
- public CountdownType getType() {
- return CountdownType.NO_PLAYERS_ONLINE;
- }
-}
diff --git a/src/me/yaruma/fightsystem/utils/countdown/FinishPreRunning.java b/src/me/yaruma/fightsystem/utils/countdown/FinishPreRunning.java
deleted file mode 100644
index 7c28bc6..0000000
--- a/src/me/yaruma/fightsystem/utils/countdown/FinishPreRunning.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package me.yaruma.fightsystem.utils.countdown;
-
-import me.yaruma.fightsystem.FightSystem;
-
-public class FinishPreRunning implements CountdownCallback {
-
- @Override
- public String countdownCounting() {
- return "bis die Arena freigegeben ist!";
- }
-
- @Override
- public void countdownFinished() {
- FightSystem.getPlugin().setRunningState();
- }
-
- @Override
- public CountdownType getType() {
- return CountdownType.PRE_RUNNING;
- }
-}
diff --git a/src/me/yaruma/fightsystem/utils/countdown/FinishSpectateOver.java b/src/me/yaruma/fightsystem/utils/countdown/FinishSpectateOver.java
deleted file mode 100644
index 65b6327..0000000
--- a/src/me/yaruma/fightsystem/utils/countdown/FinishSpectateOver.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package me.yaruma.fightsystem.utils.countdown;
-
-import org.bukkit.Bukkit;
-
-public class FinishSpectateOver implements CountdownCallback {
-
- @Override
- public String countdownCounting() {
- return "bis der Server gestoppt wird!";
- }
-
- @Override
- public void countdownFinished() {
- Bukkit.getServer().shutdown();
- }
-
- @Override
- public CountdownType getType() {
- return CountdownType.SPECTATE_OVER;
- }
-}
diff --git a/src/me/yaruma/fightsystem/utils/countdown/FinishTimeOver.java b/src/me/yaruma/fightsystem/utils/countdown/FinishTimeOver.java
deleted file mode 100644
index 4d046e3..0000000
--- a/src/me/yaruma/fightsystem/utils/countdown/FinishTimeOver.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package me.yaruma.fightsystem.utils.countdown;
-
-import me.yaruma.fightsystem.FightSystem;
-import org.bukkit.Bukkit;
-
-public class FinishTimeOver implements CountdownCallback {
-
- @Override
- public String countdownCounting() {
- return "bis der Kampf vorbei ist!";
- }
-
- @Override
- public void countdownFinished() {
- Bukkit.broadcastMessage(FightSystem.PREFIX +"§aZeit abgelaufen!");
- FightSystem.getPlugin().setSpectateState(null);
- }
-
- @Override
- public CountdownType getType() {
- return CountdownType.TIME_OVER;
- }
-}
diff --git a/src/me/yaruma/fightsystem/utils/scoreboard/Scoreboard.java b/src/me/yaruma/fightsystem/utils/scoreboard/Scoreboard.java
deleted file mode 100644
index 94b0d5f..0000000
--- a/src/me/yaruma/fightsystem/utils/scoreboard/Scoreboard.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package me.yaruma.fightsystem.utils.scoreboard;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightPlayer;
-import me.yaruma.fightsystem.fight.FightTeam;
-import me.yaruma.fightsystem.utils.Config;
-import me.yaruma.fightsystem.winconditions.WinconditionPercentSystem;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.scoreboard.DisplaySlot;
-import org.bukkit.scoreboard.Objective;
-import org.bukkit.scoreboard.ScoreboardManager;
-
-public class Scoreboard {
-
- private final org.bukkit.scoreboard.Scoreboard scoreboard;
- private final Objective objective;
-
- public Scoreboard() {
- ScoreboardManager scoreboardManager = Bukkit.getScoreboardManager();
- this.scoreboard = scoreboardManager.getNewScoreboard();
- this.objective = scoreboard.registerNewObjective("AAA", "BBB");
- }
-
- public void setAutoScoreboard(int delay, Player player) {
- Bukkit.getScheduler().scheduleSyncRepeatingTask(FightSystem.getPlugin(), new Runnable() {
-
- private int index = 0;
-
- @Override
- public void run() {
- FightTeam fightTeam = getIndexDisplay(index);
- if (fightTeam != null) {
- objective.unregister();
- scoreboard.registerNewObjective("AAA", "BBB");
-
- objective.setDisplaySlot(DisplaySlot.SIDEBAR);
- objective.setDisplayName(fightTeam.getName());
-
- for (FightPlayer fp : fightTeam.getPlayers()) {
- if(!fp.isOut())
- objective.getScore(fightTeam.getPrefix() + fp.getPlayer().getName()).setScore((int) fp.getPlayer().getHealth());
- }
-
- index++;
-
- } else {
-
- objective.unregister();
- scoreboard.registerNewObjective("AAA", "BBB");
-
- objective.setDisplaySlot(DisplaySlot.SIDEBAR);
- objective.setDisplayName("§6Kampf");
- if (Config.Timeout) {
- int fightTime = FightSystem.getPlugin().getFightTime();
- if (fightTime >= 60)
- objective.getScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s").setScore(3);
- else
- objective.getScore("§7Zeit: §a" + fightTime + "s").setScore(3);
- }
- if (Config.Entern)
- objective.getScore("§7Entern: " + (FightSystem.getPlugin().isEntern() ? "§aja" : "§cnein")).setScore(2);
- if (Config.PercentSystem){
- objective.getScore(Fight.getRedTeam().getPrefix() + "Schaden: §c" + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%").setScore(1);
- objective.getScore(Fight.getBlueTeam().getPrefix() + "Schaden: §c" + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%").setScore(0);
- }
- index = 0;
- }
- player.setScoreboard(scoreboard);
- }
- }, 0, delay);
- }
-
- private FightTeam getIndexDisplay(int index) {
- if(index == 0) {
- return Fight.redTeam;
- }
- if(index == 1) {
- return Fight.blueTeam;
- }
- if(index == 2) {
- return null;
- }
- return null;
- }
-
-}
diff --git a/src/me/yaruma/fightsystem/winconditions/WinconditionAllDead.java b/src/me/yaruma/fightsystem/winconditions/WinconditionAllDead.java
deleted file mode 100644
index c6c4cbe..0000000
--- a/src/me/yaruma/fightsystem/winconditions/WinconditionAllDead.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package me.yaruma.fightsystem.winconditions;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-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.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.PlayerDeathEvent;
-import org.bukkit.event.player.PlayerQuitEvent;
-
-public class WinconditionAllDead implements Listener {
-
- private final FightSystem instance = FightSystem.getPlugin();
-
- @EventHandler
- public void handlePlayerDeath(PlayerDeathEvent event) {
- if(!Config.AllDead) return;
- if(instance.getFightState() != FightState.PRE_RUNNING && instance.getFightState() != FightState.RUNNING) return;
- Player player = event.getEntity().getPlayer();
- if(Fight.getPlayerTeam(player) == null) return;
- FightTeam fightTeam = Fight.getPlayerTeam(player);
- fightTeam.getFightPlayer(player).setOut(true);
-
- if(fightTeam.allPlayersOut()) {
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer letzte Spieler aus " + fightTeam.getPrefix() + fightTeam.getName() + " §cist gestorben!");
- instance.setSpectateState(Fight.getOpposite(fightTeam));
- }
- }
-
- @EventHandler
- public void handlePlayerQuit(PlayerQuitEvent event) {
- if(!Config.AllDead) return;
- if(instance.getFightState() != FightState.PRE_RUNNING && instance.getFightState() != FightState.RUNNING) return;
- Player player = event.getPlayer();
- if(Fight.getPlayerTeam(player) == null) return;
- FightTeam fightTeam = Fight.getPlayerTeam(player);
- fightTeam.getFightPlayer(player).setOut(true);
-
- if(fightTeam.allPlayersOut()) {
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer letzte Spieler aus §6" + fightTeam.getPrefix() + fightTeam.getName() + " §chat den Kampf verlassen!");
- instance.setSpectateState(Fight.getOpposite(fightTeam));
- }
- }
-
-
-}
diff --git a/src/me/yaruma/fightsystem/winconditions/WinconditionCaptainDead.java b/src/me/yaruma/fightsystem/winconditions/WinconditionCaptainDead.java
deleted file mode 100644
index ff6ab9c..0000000
--- a/src/me/yaruma/fightsystem/winconditions/WinconditionCaptainDead.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package me.yaruma.fightsystem.winconditions;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-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.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.PlayerDeathEvent;
-import org.bukkit.event.player.PlayerQuitEvent;
-
-public class WinconditionCaptainDead implements Listener {
-
- private final FightSystem instance = FightSystem.getPlugin();
-
- @EventHandler
- public void handlePlayerDeath(PlayerDeathEvent event) {
- if(!Config.CaptainDead) return;
- if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
- Player player = event.getEntity().getPlayer();
- if(Fight.getPlayerTeam(player) == null) return;
- FightTeam fightTeam = Fight.getPlayerTeam(player);
- fightTeam.getFightPlayer(player).setOut(true);
-
- if(fightTeam.isPlayerLeader(player)) {
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Leader von " + fightTeam.getPrefix() + fightTeam.getName() + " §cist gestorben!");
- instance.setSpectateState(Fight.getOpposite(fightTeam));
- return;
- }
- }
-
- @EventHandler
- public void handlePlayerQuit(PlayerQuitEvent event) {
- if(!Config.CaptainDead) return;
- if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
- Player player = event.getPlayer();
- if(Fight.getPlayerTeam(player) == null) return;
- FightTeam fightTeam = Fight.getPlayerTeam(player);
- fightTeam.getFightPlayer(player).setOut(true);
-
- if(fightTeam.isPlayerLeader(player)) {
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Leader von " + fightTeam.getPrefix() + fightTeam.getName() + " §chat den Kampf verlassen!");
- instance.setSpectateState(Fight.getOpposite(fightTeam));
- }
- }
-
-
-}
diff --git a/src/me/yaruma/fightsystem/winconditions/WinconditionEntern.java b/src/me/yaruma/fightsystem/winconditions/WinconditionEntern.java
deleted file mode 100644
index d5624b0..0000000
--- a/src/me/yaruma/fightsystem/winconditions/WinconditionEntern.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package me.yaruma.fightsystem.winconditions;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.utils.Config;
-import me.yaruma.fightsystem.utils.countdown.Countdown;
-import me.yaruma.fightsystem.utils.countdown.FinishNoneEntern;
-import org.bukkit.Sound;
-
-public class WinconditionEntern {
-
- private static final FightSystem instance = FightSystem.getPlugin();
-
- public static void entern() {
- if(!Config.Entern) return;
-
- Countdown countdownTimeOver = new Countdown(Config.EnterPhaseBegin, new FinishNoneEntern(), Sound.BLOCK_NOTE_PLING, false);
- countdownTimeOver.startTimer(instance);
- }
-
-
-}
diff --git a/src/me/yaruma/fightsystem/winconditions/WinconditionTechKO.java b/src/me/yaruma/fightsystem/winconditions/WinconditionTechKO.java
deleted file mode 100644
index bb7c4d1..0000000
--- a/src/me/yaruma/fightsystem/winconditions/WinconditionTechKO.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package me.yaruma.fightsystem.winconditions;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.fight.Fight;
-import me.yaruma.fightsystem.fight.FightState;
-import me.yaruma.fightsystem.utils.Config;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.Material;
-
-import java.util.HashSet;
-import java.util.Iterator;
-
-public class WinconditionTechKO {
-
- private static HashSet teamRedWater = new HashSet<>();
- private static HashSet teamBlueWater = new HashSet<>();
- private static int taskID;
-
- public static void addWater() {
- if(!Config.TechKO) return;
- if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
-
- teamRedWater.clear();
- teamBlueWater.clear();
-
- int redMinX = Config.TeamRedCornerX;
- int redMinY = Config.TeamRedCornerY;
- int redMinZ = Config.TeamRedCornerZ;
- int redMaxX = (redMinX + Config.SchemsizeX);
- int redMaxY = (redMinY+ Config.SchemsizeY);
- int redMaxZ = (redMinZ + Config.SchemsizeZ);
-
- int blueMinX = Config.TeamBlueCornerX;
- int blueMinY = Config.TeamBlueCornerY;
- int blueMinZ = Config.TeamBlueCornerZ;
- int blueMaxX = (blueMinX + Config.SchemsizeX);
- int blueMaxY = (blueMinY + Config.SchemsizeY);
- int blueMaxZ = (blueMinZ + Config.SchemsizeZ);
-
- //Team Red
- for(int x = redMinX; x <= redMaxX; x++) {
- for(int y = redMinY; y <= redMaxY; y++) {
- for(int z = redMinZ; z <= redMaxZ; z++) {
- Location location = new Location(Bukkit.getWorlds().get(0), x, y, z);
- if(location.getBlock().getType() == Material.WATER
- || location.getBlock().getType() == Material.STATIONARY_WATER)
- teamRedWater.add(location);
- }
- }
- }
-
- //Team Blue
- for(int x = blueMinX; x <= blueMaxX; x++) {
- for(int y = blueMinY; y <= blueMaxY; y++) {
- for(int z = blueMinZ; z <= blueMaxZ; z++) {
- Location location = new Location(Bukkit.getWorlds().get(0), x, y, z);
- if(location.getBlock().getType() == Material.WATER
- || location.getBlock().getType() == Material.STATIONARY_WATER)
- teamBlueWater.add(location);
- }
- }
- }
-
- if(teamRedWater.isEmpty()) {
- Bukkit.getScheduler().cancelTask(getTaskID());
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + Config.TeamRedPrefix + Config.TeamRedName + " §6ist Tech K.O.!");
- FightSystem.getPlugin().setSpectateState(Fight.getBlueTeam());
- FightSystem.getPlugin().getWaterRemover().stop();
- } else if(teamBlueWater.isEmpty()) {
- Bukkit.getScheduler().cancelTask(getTaskID());
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + Config.TeamBluePrefix + Config.TeamBlueName + " §6ist Tech K.O.!");
- FightSystem.getPlugin().setSpectateState(Fight.getRedTeam());
- FightSystem.getPlugin().getWaterRemover().stop();
- }
- }
-
- public static void removeWater() {
- if(!Config.TechKO) return;
- if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
-
- //Team Red
- Iterator itrRed = teamRedWater.iterator();
- while (itrRed.hasNext()) {
- Location location = (Location) itrRed.next();
- if(location.getBlock().getType() != Material.WATER && location.getBlock().getType() != Material.STATIONARY_WATER) {
- itrRed.remove();
- }
- }
- if(teamRedWater.isEmpty()) {
- Bukkit.getScheduler().cancelTask(getTaskID());
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + Config.TeamRedPrefix + Config.TeamRedName + " §6ist Tech K.O.!");
- FightSystem.getPlugin().setSpectateState(Fight.getBlueTeam());
- FightSystem.getPlugin().getWaterRemover().stop();
- }
-
- //Team Blue
- Iterator itrBlue = teamBlueWater.iterator();
- while (itrBlue.hasNext()) {
- Location location = (Location) itrBlue.next();
- if(location.getBlock().getType() != Material.WATER && location.getBlock().getType() != Material.STATIONARY_WATER) {
- itrBlue.remove();
- }
- }
- if(teamBlueWater.isEmpty()) {
- Bukkit.getScheduler().cancelTask(getTaskID());
- Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + Config.TeamBluePrefix + Config.TeamBlueName + " §6ist Tech K.O.!");
- FightSystem.getPlugin().setSpectateState(Fight.getRedTeam());
- FightSystem.getPlugin().getWaterRemover().stop();
- }
- }
-
- public static void startAutoChecker() {
- if(!Config.TechKO) return;
- taskID = Bukkit.getScheduler().scheduleAsyncRepeatingTask(FightSystem.getPlugin(), WinconditionTechKO::addWater, 400, 400);
- }
-
- public static int getTaskID() {
- return taskID;
- }
-}
diff --git a/src/me/yaruma/fightsystem/winconditions/WinconditionTimeout.java b/src/me/yaruma/fightsystem/winconditions/WinconditionTimeout.java
deleted file mode 100644
index 6f87140..0000000
--- a/src/me/yaruma/fightsystem/winconditions/WinconditionTimeout.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package me.yaruma.fightsystem.winconditions;
-
-import me.yaruma.fightsystem.FightSystem;
-import me.yaruma.fightsystem.utils.Config;
-import me.yaruma.fightsystem.utils.countdown.Countdown;
-import me.yaruma.fightsystem.utils.countdown.FinishTimeOver;
-import org.bukkit.Sound;
-
-public class WinconditionTimeout {
-
- private static final FightSystem instance = FightSystem.getPlugin();
-
- public static void timeout() {
- if(!Config.Timeout) return;
-
- Countdown countdownTimeOver = new Countdown(Config.TimeoutTime, new FinishTimeOver(), Sound.BLOCK_NOTE_BASS, false);
- countdownTimeOver.startTimer(instance);
- }
-
-
-}
diff --git a/src/plugin.yml b/src/plugin.yml
index 83a65c5..d8819cd 100644
--- a/src/plugin.yml
+++ b/src/plugin.yml
@@ -1,7 +1,7 @@
name: FightSystem
version: 1.0
author: [Yaruma3341, Lixfel]
-main: me.yaruma.fightsystem.FightSystem
+main: de.steamwar.fightsystem.FightSystem
depend: [CoreSystem, WorldEdit, FastAsyncWorldEdit, ProtocolLib]
commands:
@@ -11,4 +11,6 @@ commands:
leave:
invite:
ready:
- kit:
\ No newline at end of file
+ kit:
+ remove:
+ leader:
\ No newline at end of file