diff --git a/TowerRun/src/de/steamwar/towerrun/TowerRun.java b/TowerRun/src/de/steamwar/towerrun/TowerRun.java index 23f00488..7e6df112 100644 --- a/TowerRun/src/de/steamwar/towerrun/TowerRun.java +++ b/TowerRun/src/de/steamwar/towerrun/TowerRun.java @@ -73,7 +73,6 @@ public class TowerRun extends JavaPlugin { new LobbyListener(); new IngameListener(); new GlobalListener(); - new LobbyListener(); new NotLobbyListener(); final LobbyCountdown lobbyCountdown = new LobbyCountdown(); new EndCountdown(lobbyCountdown); diff --git a/TowerRun/src/de/steamwar/towerrun/config/Config.java b/TowerRun/src/de/steamwar/towerrun/config/Config.java index 91fb02b4..fe6acd07 100644 --- a/TowerRun/src/de/steamwar/towerrun/config/Config.java +++ b/TowerRun/src/de/steamwar/towerrun/config/Config.java @@ -19,6 +19,8 @@ package de.steamwar.towerrun.config; +import de.steamwar.sql.Event; +import de.steamwar.sql.EventFight; import de.steamwar.towerrun.TowerRun; import lombok.experimental.UtilityClass; import org.bukkit.Bukkit; @@ -41,6 +43,12 @@ public class Config { private static final int EVENT_KAMPF_ID; + // Event + public static final EventFight EVENT_FIGHT; + public static final int EVENT_TEAM_BLUE_ID; + public static final int EVENT_TEAM_RED_ID; + public static final int EVENT_MAXIMUM_TEAM_MEMBERS; + static { File configFile = new File(TowerRun.getInstance().getDataFolder(), "config.yml"); if (!configFile.exists()) { @@ -57,9 +65,34 @@ public class Config { DESTROYABLE_BLOCKS = EnumSet.copyOf(config.getStringList("destroyable").stream().map(Material::valueOf).collect(Collectors.toSet())); EVENT_KAMPF_ID = Integer.parseInt(System.getProperty("fightID", "0")); + + if (event()) { + EVENT_FIGHT = EventFight.get(EVENT_KAMPF_ID); + + if (EVENT_FIGHT == null) { + Bukkit.shutdown(); + throw new IllegalStateException("Event not found"); + } + + Event event = Event.get(EVENT_FIGHT.getEventID()); + + EVENT_TEAM_BLUE_ID = EVENT_FIGHT.getTeamBlue(); + EVENT_TEAM_RED_ID = EVENT_FIGHT.getTeamRed(); + EVENT_MAXIMUM_TEAM_MEMBERS = event.getMaximumTeamMembers(); + } else { + EVENT_FIGHT = null; + + EVENT_TEAM_BLUE_ID = 0; + EVENT_TEAM_RED_ID = 0; + EVENT_MAXIMUM_TEAM_MEMBERS = Integer.MAX_VALUE; + } } public static boolean test() { return EVENT_KAMPF_ID == -1; } + + public static boolean event() { + return EVENT_KAMPF_ID > 0; + } } diff --git a/TowerRun/src/de/steamwar/towerrun/game/TowerRunGame.java b/TowerRun/src/de/steamwar/towerrun/game/TowerRunGame.java index c83138d4..2c014cb5 100644 --- a/TowerRun/src/de/steamwar/towerrun/game/TowerRunGame.java +++ b/TowerRun/src/de/steamwar/towerrun/game/TowerRunGame.java @@ -20,7 +20,9 @@ package de.steamwar.towerrun.game; import de.steamwar.core.CraftbukkitWrapper; +import de.steamwar.sql.SteamwarUser; import de.steamwar.towerrun.TowerRun; +import de.steamwar.towerrun.config.Config; import de.steamwar.towerrun.config.WorldConfig; import de.steamwar.towerrun.state.GameState; import de.steamwar.towerrun.state.GameStates; @@ -64,7 +66,6 @@ public class TowerRunGame { public static void start() { if (GameState.getCurrentState() == GameStates.GENERATING_TOWER) { - PLAYERS_ALIVE.addAll(TowerRunPlayer.getAll()); PLAYERS_ALIVE.forEach(p -> { p.reset(); p.player().setGameMode(GameMode.SURVIVAL); @@ -108,6 +109,10 @@ public class TowerRunGame { PLAYERS_ALIVE.clear(); Bukkit.getOnlinePlayers().forEach(player -> player.sendTitle(TowerRun.getMessage().parse("GAME_TIE", player), "", 10, 70, 20)); GameState.nextState(); + + if (Config.event()) { + Config.EVENT_FIGHT.setErgebnis(3); + } } public static void win(TowerRunPlayer tPlayer) { @@ -120,6 +125,10 @@ public class TowerRunGame { player.playSound(player.getLocation(), Sound.ENTITY_ENDER_DRAGON_DEATH, 1, 1); }); GameState.nextState(); + + if (Config.event()) { + Config.EVENT_FIGHT.setErgebnis(SteamwarUser.get(tPlayer.player().getUniqueId()).getTeam() == Config.EVENT_TEAM_BLUE_ID ? 1 : 2); + } } public static void reset() { diff --git a/TowerRun/src/de/steamwar/towerrun/listener/GlobalListener.java b/TowerRun/src/de/steamwar/towerrun/listener/GlobalListener.java index 353adc20..b8256d80 100644 --- a/TowerRun/src/de/steamwar/towerrun/listener/GlobalListener.java +++ b/TowerRun/src/de/steamwar/towerrun/listener/GlobalListener.java @@ -38,11 +38,6 @@ public class GlobalListener extends GameStateBukkitListener { super(EnumSet.allOf(GameStates.class)); } - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - TowerRunPlayer.get(event.getPlayer()); - } - @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { if (TowerRunGame.isAlive(TowerRunPlayer.get(event.getPlayer()))) { diff --git a/TowerRun/src/de/steamwar/towerrun/listener/LobbyListener.java b/TowerRun/src/de/steamwar/towerrun/listener/LobbyListener.java index 52d600ca..c93bc4bb 100644 --- a/TowerRun/src/de/steamwar/towerrun/listener/LobbyListener.java +++ b/TowerRun/src/de/steamwar/towerrun/listener/LobbyListener.java @@ -19,8 +19,12 @@ package de.steamwar.towerrun.listener; +import de.steamwar.sql.SteamwarUser; import de.steamwar.towerrun.TowerRun; +import de.steamwar.towerrun.config.Config; import de.steamwar.towerrun.config.WorldConfig; +import de.steamwar.towerrun.game.TowerRunGame; +import de.steamwar.towerrun.game.TowerRunPlayer; import de.steamwar.towerrun.state.GameStateBukkitListener; import de.steamwar.towerrun.state.GameStates; import org.bukkit.GameMode; @@ -34,6 +38,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import java.util.EnumSet; +import java.util.HashMap; public class LobbyListener extends GameStateBukkitListener { public LobbyListener() { @@ -43,6 +48,7 @@ public class LobbyListener extends GameStateBukkitListener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); + if (TowerRun.getTowerGenerator() != null) { player.teleport(TowerRun.getTowerGenerator().getSpawn()); player.setGameMode(GameMode.SPECTATOR); @@ -50,6 +56,22 @@ public class LobbyListener extends GameStateBukkitListener { player.teleport(WorldConfig.SPAWN); player.setGameMode(GameMode.SURVIVAL); } + + if (Config.event()) { + SteamwarUser user = SteamwarUser.get(player.getUniqueId()); + int team = user.getTeam(); + + if (team != Config.EVENT_TEAM_BLUE_ID && team != Config.EVENT_TEAM_RED_ID) { + player.setGameMode(GameMode.SPECTATOR); + return; + } + + if (TowerRunGame.PLAYERS_ALIVE.stream().map(towerRunPlayer -> SteamwarUser.get(towerRunPlayer.player().getUniqueId()).getTeam()).filter(integer -> integer == team).count() < Config.EVENT_MAXIMUM_TEAM_MEMBERS) { + TowerRunGame.PLAYERS_ALIVE.add(TowerRunPlayer.get(player)); + } + } else { + TowerRunGame.PLAYERS_ALIVE.add(TowerRunPlayer.get(player)); + } } @EventHandler