|
@@ -18,7 +18,6 @@
|
|
|
|
|
|
package de.butzlabben.missilewars.game;
|
|
package de.butzlabben.missilewars.game;
|
|
|
|
|
|
-import com.google.common.base.Preconditions;
|
|
|
|
import de.butzlabben.missilewars.Logger;
|
|
import de.butzlabben.missilewars.Logger;
|
|
import de.butzlabben.missilewars.MissileWars;
|
|
import de.butzlabben.missilewars.MissileWars;
|
|
import de.butzlabben.missilewars.configuration.Config;
|
|
import de.butzlabben.missilewars.configuration.Config;
|
|
@@ -30,7 +29,9 @@ import de.butzlabben.missilewars.event.GameStopEvent;
|
|
import de.butzlabben.missilewars.game.enums.GameResult;
|
|
import de.butzlabben.missilewars.game.enums.GameResult;
|
|
import de.butzlabben.missilewars.game.enums.GameState;
|
|
import de.butzlabben.missilewars.game.enums.GameState;
|
|
import de.butzlabben.missilewars.game.enums.MapChooseProcedure;
|
|
import de.butzlabben.missilewars.game.enums.MapChooseProcedure;
|
|
|
|
+import de.butzlabben.missilewars.game.enums.VoteState;
|
|
import de.butzlabben.missilewars.game.equipment.EquipmentManager;
|
|
import de.butzlabben.missilewars.game.equipment.EquipmentManager;
|
|
|
|
+import de.butzlabben.missilewars.game.equipment.PlayerEquipmentRandomizer;
|
|
import de.butzlabben.missilewars.game.misc.MotdManager;
|
|
import de.butzlabben.missilewars.game.misc.MotdManager;
|
|
import de.butzlabben.missilewars.game.misc.ScoreboardManager;
|
|
import de.butzlabben.missilewars.game.misc.ScoreboardManager;
|
|
import de.butzlabben.missilewars.game.missile.Missile;
|
|
import de.butzlabben.missilewars.game.missile.Missile;
|
|
@@ -51,19 +52,9 @@ import de.butzlabben.missilewars.util.PlayerDataProvider;
|
|
import de.butzlabben.missilewars.util.geometry.GameArea;
|
|
import de.butzlabben.missilewars.util.geometry.GameArea;
|
|
import de.butzlabben.missilewars.util.geometry.Geometry;
|
|
import de.butzlabben.missilewars.util.geometry.Geometry;
|
|
import de.butzlabben.missilewars.util.serialization.Serializer;
|
|
import de.butzlabben.missilewars.util.serialization.Serializer;
|
|
-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.Getter;
|
|
import lombok.ToString;
|
|
import lombok.ToString;
|
|
-import org.bukkit.Bukkit;
|
|
|
|
-import org.bukkit.GameMode;
|
|
|
|
-import org.bukkit.Location;
|
|
|
|
-import org.bukkit.Material;
|
|
|
|
-import org.bukkit.Sound;
|
|
|
|
-import org.bukkit.World;
|
|
|
|
|
|
+import org.bukkit.*;
|
|
import org.bukkit.entity.Fireball;
|
|
import org.bukkit.entity.Fireball;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.HandlerList;
|
|
import org.bukkit.event.HandlerList;
|
|
@@ -72,6 +63,12 @@ import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.scheduler.BukkitTask;
|
|
import org.bukkit.scheduler.BukkitTask;
|
|
import org.bukkit.util.Vector;
|
|
import org.bukkit.util.Vector;
|
|
|
|
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.UUID;
|
|
|
|
+import java.util.function.Consumer;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* @author Butzlabben
|
|
* @author Butzlabben
|
|
* @since 01.01.2018
|
|
* @since 01.01.2018
|
|
@@ -159,18 +156,24 @@ public class Game {
|
|
// choose the game arena
|
|
// choose the game arena
|
|
if (lobby.getMapChooseProcedure() == MapChooseProcedure.FIRST) {
|
|
if (lobby.getMapChooseProcedure() == MapChooseProcedure.FIRST) {
|
|
setArena(lobby.getArenas().get(0));
|
|
setArena(lobby.getArenas().get(0));
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ finalStartGame();
|
|
|
|
+
|
|
} else if (lobby.getMapChooseProcedure() == MapChooseProcedure.MAPCYCLE) {
|
|
} else if (lobby.getMapChooseProcedure() == MapChooseProcedure.MAPCYCLE) {
|
|
final int lastMapIndex = cycles.getOrDefault(lobby.getName(), -1);
|
|
final int lastMapIndex = cycles.getOrDefault(lobby.getName(), -1);
|
|
List<Arena> arenas = lobby.getArenas();
|
|
List<Arena> arenas = lobby.getArenas();
|
|
int index = lastMapIndex >= arenas.size() - 1 ? 0 : lastMapIndex + 1;
|
|
int index = lastMapIndex >= arenas.size() - 1 ? 0 : lastMapIndex + 1;
|
|
cycles.put(lobby.getName(), index);
|
|
cycles.put(lobby.getName(), index);
|
|
setArena(arenas.get(index));
|
|
setArena(arenas.get(index));
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ finalStartGame();
|
|
|
|
+
|
|
} else if (lobby.getMapChooseProcedure() == MapChooseProcedure.MAPVOTING) {
|
|
} else if (lobby.getMapChooseProcedure() == MapChooseProcedure.MAPVOTING) {
|
|
if (mapVoting.onlyOneArenaFound()) {
|
|
if (mapVoting.onlyOneArenaFound()) {
|
|
setArena(lobby.getArenas().get(0));
|
|
setArena(lobby.getArenas().get(0));
|
|
Logger.WARN.log("Only one arena was found for the lobby \"" + lobby.getName() + "\". The configured map voting was skipped.");
|
|
Logger.WARN.log("Only one arena was found for the lobby \"" + lobby.getName() + "\". The configured map voting was skipped.");
|
|
|
|
+
|
|
|
|
+ finalStartGame();
|
|
} else {
|
|
} else {
|
|
mapVoting.startVote();
|
|
mapVoting.startVote();
|
|
}
|
|
}
|
|
@@ -178,18 +181,27 @@ public class Game {
|
|
|
|
|
|
scoreboardManager = new ScoreboardManager(this);
|
|
scoreboardManager = new ScoreboardManager(this);
|
|
scoreboardManager.createScoreboard();
|
|
scoreboardManager.createScoreboard();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void finalStartGame() {
|
|
|
|
+ if (this.arena == null) {
|
|
|
|
+ throw new IllegalStateException("The arena is not yet set");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ scoreboardManager.resetScoreboard();
|
|
|
|
|
|
equipmentManager = new EquipmentManager(this);
|
|
equipmentManager = new EquipmentManager(this);
|
|
|
|
+ equipmentManager.createGameItems();
|
|
|
|
|
|
Logger.DEBUG.log("Making game ready");
|
|
Logger.DEBUG.log("Making game ready");
|
|
++fights;
|
|
++fights;
|
|
- if (fights >= Config.getFightRestart())
|
|
|
|
|
|
+ if (fights >= Config.getFightRestart()) {
|
|
restart = true;
|
|
restart = true;
|
|
|
|
+ }
|
|
|
|
|
|
FightStats.checkTables();
|
|
FightStats.checkTables();
|
|
Logger.DEBUG.log("Fights: " + fights);
|
|
Logger.DEBUG.log("Fights: " + fights);
|
|
|
|
|
|
- equipmentManager.createGameItems();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
private void updateGameListener(GameBoundListener newListener) {
|
|
private void updateGameListener(GameBoundListener newListener) {
|
|
@@ -505,6 +517,9 @@ public class Game {
|
|
* @return true, if it's in the game world
|
|
* @return true, if it's in the game world
|
|
*/
|
|
*/
|
|
public boolean isInGameWorld(Location location) {
|
|
public boolean isInGameWorld(Location location) {
|
|
|
|
+ // Is possible during the map voting phase:
|
|
|
|
+ if (gameArea == null) return false;
|
|
|
|
+
|
|
return Geometry.isInWorld(location, gameArea.getWorld());
|
|
return Geometry.isInWorld(location, gameArea.getWorld());
|
|
}
|
|
}
|
|
|
|
|
|
@@ -558,6 +573,8 @@ public class Game {
|
|
equipmentManager.sendGameItems(player, false);
|
|
equipmentManager.sendGameItems(player, false);
|
|
setPlayerAttributes(player);
|
|
setPlayerAttributes(player);
|
|
|
|
|
|
|
|
+ mwPlayer.setRandomGameEquipment(new PlayerEquipmentRandomizer(mwPlayer, this));
|
|
|
|
+
|
|
playerTasks.put(player.getUniqueId(),
|
|
playerTasks.put(player.getUniqueId(),
|
|
Bukkit.getScheduler().runTaskTimer(MissileWars.getInstance(), mwPlayer, 40, 20));
|
|
Bukkit.getScheduler().runTaskTimer(MissileWars.getInstance(), mwPlayer, 40, 20));
|
|
}
|
|
}
|
|
@@ -629,7 +646,6 @@ public class Game {
|
|
}
|
|
}
|
|
|
|
|
|
public void setArena(Arena arena) {
|
|
public void setArena(Arena arena) {
|
|
- Preconditions.checkNotNull(arena);
|
|
|
|
if (this.arena != null) {
|
|
if (this.arena != null) {
|
|
throw new IllegalStateException("Arena already set");
|
|
throw new IllegalStateException("Arena already set");
|
|
}
|
|
}
|