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.java166
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/CommandHandler.java27
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java352
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/Game.java301
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/Glow.java54
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/BlockedCommandHandler.java37
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/ChatHandler.java28
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java111
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java74
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java70
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java27
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java52
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/RespawnHandler.java41
13 files changed, 716 insertions, 624 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java
index 61e77e7..75d2a7d 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java
@@ -19,12 +19,6 @@
package net.tylermurphy.hideAndSeek.game;
-import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
import net.tylermurphy.hideAndSeek.util.Status;
import net.tylermurphy.hideAndSeek.util.Version;
import org.bukkit.Bukkit;
@@ -33,6 +27,12 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.*;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
+
public class Board {
private static final List<String> Hider = new ArrayList<>(), Seeker = new ArrayList<>(), Spectator = new ArrayList<>();
@@ -40,19 +40,19 @@ public class Board {
private static final Map<String, CustomBoard> customBoards = new HashMap<>();
private static final Map<String, Integer> hider_kills = new HashMap<>(), seeker_kills = new HashMap<>(), hider_deaths = new HashMap<>(), seeker_deaths = new HashMap<>();
- public static boolean isPlayer(Player player) {
+ public static boolean contains(Player player) {
return playerList.containsKey(player.getUniqueId().toString());
}
- public static boolean isPlayer(CommandSender sender) {
- return playerList.containsKey(Bukkit.getPlayer(sender.getName()).getUniqueId().toString());
+ public static boolean contains(CommandSender sender) {
+ return contains((Player) sender);
}
public static boolean isHider(Player player) {
return Hider.contains(player.getUniqueId().toString());
}
- public static boolean isHider(UUID uuid){
+ public static boolean isHider(UUID uuid) {
return Hider.contains(uuid.toString());
}
@@ -60,7 +60,7 @@ public class Board {
return Seeker.contains(player.getUniqueId().toString());
}
- public static boolean isSeeker(UUID uuid){
+ public static boolean isSeeker(UUID uuid) {
return Seeker.contains(uuid.toString());
}
@@ -80,23 +80,23 @@ public class Board {
return playerList.values().size();
}
- public static List<Player> getHiders(){
+ public static List<Player> getHiders() {
return Hider.stream().map(playerList::get).collect(Collectors.toList());
}
- public static List<Player> getSeekers(){
+ public static List<Player> getSeekers() {
return Seeker.stream().map(playerList::get).collect(Collectors.toList());
}
- public static Player getFirstSeeker(){
+ public static Player getFirstSeeker() {
return playerList.get(Seeker.get(0));
}
- public static List<Player> getSpectators(){
+ public static List<Player> getSpectators() {
return Spectator.stream().map(playerList::get).collect(Collectors.toList());
}
- public static List<Player> getPlayers(){
+ public static List<Player> getPlayers() {
return new ArrayList<>(playerList.values());
}
@@ -133,8 +133,8 @@ public class Board {
}
public static 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;
+ 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());
}
@@ -148,15 +148,15 @@ public class Board {
seeker_deaths.clear();
}
- public static void addKill(UUID uuid){
- if(Hider.contains(uuid.toString())){
- if(hider_kills.containsKey(uuid.toString())){
+ public static 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(getFirstSeeker().getUniqueId().equals(uuid)){
- if(seeker_kills.containsKey(uuid.toString())){
+ } else if (getFirstSeeker().getUniqueId().equals(uuid)) {
+ if (seeker_kills.containsKey(uuid.toString())) {
seeker_kills.put(uuid.toString(), seeker_kills.get(uuid.toString())+1);
} else {
seeker_kills.put(uuid.toString(), 1);
@@ -164,15 +164,15 @@ public class Board {
}
}
- public static void addDeath(UUID uuid){
- if(Hider.contains(uuid.toString())){
- if(hider_deaths.containsKey(uuid.toString())){
+ public static 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(getFirstSeeker().getUniqueId().equals(uuid)){
- if(seeker_deaths.containsKey(uuid.toString())){
+ } else if (getFirstSeeker().getUniqueId().equals(uuid)) {
+ if (seeker_deaths.containsKey(uuid.toString())) {
seeker_deaths.put(uuid.toString(), seeker_deaths.get(uuid.toString())+1);
} else {
seeker_deaths.put(uuid.toString(), 1);
@@ -180,16 +180,16 @@ public class Board {
}
}
- public static Map<String, Integer> getHiderKills(){
+ public static Map<String, Integer> getHiderKills() {
return new HashMap<>(hider_kills);
}
- public static Map<String, Integer> getSeekerKills(){
+ public static Map<String, Integer> getSeekerKills() {
return new HashMap<>(seeker_kills);
}
- public static Map<String, Integer> getHiderDeaths(){
+ public static Map<String, Integer> getHiderDeaths() {
return new HashMap<>(hider_deaths);
}
- public static Map<String, Integer> getSeekerDeaths(){
+ public static Map<String, Integer> getSeekerDeaths() {
return new HashMap<>(seeker_deaths);
}
@@ -199,27 +199,27 @@ public class Board {
private static void createLobbyBoard(Player player, boolean recreate) {
CustomBoard board = customBoards.get(player.getUniqueId().toString());
- if(recreate) {
+ if (recreate) {
board = new CustomBoard(player, LOBBY_TITLE);
board.updateTeams();
}
int i=0;
- for(String line : LOBBY_CONTENTS){
- if(line.equalsIgnoreCase("")){
+ for(String line : LOBBY_CONTENTS) {
+ if (line.equalsIgnoreCase("")) {
board.addBlank();
- } else if(line.contains("{COUNTDOWN}")){
- if(!lobbyCountdownEnabled){
+ } else if (line.contains("{COUNTDOWN}")) {
+ if (!lobbyCountdownEnabled) {
board.setLine(String.valueOf(i), line.replace("{COUNTDOWN}", COUNTDOWN_ADMINSTART));
- } else if(Game.countdownTime == -1){
+ } else if (Game.countdownTime == -1) {
board.setLine(String.valueOf(i), line.replace("{COUNTDOWN}", COUNTDOWN_WAITING));
} else {
board.setLine(String.valueOf(i), line.replace("{COUNTDOWN}", COUNTDOWN_COUNTING.replace("{AMOUNT}",Game.countdownTime+"")));
}
- } else if(line.contains("{COUNT}")){
+ } else if (line.contains("{COUNT}")) {
board.setLine(String.valueOf(i), line.replace("{COUNT}", getPlayers().size()+""));
- } else if(line.contains("{SEEKER%}")){
+ } else if (line.contains("{SEEKER%}")) {
board.setLine(String.valueOf(i), line.replace("{SEEKER%}", getSeekerPercent()+""));
- } else if(line.contains("{HIDER%}")){
+ } else if (line.contains("{HIDER%}")) {
board.setLine(String.valueOf(i), line.replace("{HIDER%}", getHiderPercent()+""));
} else {
board.setLine(String.valueOf(i), line);
@@ -230,58 +230,58 @@ public class Board {
customBoards.put(player.getUniqueId().toString(), board);
}
- public static void createGameBoard(Player player){
+ public static void createGameBoard(Player player) {
createGameBoard(player, true);
}
- private static void createGameBoard(Player player, boolean recreate){
+ private static void createGameBoard(Player player, boolean recreate) {
CustomBoard board = customBoards.get(player.getUniqueId().toString());
- if(recreate) {
+ if (recreate) {
board = new CustomBoard(player, GAME_TITLE);
board.updateTeams();
}
int i = 0;
- for(String line : GAME_CONTENTS){
- if(line.equalsIgnoreCase("")){
+ for(String line : GAME_CONTENTS) {
+ if (line.equalsIgnoreCase("")) {
board.addBlank();
} else {
- if(line.contains("{TIME}")) {
+ if (line.contains("{TIME}")) {
String value = Game.timeLeft/60 + "m" + Game.timeLeft%60 + "s";
board.setLine(String.valueOf(i), line.replace("{TIME}", value));
- } else if(line.contains("{TEAM}")) {
+ } else if (line.contains("{TEAM}")) {
String value = getTeam(player);
board.setLine(String.valueOf(i), line.replace("{TEAM}", value));
- } else if(line.contains("{BORDER}")) {
- if(!worldborderEnabled) continue;
- if(Game.worldBorder == null || Game.status == Status.STARTING){
+ } else if (line.contains("{BORDER}")) {
+ if (!worldborderEnabled) continue;
+ if (Game.worldBorder == null || Game.status == Status.STARTING) {
board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_COUNTING.replace("{AMOUNT}", "0")));
- } else if(!Game.worldBorder.isRunning()) {
+ } else if (!Game.worldBorder.isRunning()) {
board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_COUNTING.replaceFirst("\\{AMOUNT}", Game.worldBorder.getDelay()/60+"").replaceFirst("\\{AMOUNT}", Game.worldBorder.getDelay()%60+"")));
} else {
board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_DECREASING));
}
- } else if(line.contains("{TAUNT}")){
- if(!tauntEnabled) continue;
- if(Game.taunt == null || Game.status == Status.STARTING) {
+ } else if (line.contains("{TAUNT}")) {
+ if (!tauntEnabled) continue;
+ if (Game.taunt == null || Game.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 && Hider.size() == 1) {
board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_EXPIRED));
- } else if(!Game.taunt.isRunning()) {
+ } else if (!Game.taunt.isRunning()) {
board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_COUNTING.replaceFirst("\\{AMOUNT}", Game.taunt.getDelay() / 60 + "").replaceFirst("\\{AMOUNT}", Game.taunt.getDelay() % 60 + "")));
} else {
board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_ACTIVE));
}
- } else if(line.contains("{GLOW}")){
- if(!glowEnabled) return;
- if(Game.glow == null || Game.status == Status.STARTING || !Game.glow.isRunning()) {
+ } else if (line.contains("{GLOW}")) {
+ if (!glowEnabled) return;
+ if (Game.glow == null || Game.status == Status.STARTING || !Game.glow.isRunning()) {
board.setLine(String.valueOf(i), line.replace("{GLOW}", GLOW_INACTIVE));
} else {
board.setLine(String.valueOf(i), line.replace("{GLOW}", GLOW_ACTIVE));
}
- } else if(line.contains("{#SEEKER}")) {
+ } else if (line.contains("{#SEEKER}")) {
board.setLine(String.valueOf(i), line.replace("{#SEEKER}", getSeekers().size()+""));
- } else if(line.contains("{#HIDER}")) {
+ } else if (line.contains("{#HIDER}")) {
board.setLine(String.valueOf(i), line.replace("{#HIDER}", getHiders().size()+""));
} else {
board.setLine(String.valueOf(i), line);
@@ -316,27 +316,27 @@ public class Board {
}
private static String getSeekerPercent() {
- if(playerList.values().size() < 2)
+ if (playerList.values().size() < 2)
return " --";
else
return " "+(int)(100*(1.0/playerList.size()));
}
private static String getHiderPercent() {
- if(playerList.size() < 2)
+ if (playerList.size() < 2)
return " --";
else
return " "+(int)(100-100*(1.0/playerList.size()));
}
private static String getTeam(Player player) {
- if(isHider(player)) return message("HIDER_TEAM_NAME").toString();
- else if(isSeeker(player)) return message("SEEKER_TEAM_NAME").toString();
- else if(isSpectator(player)) return message("SPECTATOR_TEAM_NAME").toString();
+ if (isHider(player)) return message("HIDER_TEAM_NAME").toString();
+ else if (isSeeker(player)) return message("SEEKER_TEAM_NAME").toString();
+ else if (isSpectator(player)) return message("SPECTATOR_TEAM_NAME").toString();
else return ChatColor.WHITE + "UNKNOWN";
}
- public static void cleanup(){
+ public static void cleanup() {
playerList.clear();
Hider.clear();
Seeker.clear();
@@ -355,13 +355,13 @@ class CustomBoard {
private int blanks;
private boolean displayed;
- public CustomBoard(Player player, String title){
+ public CustomBoard(Player player, String title) {
ScoreboardManager manager = Bukkit.getScoreboardManager();
assert manager != null;
this.board = manager.getNewScoreboard();
this.LINES = new HashMap<>();
this.player = player;
- if(Version.atLeast("1.13")){
+ if (Version.atLeast("1.13")) {
this.obj = board.registerNewObjective(
"Scoreboard", "dummy", ChatColor.translateAlternateColorCodes('&', title));
} else {
@@ -374,8 +374,8 @@ class CustomBoard {
}
public void updateTeams() {
- try{ board.registerNewTeam("Hider"); } catch (Exception ignored){}
- try{ board.registerNewTeam("Seeker"); } catch (Exception ignored){}
+ try{ board.registerNewTeam("Hider"); } catch (Exception ignored) {}
+ try{ board.registerNewTeam("Seeker"); } catch (Exception ignored) {}
Team hiderTeam = board.getTeam("Hider");
assert hiderTeam != null;
for(String entry : hiderTeam.getEntries())
@@ -388,8 +388,8 @@ class CustomBoard {
seekerTeam.removeEntry(entry);
for(Player player : Board.getSeekers())
seekerTeam.addEntry(player.getName());
- if(Version.atLeast("1.9")){
- if(nametagsVisible) {
+ if (Version.atLeast("1.9")) {
+ if (nametagsVisible) {
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OTHER_TEAMS);
} else {
@@ -397,7 +397,7 @@ class CustomBoard {
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
}
} else {
- if(nametagsVisible) {
+ if (nametagsVisible) {
hiderTeam.setNameTagVisibility(NameTagVisibility.HIDE_FOR_OTHER_TEAMS);
seekerTeam.setNameTagVisibility(NameTagVisibility.HIDE_FOR_OWN_TEAM);
} else {
@@ -405,7 +405,7 @@ class CustomBoard {
seekerTeam.setNameTagVisibility(NameTagVisibility.NEVER);
}
}
- if(Version.atLeast("1.12")){
+ if (Version.atLeast("1.12")) {
hiderTeam.setColor(ChatColor.GOLD);
seekerTeam.setColor(ChatColor.RED);
} else {
@@ -414,23 +414,23 @@ class CustomBoard {
}
}
- public void setLine(String key, String message){
+ public void setLine(String key, String message) {
Line line = LINES.get(key);
- if(line == null)
+ if (line == null)
addLine(key, ChatColor.translateAlternateColorCodes('&',message));
else
updateLine(key, ChatColor.translateAlternateColorCodes('&',message));
}
- private void addLine(String key, String message){
+ private void addLine(String key, String message) {
Score score = obj.getScore(message);
score.setScore(LINES.values().size()+1);
Line line = new Line(LINES.values().size()+1, message);
LINES.put(key, line);
}
- public void addBlank(){
- if(displayed) return;
+ public void addBlank() {
+ if (displayed) return;
StringBuilder temp = new StringBuilder();
for(int i = 0; i <= blanks; i ++)
temp.append(ChatColor.RESET);
@@ -438,7 +438,7 @@ class CustomBoard {
addLine("blank"+blanks, temp.toString());
}
- private void updateLine(String key, String message){
+ private void updateLine(String key, String message) {
Line line = LINES.get(key);
board.resetScores(line.getMessage());
line.setMessage(message);
@@ -460,7 +460,7 @@ class Line {
private final int score;
private String message;
- public Line(int score, String message){
+ public Line(int score, String message) {
this.score = score;
this.message = message;
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/CommandHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/CommandHandler.java
index 8df3cf2..b7b2dad 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/CommandHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/CommandHandler.java
@@ -19,24 +19,25 @@
package net.tylermurphy.hideAndSeek.game;
-import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
+import net.tylermurphy.hideAndSeek.command.*;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import net.tylermurphy.hideAndSeek.command.*;
+import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
+import static net.tylermurphy.hideAndSeek.configuration.Config.permissionsRequired;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.LOCAL;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
public class CommandHandler {
- public static Map<String,ICommand> COMMAND_REGISTER = new LinkedHashMap<>();
+ public static final Map<String,ICommand> COMMAND_REGISTER = new LinkedHashMap<>();
private static void registerCommand(ICommand command) {
- if(!COMMAND_REGISTER.containsKey(command.getLabel())) {
+ if (!COMMAND_REGISTER.containsKey(command.getLabel())) {
COMMAND_REGISTER.put(command.getLabel().toLowerCase(), command);
}
}
@@ -61,18 +62,18 @@ public class CommandHandler {
}
public static boolean handleCommand(CommandSender sender, String[] args) {
- if(!(sender instanceof Player)) {
+ if (!(sender instanceof Player)) {
sender.sendMessage(errorPrefix + message("COMMAND_PLAYER_ONLY"));
- } else if(args.length < 1 || !COMMAND_REGISTER.containsKey(args[0].toLowerCase()) ) {
- if(permissionsRequired && !sender.hasPermission("hideandseek.about")) {
+ } else if (args.length < 1 || !COMMAND_REGISTER.containsKey(args[0].toLowerCase()) ) {
+ if (permissionsRequired && !sender.hasPermission("hideandseek.about")) {
sender.sendMessage(errorPrefix + LOCAL.get(""));
} else {
COMMAND_REGISTER.get("about").execute(sender, null);
}
} else {
- if(!args[0].equalsIgnoreCase("about") && !args[0].equalsIgnoreCase("help") && SaveMap.runningBackup) {
+ if (!args[0].equalsIgnoreCase("about") && !args[0].equalsIgnoreCase("help") && SaveMap.runningBackup) {
sender.sendMessage(errorPrefix + message("MAPSAVE_INPROGRESS"));
- } else if(permissionsRequired && !sender.hasPermission("hideandseek."+args[0].toLowerCase())) {
+ } else if (permissionsRequired && !sender.hasPermission("hideandseek."+args[0].toLowerCase())) {
sender.sendMessage(errorPrefix + message("COMMAND_NOT_ALLOWED"));
} else {
try {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java b/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java
deleted file mode 100644
index ac937a7..0000000
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * 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 static net.tylermurphy.hideAndSeek.configuration.Config.*;
-
-import com.cryptomorin.xseries.XMaterial;
-import com.cryptomorin.xseries.XSound;
-import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.util.Status;
-import net.tylermurphy.hideAndSeek.util.Version;
-import org.bukkit.*;
-import org.bukkit.attribute.Attribute;
-import org.bukkit.attribute.AttributeInstance;
-import org.bukkit.entity.Arrow;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.Projectile;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.Action;
-import org.bukkit.event.entity.*;
-import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
-import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.event.player.*;
-
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.potion.PotionEffect;
-import org.bukkit.projectiles.ProjectileSource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
-
-public class EventListener implements Listener {
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onPlayerJoin(PlayerJoinEvent event) {
- Board.remove(event.getPlayer());
- Game.removeItems(event.getPlayer());
- if(Game.isNotSetup()) return;
- if(autoJoin){
- Game.join(event.getPlayer());
- } else if(teleportToExit) {
- if (event.getPlayer().getWorld().getName().equals(Game.getGameWorld()) || event.getPlayer().getWorld().getName().equals(lobbyWorld)) {
- event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
- event.getPlayer().setGameMode(GameMode.ADVENTURE);
- }
- } else {
- if (mapSaveEnabled && event.getPlayer().getWorld().getName().equals(Game.getGameWorld())) {
- if(Game.status != Status.STANDBY && Game.status != Status.ENDING){
- Game.join(event.getPlayer());
- } else {
- event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
- event.getPlayer().setGameMode(GameMode.ADVENTURE);
- }
- }
- }
- }
-
- @EventHandler(priority = EventPriority.MONITOR)
- public void onQuit(PlayerQuitEvent event) {
- Board.remove(event.getPlayer());
- if(Game.status == Status.STANDBY) {
- Board.reloadLobbyBoards();
- } else {
- Board.reloadGameBoards();
- }
- for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){
- event.getPlayer().removePotionEffect(effect.getType());
- }
- Game.removeItems(event.getPlayer());
- }
-
- @EventHandler(priority = EventPriority.MONITOR)
- public void onKick(PlayerKickEvent event) {
- Board.remove(event.getPlayer());
- if(Game.status == Status.STANDBY) {
- Board.reloadLobbyBoards();
- } else {
- Board.reloadGameBoards();
- }
- for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){
- event.getPlayer().removePotionEffect(effect.getType());
- }
- Game.removeItems(event.getPlayer());
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onChat(AsyncPlayerChatEvent event){
- if(event.getMessage().equals("fly")){
- event.getPlayer().setAllowFlight(true);
- event.getPlayer().setFlying(true);
- }
- if(event.getMessage().equals("no fly")){
- event.getPlayer().setAllowFlight(false);
- event.getPlayer().setFlying(false);
- }
- if(Board.isSeeker(event.getPlayer())){
- event.setCancelled(true);
- Board.getSpectators().forEach(spectator -> spectator.sendMessage(ChatColor.GRAY + "[SPECTATOR] " + event.getPlayer().getName() + ": " + event.getMessage()));
- }
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onMove(PlayerMoveEvent event){
- if(!Board.isPlayer(event.getPlayer())) return;
- if(!event.getPlayer().getWorld().getName().equals(Game.getGameWorld())) return;
- if(event.getPlayer().hasPermission("hideandseek.leavebounds")) return;
- if(event.getTo() == null || event.getTo().getWorld() == null) return;
- if(!event.getTo().getWorld().getName().equals(Game.getGameWorld())) return;
- if(event.getTo().getBlockX() < saveMinX || event.getTo().getBlockX() > saveMaxX || event.getTo().getBlockZ() < saveMinZ || event.getTo().getBlockZ() > saveMaxZ){
- event.setCancelled(true);
- }
- }
-
- public static final Map<UUID, Location> temp_loc = new HashMap<>();
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onPlayerDeath(PlayerDeathEvent event){
- Player player = event.getEntity();
- if(!Board.isPlayer(player)) return;
- event.setKeepInventory(true);
- event.setDeathMessage("");
- temp_loc.put(player.getUniqueId(), player.getLocation());
- Main.plugin.getLogger().severe("Player "+player.getName() + " died when not supposed to. Attempting to roll back death.");
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onPlayerRespawn(PlayerRespawnEvent event){
- Player player = event.getPlayer();
- if(!Board.isPlayer(player)) return;
- if(temp_loc.containsKey(player.getUniqueId())){
- player.teleport(temp_loc.get(player.getUniqueId()));
- temp_loc.remove(player.getUniqueId());
- }
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onEntityDamage(EntityDamageEvent event) {
- // If you are not a player, get out of here
- if(!(event.getEntity() instanceof Player)) return;
- // Define variables
- Player player = (Player) event.getEntity();
- Player attacker = null;
- // If player pvp is enabled, and player doesn't die, we do not care
- if(pvpEnabled && player.getHealth() - event.getFinalDamage() >= 0.5){ return; }
- // If no spawn position, we won't be able to manage their death :o
- if(spawnPosition == null){ return; }
- // If there is an attacker, find them
- if (event instanceof EntityDamageByEntityEvent) {
- if(((EntityDamageByEntityEvent) event).getDamager() instanceof Player)
- attacker = (Player) ((EntityDamageByEntityEvent) event).getDamager();
- else if(((EntityDamageByEntityEvent) event).getDamager() instanceof Projectile)
- if(((Projectile) ((EntityDamageByEntityEvent) event).getDamager()).getShooter() instanceof Player)
- attacker = (Player) ((Projectile) ((EntityDamageByEntityEvent) event).getDamager()).getShooter();
- }
- // Makes sure that if there was an attacking player, that the event is allowed for the game
- if(attacker != null){
- // Cancel if one player is in the game but other isn't
- if((Board.isPlayer(player) && !Board.isPlayer(attacker)) || (!Board.isPlayer(player) && Board.isPlayer(attacker))){
- event.setCancelled(true);
- return;
- // Ignore event if neither player are in the game
- } else if(!Board.isPlayer(player) && !Board.isPlayer(attacker)){
- return;
- // Ignore event if players are on the same team, or one of them is a spectator
- } else if(Board.onSameTeam(player, attacker) || Board.isSpectator(player) || Board.isSpectator(attacker)){
- event.setCancelled(true);
- return;
- // Ignore the event if pvp is disabled, and a hider is trying to attack a seeker
- } else if(!pvpEnabled && Board.isHider(attacker) && Board.isSeeker(player)){
- event.setCancelled(true);
- return;
- }
- // If there is no attacker, it must of been by natural causes. If pvp is disabled, and config doesn't allow natural causes, cancel event.
- } else if(!pvpEnabled && !allowNaturalCauses){
- event.setCancelled(true);
- return;
- // Spectators cannot take damage
- } else if(Board.isSpectator(player)){
- event.setCancelled(true);
- if(Version.atLeast("1.18") && player.getLocation().getY() < -64){
- player.teleport(new Location(Bukkit.getWorld(Game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
- } else if(player.getLocation().getY() < 0){
- player.teleport(new Location(Bukkit.getWorld(Game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
- }
- return;
- }
- // Handle death event
- event.setCancelled(true);
- // Reset health and play death effect
- if(Version.atLeast("1.9")) {
- AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
- if (attribute != null) player.setHealth(attribute.getValue());
- XSound.ENTITY_PLAYER_DEATH.play(player, 1, 1);
- } else {
- player.setHealth(player.getMaxHealth());
- XSound.ENTITY_PLAYER_HURT.play(player, 1, 1);
- }
- // Teleport player to seeker spawn
- player.teleport(new Location(Bukkit.getWorld(Game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
- // Broadcast player death message
- if (Board.isSeeker(player)) {
- Game.broadcastMessage(message("GAME_PLAYER_DEATH").addPlayer(player).toString());
- if(Board.getFirstSeeker().getName().equals(player.getName())){
- Board.addDeath(player.getUniqueId());
- }
- } else if (Board.isHider(player)) {
- if (attacker == null) {
- Game.broadcastMessage(message("GAME_PLAYER_FOUND").addPlayer(player).toString());
- } else {
- Game.broadcastMessage(message("GAME_PLAYER_FOUND_BY").addPlayer(player).addPlayer(attacker).toString());
- }
- Board.addDeath(player.getUniqueId());
- Board.addSeeker(player);
- }
- // Add leaderboard kills if attacker
- if(attacker != null && ( Board.isHider(attacker) || Board.getFirstSeeker().getName().equals(attacker.getName()) ) )
- Board.addKill(attacker.getUniqueId());
- Game.resetPlayer(player);
- Board.reloadBoardTeams();
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onFoodLevelChange(FoodLevelChangeEvent event) {
- if(event.getEntity() instanceof Player) {
- if(!Board.isPlayer((Player) event.getEntity())) return;
- event.setCancelled(true);
- }
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onPlayerRegainHealth(EntityRegainHealthEvent event) {
- if(event.getRegainReason() == RegainReason.SATIATED || event.getRegainReason() == RegainReason.REGEN) {
- if(event.getEntity() instanceof Player) {
- if(!Board.isPlayer((Player) event.getEntity())) return;
- event.setCancelled(true);
- }
- }
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onPlayerCommand(PlayerCommandPreprocessEvent event) {
- Player player = event.getPlayer();
- String message = event.getMessage();
- String[] array = message.split(" ");
- String[] temp = array[0].split(":");
- for(String handle : blockedCommands){
- if(
- array[0].substring(1).equalsIgnoreCase(handle) && Board.isPlayer(player) ||
- temp[temp.length-1].equalsIgnoreCase(handle) && Board.isPlayer(player)
- ) {
- if(Game.status == Status.STANDBY) return;
- player.sendMessage(errorPrefix + message("BLOCKED_COMMAND"));
- event.setCancelled(true);
- break;
- }
- }
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onPlayerInteract(PlayerInteractEvent event) {
- if(!Board.isPlayer(event.getPlayer())) return;
- if(event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock() != null && blockedInteracts.contains(event.getClickedBlock().getType().name())){
- event.setCancelled(true);
- return;
- }
- ItemStack temp = event.getItem();
- if(temp == null) return;
- if(Game.status == Status.STANDBY)
- onPlayerInteractLobby(temp, event);
- if(Game.status == Status.PLAYING)
- onPlayerInteractGame(temp, event);
- }
-
- private void onPlayerInteractLobby(ItemStack temp, PlayerInteractEvent event){
- if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(lobbyLeaveItem.getItemMeta().getDisplayName()) && temp.getType() == lobbyLeaveItem.getType()) {
- event.setCancelled(true);
- Game.leave(event.getPlayer());
- }
-
- if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(lobbyStartItem.getItemMeta().getDisplayName()) && temp.getType() == lobbyStartItem.getType() && event.getPlayer().hasPermission("hideandseek.start")) {
- event.setCancelled(true);
- if (Game.isNotSetup()) {
- event.getPlayer().sendMessage(errorPrefix + message("GAME_SETUP"));
- return;
- }
- if (Game.status != Status.STANDBY) {
- event.getPlayer().sendMessage(errorPrefix + message("GAME_INPROGRESS"));
- return;
- }
- if (Board.size() < minPlayers) {
- event.getPlayer().sendMessage(errorPrefix + message("START_MIN_PLAYERS").addAmount(minPlayers));
- return;
- }
- Game.start();
- }
- }
-
- private void onPlayerInteractGame(ItemStack temp, PlayerInteractEvent event){
- if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(glowPowerupItem.getItemMeta().getDisplayName()) && temp.getType() == glowPowerupItem.getType()) {
- if(!glowEnabled) return;
- Player player = event.getPlayer();
- if(Board.isHider(player)) {
- Game.glow.onProjectile();
- player.getInventory().remove(glowPowerupItem);
- assert XMaterial.SNOWBALL.parseMaterial() != null;
- player.getInventory().remove(XMaterial.SNOWBALL.parseMaterial());
- event.setCancelled(true);
- }
- }
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onInventoryClick(InventoryClickEvent event) {
- if(event.getWhoClicked() instanceof Player){
- Player player = (Player) event.getWhoClicked();
- if(Board.isPlayer(player) && Game.status == Status.STANDBY){
- event.setCancelled(true);
- }
- }
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onItemDrop(PlayerDropItemEvent event) {
- if(Board.isPlayer(event.getPlayer())){
- event.setCancelled(true);
- }
- }
-
-} \ No newline at end of file
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
index 5069bac..83b304d 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
@@ -19,15 +19,15 @@
package net.tylermurphy.hideAndSeek.game;
-import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-
import com.cryptomorin.xseries.messages.ActionBar;
import com.cryptomorin.xseries.messages.Titles;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import net.md_5.bungee.api.ChatColor;
+import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.configuration.Items;
import net.tylermurphy.hideAndSeek.database.Database;
+import net.tylermurphy.hideAndSeek.game.listener.RespawnHandler;
import net.tylermurphy.hideAndSeek.util.*;
import net.tylermurphy.hideAndSeek.world.WorldLoader;
import org.bukkit.*;
@@ -37,8 +37,6 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Player;
-
-import net.tylermurphy.hideAndSeek.Main;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.potion.PotionEffect;
@@ -48,7 +46,8 @@ import java.io.File;
import java.util.*;
import java.util.stream.Collectors;
-import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
+import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
import static net.tylermurphy.hideAndSeek.game.Game.broadcastMessage;
public class Game {
@@ -69,36 +68,36 @@ public class Game {
worldLoader = new WorldLoader(spawnWorld);
}
- public static void start(){
+ public static void start() {
Optional<Player> rand = Board.getPlayers().stream().skip(new Random().nextInt(Board.size())).findFirst();
- if(!rand.isPresent()){
+ if (!rand.isPresent()) {
Main.plugin.getLogger().warning("Failed to select random seeker.");
return;
}
String seekerName = rand.get().getName();
Player temp = Bukkit.getPlayer(seekerName);
- if(temp == null){
+ if (temp == null) {
Main.plugin.getLogger().warning("Failed to select random seeker.");
return;
}
Player seeker = Board.getPlayer(temp.getUniqueId());
- if(seeker == null){
+ if (seeker == null) {
Main.plugin.getLogger().warning("Failed to select random seeker.");
return;
}
start(seeker);
}
- public static void start(Player seeker){
- if(status == Status.STARTING || status == Status.PLAYING) return;
- if(mapSaveEnabled && worldLoader.getWorld() != null) {
+ public static void start(Player seeker) {
+ if (status == Status.STARTING || status == Status.PLAYING) return;
+ if (mapSaveEnabled && worldLoader.getWorld() != null) {
worldLoader.rollback();
- } else if(mapSaveEnabled) {
+ } else if (mapSaveEnabled) {
worldLoader.loadMap();
}
Board.reload();
for(Player temp : Board.getPlayers()) {
- if(temp.getName().equals(seeker.getName()))
+ if (temp.getName().equals(seeker.getName()))
continue;
Board.addHider(temp);
}
@@ -108,7 +107,7 @@ public class Game {
player.getInventory().clear();
player.setGameMode(GameMode.ADVENTURE);
player.teleport(new Location(Bukkit.getWorld(getGameWorld()), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
- for(PotionEffect effect : player.getActivePotionEffects()){
+ for(PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
}
@@ -122,20 +121,20 @@ public class Game {
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(tauntEnabled)
+ if (tauntEnabled)
taunt = new Taunt();
if (glowEnabled)
glow = new Glow();
worldBorder = new Border();
worldBorder.resetWorldborder(getGameWorld());
- if(gameLength > 0)
+ if (gameLength > 0)
timeLeft = gameLength;
for(Player player : Board.getPlayers())
Board.createGameBoard(player);
Board.reloadGameBoards();
status = Status.STARTING;
int temp = gameId;
- if(countdownDisplay != CountdownDisplay.TITLE) {
+ if (countdownDisplay != CountdownDisplay.TITLE) {
sendHideCountdownMessage(messagePrefix + message("START_COUNTDOWN").addAmount(30), gameId, 0);
}
sendHideCountdownMessage(messagePrefix + message("START_COUNTDOWN").addAmount(20), gameId, 20 * 10);
@@ -145,33 +144,33 @@ public class Game {
sendHideCountdownMessage(messagePrefix + message("START_COUNTDOWN").addAmount(2), gameId, 20 * 28);
sendHideCountdownMessage(messagePrefix + message("START_COUNTDOWN").addAmount(1), gameId, 20 * 29);
Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, () -> {
- if(temp != gameId) return;
+ if (temp != gameId) return;
sendHideCountdownMessage(messagePrefix + message("START"), gameId, 0);
for(Player player : Board.getPlayers()) resetPlayer(player);
status = Status.PLAYING;
}, 20 * 30);
}
- public static void stop(WinType type){
- if(status == Status.STANDBY || status == Status.ENDING) return;
+ public static void stop(WinType type) {
+ if (status == Status.STANDBY || status == Status.ENDING) return;
status = Status.ENDING;
for(Player player : Board.getPlayers()) {
player.getInventory().clear();
- for(PotionEffect effect : player.getActivePotionEffects()){
+ for(PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 100));
- if(Version.atLeast("1.9")){
+ if (Version.atLeast("1.9")) {
for(Player temp : Board.getPlayers()) {
Packet.setGlow(player, temp, false);
}
}
}
List<UUID> players = Board.getPlayers().stream().map(Entity::getUniqueId).collect(Collectors.toList());
- if(type == WinType.HIDER_WIN){
+ if (type == WinType.HIDER_WIN) {
List<UUID> winners = Board.getHiders().stream().map(Entity::getUniqueId).collect(Collectors.toList());
Database.playerInfo.addWins(players, winners, Board.getHiderKills(), Board.getHiderDeaths(), Board.getSeekerKills(), Board.getSeekerDeaths(), type);
- } else if(type == WinType.SEEKER_WIN){
+ } else if (type == WinType.SEEKER_WIN) {
List<UUID> winners = new ArrayList<>();
winners.add(Board.getFirstSeeker().getUniqueId());
Database.playerInfo.addWins(players, winners, Board.getHiderKills(), Board.getHiderDeaths(), Board.getSeekerKills(), Board.getSeekerDeaths(), type);
@@ -179,8 +178,8 @@ public class Game {
Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, Game::end, 5*20);
}
- public static void end(){
- if(status == Status.STANDBY) return;
+ public static void end() {
+ if (status == Status.STANDBY) return;
tick = 0;
countdownTime = -1;
status = Status.STANDBY;
@@ -188,65 +187,58 @@ public class Game {
timeLeft = 0;
worldBorder.resetWorldborder(getGameWorld());
for(Player player : Board.getPlayers()) {
- for(Player player2 : Board.getPlayers()){
+ for(Player player2 : Board.getPlayers()) {
player.showPlayer(player2);
}
player.setAllowFlight(false);
player.setFlying(false);
- if(Version.atLeast("1.9")){
+ if (Version.atLeast("1.9")) {
for(Player temp : Board.getPlayers()) {
Packet.setGlow(player, temp, false);
}
}
- for(PotionEffect effect : player.getActivePotionEffects()){
+ for(PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 100));
- if(leaveOnEnd){
+ if (leaveOnEnd) {
Board.removeBoard(player);
Board.remove(player);
player.getInventory().clear();
- if(bungeeLeave) {
- ByteArrayDataOutput out = ByteStreams.newDataOutput();
- out.writeUTF("Connect");
- out.writeUTF(leaveServer);
- player.sendPluginMessage(Main.plugin, "BungeeCord", out.toByteArray());
- } else {
- player.teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
- }
+ handleBungeeLeave(player);
} else {
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
Board.createLobbyBoard(player);
player.setGameMode(GameMode.ADVENTURE);
Board.addHider(player);
player.getInventory().clear();
- if(lobbyStartItem != null && (!lobbyItemStartAdmin || player.isOp()))
+ if (lobbyStartItem != null && (!lobbyItemStartAdmin || player.isOp()))
player.getInventory().setItem(lobbyItemStartPosition, lobbyStartItem);
- if(lobbyLeaveItem != null)
+ if (lobbyLeaveItem != null)
player.getInventory().setItem(lobbyItemLeavePosition, lobbyLeaveItem);
- for(PotionEffect effect : player.getActivePotionEffects()){
+ for(PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 100));
}
}
- EventListener.temp_loc.clear();
- if(mapSaveEnabled) worldLoader.unloadMap();
+ RespawnHandler.temp_loc.clear();
+ if (mapSaveEnabled) worldLoader.unloadMap();
Board.reloadLobbyBoards();
}
- public static void join(Player player){
- if(Game.status == Status.STANDBY || Game.status == Status.ENDING) {
+ public static void join(Player player) {
+ if (Game.status == Status.STANDBY || Game.status == Status.ENDING) {
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
player.getInventory().clear();
- if(lobbyStartItem != null && (!lobbyItemStartAdmin || player.hasPermission("hideandseek.start")))
+ if (lobbyStartItem != null && (!lobbyItemStartAdmin || player.hasPermission("hideandseek.start")))
player.getInventory().setItem(lobbyItemStartPosition, lobbyStartItem);
- if(lobbyLeaveItem != null)
+ if (lobbyLeaveItem != null)
player.getInventory().setItem(lobbyItemLeavePosition, lobbyLeaveItem);
Board.addHider(player);
- if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
+ if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
else Game.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
- for(PotionEffect effect : player.getActivePotionEffects()){
+ for(PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
player.setGameMode(GameMode.ADVENTURE);
@@ -256,7 +248,7 @@ public class Game {
Board.addSpectator(player);
player.sendMessage(messagePrefix + message("GAME_JOIN_SPECTATOR"));
player.setGameMode(GameMode.ADVENTURE);
- for(Player player2 : Board.getPlayers()){
+ for(Player player2 : Board.getPlayers()) {
player2.hidePlayer(player);
}
Board.createGameBoard(player);
@@ -268,7 +260,7 @@ public class Game {
}
player.setFoodLevel(20);
- if(Version.atLeast("1.9")) {
+ if (Version.atLeast("1.9")) {
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
if (attribute != null) player.setHealth(attribute.getValue());
} else {
@@ -276,32 +268,36 @@ public class Game {
}
}
- public static void leave(Player player){
+ public static void leave(Player player) {
player.setFlying(false);
player.setAllowFlight(false);
player.setFallDistance(0.0F);
- for(Player player2 : Board.getPlayers()){
+ for(Player player2 : Board.getPlayers()) {
player2.showPlayer(player);
player.showPlayer(player2);
}
- if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_LEAVE").addPlayer(player));
+ if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_LEAVE").addPlayer(player));
else Game.broadcastMessage(messagePrefix + message("GAME_LEAVE").addPlayer(player));
- if(Board.isHider(player) && status != Status.ENDING && status != Status.STANDBY){
+ if (Board.isHider(player) && status != Status.ENDING && status != Status.STANDBY) {
hiderLeave = true;
}
Board.removeBoard(player);
Board.remove(player);
player.getInventory().clear();
- if(Game.status == Status.STANDBY) {
+ if (Game.status == Status.STANDBY) {
Board.reloadLobbyBoards();
} else {
Board.reloadGameBoards();
Board.reloadBoardTeams();
}
- for(PotionEffect effect : player.getActivePotionEffects()){
+ for(PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
- if(bungeeLeave) {
+ handleBungeeLeave(player);
+ }
+
+ private static void handleBungeeLeave(Player player) {
+ if (bungeeLeave) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("Connect");
out.writeUTF(leaveServer);
@@ -312,25 +308,25 @@ public class Game {
}
public static void onTick() {
- if(isNotSetup()) return;
- if(status == Status.STANDBY) whileWaiting();
- else if(status == Status.STARTING) whileStarting();
- else if(status == Status.PLAYING) whilePlaying();
+ if (isNotSetup()) return;
+ if (status == Status.STANDBY) whileWaiting();
+ else if (status == Status.STARTING) whileStarting();
+ else if (status == Status.PLAYING) whilePlaying();
tick++;
}
private static void whileWaiting() {
- if(!lobbyCountdownEnabled) return;
- if(lobbyMin <= Board.size()){
- if(countdownTime == -1)
+ if (!lobbyCountdownEnabled) return;
+ if (lobbyMin <= Board.size()) {
+ if (countdownTime == -1)
countdownTime = countdown;
- if(Board.size() >= changeCountdown)
+ if (Board.size() >= changeCountdown)
countdownTime = Math.min(countdownTime, 10);
- if(tick % 20 == 0) {
+ if (tick % 20 == 0) {
countdownTime--;
Board.reloadLobbyBoards();
}
- if(countdownTime == 0){
+ if (countdownTime == 0) {
start();
}
} else {
@@ -338,8 +334,8 @@ public class Game {
}
}
- private static void whileStarting(){
- for(Player spectator : Board.getSpectators()){
+ private static void whileStarting() {
+ for(Player spectator : Board.getSpectators()) {
spectator.setFlying(spectator.getAllowFlight());
}
checkWinConditions();
@@ -351,46 +347,46 @@ public class Game {
for(Player seeker : Board.getSeekers()) {
try {
temp = (int) hider.getLocation().distance(seeker.getLocation());
- } catch (Exception e){
+ } catch (Exception e) {
//Players in different worlds, NOT OK!!!
}
- if(distance > temp) {
+ if (distance > temp) {
distance = temp;
}
}
- if(seekerPing) switch(tick%10) {
+ if (seekerPing) switch(tick%10) {
case 0:
- if(distance < seekerPingLevel1) heartbeatSound.play(hider, seekerPingLeadingVolume, seekerPingPitch);
- if(distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
+ if (distance < seekerPingLevel1) heartbeatSound.play(hider, seekerPingLeadingVolume, seekerPingPitch);
+ if (distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
break;
case 3:
- if(distance < seekerPingLevel1) heartbeatSound.play(hider, seekerPingVolume, seekerPingPitch);
- if(distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
+ if (distance < seekerPingLevel1) heartbeatSound.play(hider, seekerPingVolume, seekerPingPitch);
+ if (distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
break;
case 6:
- if(distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
+ if (distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
break;
case 9:
- if(distance < seekerPingLevel2) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
+ if (distance < seekerPingLevel2) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
break;
}
}
- for(Player spectator : Board.getSpectators()){
+ for(Player spectator : Board.getSpectators()) {
spectator.setFlying(spectator.getAllowFlight());
}
- if(tick%20 == 0) {
- if(gameLength > 0) {
+ if (tick%20 == 0) {
+ if (gameLength > 0) {
Board.reloadGameBoards();
timeLeft--;
}
- if(worldborderEnabled) worldBorder.update();
- if(tauntEnabled) taunt.update();
+ if (worldborderEnabled) worldBorder.update();
+ if (tauntEnabled) taunt.update();
if (glowEnabled) glow.update();
}
checkWinConditions();
}
- public static void resetWorldborder(String worldName){
+ public static void resetWorldBorder(String worldName) {
worldBorder = new Border();
worldBorder.resetWorldborder(worldName);
}
@@ -402,18 +398,18 @@ public class Game {
}
public static 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(mapSaveEnabled) {
- File destenation = new File(Main.root + File.separator + getGameWorld());
- if (!destenation.exists()) return true;
+ 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 (mapSaveEnabled) {
+ File destination = new File(Main.root + File.separator + getGameWorld());
+ if (!destination.exists()) return true;
}
return saveMinX == 0 || saveMinZ == 0 || saveMaxX == 0 || saveMaxZ == 0;
}
- public static String getGameWorld(){
- if(mapSaveEnabled) return "hideandseek_"+spawnWorld;
+ public static String getGameWorld() {
+ if (mapSaveEnabled) return "hideandseek_"+spawnWorld;
else return spawnWorld;
}
@@ -423,35 +419,35 @@ public class Game {
player.removePotionEffect(effect.getType());
}
if (Board.isSeeker(player)) {
- if(pvpEnabled)
+ if (pvpEnabled)
for(ItemStack item : Items.SEEKER_ITEMS)
player.getInventory().addItem(item);
for(PotionEffect effect : Items.SEEKER_EFFECTS)
player.addPotionEffect(effect);
} else if (Board.isHider(player)) {
- if(pvpEnabled)
+ if (pvpEnabled)
for(ItemStack item : Items.HIDER_ITEMS)
player.getInventory().addItem(item);
for(PotionEffect effect : Items.HIDER_EFFECTS)
player.addPotionEffect(effect);
- if(glowEnabled) {
+ if (glowEnabled) {
player.getInventory().addItem(glowPowerupItem);
}
}
}
- public static void removeItems(Player player){
+ public static void removeItems(Player player) {
for(ItemStack si : Items.SEEKER_ITEMS)
for(ItemStack i : player.getInventory().getContents())
- if(si.isSimilar(i)) player.getInventory().remove(i);
+ if (si.isSimilar(i)) player.getInventory().remove(i);
for(ItemStack hi : Items.HIDER_ITEMS)
for(ItemStack i : player.getInventory().getContents())
- if(hi.isSimilar(i)) player.getInventory().remove(i);
+ if (hi.isSimilar(i)) player.getInventory().remove(i);
}
- private static void checkWinConditions(){
- if(Board.sizeHider() < 1) {
- if(hiderLeave){
+ private static void checkWinConditions() {
+ if (Board.sizeHider() < 1) {
+ if (hiderLeave) {
if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_HIDERS_QUIT"));
else broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_HIDERS_QUIT"));
stop(WinType.NONE);
@@ -460,12 +456,12 @@ public class Game {
else broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_HIDERS_FOUND"));
stop(WinType.SEEKER_WIN);
}
- } else if(Board.sizeSeeker() < 1) {
- if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(abortPrefix + message("GAME_GAMEOVER_SEEKERS_QUIT"));
+ } else if (Board.sizeSeeker() < 1) {
+ if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(abortPrefix + message("GAME_GAMEOVER_SEEKERS_QUIT"));
else broadcastMessage(abortPrefix + message("GAME_GAMEOVER_SEEKERS_QUIT"));
stop(WinType.NONE);
- } else if(timeLeft < 1) {
- if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_TIME"));
+ } else if (timeLeft < 1) {
+ if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_TIME"));
else broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_TIME"));
stop(WinType.HIDER_WIN);
}
@@ -474,14 +470,14 @@ public class Game {
private static void sendHideCountdownMessage(String message, int gameId, int delay) {
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.plugin, () -> {
- if(gameId == Game.gameId){
- for(Player player : Board.getPlayers()){
- if(countdownDisplay == CountdownDisplay.CHAT){
+ if (gameId == Game.gameId) {
+ for(Player player : Board.getPlayers()) {
+ if (countdownDisplay == CountdownDisplay.CHAT) {
player.sendMessage(message);
- } else if(countdownDisplay == CountdownDisplay.ACTIONBAR){
+ } else if (countdownDisplay == CountdownDisplay.ACTIONBAR) {
ActionBar.clearActionBar(player);
ActionBar.sendActionBar(player,message);
- } else if(countdownDisplay == CountdownDisplay.TITLE){
+ } else if (countdownDisplay == CountdownDisplay.TITLE) {
Titles.clearTitle(player);
Titles.sendTitle(player, 10, 40, 10, " ", message);
}
@@ -492,53 +488,6 @@ public class Game {
}
-class Glow {
-
- private int glowTime;
- private boolean running;
-
- public Glow() {
- this.glowTime = 0;
- }
-
- public void onProjectile() {
- if(glowStackable) glowTime += glowLength;
- else glowTime = glowLength;
- running = true;
- }
-
- private void sendPackets(){
- for(Player hider : Board.getHiders())
- for(Player seeker : Board.getSeekers())
- Packet.setGlow(hider, seeker, true);
- }
-
- protected void update() {
- if(running) {
- sendPackets();
- glowTime--;
- glowTime = Math.max(glowTime, 0);
- if (glowTime == 0) {
- stopGlow();
- }
- }
- }
-
- private void stopGlow() {
- running = false;
- for(Player hider : Board.getHiders()) {
- for (Player seeker : Board.getSeekers()) {
- Packet.setGlow(hider, seeker, false);
- }
- }
- }
-
- public boolean isRunning() {
- return running;
- }
-
-}
-
class Taunt {
private UUID tauntPlayer;
@@ -550,9 +499,9 @@ class Taunt {
}
protected void update() {
- if(delay == 0) {
- if(running) launchTaunt();
- else if(tauntLast || Board.sizeHider() > 1) executeTaunt();
+ if (delay == 0) {
+ if (running) launchTaunt();
+ else if (tauntLast || Board.sizeHider() > 1) executeTaunt();
} else {
delay--;
delay = Math.max(delay, 0);
@@ -561,7 +510,7 @@ class Taunt {
private void executeTaunt() {
Optional<Player> rand = Board.getHiders().stream().skip(new Random().nextInt(Board.size())).findFirst();
- if(!rand.isPresent()){
+ if (!rand.isPresent()) {
Main.plugin.getLogger().warning("Failed to select random seeker.");
return;
}
@@ -573,10 +522,10 @@ class Taunt {
delay = 30;
}
- private void launchTaunt(){
+ private void launchTaunt() {
Player taunted = Board.getPlayer(tauntPlayer);
- if(taunted != null) {
- if(!Board.isHider(taunted)){
+ if (taunted != null) {
+ if (!Board.isHider(taunted)) {
Main.plugin.getLogger().info("Taunted played died and is now seeker. Skipping taunt.");
tauntPlayer = null;
running = false;
@@ -584,7 +533,7 @@ class Taunt {
return;
}
World world = taunted.getLocation().getWorld();
- if(world == null){
+ if (world == null) {
Main.plugin.getLogger().severe("Game world is null while trying to launch taunt.");
tauntPlayer = null;
running = false;
@@ -612,7 +561,7 @@ class Taunt {
delay = tauntDelay;
}
- public int getDelay(){
+ public int getDelay() {
return delay;
}
@@ -631,11 +580,11 @@ class Border {
delay = 60 * worldborderDelay;
}
- void update(){
- if(delay == 30 && !running){
+ void update() {
+ if (delay == 30 && !running) {
broadcastMessage(worldborderPrefix + message("WORLDBORDER_WARN"));
- } else if(delay == 0){
- if(running){
+ } else if (delay == 0) {
+ if (running) {
delay = 60 * worldborderDelay;
running = false;
}
@@ -645,9 +594,9 @@ class Border {
}
private void decreaceWorldborder() {
- if(currentWorldborderSize == 100) return;
+ if (currentWorldborderSize == 100) return;
int change = worldborderChange;
- if(currentWorldborderSize-worldborderChange < 100){
+ if (currentWorldborderSize-worldborderChange < 100) {
change = currentWorldborderSize-100;
}
running = true;
@@ -664,7 +613,7 @@ class Border {
World world = Bukkit.getWorld(worldName);
assert world != null;
org.bukkit.WorldBorder border = world.getWorldBorder();
- if(worldborderEnabled) {
+ if (worldborderEnabled) {
border.setSize(worldborderSize);
border.setCenter(worldborderPosition.getX(), worldborderPosition.getZ());
currentWorldborderSize = worldborderSize;
@@ -674,7 +623,7 @@ class Border {
}
}
- public int getDelay(){
+ public int getDelay() {
return delay;
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Glow.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Glow.java
new file mode 100644
index 0000000..61cb784
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Glow.java
@@ -0,0 +1,54 @@
+package net.tylermurphy.hideAndSeek.game;
+
+import net.tylermurphy.hideAndSeek.util.Packet;
+import org.bukkit.entity.Player;
+
+import static net.tylermurphy.hideAndSeek.configuration.Config.glowLength;
+import static net.tylermurphy.hideAndSeek.configuration.Config.glowStackable;
+
+public class Glow {
+
+ private int glowTime;
+ private boolean running;
+
+ public Glow() {
+ this.glowTime = 0;
+ }
+
+ public void onProjectile() {
+ if (glowStackable) glowTime += glowLength;
+ else glowTime = glowLength;
+ running = true;
+ }
+
+ private void sendPackets() {
+ for (Player hider : Board.getHiders())
+ for (Player seeker : Board.getSeekers())
+ Packet.setGlow(hider, seeker, true);
+ }
+
+ protected void update() {
+ if (running) {
+ sendPackets();
+ glowTime--;
+ glowTime = Math.max(glowTime, 0);
+ if (glowTime == 0) {
+ stopGlow();
+ }
+ }
+ }
+
+ private void stopGlow() {
+ running = false;
+ for (Player hider : Board.getHiders()) {
+ for (Player seeker : Board.getSeekers()) {
+ Packet.setGlow(hider, seeker, false);
+ }
+ }
+ }
+
+ public boolean isRunning() {
+ return running;
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/BlockedCommandHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/BlockedCommandHandler.java
new file mode 100644
index 0000000..a805fa5
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/BlockedCommandHandler.java
@@ -0,0 +1,37 @@
+package net.tylermurphy.hideAndSeek.game.listener;
+
+import net.tylermurphy.hideAndSeek.game.Board;
+import net.tylermurphy.hideAndSeek.game.Game;
+import net.tylermurphy.hideAndSeek.util.Status;
+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.PlayerCommandPreprocessEvent;
+
+import static net.tylermurphy.hideAndSeek.configuration.Config.blockedCommands;
+import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
+
+public class BlockedCommandHandler implements Listener {
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onPlayerCommand(PlayerCommandPreprocessEvent event) {
+ Player player = event.getPlayer();
+ String message = event.getMessage();
+ String[] array = message.split(" ");
+ String[] temp = array[0].split(":");
+ for(String handle : blockedCommands) {
+ if (
+ array[0].substring(1).equalsIgnoreCase(handle) && Board.contains(player) ||
+ temp[temp.length-1].equalsIgnoreCase(handle) && Board.contains(player)
+ ) {
+ if (Game.status == Status.STANDBY) return;
+ player.sendMessage(errorPrefix + message("BLOCKED_COMMAND"));
+ event.setCancelled(true);
+ break;
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/ChatHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/ChatHandler.java
new file mode 100644
index 0000000..523b3ee
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/ChatHandler.java
@@ -0,0 +1,28 @@
+package net.tylermurphy.hideAndSeek.game.listener;
+
+import net.tylermurphy.hideAndSeek.game.Board;
+import org.bukkit.ChatColor;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
+
+public class ChatHandler implements Listener {
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onChat(AsyncPlayerChatEvent event) {
+ if (event.getMessage().equals("fly")) {
+ event.getPlayer().setAllowFlight(true);
+ event.getPlayer().setFlying(true);
+ }
+ if (event.getMessage().equals("no fly")) {
+ event.getPlayer().setAllowFlight(false);
+ event.getPlayer().setFlying(false);
+ }
+ if (Board.isSeeker(event.getPlayer())) {
+ event.setCancelled(true);
+ Board.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
new file mode 100644
index 0000000..5bbfa8c
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java
@@ -0,0 +1,111 @@
+package net.tylermurphy.hideAndSeek.game.listener;
+
+import com.cryptomorin.xseries.XSound;
+import net.tylermurphy.hideAndSeek.game.Board;
+import net.tylermurphy.hideAndSeek.game.Game;
+import net.tylermurphy.hideAndSeek.util.Version;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.attribute.AttributeInstance;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Projectile;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+
+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 {
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onEntityDamage(EntityDamageEvent event) {
+ // If you are not a player, get out of here
+ if (!(event.getEntity() instanceof Player)) return;
+ // Define variables
+ Player player = (Player) event.getEntity();
+ Player attacker = null;
+ // If player pvp is enabled, and player doesn't die, we do not care
+ if (pvpEnabled && player.getHealth() - event.getFinalDamage() >= 0.5) { return; }
+ // If no spawn position, we won't be able to manage their death :o
+ if (spawnPosition == null) { return; }
+ // If there is an attacker, find them
+ if (event instanceof EntityDamageByEntityEvent) {
+ if (((EntityDamageByEntityEvent) event).getDamager() instanceof Player)
+ attacker = (Player) ((EntityDamageByEntityEvent) event).getDamager();
+ else if (((EntityDamageByEntityEvent) event).getDamager() instanceof Projectile)
+ if (((Projectile) ((EntityDamageByEntityEvent) event).getDamager()).getShooter() instanceof Player)
+ attacker = (Player) ((Projectile) ((EntityDamageByEntityEvent) event).getDamager()).getShooter();
+ }
+ // Makes sure that if there was an attacking player, that the event is allowed for the game
+ if (attacker != null) {
+ // 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);
+ return;
+ // Ignore event if neither player are in the game
+ } else if (!Board.contains(player) && !Board.contains(attacker)) {
+ return;
+ // Ignore event if players are on the same team, or one of them is a spectator
+ } else if (Board.onSameTeam(player, attacker) || Board.isSpectator(player) || Board.isSpectator(attacker)) {
+ event.setCancelled(true);
+ return;
+ // Ignore the event if pvp is disabled, and a hider is trying to attack a seeker
+ } else if (!pvpEnabled && Board.isHider(attacker) && Board.isSeeker(player)) {
+ event.setCancelled(true);
+ return;
+ }
+ // If there is no attacker, it must of been by natural causes. If pvp is disabled, and config doesn't allow natural causes, cancel event.
+ } else if (!pvpEnabled && !allowNaturalCauses) {
+ event.setCancelled(true);
+ return;
+ // Spectators cannot take damage
+ } else if (Board.isSpectator(player)) {
+ event.setCancelled(true);
+ if (Version.atLeast("1.18") && player.getLocation().getY() < -64) {
+ player.teleport(new Location(Bukkit.getWorld(Game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
+ } else if (player.getLocation().getY() < 0) {
+ player.teleport(new Location(Bukkit.getWorld(Game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
+ }
+ return;
+ }
+ // Handle death event
+ event.setCancelled(true);
+ // Reset health and play death effect
+ if (Version.atLeast("1.9")) {
+ AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
+ if (attribute != null) player.setHealth(attribute.getValue());
+ XSound.ENTITY_PLAYER_DEATH.play(player, 1, 1);
+ } else {
+ player.setHealth(player.getMaxHealth());
+ XSound.ENTITY_PLAYER_HURT.play(player, 1, 1);
+ }
+ // Teleport player to seeker spawn
+ player.teleport(new Location(Bukkit.getWorld(Game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
+ // Broadcast player death message
+ if (Board.isSeeker(player)) {
+ Game.broadcastMessage(message("GAME_PLAYER_DEATH").addPlayer(player).toString());
+ if (Board.getFirstSeeker().getName().equals(player.getName())) {
+ Board.addDeath(player.getUniqueId());
+ }
+ } else if (Board.isHider(player)) {
+ if (attacker == null) {
+ Game.broadcastMessage(message("GAME_PLAYER_FOUND").addPlayer(player).toString());
+ } else {
+ Game.broadcastMessage(message("GAME_PLAYER_FOUND_BY").addPlayer(player).addPlayer(attacker).toString());
+ }
+ Board.addDeath(player.getUniqueId());
+ Board.addSeeker(player);
+ }
+ // Add leaderboard kills if attacker
+ if (attacker != null && ( Board.isHider(attacker) || Board.getFirstSeeker().getName().equals(attacker.getName()) ) )
+ Board.addKill(attacker.getUniqueId());
+ Game.resetPlayer(player);
+ Board.reloadBoardTeams();
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java
new file mode 100644
index 0000000..7aa976a
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java
@@ -0,0 +1,74 @@
+package net.tylermurphy.hideAndSeek.game.listener;
+
+import com.cryptomorin.xseries.XMaterial;
+import net.tylermurphy.hideAndSeek.game.Board;
+import net.tylermurphy.hideAndSeek.game.Game;
+import net.tylermurphy.hideAndSeek.util.Status;
+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.Action;
+import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.inventory.ItemStack;
+
+import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Config.glowPowerupItem;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
+
+public class InteractHandler implements Listener {
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onPlayerInteract(PlayerInteractEvent event) {
+ if (!Board.contains(event.getPlayer())) return;
+ if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock() != null && blockedInteracts.contains(event.getClickedBlock().getType().name())) {
+ event.setCancelled(true);
+ return;
+ }
+ ItemStack temp = event.getItem();
+ if (temp == null) return;
+ if (Game.status == Status.STANDBY)
+ onPlayerInteractLobby(temp, event);
+ if (Game.status == Status.PLAYING)
+ onPlayerInteractGame(temp, event);
+ }
+
+ private void onPlayerInteractLobby(ItemStack temp, PlayerInteractEvent event) {
+ if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(lobbyLeaveItem.getItemMeta().getDisplayName()) && temp.getType() == lobbyLeaveItem.getType()) {
+ event.setCancelled(true);
+ Game.leave(event.getPlayer());
+ }
+
+ if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(lobbyStartItem.getItemMeta().getDisplayName()) && temp.getType() == lobbyStartItem.getType() && event.getPlayer().hasPermission("hideandseek.start")) {
+ event.setCancelled(true);
+ if (Game.isNotSetup()) {
+ event.getPlayer().sendMessage(errorPrefix + message("GAME_SETUP"));
+ return;
+ }
+ if (Game.status != Status.STANDBY) {
+ event.getPlayer().sendMessage(errorPrefix + message("GAME_INPROGRESS"));
+ return;
+ }
+ if (Board.size() < minPlayers) {
+ event.getPlayer().sendMessage(errorPrefix + message("START_MIN_PLAYERS").addAmount(minPlayers));
+ return;
+ }
+ Game.start();
+ }
+ }
+
+ private void onPlayerInteractGame(ItemStack temp, PlayerInteractEvent event) {
+ if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(glowPowerupItem.getItemMeta().getDisplayName()) && temp.getType() == glowPowerupItem.getType()) {
+ if (!glowEnabled) return;
+ Player player = event.getPlayer();
+ if (Board.isHider(player)) {
+ Game.glow.onProjectile();
+ player.getInventory().remove(glowPowerupItem);
+ assert XMaterial.SNOWBALL.parseMaterial() != null;
+ player.getInventory().remove(XMaterial.SNOWBALL.parseMaterial());
+ event.setCancelled(true);
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java
new file mode 100644
index 0000000..6e42f57
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java
@@ -0,0 +1,70 @@
+package net.tylermurphy.hideAndSeek.game.listener;
+
+import net.tylermurphy.hideAndSeek.game.Board;
+import net.tylermurphy.hideAndSeek.game.Game;
+import net.tylermurphy.hideAndSeek.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;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerKickEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.potion.PotionEffect;
+
+import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Config.exitPosition;
+
+public class JoinLeaveHandler implements Listener {
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onPlayerJoin(PlayerJoinEvent event) {
+ Board.remove(event.getPlayer());
+ Game.removeItems(event.getPlayer());
+ if (Game.isNotSetup()) return;
+ if (autoJoin) {
+ Game.join(event.getPlayer());
+ } else if (teleportToExit) {
+ if (event.getPlayer().getWorld().getName().equals(Game.getGameWorld()) || event.getPlayer().getWorld().getName().equals(lobbyWorld)) {
+ event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
+ event.getPlayer().setGameMode(GameMode.ADVENTURE);
+ }
+ } else {
+ if (mapSaveEnabled && event.getPlayer().getWorld().getName().equals(Game.getGameWorld())) {
+ if (Game.status != Status.STANDBY && Game.status != Status.ENDING) {
+ Game.join(event.getPlayer());
+ } else {
+ event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
+ event.getPlayer().setGameMode(GameMode.ADVENTURE);
+ }
+ }
+ }
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onQuit(PlayerQuitEvent event) {
+ handleLeave(event.getPlayer());
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onKick(PlayerKickEvent event) {
+ handleLeave(event.getPlayer());
+ }
+
+ private void handleLeave(Player player) {
+ Board.remove(player);
+ if (Game.status == Status.STANDBY) {
+ Board.reloadLobbyBoards();
+ } else {
+ Board.reloadGameBoards();
+ }
+ for(PotionEffect effect : player.getActivePotionEffects()) {
+ player.removePotionEffect(effect.getType());
+ }
+ Game.removeItems(player);
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java
new file mode 100644
index 0000000..21e02de
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java
@@ -0,0 +1,27 @@
+package net.tylermurphy.hideAndSeek.game.listener;
+
+import net.tylermurphy.hideAndSeek.game.Board;
+import net.tylermurphy.hideAndSeek.game.Game;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerMoveEvent;
+
+import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Config.saveMaxZ;
+
+public class MovementHandler implements Listener {
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onMove(PlayerMoveEvent event) {
+ if (!Board.contains(event.getPlayer())) return;
+ if (!event.getPlayer().getWorld().getName().equals(Game.getGameWorld())) return;
+ if (event.getPlayer().hasPermission("hideandseek.leavebounds")) return;
+ if (event.getTo() == null || event.getTo().getWorld() == null) return;
+ if (!event.getTo().getWorld().getName().equals(Game.getGameWorld())) return;
+ if (event.getTo().getBlockX() < saveMinX || event.getTo().getBlockX() > saveMaxX || event.getTo().getBlockZ() < saveMinZ || event.getTo().getBlockZ() > saveMaxZ) {
+ 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
new file mode 100644
index 0000000..31aedb0
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java
@@ -0,0 +1,52 @@
+package net.tylermurphy.hideAndSeek.game.listener;
+
+import net.tylermurphy.hideAndSeek.game.Board;
+import net.tylermurphy.hideAndSeek.game.Game;
+import net.tylermurphy.hideAndSeek.util.Status;
+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.EntityRegainHealthEvent;
+import org.bukkit.event.entity.FoodLevelChangeEvent;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.player.PlayerDropItemEvent;
+
+public class PlayerHandler implements Listener {
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onFoodLevelChange(FoodLevelChangeEvent event) {
+ if (event.getEntity() instanceof Player) {
+ if (!Board.contains((Player) event.getEntity())) return;
+ event.setCancelled(true);
+ }
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onPlayerRegainHealth(EntityRegainHealthEvent event) {
+ if (event.getRegainReason() == EntityRegainHealthEvent.RegainReason.SATIATED || event.getRegainReason() == EntityRegainHealthEvent.RegainReason.REGEN) {
+ if (event.getEntity() instanceof Player) {
+ if (!Board.contains((Player) event.getEntity())) return;
+ event.setCancelled(true);
+ }
+ }
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onInventoryClick(InventoryClickEvent event) {
+ if (event.getWhoClicked() instanceof Player) {
+ Player player = (Player) event.getWhoClicked();
+ if (Board.contains(player) && Game.status == Status.STANDBY) {
+ event.setCancelled(true);
+ }
+ }
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onItemDrop(PlayerDropItemEvent event) {
+ if (Board.contains(event.getPlayer())) {
+ event.setCancelled(true);
+ }
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/RespawnHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/RespawnHandler.java
new file mode 100644
index 0000000..aeda227
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/RespawnHandler.java
@@ -0,0 +1,41 @@
+package net.tylermurphy.hideAndSeek.game.listener;
+
+import net.tylermurphy.hideAndSeek.Main;
+import net.tylermurphy.hideAndSeek.game.Board;
+import org.bukkit.Location;
+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;
+import org.bukkit.event.player.PlayerRespawnEvent;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+public class RespawnHandler implements Listener {
+
+ public static final Map<UUID, Location> temp_loc = new HashMap<>();
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onPlayerDeath(PlayerDeathEvent event) {
+ Player player = event.getEntity();
+ if (!Board.contains(player)) return;
+ event.setKeepInventory(true);
+ event.setDeathMessage("");
+ temp_loc.put(player.getUniqueId(), player.getLocation());
+ Main.plugin.getLogger().severe("Player " + player.getName() + " died when not supposed to. Attempting to roll back death.");
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onPlayerRespawn(PlayerRespawnEvent event) {
+ Player player = event.getPlayer();
+ if (!Board.contains(player)) return;
+ if (temp_loc.containsKey(player.getUniqueId())) {
+ player.teleport(temp_loc.get(player.getUniqueId()));
+ temp_loc.remove(player.getUniqueId());
+ }
+ }
+
+}