|
@@ -31,7 +31,6 @@ import de.butzlabben.missilewars.listener.EndListener;
|
|
|
import de.butzlabben.missilewars.listener.GameBoundListener;
|
|
|
import de.butzlabben.missilewars.listener.GameListener;
|
|
|
import de.butzlabben.missilewars.listener.LobbyListener;
|
|
|
-import de.butzlabben.missilewars.util.MoneyUtil;
|
|
|
import de.butzlabben.missilewars.util.MotdManager;
|
|
|
import de.butzlabben.missilewars.util.ScoreboardManager;
|
|
|
import de.butzlabben.missilewars.util.serialization.Serializer;
|
|
@@ -40,26 +39,14 @@ import de.butzlabben.missilewars.wrapper.abstracts.Arena;
|
|
|
import de.butzlabben.missilewars.wrapper.abstracts.GameWorld;
|
|
|
import de.butzlabben.missilewars.wrapper.abstracts.Lobby;
|
|
|
import de.butzlabben.missilewars.wrapper.abstracts.MapChooseProcedure;
|
|
|
-import de.butzlabben.missilewars.wrapper.event.GameEndEvent;
|
|
|
import de.butzlabben.missilewars.wrapper.event.GameStartEvent;
|
|
|
import de.butzlabben.missilewars.wrapper.event.PlayerArenaJoinEvent;
|
|
|
import de.butzlabben.missilewars.wrapper.game.Team;
|
|
|
import de.butzlabben.missilewars.wrapper.player.MWPlayer;
|
|
|
import de.butzlabben.missilewars.wrapper.stats.FightStats;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.UUID;
|
|
|
-import java.util.function.Consumer;
|
|
|
import lombok.Getter;
|
|
|
-import lombok.Setter;
|
|
|
import lombok.ToString;
|
|
|
-import org.bukkit.Bukkit;
|
|
|
-import org.bukkit.ChatColor;
|
|
|
-import org.bukkit.GameMode;
|
|
|
-import org.bukkit.Location;
|
|
|
-import org.bukkit.Material;
|
|
|
-import org.bukkit.World;
|
|
|
+import org.bukkit.*;
|
|
|
import org.bukkit.enchantments.Enchantment;
|
|
|
import org.bukkit.entity.Player;
|
|
|
import org.bukkit.event.HandlerList;
|
|
@@ -68,6 +55,12 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|
|
import org.bukkit.scheduler.BukkitTask;
|
|
|
import org.bukkit.scoreboard.Scoreboard;
|
|
|
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.UUID;
|
|
|
+import java.util.function.Consumer;
|
|
|
+
|
|
|
/**
|
|
|
* @author Butzlabben
|
|
|
* @since 01.01.2018
|
|
@@ -88,7 +81,6 @@ public class Game {
|
|
|
private GameState state = GameState.LOBBY;
|
|
|
private Team team1;
|
|
|
private Team team2;
|
|
|
- @Setter private boolean draw = true;
|
|
|
@Getter private boolean ready = false;
|
|
|
private boolean restart = false;
|
|
|
private GameWorld gameWorld;
|
|
@@ -265,32 +257,24 @@ public class Game {
|
|
|
}
|
|
|
|
|
|
Logger.DEBUG.log("Stopping for players");
|
|
|
- int money = arena.getMoney().getDraw();
|
|
|
- for (Player all : Bukkit.getOnlinePlayers()) {
|
|
|
- if (!isIn(all.getLocation()))
|
|
|
- continue;
|
|
|
- Logger.DEBUG.log("Stopping for: " + all.getName());
|
|
|
+ for (Player player : gameWorld.getWorld().getPlayers()) {
|
|
|
|
|
|
- all.setGameMode(GameMode.SPECTATOR);
|
|
|
- all.teleport(arena.getSpectatorSpawn());
|
|
|
- all.setHealth(all.getMaxHealth());
|
|
|
+ Logger.DEBUG.log("Stopping for: " + player.getName());
|
|
|
+ player.setGameMode(GameMode.SPECTATOR);
|
|
|
+ player.teleport(arena.getSpectatorSpawn());
|
|
|
+ player.setHealth(player.getMaxHealth());
|
|
|
|
|
|
- VersionUtil.playDraw(all);
|
|
|
- if (draw) {
|
|
|
- if (getPlayer(all).getTeam() == null)
|
|
|
- continue;
|
|
|
- MoneyUtil.giveMoney(all.getUniqueId(), money);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
stopTimer();
|
|
|
-
|
|
|
HandlerList.unregisterAll(listener);
|
|
|
GameBoundListener listener = new EndListener(this);
|
|
|
+
|
|
|
try {
|
|
|
Bukkit.getPluginManager().registerEvents(listener, MissileWars.getInstance());
|
|
|
} catch (Exception ignored) {
|
|
|
}
|
|
|
+
|
|
|
this.listener = listener;
|
|
|
|
|
|
timer = new EndTimer(this);
|
|
@@ -298,16 +282,15 @@ public class Game {
|
|
|
scoreboardManager.removeScoreboard();
|
|
|
|
|
|
// Change MOTD
|
|
|
- if (!Config.isMultipleLobbies())
|
|
|
+ if (!Config.isMultipleLobbies()) {
|
|
|
MotdManager.getInstance().updateMOTD(this);
|
|
|
+ }
|
|
|
|
|
|
if (getArena().isSaveStatistics()) {
|
|
|
FightStats stats = new FightStats(this);
|
|
|
stats.insert();
|
|
|
}
|
|
|
|
|
|
- if (draw) Bukkit.getPluginManager().callEvent(new GameEndEvent(this, null));
|
|
|
-
|
|
|
Logger.DEBUG.log("Stopped completely");
|
|
|
}
|
|
|
|
|
@@ -327,10 +310,6 @@ public class Game {
|
|
|
restart = true;
|
|
|
}
|
|
|
|
|
|
- public void draw(boolean draw) {
|
|
|
- this.draw = draw;
|
|
|
- }
|
|
|
-
|
|
|
public void disable() {
|
|
|
if (state == GameState.INGAME) stopGame();
|
|
|
|
|
@@ -464,33 +443,64 @@ public class Game {
|
|
|
return mwPlayer;
|
|
|
}
|
|
|
|
|
|
- public void sendGameResult(Game game) {
|
|
|
-
|
|
|
- // Send all player of both teams her money, even of offline or online.
|
|
|
- team1.sendMoney();
|
|
|
- team2.sendMoney();
|
|
|
+ /**
|
|
|
+ * This method manages the message output of the game result.
|
|
|
+ * Each player who is currently in the arena world gets a
|
|
|
+ * customized message.
|
|
|
+ */
|
|
|
+ public void sendGameResult() {
|
|
|
|
|
|
- // Send all online players of the game world her own game result message
|
|
|
- // as title / subtitle.
|
|
|
for (Player player : gameWorld.getWorld().getPlayers()) {
|
|
|
- MWPlayer missileWarsPlayer = game.getPlayer(player);
|
|
|
+ MWPlayer missileWarsPlayer = getPlayer(player);
|
|
|
|
|
|
+ // team member of team 1
|
|
|
if (team1.isMember(missileWarsPlayer)) {
|
|
|
- team1.sendGameResultTitle(player);
|
|
|
+ team1.sendMoney(missileWarsPlayer);
|
|
|
+ team1.sendGameResultTitle(missileWarsPlayer);
|
|
|
+ team1.sendGameResultSound(missileWarsPlayer);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- } else if (team2.isMember(missileWarsPlayer)) {
|
|
|
- team2.sendGameResultTitle(player);
|
|
|
+ // team member of team 2
|
|
|
+ if (team2.isMember(missileWarsPlayer)) {
|
|
|
+ team2.sendMoney(missileWarsPlayer);
|
|
|
+ team2.sendGameResultTitle(missileWarsPlayer);
|
|
|
+ team2.sendGameResultSound(missileWarsPlayer);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- } else {
|
|
|
+ // spectator
|
|
|
+ if (player.isOnline()) {
|
|
|
+ sendNeutralGameResultTitle(player);
|
|
|
+ }
|
|
|
|
|
|
- if (team1.isWon()) {
|
|
|
- team1.sendNeutralGameResultTitle(player);
|
|
|
- } else if (team2.isWon()) {
|
|
|
- team2.sendNeutralGameResultTitle(player);
|
|
|
- }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * This method sends the players the title / subtitle of the
|
|
|
+ * game result there are not in a team (=spectator).
|
|
|
+ */
|
|
|
+ public void sendNeutralGameResultTitle(Player player) {
|
|
|
+ String title;
|
|
|
+ String subTitle;
|
|
|
+
|
|
|
+ if (team1.getGameResult() == GameResult.WIN) {
|
|
|
+ title = MessageConfig.getNativeMessage("title_won").replace("%team%", team1.getName());
|
|
|
+ subTitle = MessageConfig.getNativeMessage("subtitle_won");
|
|
|
+
|
|
|
+ } else if (team2.getGameResult() == GameResult.WIN) {
|
|
|
+ title = MessageConfig.getNativeMessage("title_won").replace("%team%", team2.getName());
|
|
|
+ subTitle = MessageConfig.getNativeMessage("subtitle_won");
|
|
|
+
|
|
|
+ } else {
|
|
|
+ title = MessageConfig.getNativeMessage("title_draw");
|
|
|
+ subTitle = MessageConfig.getNativeMessage("subtitle_draw");
|
|
|
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
+ VersionUtil.sendTitle(player, title, subTitle);
|
|
|
}
|
|
|
+
|
|
|
}
|