summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/game')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/Board.java225
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/Disguiser.java14
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/EntityHider.java6
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/Game.java89
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java34
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java45
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/events/Glow.java24
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/ChatHandler.java2
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java17
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/DisguiseHandler.java3
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java2
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/InventoryHandler.java38
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java21
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java11
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java1
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/WorldInteractHandler.java48
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/util/Status.java19
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/util/WinType.java19
18 files changed, 313 insertions, 305 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java
index 55dfa3c..2050f33 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java
@@ -1,22 +1,3 @@
-/*
- * This file is part of Kenshins Hide and Seek
- *
- * Copyright (c) 2021 Tyler Murphy.
- *
- * Kenshins Hide and Seek free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * he Free Software Foundation version 3.
- *
- * Kenshins Hide and Seek is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
package net.tylermurphy.hideAndSeek.game;
import net.tylermurphy.hideAndSeek.Main;
@@ -33,114 +14,133 @@ import java.util.*;
import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Leaderboard.*;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-@SuppressWarnings("deprecation")
public class Board {
- private final List<String> Hider = new ArrayList<>(), Seeker = new ArrayList<>(), Spectator = new ArrayList<>();
- private final Map<String, Player> playerList = new HashMap<>();
- private final Map<String, CustomBoard> customBoards = new HashMap<>();
- private final Map<String, Integer> hider_kills = new HashMap<>(), seeker_kills = new HashMap<>(), hider_deaths = new HashMap<>(), seeker_deaths = new HashMap<>();
+ private enum Type {
+ HIDER,
+ SEEKER,
+ SPECTATOR,
+ }
+
+ private UUID initialSeeker = null;
+ private final Map<UUID, Type> Players = new HashMap<>();
+ private final Map<UUID, CustomBoard> customBoards = new HashMap<>();
+ private final Map<UUID, Integer> hider_kills = new HashMap<>(), seeker_kills = new HashMap<>(), hider_deaths = new HashMap<>(), seeker_deaths = new HashMap<>();
public boolean contains(Player player) {
- return playerList.containsKey(player.getUniqueId().toString());
+ return Players.containsKey(player.getUniqueId());
}
public boolean isHider(Player player) {
- return Hider.contains(player.getUniqueId().toString());
+ return isHider(player.getUniqueId());
}
public boolean isHider(UUID uuid) {
- return Hider.contains(uuid.toString());
+ if(!Players.containsKey(uuid)) return false;
+ return Players.get(uuid) == Type.HIDER;
}
public boolean isSeeker(Player player) {
- return Seeker.contains(player.getUniqueId().toString());
+ return isSeeker(player.getUniqueId());
}
public boolean isSeeker(UUID uuid) {
- return Seeker.contains(uuid.toString());
+ if(!Players.containsKey(uuid)) return false;
+ return Players.get(uuid) == Type.SEEKER;
}
public boolean isSpectator(Player player) {
- return Spectator.contains(player.getUniqueId().toString());
+ return isSpectator(player.getUniqueId());
+ }
+
+ public boolean isSpectator(UUID uuid) {
+ if(!Players.containsKey(uuid)) return false;
+ return Players.get(uuid) == Type.SPECTATOR;
}
public int sizeHider() {
- return Hider.size();
+ return getHiders().size();
}
public int sizeSeeker() {
- return Seeker.size();
+ return getSeekers().size();
}
public int size() {
- return playerList.values().size();
+ return getPlayers().size();
}
public List<Player> getHiders() {
- return Hider.stream().filter(Objects::nonNull).map(playerList::get).collect(Collectors.toList());
+ return Players.keySet().stream()
+ .filter(s -> Players.get(s) == Type.HIDER)
+ .map(Bukkit::getPlayer)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
}
public List<Player> getSeekers() {
- return Seeker.stream().filter(Objects::nonNull).map(playerList::get).collect(Collectors.toList());
- }
-
- public Player getFirstSeeker() {
- return playerList.get(Seeker.get(0));
+ return Players.keySet().stream()
+ .filter(s -> Players.get(s) == Type.SEEKER)
+ .map(Bukkit::getPlayer)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
}
public List<Player> getSpectators() {
- return Spectator.stream().filter(Objects::nonNull).map(playerList::get).collect(Collectors.toList());
+ return Players.keySet().stream()
+ .filter(s -> Players.get(s) == Type.SPECTATOR)
+ .map(Bukkit::getPlayer)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
}
public List<Player> getPlayers() {
- return playerList.values().stream().filter(Objects::nonNull).collect(Collectors.toList());
+ return Players.keySet().stream()
+ .map(Bukkit::getPlayer)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ }
+
+ public Player getFirstSeeker() {
+ if(initialSeeker == null) return null;
+ return Bukkit.getPlayer(initialSeeker);
}
public Player getPlayer(UUID uuid) {
- return playerList.get(uuid.toString());
+ if(!Players.containsKey(uuid)) {
+ return null;
+ }
+ return Bukkit.getPlayer(uuid);
}
public void addHider(Player player) {
- Hider.add(player.getUniqueId().toString());
- Seeker.remove(player.getUniqueId().toString());
- Spectator.remove(player.getUniqueId().toString());
- playerList.put(player.getUniqueId().toString(), player);
+ Players.put(player.getUniqueId(), Type.HIDER);
}
public void addSeeker(Player player) {
- Hider.remove(player.getUniqueId().toString());
- Seeker.add(player.getUniqueId().toString());
- Spectator.remove(player.getUniqueId().toString());
- playerList.put(player.getUniqueId().toString(), player);
+ if(initialSeeker == null) {
+ initialSeeker = player.getUniqueId();
+ }
+ Players.put(player.getUniqueId(), Type.SEEKER);
}
public void addSpectator(Player player) {
- Hider.remove(player.getUniqueId().toString());
- Seeker.remove(player.getUniqueId().toString());
- Spectator.add(player.getUniqueId().toString());
- playerList.put(player.getUniqueId().toString(), player);
+ Players.put(player.getUniqueId(), Type.SPECTATOR);
}
public void remove(Player player) {
- Hider.remove(player.getUniqueId().toString());
- Seeker.remove(player.getUniqueId().toString());
- Spectator.remove(player.getUniqueId().toString());
- playerList.remove(player.getUniqueId().toString());
+ Players.remove(player.getUniqueId());
}
public boolean onSameTeam(Player player1, Player player2) {
- if (Hider.contains(player1.getUniqueId().toString()) && Hider.contains(player2.getUniqueId().toString())) return true;
- else if (Seeker.contains(player1.getUniqueId().toString()) && Seeker.contains(player2.getUniqueId().toString())) return true;
- else return Spectator.contains(player1.getUniqueId().toString()) && Spectator.contains(player2.getUniqueId().toString());
+ return Players.get(player1.getUniqueId()) == Players.get(player2.getUniqueId());
}
public void reload() {
- Hider.clear();
- Seeker.clear();
- Spectator.clear();
+ Players.replaceAll((u, v) -> Type.HIDER);
hider_kills.clear();
seeker_kills.clear();
hider_deaths.clear();
@@ -148,47 +148,38 @@ public class Board {
}
public void addKill(UUID uuid) {
- if (Hider.contains(uuid.toString())) {
- if (hider_kills.containsKey(uuid.toString())) {
- hider_kills.put(uuid.toString(), hider_kills.get(uuid.toString())+1);
- } else {
- hider_kills.put(uuid.toString(), 1);
- }
- } else if (Seeker.contains(uuid.toString())) {
- if (seeker_kills.containsKey(uuid.toString())) {
- seeker_kills.put(uuid.toString(), seeker_kills.get(uuid.toString())+1);
- } else {
- seeker_kills.put(uuid.toString(), 1);
- }
+ if(Players.get(uuid) == Type.HIDER) {
+ int kills = hider_kills.getOrDefault(uuid, 0);
+ hider_kills.put(uuid, kills + 1);
+ } else if(Players.get(uuid) == Type.SEEKER) {
+ int kills = seeker_kills.getOrDefault(uuid, 0);
+ seeker_kills.put(uuid, kills + 1);
}
}
public void addDeath(UUID uuid) {
- if (Hider.contains(uuid.toString())) {
- if (hider_deaths.containsKey(uuid.toString())) {
- hider_deaths.put(uuid.toString(), hider_deaths.get(uuid.toString())+1);
- } else {
- hider_deaths.put(uuid.toString(), 1);
- }
- } else if (Seeker.contains(uuid.toString())) {
- if (seeker_deaths.containsKey(uuid.toString())) {
- seeker_deaths.put(uuid.toString(), seeker_deaths.get(uuid.toString())+1);
- } else {
- seeker_deaths.put(uuid.toString(), 1);
- }
+ if(Players.get(uuid) == Type.HIDER) {
+ int kills = hider_deaths.getOrDefault(uuid, 0);
+ hider_deaths.put(uuid, kills + 1);
+ } else if(Players.get(uuid) == Type.SEEKER) {
+ int kills = seeker_deaths.getOrDefault(uuid, 0);
+ seeker_deaths.put(uuid, kills + 1);
}
}
- public Map<String, Integer> getHiderKills() {
+ public Map<UUID, Integer> getHiderKills() {
return new HashMap<>(hider_kills);
}
- public Map<String, Integer> getSeekerKills() {
+
+ public Map<UUID, Integer> getSeekerKills() {
return new HashMap<>(seeker_kills);
}
- public Map<String, Integer> getHiderDeaths() {
+
+ public Map<UUID, Integer> getHiderDeaths() {
return new HashMap<>(hider_deaths);
}
- public Map<String, Integer> getSeekerDeaths() {
+
+ public Map<UUID, Integer> getSeekerDeaths() {
return new HashMap<>(seeker_deaths);
}
@@ -197,7 +188,7 @@ public class Board {
}
private void createLobbyBoard(Player player, boolean recreate) {
- CustomBoard board = customBoards.get(player.getUniqueId().toString());
+ CustomBoard board = customBoards.get(player.getUniqueId());
if (recreate || board == null) {
board = new CustomBoard(player, LOBBY_TITLE);
board.updateTeams();
@@ -219,14 +210,22 @@ public class Board {
} else if (line.contains("{SEEKER%}")) {
board.setLine(String.valueOf(i), line.replace("{SEEKER%}", getSeekerPercent()+""));
} else if (line.contains("{HIDER%}")) {
- board.setLine(String.valueOf(i), line.replace("{HIDER%}", getHiderPercent()+""));
+ board.setLine(String.valueOf(i), line.replace("{HIDER%}", getHiderPercent() + ""));
+ } else if (line.contains("{MAP}")) {
+ board.setLine(String.valueOf(i), line.replace("{MAP}", getMapName() + ""));
} else {
board.setLine(String.valueOf(i), line);
}
i++;
}
board.display();
- customBoards.put(player.getUniqueId().toString(), board);
+ customBoards.put(player.getUniqueId(), board);
+ }
+
+ public String getMapName() {
+ net.tylermurphy.hideAndSeek.configuration.Map map = Main.getInstance().getGame().getCurrentMap();
+ if(map == null) return "Invalid";
+ else return map.getName();
}
public void createGameBoard(Player player) {
@@ -234,7 +233,7 @@ public class Board {
}
private void createGameBoard(Player player, boolean recreate) {
- CustomBoard board = customBoards.get(player.getUniqueId().toString());
+ CustomBoard board = customBoards.get(player.getUniqueId());
if (recreate || board == null) {
board = new CustomBoard(player, GAME_TITLE);
board.updateTeams();
@@ -244,7 +243,7 @@ public class Board {
Status status = Main.getInstance().getGame().getStatus();
Taunt taunt = Main.getInstance().getGame().getTaunt();
- Border worldBorder = Main.getInstance().getGame().getBorder();
+ Border worldBorder = Main.getInstance().getGame().getCurrentMap().getWorldBorder();
Glow glow = Main.getInstance().getGame().getGlow();
int i = 0;
@@ -259,8 +258,8 @@ public class Board {
String value = getTeam(player);
board.setLine(String.valueOf(i), line.replace("{TEAM}", value));
} else if (line.contains("{BORDER}")) {
- if (!worldBorderEnabled) continue;
- if (worldBorder == null || status == Status.STARTING) {
+ if (!Main.getInstance().getGame().getCurrentMap().isWorldBorderEnabled()) continue;
+ if (status == Status.STARTING) {
board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_COUNTING.replace("{AMOUNT}", "0")));
} else if (!worldBorder.isRunning()) {
board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_COUNTING.replaceFirst("\\{AMOUNT}", worldBorder.getDelay()/60+"").replaceFirst("\\{AMOUNT}", worldBorder.getDelay()%60+"")));
@@ -271,7 +270,7 @@ public class Board {
if (!tauntEnabled) continue;
if (taunt == null || status == Status.STARTING) {
board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_COUNTING.replace("{AMOUNT}", "0")));
- } else if (!tauntLast && Hider.size() == 1) {
+ } else if (!tauntLast && sizeHider() == 1) {
board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_EXPIRED));
} else if (!taunt.isRunning()) {
board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_COUNTING.replaceFirst("\\{AMOUNT}", taunt.getDelay() / 60 + "").replaceFirst("\\{AMOUNT}", taunt.getDelay() % 60 + "")));
@@ -289,6 +288,8 @@ public class Board {
board.setLine(String.valueOf(i), line.replace("{#SEEKER}", getSeekers().size()+""));
} else if (line.contains("{#HIDER}")) {
board.setLine(String.valueOf(i), line.replace("{#HIDER}", getHiders().size()+""));
+ } else if (line.contains("{MAP}")) {
+ board.setLine(String.valueOf(i), line.replace("{MAP}", getMapName() + ""));
} else {
board.setLine(String.valueOf(i), line);
}
@@ -296,23 +297,23 @@ public class Board {
i++;
}
board.display();
- customBoards.put(player.getUniqueId().toString(), board);
+ customBoards.put(player.getUniqueId(), board);
}
public void removeBoard(Player player) {
ScoreboardManager manager = Bukkit.getScoreboardManager();
assert manager != null;
player.setScoreboard(manager.getMainScoreboard());
- customBoards.remove(player.getUniqueId().toString());
+ customBoards.remove(player.getUniqueId());
}
public void reloadLobbyBoards() {
- for(Player player : playerList.values())
+ for(Player player : getPlayers())
createLobbyBoard(player, false);
}
public void reloadGameBoards() {
- for(Player player : playerList.values())
+ for(Player player : getPlayers())
createGameBoard(player, false);
}
@@ -322,17 +323,19 @@ public class Board {
}
private String getSeekerPercent() {
- if (playerList.values().size() < 2)
+ int size = size();
+ if (size < 2)
return " --";
else
- return " "+(int)(100*(1.0/playerList.size()));
+ return " "+(int)(100*(1.0/size));
}
private String getHiderPercent() {
- if (playerList.size() < 2)
+ int size = size();
+ if (size < 2)
return " --";
else
- return " "+(int)(100-100*(1.0/playerList.size()));
+ return " "+(int)(100-100*(1.0/size));
}
private String getTeam(Player player) {
@@ -343,10 +346,8 @@ public class Board {
}
public void cleanup() {
- playerList.clear();
- Hider.clear();
- Seeker.clear();
- Spectator.clear();
+ Players.clear();;
+ initialSeeker = null;
customBoards.clear();
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Disguiser.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Disguiser.java
index 2f8cbf6..351ba10 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/Disguiser.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Disguiser.java
@@ -1,21 +1,23 @@
package net.tylermurphy.hideAndSeek.game;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
+import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.game.util.Disguise;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
-import java.util.Map;
public class Disguiser {
- private final Map<Player, Disguise> disguises;
+ private final HashMap<Player, Disguise> disguises;
public Disguiser(){
this.disguises = new HashMap<>();
+
}
public Disguise getDisguise(Player player){
@@ -35,7 +37,7 @@ public class Disguiser {
}
public void check(){
- for(Map.Entry<Player, Disguise> set : disguises.entrySet()){
+ for(HashMap.Entry<Player, Disguise> set : disguises.entrySet()){
Disguise disguise = set.getValue();
Player player = set.getKey();
if(!player.isOnline()) {
@@ -47,9 +49,9 @@ public class Disguiser {
}
}
- public void disguise(Player player, Material material){
- if(!blockhuntEnabled){
- player.sendMessage(errorPrefix + "Please enable blockhunt in config.yml to enable disguises. Blockhunt does not work on 1.8");
+ public void disguise(Player player, Material material, Map map){
+ if(!map.isBlockHuntEnabled()){
+ player.sendMessage(errorPrefix + message("BLOCKHUNT_DISABLED"));
return;
}
if(disguises.containsKey(player)){
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/EntityHider.java b/src/main/java/net/tylermurphy/hideAndSeek/game/EntityHider.java
index 8274655..3892f6f 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/EntityHider.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/EntityHider.java
@@ -235,11 +235,7 @@ public class EntityHider implements Listener {
destroyEntity.getIntegerArrays().write(0, new int[]{entity.getEntityId()});
} catch (Exception e){ return false; }
// Make the entity disappear
- try {
- manager.sendServerPacket(observer, destroyEntity);
- } catch (InvocationTargetException e) {
- throw new RuntimeException("Cannot send server packet.", e);
- }
+ manager.sendServerPacket(observer, destroyEntity);
}
return visibleBefore;
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
index 71c3e84..e18a309 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
@@ -24,18 +24,17 @@ import com.cryptomorin.xseries.messages.Titles;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.game.events.Border;
+import net.tylermurphy.hideAndSeek.configuration.Map;
+import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.events.Glow;
import net.tylermurphy.hideAndSeek.game.events.Taunt;
import net.tylermurphy.hideAndSeek.game.listener.RespawnHandler;
import net.tylermurphy.hideAndSeek.game.util.*;
-import net.tylermurphy.hideAndSeek.world.WorldLoader;
import org.bukkit.*;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
-import java.io.File;
import java.util.*;
import java.util.stream.Collectors;
@@ -46,24 +45,25 @@ public class Game {
private final Taunt taunt;
private final Glow glow;
- private final Border worldBorder;
- private final WorldLoader worldLoader;
private final Board board;
private Status status;
+ private Map currentMap;
+
private int gameTick;
private int lobbyTimer;
private int startingTimer;
private int gameTimer;
private boolean hiderLeft;
- public Game(Board board){
+ public Game(Map map, Board board) {
+
+ this.currentMap = map;
+
this.taunt = new Taunt();
this.glow = new Glow();
- this.worldBorder = new Border();
- this.worldLoader = new WorldLoader(spawnWorld);
this.status = Status.STANDBY;
@@ -92,40 +92,34 @@ public class Game {
return glow;
}
- public Border getBorder(){
- return worldBorder;
- }
-
public Taunt getTaunt(){
return taunt;
}
- public WorldLoader getWorldLoader(){
- return worldLoader;
- }
-
public void start() {
+ Player seeker;
try {
- Optional<Player> rand = board.getPlayers().stream().skip(new Random().nextInt(board.size())).findFirst();
- Player seeker = rand.orElse(board.getPlayers().get(0));
- start(seeker);
+ int rand = (int) (Math.random() * board.getPlayers().size());
+ seeker = board.getPlayers().get(rand);
} catch (Exception e){
Main.getInstance().getLogger().warning("Failed to select random seeker.");
+ return;
}
+ start(seeker);
}
public void start(Player seeker) {
- if (mapSaveEnabled) worldLoader.rollback();
+ if (mapSaveEnabled) currentMap.getWorldLoader().rollback();
board.reload();
board.addSeeker(seeker);
- PlayerLoader.loadSeeker(seeker, getGameWorld());
+ PlayerLoader.loadSeeker(seeker, currentMap);
board.getPlayers().forEach(player -> {
if(board.isSeeker(player)) return;
board.addHider(player);
- PlayerLoader.loadHider(player, getGameWorld());
+ PlayerLoader.loadHider(player, currentMap);
});
board.getPlayers().forEach(board::createGameBoard);
- worldBorder.resetWorldBorder(getGameWorld());
+ currentMap.getWorldBorder().resetWorldBorder();
if (gameLength > 0) gameTimer = gameLength;
status = Status.STARTING;
startingTimer = 30;
@@ -147,21 +141,23 @@ public class Game {
public void end() {
board.getPlayers().forEach(PlayerLoader::unloadPlayer);
- worldBorder.resetWorldBorder(getGameWorld());
+ currentMap.getWorldBorder().resetWorldBorder();
+ Map nextMap = Maps.getRandomMap();
+ if(nextMap != null) this.currentMap = nextMap;
board.getPlayers().forEach(player -> {
if (leaveOnEnd) {
board.removeBoard(player);
board.remove(player);
handleBungeeLeave(player);
} else {
- player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
+ currentMap.getLobby().teleport(player);
board.createLobbyBoard(player);
board.addHider(player);
- PlayerLoader.joinPlayer(player);
+ PlayerLoader.joinPlayer(player, currentMap);
}
});
RespawnHandler.temp_loc.clear();
- if (mapSaveEnabled) worldLoader.unloadMap();
+ if (mapSaveEnabled) currentMap.getWorldLoader().unloadMap();
board.reloadLobbyBoards();
status = Status.ENDED;
}
@@ -172,14 +168,14 @@ public class Game {
ItemStack[] data = player.getInventory().getContents();
Main.getInstance().getDatabase().getInventoryData().saveInventory(player.getUniqueId(), data);
}
- PlayerLoader.joinPlayer(player);
+ PlayerLoader.joinPlayer(player, currentMap);
board.addHider(player);
board.createLobbyBoard(player);
board.reloadLobbyBoards();
if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
else broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
} else {
- PlayerLoader.loadSpectator(player, getGameWorld());
+ PlayerLoader.loadSpectator(player, currentMap);
board.addSpectator(player);
board.createGameBoard(player);
player.sendMessage(messagePrefix + message("GAME_JOIN_SPECTATOR"));
@@ -216,12 +212,12 @@ public class Game {
out.writeUTF(leaveServer);
player.sendPluginMessage(Main.getInstance(), "BungeeCord", out.toByteArray());
} else {
- player.teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
+ exitPosition.teleport(player);
}
}
public void onTick() {
- if (isNotSetup()) return;
+ if (currentMap == null || currentMap.isNotSetup()) return;
if (status == Status.STANDBY) whileWaiting();
else if (status == Status.STARTING) whileStarting();
else if (status == Status.PLAYING) whilePlaying();
@@ -257,7 +253,7 @@ public class Game {
board.getPlayers().forEach(player -> {
PlayerLoader.resetPlayer(player, board);
if(board.isSeeker(player)){
- player.teleport(new Location(Bukkit.getWorld(getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
+ currentMap.getGameSpawn().teleport(player);
}
});
} else if (startingTimer == 1){
@@ -317,7 +313,7 @@ public class Game {
board.reloadGameBoards();
gameTimer--;
}
- if (worldBorderEnabled) worldBorder.update();
+ if (currentMap.isWorldBorderEnabled()) currentMap.getWorldBorder().update();
if (tauntEnabled) taunt.update();
if (glowEnabled || alwaysGlow) glow.update();
}
@@ -331,21 +327,22 @@ public class Game {
}
}
- public boolean isNotSetup() {
- if (spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) return true;
- if (lobbyPosition.getBlockX() == 0 && lobbyPosition.getBlockY() == 0 && lobbyPosition.getBlockZ() == 0) return true;
- if (exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0) return true;
- if (seekerLobbyPosition.getBlockX() == 0 && seekerLobbyPosition.getBlockY() == 0 && seekerLobbyPosition.getBlockZ() == 0) return true;
- if (mapSaveEnabled) {
- File destination = new File(Main.getInstance().getWorldContainer() + File.separator + getGameWorld());
- if (!destination.exists()) return true;
- }
- return saveMinX == 0 || saveMinZ == 0 || saveMaxX == 0 || saveMaxZ == 0;
+ public boolean isCurrentMapValid() {
+ return currentMap != null && !currentMap.isNotSetup();
+ }
+
+ public boolean checkCurrentMap() {
+ if(currentMap != null && !currentMap.isNotSetup()) return false;
+ this.currentMap = Maps.getRandomMap();
+ return this.currentMap == null;
+ }
+
+ public void setCurrentMap(Map map) {
+ this.currentMap = map;
}
- public String getGameWorld() {
- if (mapSaveEnabled) return "hideandseek_"+spawnWorld;
- else return spawnWorld;
+ public Map getCurrentMap() {
+ return currentMap;
}
private void checkWinConditions() {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java
index eedfabe..10157cd 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java
@@ -23,9 +23,8 @@ import com.cryptomorin.xseries.messages.Titles;
import net.md_5.bungee.api.ChatColor;
import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.configuration.Items;
-import org.bukkit.Bukkit;
+import net.tylermurphy.hideAndSeek.configuration.Map;
import org.bukkit.GameMode;
-import org.bukkit.Location;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance;
import org.bukkit.entity.Player;
@@ -35,30 +34,29 @@ import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-import static net.tylermurphy.hideAndSeek.configuration.Config.lobbyPosition;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
@SuppressWarnings("deprecation")
public class PlayerLoader {
- public static void loadHider(Player player, String gameWorld){
- player.teleport(new Location(Bukkit.getWorld(gameWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
+ public static void loadHider(Player player, Map map){
+ map.getGameSpawn().teleport(player);
loadPlayer(player);
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1000000,5,false,false));
Titles.sendTitle(player, 10, 70, 20, ChatColor.WHITE + "" + message("HIDER_TEAM_NAME"), ChatColor.WHITE + message("HIDERS_SUBTITLE").toString());
- if(blockhuntEnabled){
- openBlockHuntPicker(player);
+ if(map.isBlockHuntEnabled()){
+ openBlockHuntPicker(player, map);
}
}
- public static void loadSeeker(Player player, String gameWorld){
- player.teleport(new Location(Bukkit.getWorld(gameWorld), seekerLobbyPosition.getX(),seekerLobbyPosition.getY(),seekerLobbyPosition.getZ()));
+ public static void loadSeeker(Player player, Map map){
+ map.getGameSeekerLobby().teleport(player);
loadPlayer(player);
Titles.sendTitle(player, 10, 70, 20, ChatColor.WHITE + "" + message("SEEKER_TEAM_NAME"), ChatColor.WHITE + message("SEEKERS_SUBTITLE").toString());
}
- public static void loadSpectator(Player player, String gameWorld){
- player.teleport(new Location(Bukkit.getWorld(gameWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
+ public static void loadSpectator(Player player, Map map){
+ map.getGameSpawn().teleport(player);
loadPlayer(player);
player.setAllowFlight(true);
player.setFlying(true);
@@ -115,8 +113,8 @@ public class PlayerLoader {
player.setFallDistance(0.0F);
}
- public static void joinPlayer(Player player){
- player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
+ public static void joinPlayer(Player player, Map map){
+ map.getLobby().teleport(player);
loadPlayer(player);
if (lobbyStartItem != null && (!lobbyItemStartAdmin || player.hasPermission("hideandseek.start")))
player.getInventory().setItem(lobbyItemStartPosition, lobbyStartItem);
@@ -143,11 +141,11 @@ public class PlayerLoader {
}
}
- public static void openBlockHuntPicker(Player player){
- int slots = ((blockhuntBlocks.size()-1)/9)*9+9;
- Inventory inventory = Main.getInstance().getServer().createInventory(null, slots, "Select a Block");
- for(int i=0;i<blockhuntBlocks.size();i++){
- inventory.setItem(i, new ItemStack(blockhuntBlocks.get(i)));
+ public static void openBlockHuntPicker(Player player, Map map){
+ int slots = ((map.getBlockHunt().size()-1)/9)*9+9;
+ Inventory inventory = Main.getInstance().getServer().createInventory(null, slots, "Select a Block: " + map.getName());
+ for(int i=0;i<map.getBlockHunt().size();i++){
+ inventory.setItem(i, new ItemStack(map.getBlockHunt().get(i)));
}
player.openInventory(inventory);
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java
index 647c4b6..9f7b5bf 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java
@@ -1,8 +1,7 @@
package net.tylermurphy.hideAndSeek.game.events;
import net.tylermurphy.hideAndSeek.Main;
-import org.bukkit.Bukkit;
-import org.bukkit.World;
+import net.tylermurphy.hideAndSeek.configuration.Map;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
@@ -11,9 +10,13 @@ public class Border {
private int delay;
private boolean running;
+ private final Map map;
+ private int currentSize;
- public Border() {
- delay = 60 * worldBorderDelay;
+ public Border(Map map) {
+ this.map = map;
+ this.delay = (int) (60 * map.getWorldBorderData().getY());
+ this.currentSize = (int) map.getWorldBorderData().getX();
}
public void update() {
@@ -21,7 +24,7 @@ public class Border {
Main.getInstance().getGame().broadcastMessage(worldBorderPrefix + message("WORLDBORDER_WARN"));
} else if (delay == 0) {
if (running) {
- delay = 60 * worldBorderDelay;
+ delay = (int) (60 * map.getWorldBorderData().getY());
running = false;
}
else decreaseWorldBorder();
@@ -30,34 +33,32 @@ public class Border {
}
private void decreaseWorldBorder() {
- if (currentWorldborderSize == 100) return;
- int change = worldBorderChange;
- if (currentWorldborderSize-worldBorderChange < 100) {
- change = currentWorldborderSize-100;
+ if (currentSize == 100) return;
+ if(map.getGameSpawn().load() == null) return;
+ int change = (int) map.getWorldBorderData().getZ();
+ if (currentSize-change < 100) {
+ change = currentSize-100;
}
running = true;
Main.getInstance().getGame().broadcastMessage(worldBorderPrefix + message("WORLDBORDER_DECREASING").addAmount(change));
- currentWorldborderSize -= worldBorderChange;
- World world = Bukkit.getWorld(Main.getInstance().getGame().getGameWorld());
- assert world != null;
- org.bukkit.WorldBorder border = world.getWorldBorder();
+ currentSize -= map.getWorldBorderData().getZ();
+ org.bukkit.WorldBorder border = map.getGameSpawn().load().getWorldBorder();
border.setSize(border.getSize()-change,30);
delay = 30;
}
- public void resetWorldBorder(String worldName) {
- World world = Bukkit.getWorld(worldName);
- assert world != null;
- org.bukkit.WorldBorder border = world.getWorldBorder();
- if (worldBorderEnabled) {
- border.setSize(worldBorderSize);
- border.setCenter(worldBorderPosition.getX(), worldBorderPosition.getZ());
- currentWorldborderSize = worldBorderSize;
+ public void resetWorldBorder() {
+ if(map.getGameSpawn().load() == null) return;
+ org.bukkit.WorldBorder border = map.getGameSpawn().load().getWorldBorder();
+ if (map.isWorldBorderEnabled()) {
+ border.setSize(map.getWorldBorderData().getX());
+ border.setCenter(map.getWorldBorderPos().getX(), map.getWorldBorderPos().getY());
+ currentSize = (int) map.getWorldBorderData().getX();
} else {
border.setSize(30000000);
border.setCenter(0, 0);
}
- delay = 60 * worldBorderDelay;
+ delay = (int) (60 * map.getWorldBorderData().getY());
}
public int getDelay() {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/events/Glow.java b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Glow.java
index 8631ef5..dec23d7 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/events/Glow.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Glow.java
@@ -6,6 +6,7 @@ import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import net.tylermurphy.hideAndSeek.Main;
+import net.tylermurphy.hideAndSeek.util.packet.EntityMetadataPacket;
import org.bukkit.entity.Player;
import java.lang.reflect.InvocationTargetException;
@@ -64,22 +65,13 @@ public class Glow {
}
public void setGlow(Player player, Player target, boolean glowing) {
- PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.ENTITY_METADATA);
- packet.getIntegers().write(0, target.getEntityId());
- WrappedDataWatcher watcher = new WrappedDataWatcher();
- WrappedDataWatcher.Serializer serializer = WrappedDataWatcher.Registry.get(Byte.class);
- watcher.setEntity(target);
- if (glowing) {
- watcher.setObject(0, serializer, (byte) (0x40));
- } else {
- watcher.setObject(0, serializer, (byte) (0x0));
- }
- packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects());
- try {
- protocolManager.sendServerPacket(player, packet);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
+
+ EntityMetadataPacket packet = new EntityMetadataPacket();
+ packet.setEntity(target);
+ packet.setGlow(glowing);
+ packet.writeMetadata();
+ packet.send(player);
+
}
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/ChatHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/ChatHandler.java
index 27a6235..27347c2 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/ChatHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/ChatHandler.java
@@ -11,7 +11,7 @@ public class ChatHandler implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void onChat(AsyncPlayerChatEvent event) {
- if (Main.getInstance().getBoard().isSeeker(event.getPlayer())) {
+ if (Main.getInstance().getBoard().isSpectator(event.getPlayer())) {
event.setCancelled(true);
Main.getInstance().getBoard().getSpectators().forEach(spectator -> spectator.sendMessage(ChatColor.GRAY + "[SPECTATOR] " + event.getPlayer().getName() + ": " + event.getMessage()));
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java
index d03d5d6..37537d6 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java
@@ -7,7 +7,6 @@ import net.tylermurphy.hideAndSeek.game.Game;
import net.tylermurphy.hideAndSeek.game.PlayerLoader;
import net.tylermurphy.hideAndSeek.game.util.Status;
import org.bukkit.Bukkit;
-import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
@@ -18,7 +17,6 @@ import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-import static net.tylermurphy.hideAndSeek.configuration.Config.spawnPosition;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
public class DamageHandler implements Listener {
@@ -32,8 +30,8 @@ public class DamageHandler implements Listener {
// Define variables
Player player = (Player) event.getEntity();
Player attacker = null;
- // If no spawn position, we won't be able to manage their death :o
- if (spawnPosition == null) { return; }
+ // If map is not setup we won't be able to process on it :o
+ if (!game.isCurrentMapValid()) { return; }
// If there is an attacker, find them
if (event instanceof EntityDamageByEntityEvent) {
if (((EntityDamageByEntityEvent) event).getDamager() instanceof Player)
@@ -44,7 +42,6 @@ public class DamageHandler implements Listener {
}
// Makes sure that if there was an attacking player, that the event is allowed for the game
if (attacker != null) {
- System.out.println(event.getFinalDamage() + " " + player.getDisplayName() + " " + attacker.getDisplayName());
// Cancel if one player is in the game but other isn't
if ((board.contains(player) && !board.contains(attacker)) || (!board.contains(player) && board.contains(attacker))) {
event.setCancelled(true);
@@ -73,9 +70,9 @@ public class DamageHandler implements Listener {
if (board.isSpectator(player)) {
event.setCancelled(true);
if (Main.getInstance().supports(18) && player.getLocation().getBlockY() < -64) {
- player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
+ game.getCurrentMap().getGameSpawn().teleport(player);
} else if (!Main.getInstance().supports(18) && player.getLocation().getY() < 0) {
- player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
+ game.getCurrentMap().getGameSpawn().teleport(player);
}
return;
}
@@ -98,15 +95,15 @@ public class DamageHandler implements Listener {
Main.getInstance().getDisguiser().reveal(player);
// Teleport player to seeker spawn
if(delayedRespawn){
- player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), seekerLobbyPosition.getX(), seekerLobbyPosition.getY(), seekerLobbyPosition.getZ()));
+ game.getCurrentMap().getGameSeekerLobby().teleport(player);
player.sendMessage(messagePrefix + message("RESPAWN_NOTICE").addAmount(delayedRespawnDelay));
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.getInstance(), () -> {
if(game.getStatus() == Status.PLAYING){
- player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
+ game.getCurrentMap().getGameSpawn().teleport(player);
}
}, delayedRespawnDelay * 20L);
} else {
- player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
+ game.getCurrentMap().getGameSpawn().teleport(player);
}
// Add leaderboard stats
board.addDeath(player.getUniqueId());
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DisguiseHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DisguiseHandler.java
index cb8ad04..c80e83f 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DisguiseHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DisguiseHandler.java
@@ -1,7 +1,6 @@
package net.tylermurphy.hideAndSeek.game.listener;
import static com.comphenix.protocol.PacketType.Play.Client.*;
-import static net.tylermurphy.hideAndSeek.configuration.Config.solidifyTime;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
@@ -42,7 +41,7 @@ public class DisguiseHandler implements Listener {
if(lastLocation.getWorld() != currentLocation.getWorld()) return;
double distance = lastLocation.distance(currentLocation);
disguise.setSolidify(distance < .1);
- }, solidifyTime);
+ }, 20 * 3);
if(event.getFrom().distance(event.getTo()) > .1)
disguise.setSolidify(false);
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java
index 3440780..0326391 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java
@@ -50,7 +50,7 @@ public class InteractHandler implements Listener {
if (temp.isSimilar(lobbyStartItem) && event.getPlayer().hasPermission("hideandseek.start")) {
event.setCancelled(true);
- if (Main.getInstance().getGame().isNotSetup()) {
+ if (Main.getInstance().getGame().checkCurrentMap()) {
event.getPlayer().sendMessage(errorPrefix + message("GAME_SETUP"));
return;
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InventoryHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InventoryHandler.java
index e72bea0..0f306b1 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InventoryHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InventoryHandler.java
@@ -19,11 +19,11 @@
package net.tylermurphy.hideAndSeek.game.listener;
-import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-
import com.cryptomorin.xseries.XMaterial;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.Debug;
+import net.tylermurphy.hideAndSeek.command.map.Debug;
+import net.tylermurphy.hideAndSeek.configuration.Map;
+import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.util.Status;
import org.bukkit.Material;
import org.bukkit.entity.Player;
@@ -79,17 +79,23 @@ public class InventoryHandler implements Listener {
private void checkForBlockHuntMenu(InventoryClickEvent event){
boolean test;
+ String mapName;
if(Main.getInstance().supports(14)){
- test = event.getView().getTitle().equals("Select a Block");
+ test = event.getView().getTitle().startsWith("Select a Block: ");
+ if(!test) return;
+ mapName = event.getView().getTitle().substring("Select a Block: ".length());
} else {
- test = event.getInventory().getName().equals("Select a Block");
+ test = event.getInventory().getName().startsWith("Select a Block: ");
+ if(!test) return;
+ mapName = event.getInventory().getName().substring("Select a Block: ".length());
}
- if(!test) return;
event.setCancelled(true);
- Material mat = blockhuntBlocks.get(event.getRawSlot());
+ Map map = Maps.getMap(mapName);
+ if(map == null) return;
+ Material mat = map.getBlockHunt().get(event.getRawSlot());
if(mat == null) return;
Player player = (Player) event.getWhoClicked();
- Main.getInstance().getDisguiser().disguise(player, mat);
+ Main.getInstance().getDisguiser().disguise(player, mat, map);
player.closeInventory();
}
@@ -97,17 +103,23 @@ public class InventoryHandler implements Listener {
public void onInventoryClose(InventoryCloseEvent event){
if (!(event.getPlayer() instanceof Player)) return;
boolean test;
+ String mapName;
if(Main.getInstance().supports(14)){
- test = event.getView().getTitle().equals("Select a Block");
+ test = event.getView().getTitle().startsWith("Select a Block: ");
+ if(!test) return;
+ mapName = event.getView().getTitle().substring("Select a Block: ".length());
} else {
- test = event.getInventory().getName().equals("Select a Block");
+ test = event.getInventory().getName().startsWith("Select a Block: ");
+ if(!test) return;
+ mapName = event.getInventory().getName().substring("Select a Block: ".length());
}
- if(!test) return;
- Material mat = blockhuntBlocks.get(0);
+ Map map = Maps.getMap(mapName);
+ if(map == null) return;
+ Material mat = map.getBlockHunt().get(0);
if(mat == null) return;
Player player = (Player) event.getPlayer();
if(Main.getInstance().getDisguiser().disguised(player)) return;
- Main.getInstance().getDisguiser().disguise(player, mat);
+ Main.getInstance().getDisguiser().disguise(player, mat, map);
player.closeInventory();
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java
index 6d88ebf..d8534a3 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java
@@ -4,9 +4,7 @@ import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.configuration.Items;
import net.tylermurphy.hideAndSeek.game.PlayerLoader;
import net.tylermurphy.hideAndSeek.game.util.Status;
-import org.bukkit.Bukkit;
import org.bukkit.GameMode;
-import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -17,7 +15,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-import static net.tylermurphy.hideAndSeek.configuration.Config.exitPosition;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
public class JoinLeaveHandler implements Listener {
@@ -28,20 +26,27 @@ public class JoinLeaveHandler implements Listener {
}
Main.getInstance().getBoard().remove(event.getPlayer());
removeItems(event.getPlayer());
- if (Main.getInstance().getGame().isNotSetup()) return;
+ if (Main.getInstance().getGame().checkCurrentMap()) return;
if (autoJoin) {
+ if (Main.getInstance().getGame().checkCurrentMap()) {
+ event.getPlayer().sendMessage(errorPrefix + message("GAME_SETUP"));
+ return;
+ }
Main.getInstance().getGame().join(event.getPlayer());
} else if (teleportToExit) {
- if (event.getPlayer().getWorld().getName().equals(Main.getInstance().getGame().getGameWorld()) || event.getPlayer().getWorld().getName().equals(lobbyWorld)) {
- event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
+ if (
+ event.getPlayer().getWorld().getName().equals(Main.getInstance().getGame().getCurrentMap().getLobbyName()) ||
+ event.getPlayer().getWorld().getName().equals(Main.getInstance().getGame().getCurrentMap().getGameSpawnName())
+ ) {
+ exitPosition.teleport(event.getPlayer());
event.getPlayer().setGameMode(GameMode.ADVENTURE);
}
} else {
- if (mapSaveEnabled && event.getPlayer().getWorld().getName().equals(Main.getInstance().getGame().getGameWorld())) {
+ if (mapSaveEnabled && event.getPlayer().getWorld().getName().equals(Main.getInstance().getGame().getCurrentMap().getGameSpawnName())) {
if (Main.getInstance().getGame().getStatus() != Status.STANDBY && Main.getInstance().getGame().getStatus() != Status.ENDING) {
Main.getInstance().getGame().join(event.getPlayer());
} else {
- event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
+ exitPosition.teleport(event.getPlayer());
event.getPlayer().setGameMode(GameMode.ADVENTURE);
}
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java
index e6e32f6..1dd6cfc 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java
@@ -2,6 +2,7 @@ package net.tylermurphy.hideAndSeek.game.listener;
import com.google.common.collect.Sets;
import net.tylermurphy.hideAndSeek.Main;
+import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.game.listener.events.PlayerJumpEvent;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
@@ -12,9 +13,6 @@ import org.bukkit.event.player.PlayerMoveEvent;
import java.util.Set;
import java.util.UUID;
-import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-import static net.tylermurphy.hideAndSeek.configuration.Config.saveMaxZ;
-
public class MovementHandler implements Listener {
private final Set<UUID> prevPlayersOnGround = Sets.newHashSet();
@@ -51,10 +49,11 @@ public class MovementHandler implements Listener {
private void checkBounds(PlayerMoveEvent event){
if (!Main.getInstance().getBoard().contains(event.getPlayer())) return;
- if (!event.getPlayer().getWorld().getName().equals(Main.getInstance().getGame().getGameWorld())) return;
- if (!event.getTo().getWorld().getName().equals(Main.getInstance().getGame().getGameWorld())) return;
+ if (!event.getPlayer().getWorld().getName().equals(Main.getInstance().getGame().getCurrentMap().getGameSpawnName())) return;
+ if (!event.getTo().getWorld().getName().equals(Main.getInstance().getGame().getCurrentMap().getGameSpawnName())) return;
if (event.getPlayer().hasPermission("hideandseek.leavebounds")) return;
- if (event.getTo().getBlockX() < saveMinX || event.getTo().getBlockX() > saveMaxX || event.getTo().getBlockZ() < saveMinZ || event.getTo().getBlockZ() > saveMaxZ) {
+ Map map = Main.getInstance().getGame().getCurrentMap();
+ if (event.getTo().getBlockX() < map.getBoundsMin().getBlockX() || event.getTo().getBlockX() > map.getBoundsMax().getBlockX() || event.getTo().getBlockZ() < map.getBoundsMin().getZ() || event.getTo().getBlockZ() > map.getBoundsMax().getZ()) {
event.setCancelled(true);
}
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java
index 1e7ba69..d34cb11 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java
@@ -2,7 +2,6 @@ package net.tylermurphy.hideAndSeek.game.listener;
import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.configuration.Items;
-import net.tylermurphy.hideAndSeek.game.Game;
import net.tylermurphy.hideAndSeek.game.util.Status;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/WorldInteractHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/WorldInteractHandler.java
new file mode 100644
index 0000000..10b8e3e
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/WorldInteractHandler.java
@@ -0,0 +1,48 @@
+package net.tylermurphy.hideAndSeek.game.listener;
+
+import net.tylermurphy.hideAndSeek.Main;
+import net.tylermurphy.hideAndSeek.game.Board;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.event.entity.EntityBreakDoorEvent;
+import org.bukkit.event.hanging.HangingBreakByEntityEvent;
+
+public class WorldInteractHandler implements Listener {
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onBlockBreak(BlockBreakEvent event) {
+ Player player = event.getPlayer();
+ Board board = Main.getInstance().getBoard();
+ if(board.contains(player)) {
+ event.setCancelled(true);
+ }
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onHangingEntityBreakByEntity(HangingBreakByEntityEvent event) {
+ if (!(event.getRemover() instanceof Player)) {
+ return;
+ }
+ Player player = (Player) event.getRemover();
+ Board board = Main.getInstance().getBoard();
+ if(board.contains(player)) {
+ event.setCancelled(true);
+ }
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onBreakDoor(EntityBreakDoorEvent event) {
+ if (!(event.getEntity() instanceof Player)) {
+ return;
+ }
+ Player player = (Player) event.getEntity();
+ Board board = Main.getInstance().getBoard();
+ if(board.contains(player)) {
+ event.setCancelled(true);
+ }
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/util/Status.java b/src/main/java/net/tylermurphy/hideAndSeek/game/util/Status.java
index e630070..44f19b2 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/util/Status.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/util/Status.java
@@ -1,22 +1,3 @@
-/*
- * This file is part of Kenshins Hide and Seek
- *
- * Copyright (c) 2021 Tyler Murphy.
- *
- * Kenshins Hide and Seek free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * he Free Software Foundation version 3.
- *
- * Kenshins Hide and Seek is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
package net.tylermurphy.hideAndSeek.game.util;
public enum Status {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/util/WinType.java b/src/main/java/net/tylermurphy/hideAndSeek/game/util/WinType.java
index f584d80..24544ba 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/util/WinType.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/util/WinType.java
@@ -1,22 +1,3 @@
-/*
- * This file is part of Kenshins Hide and Seek
- *
- * Copyright (c) 2021 Tyler Murphy.
- *
- * Kenshins Hide and Seek free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * he Free Software Foundation version 3.
- *
- * Kenshins Hide and Seek is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
package net.tylermurphy.hideAndSeek.game.util;
public enum WinType {