summaryrefslogtreewikicommitdiff
path: root/src
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2022-11-20 23:39:55 -0500
committerTyler Murphy <tylermurphy534@gmail.com>2022-11-20 23:39:55 -0500
commit5615fa7f325bb45762d13a704a9ffddda3efbfbb (patch)
treed75d721bc4f0098d7fe661197bd40a6be41654bb /src
parent1.7.0 beta 4 (diff)
downloadkenshinshideandseek-5615fa7f325bb45762d13a704a9ffddda3efbfbb.tar.gz
kenshinshideandseek-5615fa7f325bb45762d13a704a9ffddda3efbfbb.tar.bz2
kenshinshideandseek-5615fa7f325bb45762d13a704a9ffddda3efbfbb.zip
1.7.0 beta 5
Diffstat (limited to 'src')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/Main.java15
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/Help.java10
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/Join.java24
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/Leave.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/Send.java6
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/SetExitLocation.java8
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/Start.java14
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/Top.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/Wins.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/Add.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/Debug.java6
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/GoTo.java15
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/List.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/Remove.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/Save.java6
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/Status.java14
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/Enabled.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/Add.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/List.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/Remove.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Border.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Bounds.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Lobby.java7
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/set/SeekerLobby.java7
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Spawn.java12
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/util/CommandGroup.java173
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/util/ICommand.java (renamed from src/main/java/net/tylermurphy/hideAndSeek/command/util/Command.java)12
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java10
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/configuration/Map.java71
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/configuration/Maps.java26
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/Game.java19
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java8
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java7
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java12
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java17
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/Location.java111
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/Tuple.java27
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java2
-rw-r--r--src/main/resources/lang/localization_en-US.yml1
-rw-r--r--src/main/resources/plugin.yml108
43 files changed, 444 insertions, 364 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Main.java b/src/main/java/net/tylermurphy/hideAndSeek/Main.java
index 631447e..12e4bf4 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/Main.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/Main.java
@@ -38,7 +38,7 @@ import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import java.io.File;
-import java.util.Objects;
+import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -125,6 +125,7 @@ public class Main extends JavaPlugin implements Listener {
if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
new PAPIExpansion().register();
}
+
}
public void onDisable() {
@@ -135,8 +136,7 @@ public class Main extends JavaPlugin implements Listener {
board.getPlayers().forEach(player -> {
board.removeBoard(player);
PlayerLoader.unloadPlayer(player);
- if (!Objects.equals(exitWorld, ""))
- player.teleport(exitPosition);
+ exitPosition.teleport(player);
});
board.cleanup();
}
@@ -181,11 +181,16 @@ public class Main extends JavaPlugin implements Listener {
sender.sendMessage(errorPrefix + message("COMMAND_PLAYER_ONLY"));
return true;
}
- return commandGroup.handleCommand((Player)sender, "", args);
+ commandGroup.handleCommand((Player)sender, args);
+ return true;
}
public java.util.List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
- return commandGroup.handleTabComplete(sender, args);
+ if (!(sender instanceof Player)) {
+ sender.sendMessage(errorPrefix + message("COMMAND_PLAYER_ONLY"));
+ return new ArrayList<>();
+ }
+ return commandGroup.handleTabComplete((Player)sender, args);
}
public static Main getInstance() {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Help.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Help.java
index d94b48a..3efddcd 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/Help.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Help.java
@@ -20,7 +20,7 @@
package net.tylermurphy.hideAndSeek.command;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.util.Pair;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -33,11 +33,11 @@ import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Help extends Command {
+public class Help implements ICommand {
public void execute(Player sender, String[] args) {
final int pageSize = 4;
- List<Pair<String, Command>> commands = Main.getInstance().getCommandGroup().getCommands();
+ List<Pair<String, ICommand>> commands = Main.getInstance().getCommandGroup().getCommands();
int pages = (commands.size() - 1) / pageSize + 1;
int page;
try {
@@ -58,8 +58,8 @@ public class Help extends Command {
message.append(String.format("%s================ %sHelp: Page (%s/%s) %s================",
ChatColor.AQUA, ChatColor.WHITE, page, pages, ChatColor.AQUA));
int lines = 0;
- for(Pair<String, Command> pair : commands.stream().skip((long) (page - 1) * pageSize).limit(pageSize).collect(Collectors.toList())) {
- Command command = pair.getRight();
+ for(Pair<String, ICommand> pair : commands.stream().skip((long) (page - 1) * pageSize).limit(pageSize).collect(Collectors.toList())) {
+ ICommand command = pair.getRight();
String label = pair.getLeft();
String start = label.substring(0, label.indexOf(" "));
String invoke = label.substring(label.indexOf(" ")+1);
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Join.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Join.java
index 7b219a7..69387cd 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/Join.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Join.java
@@ -20,17 +20,19 @@
package net.tylermurphy.hideAndSeek.command;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
+import net.tylermurphy.hideAndSeek.configuration.Maps;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.List;
+import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Join extends Command {
+public class Join implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().checkCurrentMap()) {
@@ -46,7 +48,18 @@ public class Join extends Command {
sender.sendMessage(errorPrefix + message("GAME_INGAME"));
return;
}
-
+ if(args.length > 0) {
+ if(Main.getInstance().getBoard().size() > 0) {
+ sender.sendMessage(errorPrefix + message("LOBBY_IN_USE"));
+ return;
+ }
+ net.tylermurphy.hideAndSeek.configuration.Map map = Maps.getMap(args[0]);
+ if(map == null) {
+ sender.sendMessage(errorPrefix + message("INVALID_MAP"));
+ return;
+ }
+ Main.getInstance().getGame().setCurrentMap(map);
+ }
Main.getInstance().getGame().join(player);
}
@@ -55,7 +68,7 @@ public class Join extends Command {
}
public String getUsage() {
- return "";
+ return "<*map>";
}
public String getDescription() {
@@ -63,6 +76,9 @@ public class Join extends Command {
}
public List<String> autoComplete(@NotNull String parameter, @NotNull String typed) {
+ if(parameter.equals("*map")) {
+ return Maps.getAllMaps().stream().map(net.tylermurphy.hideAndSeek.configuration.Map::getName).collect(Collectors.toList());
+ }
return null;
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Leave.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Leave.java
index ebfd7ee..cb0c745 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/Leave.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Leave.java
@@ -20,7 +20,7 @@
package net.tylermurphy.hideAndSeek.command;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -30,7 +30,7 @@ import java.util.List;
import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Leave extends Command {
+public class Leave implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().checkCurrentMap()) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java
index 1fc2c95..df2944b 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java
@@ -20,7 +20,7 @@
package net.tylermurphy.hideAndSeek.command;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.*;
import net.tylermurphy.hideAndSeek.game.util.Status;
import org.bukkit.entity.Player;
@@ -32,7 +32,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Config.messagePrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Reload extends Command {
+public class Reload implements ICommand {
public void execute(Player sender, String[] args) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Send.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Send.java
index 87cc9a6..95c0dd9 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/Send.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Send.java
@@ -1,7 +1,7 @@
package net.tylermurphy.hideAndSeek.command;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.util.Status;
@@ -14,7 +14,7 @@ import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Send extends Command {
+public class Send implements ICommand {
public void execute(Player sender, String[] args) {
@@ -41,7 +41,7 @@ public class Send extends Command {
Main.getInstance().getGame().setCurrentMap(map);
for(Player player : Main.getInstance().getBoard().getPlayers()) {
- player.teleport(map.getLobby());
+ map.getLobby().teleport(player);
}
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/SetExitLocation.java b/src/main/java/net/tylermurphy/hideAndSeek/command/SetExitLocation.java
index e8adf24..0a57cfc 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/SetExitLocation.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/SetExitLocation.java
@@ -19,9 +19,10 @@
package net.tylermurphy.hideAndSeek.command;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.command.location.LocationUtils;
import net.tylermurphy.hideAndSeek.command.location.Locations;
+import net.tylermurphy.hideAndSeek.util.Location;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -29,7 +30,7 @@ import java.util.List;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-public class SetExitLocation extends Command {
+public class SetExitLocation implements ICommand {
public void execute(Player sender, String[] args) {
LocationUtils.setLocation(sender, Locations.EXIT, null, map -> {
@@ -37,8 +38,7 @@ public class SetExitLocation extends Command {
addToConfig("exit.y", sender.getLocation().getBlockY());
addToConfig("exit.z", sender.getLocation().getBlockZ());
addToConfig("exit.world", sender.getLocation().getWorld().getName());
- exitPosition = sender.getLocation();
- exitWorld = sender.getLocation().getWorld().getName();
+ exitPosition = Location.from(sender);
saveConfig();
});
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java
index 0a73591..74b8490 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java
@@ -20,22 +20,20 @@
package net.tylermurphy.hideAndSeek.command;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.game.util.Status;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.List;
-import java.util.Optional;
-import java.util.Random;
import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Config.minPlayers;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Start extends Command {
+public class Start implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().checkCurrentMap()) {
@@ -56,12 +54,8 @@ public class Start extends Command {
}
String seekerName;
if (args.length < 1) {
- Optional<Player> rand = Main.getInstance().getBoard().getPlayers().stream().skip(new Random().nextInt(Main.getInstance().getBoard().size())).findFirst();
- if (!rand.isPresent()) {
- sender.sendMessage(errorPrefix + message("START_FAILED_SEEKER"));
- return;
- }
- seekerName = rand.get().getName();
+ Main.getInstance().getGame().start();
+ return;
} else {
seekerName = args[0];
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java
index 9fd9aab..4bc23fe 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java
@@ -20,7 +20,7 @@
package net.tylermurphy.hideAndSeek.command;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.game.util.Status;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -31,7 +31,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.abortPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Stop extends Command {
+public class Stop implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().checkCurrentMap()) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Top.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Top.java
index e795d77..4ac4aa7 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/Top.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Top.java
@@ -20,7 +20,7 @@
package net.tylermurphy.hideAndSeek.command;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.database.util.PlayerInfo;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -32,7 +32,7 @@ import java.util.List;
import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Top extends Command {
+public class Top implements ICommand {
public void execute(Player sender, String[] args) {
int page;
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Wins.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Wins.java
index f1feb33..1ba44ac 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/Wins.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Wins.java
@@ -20,7 +20,7 @@
package net.tylermurphy.hideAndSeek.command;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.database.util.PlayerInfo;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -33,7 +33,7 @@ import java.util.UUID;
import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Wins extends Command {
+public class Wins implements ICommand {
public void execute(Player sender, String[] args) {
Main.getInstance().getServer().getScheduler().runTaskAsynchronously(Main.getInstance(), () -> {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Add.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Add.java
index 89a5b79..72f0740 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Add.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Add.java
@@ -1,7 +1,7 @@
package net.tylermurphy.hideAndSeek.command.map;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.util.Status;
@@ -15,7 +15,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Config.messagePrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Add extends Command {
+public class Add implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().getStatus() != Status.STANDBY) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Debug.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Debug.java
index c5d0352..209d0d6 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Debug.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Debug.java
@@ -2,7 +2,7 @@ package net.tylermurphy.hideAndSeek.command.map;
import com.cryptomorin.xseries.XMaterial;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.PlayerLoader;
import net.tylermurphy.hideAndSeek.game.util.Status;
@@ -23,7 +23,7 @@ import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Debug extends Command {
+public class Debug implements ICommand {
private static final Map<Player, Map<Integer, Consumer<Player>>> debugMenuFunctions = new HashMap<>();
@@ -68,7 +68,7 @@ public class Debug extends Command {
debugMenu.setItem(3, createOption(functions, 3, XMaterial.BARRIER.parseMaterial(), "&cUnload from Game", 1, player -> {
Main.getInstance().getBoard().remove(player);
PlayerLoader.unloadPlayer(player);
- player.teleport(exitPosition);
+ exitPosition.teleport(player);
}));
debugMenu.setItem(4, createOption(functions, 4, XMaterial.BARRIER.parseMaterial(), "&cDie In Game", 2, player -> {
if((Main.getInstance().getBoard().isSeeker(player) || Main.getInstance().getBoard().isHider(player)) && Main.getInstance().getGame().getStatus() == Status.PLAYING){
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/GoTo.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/GoTo.java
index 34ca8f9..7d27642 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/GoTo.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/GoTo.java
@@ -1,6 +1,6 @@
package net.tylermurphy.hideAndSeek.command.map;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import org.bukkit.entity.Player;
@@ -10,11 +10,10 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
-import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
-import static net.tylermurphy.hideAndSeek.configuration.Config.exitPosition;
+import static net.tylermurphy.hideAndSeek.configuration.Config.*;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class GoTo extends Command {
+public class GoTo implements ICommand {
public void execute(Player sender, String[] args) {
Map map = Maps.getMap(args[0]);
@@ -28,13 +27,13 @@ public class GoTo extends Command {
}
switch (args[1].toLowerCase()) {
case "spawn":
- sender.teleport(map.getSpawn()); break;
+ map.getSpawn().teleport(sender); break;
case "lobby":
- sender.teleport(map.getLobby()); break;
+ map.getLobby().teleport(sender); break;
case "seekerlobby":
- sender.teleport(map.getSeekerLobby()); break;
+ map.getSeekerLobby().teleport(sender); break;
case "exit":
- sender.teleport(exitPosition); break;
+ exitPosition.teleport(sender); break;
default:
sender.sendMessage(errorPrefix + message("COMMAND_INVALID_ARG").addAmount(args[1].toLowerCase()));
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/List.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/List.java
index 65b33d1..ac2badf 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/List.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/List.java
@@ -1,6 +1,6 @@
package net.tylermurphy.hideAndSeek.command.map;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import org.bukkit.ChatColor;
@@ -13,7 +13,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Config.messagePrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class List extends Command {
+public class List implements ICommand {
public void execute(Player sender, String[] args) {
Collection<Map> maps = Maps.getAllMaps();
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Remove.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Remove.java
index 4f708b6..d681848 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Remove.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Remove.java
@@ -1,7 +1,7 @@
package net.tylermurphy.hideAndSeek.command.map;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.util.Status;
@@ -15,7 +15,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Config.messagePrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Remove extends Command {
+public class Remove implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().getStatus() != Status.STANDBY) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Save.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Save.java
index c28d2e9..a612026 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Save.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Save.java
@@ -20,7 +20,7 @@
package net.tylermurphy.hideAndSeek.command.map;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.util.Status;
@@ -35,7 +35,7 @@ import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Save extends Command {
+public class Save implements ICommand {
public static boolean runningBackup = false;
@@ -63,7 +63,7 @@ public class Save extends Command {
}
sender.sendMessage(messagePrefix + message("MAPSAVE_START"));
sender.sendMessage(warningPrefix + message("MAPSAVE_WARNING"));
- World world = map.getSpawn().getWorld();
+ World world = map.getSpawn().load();
if (world == null) {
sender.sendMessage(warningPrefix + message("MAPSAVE_FAIL_WORLD"));
return;
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Status.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Status.java
index 053603b..c7da88a 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Status.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Status.java
@@ -19,7 +19,7 @@
package net.tylermurphy.hideAndSeek.command.map;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import org.bukkit.entity.Player;
@@ -31,7 +31,7 @@ import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Status extends Command {
+public class Status implements ICommand {
public void execute(Player sender, String[] args) {
@@ -42,19 +42,19 @@ public class Status extends Command {
sender.sendMessage(errorPrefix + message("INVALID_MAP"));
return;
}
- if (map.getSpawn().getBlockX() == 0 && map.getSpawn().getBlockY() == 0 && map.getSpawn().getBlockZ() == 0 || Map.worldDoesntExist(map.getLobbyName())) {
+ if (map.getSpawn().getBlockX() == 0 && map.getSpawn().getBlockY() == 0 && map.getSpawn().getBlockZ() == 0 || !map.getSpawn().exists()) {
msg = msg + "\n" + message("SETUP_GAME");
count++;
}
- if (map.getLobby().getBlockX() == 0 && map.getLobby().getBlockY() == 0 && map.getLobby().getBlockZ() == 0 || Map.worldDoesntExist(map.getLobbyName())) {
+ if (map.getLobby().getBlockX() == 0 && map.getLobby().getBlockY() == 0 && map.getLobby().getBlockZ() == 0 || !map.getLobby().exists()) {
msg = msg + "\n" + message("SETUP_LOBBY");
count++;
}
- if (map.getSeekerLobby().getBlockX() == 0 && map.getSeekerLobby().getBlockY() == 0 && map.getSeekerLobby().getBlockZ() == 0 || Map.worldDoesntExist(map.getSeekerLobbyName())) {
+ if (map.getSeekerLobby().getBlockX() == 0 && map.getSeekerLobby().getBlockY() == 0 && map.getSeekerLobby().getBlockZ() == 0 || !map.getSeekerLobby().exists()) {
msg = msg + "\n" + message("SETUP_SEEKER_LOBBY");
count++;
}
- if (exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0 || Map.worldDoesntExist(exitWorld)) {
+ if (exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0 || !exitPosition.exists()) {
msg = msg + "\n" + message("SETUP_EXIT");
count++;
}
@@ -62,7 +62,7 @@ public class Status extends Command {
msg = msg + "\n" + message("SETUP_BOUNDS");
count++;
}
- if (mapSaveEnabled && Map.worldDoesntExist(map.getGameSpawnName())) {
+ if (mapSaveEnabled && !map.getGameSpawn().exists()) {
msg = msg + "\n" + message("SETUP_SAVEMAP");
count++;
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/Enabled.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/Enabled.java
index ed14380..14ae8e0 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/Enabled.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/Enabled.java
@@ -1,7 +1,7 @@
package net.tylermurphy.hideAndSeek.command.map.blockhunt;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.util.Status;
@@ -17,7 +17,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Config.messagePrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Enabled extends Command {
+public class Enabled implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().getStatus() != Status.STANDBY) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/Add.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/Add.java
index bd4cf9f..fbdeecb 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/Add.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/Add.java
@@ -1,7 +1,7 @@
package net.tylermurphy.hideAndSeek.command.map.blockhunt.blocks;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.util.Status;
@@ -17,7 +17,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Config.messagePrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Add extends Command {
+public class Add implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().getStatus() != Status.STANDBY) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/List.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/List.java
index 396f2dd..18f1b3c 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/List.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/List.java
@@ -1,6 +1,6 @@
package net.tylermurphy.hideAndSeek.command.map.blockhunt.blocks;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
@@ -14,7 +14,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Config.messagePrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class List extends Command {
+public class List implements ICommand {
public void execute(Player sender, String[] args) {
Map map = Maps.getMap(args[0]);
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/Remove.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/Remove.java
index fed9dfa..d2afdc1 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/Remove.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/blockhunt/blocks/Remove.java
@@ -1,7 +1,7 @@
package net.tylermurphy.hideAndSeek.command.map.blockhunt.blocks;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.util.Status;
@@ -17,7 +17,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
import static net.tylermurphy.hideAndSeek.configuration.Config.messagePrefix;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Remove extends Command {
+public class Remove implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().getStatus() != Status.STANDBY) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Border.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Border.java
index 1b59abc..f9e14f8 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Border.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Border.java
@@ -20,7 +20,7 @@
package net.tylermurphy.hideAndSeek.command.map.set;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.util.Status;
@@ -34,7 +34,7 @@ import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Border extends Command {
+public class Border implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().getStatus() != Status.STANDBY) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Bounds.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Bounds.java
index 1adfc59..960863b 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Bounds.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Bounds.java
@@ -20,7 +20,7 @@
package net.tylermurphy.hideAndSeek.command.map.set;
import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.configuration.Map;
import net.tylermurphy.hideAndSeek.configuration.Maps;
import net.tylermurphy.hideAndSeek.game.util.Status;
@@ -33,7 +33,7 @@ import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Bounds extends Command {
+public class Bounds implements ICommand {
public void execute(Player sender, String[] args) {
if (Main.getInstance().getGame().getStatus() != Status.STANDBY) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Lobby.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Lobby.java
index f2395f1..ada76e2 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Lobby.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Lobby.java
@@ -19,21 +19,22 @@
package net.tylermurphy.hideAndSeek.command.map.set;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.command.location.LocationUtils;
import net.tylermurphy.hideAndSeek.command.location.Locations;
import net.tylermurphy.hideAndSeek.configuration.Maps;
+import net.tylermurphy.hideAndSeek.util.Location;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.stream.Collectors;
-public class Lobby extends Command {
+public class Lobby implements ICommand {
public void execute(Player sender, String[] args) {
LocationUtils.setLocation(sender, Locations.LOBBY, args[0], map -> {
- map.setLobby(sender.getLocation());
+ map.setLobby(Location.from(sender));
});
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/SeekerLobby.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/SeekerLobby.java
index ebbef1c..9bc0249 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/SeekerLobby.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/SeekerLobby.java
@@ -1,9 +1,10 @@
package net.tylermurphy.hideAndSeek.command.map.set;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.command.location.LocationUtils;
import net.tylermurphy.hideAndSeek.command.location.Locations;
import net.tylermurphy.hideAndSeek.configuration.Maps;
+import net.tylermurphy.hideAndSeek.util.Location;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -12,7 +13,7 @@ import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class SeekerLobby extends Command {
+public class SeekerLobby implements ICommand {
public void execute(Player sender, String[] args) {
LocationUtils.setLocation(sender, Locations.SEEKER, args[0], map -> {
@@ -22,7 +23,7 @@ public class SeekerLobby extends Command {
if(!map.getSpawnName().equals(sender.getLocation().getWorld().getName())) {
throw new RuntimeException(message("SEEKER_LOBBY_INVALID").toString());
}
- map.setSeekerLobby(sender.getLocation());
+ map.setSeekerLobby(Location.from(sender));
});
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Spawn.java b/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Spawn.java
index c954876..b983404 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Spawn.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/set/Spawn.java
@@ -19,11 +19,11 @@
package net.tylermurphy.hideAndSeek.command.map.set;
-import net.tylermurphy.hideAndSeek.command.util.Command;
+import net.tylermurphy.hideAndSeek.command.util.ICommand;
import net.tylermurphy.hideAndSeek.command.location.LocationUtils;
import net.tylermurphy.hideAndSeek.command.location.Locations;
import net.tylermurphy.hideAndSeek.configuration.Maps;
-import org.bukkit.Location;
+import net.tylermurphy.hideAndSeek.util.Location;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull;
@@ -34,7 +34,7 @@ import java.util.stream.Collectors;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-public class Spawn extends Command {
+public class Spawn implements ICommand {
public void execute(Player sender, String[] args) {
LocationUtils.setLocation(sender, Locations.GAME, args[0], map -> {
@@ -45,11 +45,11 @@ public class Spawn extends Command {
throw new RuntimeException("World border not enabled or not in valid position!");
}
- map.setSpawn(sender.getLocation());
+ map.setSpawn(Location.from(sender));
- if(map.getSeekerLobby().getWorld() != null && !map.getSeekerLobby().getWorld().getName().equals(sender.getLocation().getWorld().getName())) {
+ if(map.getSeekerLobby().getWorld() != null && !map.getSeekerLobby().getWorld().equals(sender.getLocation().getWorld().getName())) {
sender.sendMessage(message("SEEKER_LOBBY_SPAWN_RESET").toString());
- map.setSeekerLobby(new Location(null, 0, 0, 0));
+ map.setSeekerLobby(Location.getDefault());
}
if (!sender.getLocation().getWorld().getName().equals(map.getSpawnName()) && mapSaveEnabled) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/util/CommandGroup.java b/src/main/java/net/tylermurphy/hideAndSeek/command/util/CommandGroup.java
index 5c47860..e9ed90c 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/util/CommandGroup.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/util/CommandGroup.java
@@ -21,9 +21,10 @@ package net.tylermurphy.hideAndSeek.command.util;
import net.tylermurphy.hideAndSeek.command.map.Save;
import net.tylermurphy.hideAndSeek.util.Pair;
+import net.tylermurphy.hideAndSeek.util.Tuple;
import org.bukkit.ChatColor;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.stream.Collectors;
@@ -40,7 +41,9 @@ public class CommandGroup {
public CommandGroup(String label, Object... data) {
this.label = label;
this.commandRegister = new LinkedHashMap<>();
- for(Object o : data) registerCommand(o);
+ for(Object o : data) {
+ registerCommand(o);
+ }
}
public String getLabel() {
@@ -48,8 +51,8 @@ public class CommandGroup {
}
private void registerCommand(Object object) {
- if(object instanceof Command) {
- Command command = (Command) object;
+ if (object instanceof ICommand) {
+ ICommand command = (ICommand) object;
if (!commandRegister.containsKey(command.getLabel())) {
commandRegister.put(command.getLabel().toLowerCase(), command);
}
@@ -61,87 +64,99 @@ public class CommandGroup {
}
}
- public boolean handleCommand(Player player, String permission, String[] args) {
- if (args.length < 1 || !commandRegister.containsKey(args[0].toLowerCase()) ) {
- if (permissionsRequired && !player.hasPermission("hs.about")) {
- player.sendMessage(errorPrefix + message("COMMAND_NOT_ALLOWED"));
- } else {
- player.sendMessage(
- String.format("%s%sKenshin's Hide and Seek %s(%s1.7.0 BETA%s)\n", ChatColor.AQUA, ChatColor.BOLD, ChatColor.GRAY,ChatColor.WHITE,ChatColor.GRAY) +
- String.format("%sAuthor: %s[KenshinEto]\n", ChatColor.GRAY, ChatColor.WHITE) +
- String.format("%sHelp Command: %s/hs %shelp", ChatColor.GRAY, ChatColor.AQUA, ChatColor.WHITE)
- );
- }
- } else {
- String invoke = args[0].toLowerCase();
- if (!invoke.equals("about") && !invoke.equals("help") && Save.runningBackup) {
- player.sendMessage(errorPrefix + message("MAPSAVE_INPROGRESS"));
- } else {
- try {
- Object object = commandRegister.get(invoke);
+ public void handleCommand(Player player, String[] args) {
- if(object instanceof CommandGroup) {
- CommandGroup group = (CommandGroup) object;
- return group.handleCommand(player, permission+"."+group.getLabel(), Arrays.copyOfRange(args, 1, args.length));
- } else if(object instanceof Command) {
- Command command = (Command) object;
+ Tuple<ICommand, String, String[]> data = getCommand(args, this.getLabel());
- if (permissionsRequired && !player.hasPermission(permission+"."+command.getLabel())) {
- player.sendMessage(errorPrefix + message("COMMAND_NOT_ALLOWED"));
- return true;
- }
+ if (data == null) {
+ player.sendMessage(
+ String.format("%s%sKenshin's Hide and Seek %s(%s1.7.0 BETA%s)\n", ChatColor.AQUA, ChatColor.BOLD, ChatColor.GRAY, ChatColor.WHITE, ChatColor.GRAY) +
+ String.format("%sAuthor: %s[KenshinEto]\n", ChatColor.GRAY, ChatColor.WHITE) +
+ String.format("%sHelp Command: %s/hs %shelp", ChatColor.GRAY, ChatColor.AQUA, ChatColor.WHITE)
+ );
+ return;
+ }
- int parameterCount = (int) Arrays.stream(command.getUsage().split(" ")).filter(p -> p.startsWith("<") && !p.startsWith("<*")).count();
- if(args.length - 1 < parameterCount) {
- player.sendMessage(errorPrefix + message("ARGUMENT_COUNT"));
- return true;
- }
+ ICommand command = data.getLeft();
+ String permission = data.getCenter();
+ String[] parameters = data.getRight();
- command.execute(player,Arrays.copyOfRange(args, 1, args.length));
- }
- } catch (Exception e) {
- player.sendMessage(errorPrefix + "An error has occurred.");
- e.printStackTrace();
- }
+ if (Save.runningBackup) {
+ player.sendMessage(errorPrefix + message("MAPSAVE_INPROGRESS"));
+ return;
+ }
+
+ if (permissionsRequired && !player.hasPermission(permission)) {
+ player.sendMessage(errorPrefix + message("COMMAND_NOT_ALLOWED"));
+ return;
+ }
+
+ int parameterCount = (int) Arrays.stream(command.getUsage().split(" ")).filter(p -> p.startsWith("<") && !p.startsWith("<*")).count();
+ if(parameters.length < parameterCount) {
+ player.sendMessage(errorPrefix + message("ARGUMENT_COUNT"));
+ return;
+ }
+
+ try {
+ command.execute(player, parameters);
+ } catch (Exception e) {
+ player.sendMessage(errorPrefix + "An error has occurred.");
+ e.printStackTrace();
+ }
+ }
+
+ @Nullable
+ private Tuple<ICommand, String, String[]> getCommand(String[] args, String permission) {
+ if(args.length < 1) {
+ return null;
+ }
+ String invoke = args[0];
+ if(commandRegister.containsKey(invoke)) {
+ Object o = commandRegister.get(invoke);
+ if (o instanceof CommandGroup) {
+ CommandGroup group = (CommandGroup) o;
+ return group.getCommand(
+ Arrays.copyOfRange(args, 1, args.length),
+ permission + "." + group.getLabel()
+ );
+ } else if(o instanceof ICommand) {
+ ICommand command = (ICommand) o;
+ return new Tuple<>(command, permission + "." + command.getLabel(), Arrays.copyOfRange(args, 1, args.length));
}
}
- return true;
+ return null;
+ }
+
+ public List<String> handleTabComplete(Player player, String[] args) {
+ return handleTabComplete(player, this.getLabel(), args);
}
- public List<String> handleTabComplete(CommandSender sender, String[] args) {
+ private List<String> handleTabComplete(Player player, String permission, String[] args) {
String invoke = args[0].toLowerCase();
if (args.length == 1) {
- if(sender instanceof Player) {
- Player player = (Player) sender;
- return new ArrayList<>(commandRegister.keySet())
- .stream()
- .filter(handle -> handle.toLowerCase().startsWith(invoke))
- .filter(handle -> {
- Object object = commandRegister.get(handle);
- if (object instanceof Command) {
- Command command = (Command) object;
- return player.hasPermission(command.getLabel());
- } else if (object instanceof CommandGroup) {
- CommandGroup group = (CommandGroup) object;
- return group.hasPermission(player, group.getLabel());
- }
- return false;
- })
- .collect(Collectors.toList());
- } else {
- return commandRegister.keySet()
- .stream()
- .filter(handle -> handle.toLowerCase().startsWith(invoke))
- .collect(Collectors.toList());
- }
+ return new ArrayList<>(commandRegister.keySet())
+ .stream()
+ .filter(handle -> handle.toLowerCase().startsWith(invoke))
+ .filter(handle -> {
+ Object object = commandRegister.get(handle);
+ if (object instanceof ICommand) {
+ ICommand command = (ICommand) object;
+ return !permissionsRequired || player.hasPermission(permission + "." + command.getLabel());
+ } else if (object instanceof CommandGroup) {
+ CommandGroup group = (CommandGroup) object;
+ return !permissionsRequired || group.hasPermission(player, permission + "." + group.getLabel());
+ }
+ return false;
+ })
+ .collect(Collectors.toList());
} else {
if (commandRegister.containsKey(invoke)) {
Object object = commandRegister.get(invoke);
if (object instanceof CommandGroup) {
CommandGroup group = (CommandGroup) object;
- return group.handleTabComplete(sender, Arrays.copyOfRange(args, 1, args.length));
- } else if (object instanceof Command) {
- Command command = (Command) object;
+ return group.handleTabComplete(player, permission + "." + group.getLabel(), Arrays.copyOfRange(args, 1, args.length));
+ } else if (object instanceof ICommand) {
+ ICommand command = (ICommand) object;
String[] usage = command.getUsage().split(" ");
if (args.length - 2 < usage.length) {
String parameter = usage[args.length - 2];
@@ -159,26 +174,26 @@ public class CommandGroup {
private boolean hasPermission(Player player, String permission) {
for(Object object : commandRegister.values()) {
- if(object instanceof Command) {
- Command command = (Command) object;
- if(player.hasPermission(permission+"."+command.getLabel())) return true;
+ if(object instanceof ICommand) {
+ ICommand command = (ICommand) object;
+ if(player.hasPermission(permission + command.getLabel())) return true;
} else if(object instanceof CommandGroup) {
CommandGroup group = (CommandGroup) object;
- if (group.hasPermission(player, permission+"."+group.getLabel())) return true;
+ if (group.hasPermission(player, permission + this.label + ".")) return true;
}
}
return false;
}
- public List<Pair<String, Command>> getCommands() {
+ public List<Pair<String, ICommand>> getCommands() {
return getCommands(this.getLabel());
}
- private List<Pair<String, Command>> getCommands(String prefix) {
- List<Pair<String, Command>> commands = new LinkedList<>();
+ private List<Pair<String, ICommand>> getCommands(String prefix) {
+ List<Pair<String, ICommand>> commands = new LinkedList<>();
for(Object object : commandRegister.values()) {
- if(object instanceof Command) {
- Command command = (Command) object;
+ if(object instanceof ICommand) {
+ ICommand command = (ICommand) object;
commands.add(new Pair<>(prefix+" "+command.getLabel(), command));
} else if(object instanceof CommandGroup) {
CommandGroup group = (CommandGroup) object;
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/util/Command.java b/src/main/java/net/tylermurphy/hideAndSeek/command/util/ICommand.java
index 41fd4d5..3aa0ca4 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/util/Command.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/util/ICommand.java
@@ -24,16 +24,16 @@ import org.jetbrains.annotations.NotNull;
import java.util.List;
-public abstract class Command {
+public interface ICommand {
- public abstract void execute(Player sender, String[] args);
+ void execute(Player sender, String[] args);
- public abstract String getLabel();
+ String getLabel();
- public abstract String getUsage();
+ String getUsage();
- public abstract String getDescription();
+ String getDescription();
- public abstract List<String> autoComplete(@NotNull String parameter, @NotNull String typed);
+ List<String> autoComplete(@NotNull String parameter, @NotNull String typed);
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java
index ee7aa18..dbc9e37 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java
@@ -24,9 +24,8 @@ import com.cryptomorin.xseries.XMaterial;
import com.cryptomorin.xseries.XSound;
import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.game.util.CountdownDisplay;
-import org.bukkit.Bukkit;
+import net.tylermurphy.hideAndSeek.util.Location;
import org.bukkit.ChatColor;
-import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
@@ -34,7 +33,6 @@ import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -59,8 +57,7 @@ public class Config {
databasePort,
databaseUser,
databasePass,
- databaseName,
- exitWorld;
+ databaseName;
public static boolean
nameTagsVisible,
@@ -150,12 +147,11 @@ public class Config {
// Locations
exitPosition = new Location(
- Bukkit.getWorld(config.getString("exit.world")),
+ config.getString("exit.world"),
config.getInt("exit.x"),
config.getInt("exit.y"),
config.getInt("exit.z")
);
- exitWorld = config.getString("exit.world");
mapSaveEnabled = config.getBoolean("mapSaveEnabled");
//Taunt
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Map.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Map.java
index 406f161..8c3f8a7 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Map.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Map.java
@@ -1,12 +1,11 @@
package net.tylermurphy.hideAndSeek.configuration;
-import java.io.File;
import java.util.ArrayList;
import java.util.List;
-import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.game.events.Border;
import net.tylermurphy.hideAndSeek.world.WorldLoader;
+import net.tylermurphy.hideAndSeek.util.Location;
import org.bukkit.*;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull;
@@ -18,14 +17,9 @@ public class Map {
private final String name;
private Location
- spawnPosition = new Location(null, 0, 0, 0),
- lobbyPosition = new Location(null, 0, 0, 0),
- seekerLobbyPosition = new Location(null, 0, 0, 0);
-
- private String
- spawnWorldName = "world",
- lobbyWorldName = "world",
- seekerLobbyWorldName = "world";
+ spawnPosition = Location.getDefault(),
+ lobbyPosition = Location.getDefault(),
+ seekerLobbyPosition = Location.getDefault();
private int
xBoundMin = 0,
@@ -58,32 +52,14 @@ public class Map {
public void setSpawn(Location pos) {
this.spawnPosition = pos;
- if(pos.getWorld() != null)
- this.spawnWorldName = pos.getWorld().getName();
}
public void setLobby(Location pos) {
this.lobbyPosition = pos;
- if(pos.getWorld() != null)
- this.lobbyWorldName = pos.getWorld().getName();
}
public void setSeekerLobby(Location pos) {
this.seekerLobbyPosition = pos;
- if(pos.getWorld() != null)
- this.seekerLobbyWorldName = pos.getWorld().getName();
- }
-
- public void setSpawnName(String name) {
- this.spawnWorldName = name;
- }
-
- public void setLobbyName(String name) {
- this.lobbyWorldName = name;
- }
-
- public void setSeekerLobbyName(String name) {
- this.seekerLobbyWorldName = name;
}
public void setWorldBorderData(int x, int z, int size, int delay, int move) {
@@ -121,12 +97,7 @@ public class Map {
@NotNull
public Location getGameSpawn() {
if(mapSaveEnabled) {
- return new Location(
- Bukkit.getWorld("hs_" + spawnWorldName),
- spawnPosition.getX(),
- spawnPosition.getY(),
- spawnPosition.getZ()
- );
+ return spawnPosition.changeWorld("hs_"+name);
} else {
return spawnPosition;
}
@@ -135,9 +106,9 @@ public class Map {
@NotNull
public String getGameSpawnName() {
if(mapSaveEnabled)
- return "hs_"+ spawnWorldName;
+ return getGameSpawn().getWorld();
else
- return spawnWorldName;
+ return getSpawn().getWorld();
}
@NotNull
@@ -147,7 +118,7 @@ public class Map {
@NotNull
public String getSpawnName() {
- return spawnWorldName;
+ return getSpawn().getWorld();
}
@NotNull
@@ -157,7 +128,7 @@ public class Map {
@NotNull
public String getLobbyName() {
- return lobbyWorldName;
+ return getLobby().getWorld();
}
@NotNull
@@ -167,18 +138,13 @@ public class Map {
@NotNull
public String getSeekerLobbyName() {
- return seekerLobbyWorldName;
+ return getSeekerLobby().getWorld();
}
@NotNull
public Location getGameSeekerLobby() {
if(mapSaveEnabled) {
- return new Location(
- Bukkit.getWorld("hs_" + getSeekerLobbyName()),
- seekerLobbyPosition.getX(),
- seekerLobbyPosition.getY(),
- seekerLobbyPosition.getZ()
- );
+ return seekerLobbyPosition.changeWorld("hs_"+name);
} else {
return seekerLobbyPosition;
}
@@ -249,11 +215,11 @@ public class Map {
}
public boolean isNotSetup() {
- if (spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0 || Map.worldDoesntExist(spawnWorldName)) return true;
- if (lobbyPosition.getBlockX() == 0 && lobbyPosition.getBlockY() == 0 && lobbyPosition.getBlockZ() == 0 || Map.worldDoesntExist(lobbyWorldName)) return true;
- if (exitPosition == null || exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0 || Map.worldDoesntExist(exitWorld)) return true;
- if (seekerLobbyPosition.getBlockX() == 0 && seekerLobbyPosition.getBlockY() == 0 && seekerLobbyPosition.getBlockZ() == 0 || Map.worldDoesntExist(seekerLobbyWorldName)) return true;
- if (mapSaveEnabled && Map.worldDoesntExist(getGameSpawnName())) return true;
+ if (spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0 || !spawnPosition.exists()) return true;
+ if (lobbyPosition.getBlockX() == 0 && lobbyPosition.getBlockY() == 0 && lobbyPosition.getBlockZ() == 0 || !lobbyPosition.exists()) return true;
+ if (exitPosition == null || exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0 || !exitPosition.exists()) return true;
+ if (seekerLobbyPosition.getBlockX() == 0 && seekerLobbyPosition.getBlockY() == 0 && seekerLobbyPosition.getBlockZ() == 0 || !seekerLobbyPosition.exists()) return true;
+ if (mapSaveEnabled && !getGameSpawn().exists()) return true;
if (blockhunt && blockhuntBlocks.isEmpty()) return true;
if(isWorldBorderEnabled() &&
new Vector(spawnPosition.getX(), 0, spawnPosition.getZ()).distance(new Vector(xWorldBorder, 0, zWorldBorder)) > 100) return true;
@@ -268,9 +234,4 @@ public class Map {
return xBoundMin == 0 || zBoundMin == 0 || xBoundMax == 0 || zBoundMax == 0;
}
- public static boolean worldDoesntExist(String worldName) {
- File destination = new File(Main.getInstance().getWorldContainer()+File.separator+worldName);
- return !destination.isDirectory();
- }
-
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Maps.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Maps.java
index a27a542..98ba4a0 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Maps.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Maps.java
@@ -3,10 +3,8 @@ package net.tylermurphy.hideAndSeek.configuration;
import java.util.*;
import java.util.stream.Collectors;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
+import net.tylermurphy.hideAndSeek.util.Location;
import org.bukkit.Material;
-import org.bukkit.World;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
@@ -74,12 +72,9 @@ public class Maps {
ConfigurationSection data = maps.getConfigurationSection(name);
if(data == null) return null;
Map map = new Map(name);
- map.setSpawn(setSpawn(data, "game"));
- map.setSpawnName(data.getString("spawns.game.world"));
- map.setLobby(setSpawn(data, "lobby"));
- map.setLobbyName(data.getString("spawns.lobby.world"));
- map.setSeekerLobby(setSpawn(data, "seeker"));
- map.setSeekerLobbyName(data.getString("spawns.seeker.world"));
+ map.setSpawn(getSpawn(data, "game"));
+ map.setLobby(getSpawn(data, "lobby"));
+ map.setSeekerLobby(getSpawn(data, "seeker"));
map.setBoundMin(data.getInt("bounds.min.x"), data.getInt("bounds.min.z"));
map.setBoundMax(data.getInt("bounds.max.x"), data.getInt("bounds.max.z"));
map.setWorldBorderData(
@@ -104,11 +99,8 @@ public class Maps {
return map;
}
- private static Location setSpawn(ConfigurationSection data, String spawn) {
- String worldName = data.getString("spawns."+spawn+".world");
- if(worldName == null) return new Location(null, 0, 0, 0);
- if(Map.worldDoesntExist(worldName)) return new Location(null, 0, 0, 0);
- World world = Bukkit.getWorld(worldName);
+ private static Location getSpawn(ConfigurationSection data, String spawn) {
+ String world = data.getString("spawns."+spawn+".world");
double x = data.getDouble("spawns."+spawn+".x");
double y = data.getDouble("spawns."+spawn+".y");
double z = data.getDouble("spawns."+spawn+".z");
@@ -146,11 +138,7 @@ public class Maps {
private static void saveSpawn(ConfigurationSection data, Location spawn, String name, Map map) {
String worldName = getWorldName(name, map);
- if(worldName == null || Map.worldDoesntExist(worldName)) {
- data.set("spawns." + name + ".world", "world");
- } else {
- data.set("spawns." + name + ".world", worldName);
- }
+ data.set("spawns." + name + ".world", worldName);
data.set("spawns." + name + ".x", spawn.getX());
data.set("spawns." + name + ".y", spawn.getY());
data.set("spawns." + name + ".z", spawn.getZ());
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
index 0e54184..e238caf 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
@@ -98,8 +98,8 @@ public class Game {
public void start() {
try {
- Optional<Player> rand = board.getPlayers().stream().skip(new Random().nextInt(board.size())).findFirst();
- Player seeker = rand.orElse(board.getPlayers().get(0));
+ int rand = (int) (Math.random() * board.getPlayers().size());
+ Player seeker = board.getPlayers().get(rand);
start(seeker);
} catch (Exception e){
Main.getInstance().getLogger().warning("Failed to select random seeker.");
@@ -148,7 +148,7 @@ public class Game {
board.remove(player);
handleBungeeLeave(player);
} else {
- player.teleport(currentMap.getLobby());
+ currentMap.getLobby().teleport(player);
board.createLobbyBoard(player);
board.addHider(player);
PlayerLoader.joinPlayer(player, currentMap);
@@ -210,7 +210,7 @@ public class Game {
out.writeUTF(leaveServer);
player.sendPluginMessage(Main.getInstance(), "BungeeCord", out.toByteArray());
} else {
- player.teleport(exitPosition);
+ exitPosition.teleport(player);
}
}
@@ -251,7 +251,7 @@ public class Game {
board.getPlayers().forEach(player -> {
PlayerLoader.resetPlayer(player, board);
if(board.isSeeker(player)){
- player.teleport(currentMap.getGameSpawn());
+ currentMap.getGameSpawn().teleport(player);
}
});
} else if (startingTimer == 1){
@@ -325,8 +325,8 @@ public class Game {
}
}
- public Map getCurrentMap() {
- return currentMap;
+ public boolean isCurrentMapValid() {
+ return currentMap != null && !currentMap.isNotSetup();
}
public boolean checkCurrentMap() {
@@ -339,9 +339,8 @@ public class Game {
this.currentMap = map;
}
- public String getGameWorld() {
- if(currentMap == null) return null;
- else return currentMap.getGameSpawnName();
+ 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 d830972..10157cd 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java
@@ -40,7 +40,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
public class PlayerLoader {
public static void loadHider(Player player, Map map){
- player.teleport(map.getGameSpawn());
+ 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());
@@ -50,13 +50,13 @@ public class PlayerLoader {
}
public static void loadSeeker(Player player, Map map){
- player.teleport(map.getGameSeekerLobby());
+ 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, Map map){
- player.teleport(map.getGameSpawn());
+ map.getGameSpawn().teleport(player);
loadPlayer(player);
player.setAllowFlight(true);
player.setFlying(true);
@@ -114,7 +114,7 @@ public class PlayerLoader {
}
public static void joinPlayer(Player player, Map map){
- player.teleport(map.getLobby());
+ map.getLobby().teleport(player);
loadPlayer(player);
if (lobbyStartItem != null && (!lobbyItemStartAdmin || player.hasPermission("hideandseek.start")))
player.getInventory().setItem(lobbyItemStartPosition, lobbyStartItem);
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 f7ab581..9f7b5bf 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java
@@ -34,6 +34,7 @@ public class Border {
private void decreaseWorldBorder() {
if (currentSize == 100) return;
+ if(map.getGameSpawn().load() == null) return;
int change = (int) map.getWorldBorderData().getZ();
if (currentSize-change < 100) {
change = currentSize-100;
@@ -41,14 +42,14 @@ public class Border {
running = true;
Main.getInstance().getGame().broadcastMessage(worldBorderPrefix + message("WORLDBORDER_DECREASING").addAmount(change));
currentSize -= map.getWorldBorderData().getZ();
- org.bukkit.WorldBorder border = map.getGameSpawn().getWorld().getWorldBorder();
+ org.bukkit.WorldBorder border = map.getGameSpawn().load().getWorldBorder();
border.setSize(border.getSize()-change,30);
delay = 30;
}
public void resetWorldBorder() {
- if(map.getGameSpawn().getWorld() == null) return;
- org.bukkit.WorldBorder border = map.getGameSpawn().getWorld().getWorldBorder();
+ 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());
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 d6eceb2..37537d6 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java
@@ -31,7 +31,7 @@ public class DamageHandler implements Listener {
Player player = (Player) event.getEntity();
Player attacker = null;
// If map is not setup we won't be able to process on it :o
- if (game.getCurrentMap() == null || game.getCurrentMap().isNotSetup()) { return; }
+ if (!game.isCurrentMapValid()) { return; }
// If there is an attacker, find them
if (event instanceof EntityDamageByEntityEvent) {
if (((EntityDamageByEntityEvent) event).getDamager() instanceof Player)
@@ -70,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(game.getCurrentMap().getGameSpawn());
+ game.getCurrentMap().getGameSpawn().teleport(player);
} else if (!Main.getInstance().supports(18) && player.getLocation().getY() < 0) {
- player.teleport(game.getCurrentMap().getGameSpawn());
+ game.getCurrentMap().getGameSpawn().teleport(player);
}
return;
}
@@ -95,15 +95,15 @@ public class DamageHandler implements Listener {
Main.getInstance().getDisguiser().reveal(player);
// Teleport player to seeker spawn
if(delayedRespawn){
- player.teleport(game.getCurrentMap().getGameSeekerLobby());
+ 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(game.getCurrentMap().getGameSpawn());
+ game.getCurrentMap().getGameSpawn().teleport(player);
}
}, delayedRespawnDelay * 20L);
} else {
- player.teleport(game.getCurrentMap().getGameSpawn());
+ game.getCurrentMap().getGameSpawn().teleport(player);
}
// Add leaderboard stats
board.addDeath(player.getUniqueId());
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 9af8629..d8534a3 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/JoinLeaveHandler.java
@@ -15,6 +15,8 @@ import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
+
public class JoinLeaveHandler implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
@@ -26,18 +28,25 @@ public class JoinLeaveHandler implements Listener {
removeItems(event.getPlayer());
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(Main.getInstance().getGame().getCurrentMap().getLobby().getWorld().getName())) {
- event.getPlayer().teleport(exitPosition);
+ 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(exitPosition);
+ 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 2558763..1dd6cfc 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/MovementHandler.java
@@ -49,8 +49,8 @@ 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;
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()) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java
new file mode 100644
index 0000000..2abdb9b
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java
@@ -0,0 +1,111 @@
+package net.tylermurphy.hideAndSeek.util;
+
+import net.tylermurphy.hideAndSeek.Main;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.WorldCreator;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+
+public class Location {
+
+ private final String world;
+ private final double x;
+ private final double y;
+ private final double z;
+
+ public static Location getDefault() {
+ return new Location(
+ "",
+ 0.0,
+ 0.0,
+ 0.0
+ );
+ }
+
+ public static Location from(Player player) {
+ org.bukkit.Location location = player.getLocation();
+ return new Location(
+ player.getWorld().getName(),
+ location.getX(),
+ location.getY(),
+ location.getZ()
+ );
+ }
+
+ public Location(@NotNull String world, double x, double y, double z) {
+ this.world = world;
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ public World load() {
+ World bukkitWorld = Bukkit.getWorld(world);
+ if(bukkitWorld != null) return bukkitWorld;
+ Bukkit.getServer().createWorld(new WorldCreator(world));
+ return Bukkit.getWorld(world);
+ }
+
+ private org.bukkit.Location toBukkit() {
+ return new org.bukkit.Location(
+ Bukkit.getWorld(world),
+ x,
+ y,
+ z
+ );
+ }
+
+ public void teleport(Player player) {
+ if(!exists()) return;
+ if(load() == null) return;
+ player.teleport(toBukkit());
+ }
+
+ public Location changeWorld(String world) {
+ return new Location(
+ world,
+ x,
+ y,
+ z
+ );
+ }
+
+ public String getWorld() {
+ return world;
+ }
+
+ public double getX() {
+ return x;
+ }
+
+ public double getY() {
+ return y;
+ }
+
+ public double getZ() {
+ return z;
+ }
+
+ public int getBlockX() {
+ return (int)x;
+ }
+
+ public int getBlockY() {
+ return (int)y;
+ }
+
+ public int getBlockZ() {
+ return (int)z;
+ }
+
+ public boolean exists() {
+ if(world.equals("")) return false;
+ String path = Main.getInstance().getWorldContainer()+File.separator+world;
+ File destination = new File(path);
+ return destination.isDirectory();
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Tuple.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Tuple.java
new file mode 100644
index 0000000..5a40ff8
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Tuple.java
@@ -0,0 +1,27 @@
+package net.tylermurphy.hideAndSeek.util;
+
+public class Tuple<L, C, R> {
+
+ private final L left;
+ private final C center;
+ private final R right;
+
+ public Tuple(L left, C center, R right) {
+ this.left = left;
+ this.center = center;
+ this.right = right;
+ }
+
+ public L getLeft() {
+ return left;
+ }
+
+ public C getCenter() {
+ return center;
+ }
+
+ public R getRight() {
+ return right;
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java
index d4deafe..b3be907 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java
@@ -49,7 +49,7 @@ public class WorldLoader {
Main.getInstance().getLogger().warning(map.getGameSpawnName() + " already unloaded.");
return;
}
- world.getPlayers().forEach(player -> player.teleport(exitPosition));
+ world.getPlayers().forEach(player -> exitPosition.teleport(player));
if (Bukkit.getServer().unloadWorld(world, false)) {
Main.getInstance().getLogger().info("Successfully unloaded " + map.getGameSpawnName());
}else{
diff --git a/src/main/resources/lang/localization_en-US.yml b/src/main/resources/lang/localization_en-US.yml
index a78a421..d62153d 100644
--- a/src/main/resources/lang/localization_en-US.yml
+++ b/src/main/resources/lang/localization_en-US.yml
@@ -26,6 +26,7 @@ Localization:
GAME_JOIN: "{PLAYER} has joined the HideAndSeek lobby."
GAME_JOIN_SPECTATOR: "You have joined mid game and are now a spectator."
GAME_LEAVE: "{PLAYER} has left the HideAndSeek lobby."
+ LOBBY_IN_USE: "Cant modify the lobby while the lobby isn't empty."
CONFIG_RELOAD: "Reloaded the config."
MAPSAVE_INPROGRESS: "Map save is currently in progress. Try again later."
MAPSAVE_START: "Starting map save."
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 49655c7..92c6483 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -12,98 +12,54 @@ commands:
usage: /hideandseek [command]
aliases: hs
permissions:
- hideandseek.*:
- description: Gives access to all hideandseek commands
- children:
- hideandseek.about: true
- hideandseek.help: true
- hideandseek.reload: true
- hideandseek.setborder: true
- hideandseek.setspawn: true
- hideandseek.setlobby: true
- hideandseek.setseekerlobby: true
- hideandseek.setexit: true
- hideadnseek.setbounds: true
- hideandseek.setup: true
- hideandseek.start: true
- hideandseek.stop: true
- hideandseek.savemap: true
- hideandseek.join: true
- hideandseek.leave: true
- hideandseek.leavebounds: true
- hideandseek.wins: true
- hideandseek.top: true
- hideandseek.debug: true
- hideandseek.addmap: true
- hideandseek.removemap: true
- hideandseek.listmaps: true
- hideandseek.setmap: true
- hideandseek.about:
- description: Allows you to run the about command
+ hs.help:
default: true
- hideandseek.help:
- description: Allows you to run the help command
+ hs.join:
default: true
- hideandseek.reload:
- description: Allows you to reload the config
+ hs.leave:
+ default: true
+ hs.top:
+ default: true
+ hs.wins:
+ default: true
+ hs.reload:
default: op
- hideandseek.setborder:
- description: Allows you to set the game world border
+ hs.send:
default: op
- hideandseek.setspawn:
- description: Allows you to set the game spawn point
+ hs.setexit:
default: op
- hideandseek.setlobby:
- description: Allows you to set the game lobby point
+ hs.start:
default: op
- hideandseek.setseekerlobby:
- description: Allows you to set the game seeker lobby point
+ hs.stop:
default: op
- hideandseek.setexit:
- description: Allows you to set the game exit point
+ hs.map.add:
default: op
- hideandseek.setbounds:
- description: Allows you to set bounds for the game map
+ hs.map.remove:
default: op
- hideandseek.setup:
- description: Allows you to see what needs to be setup for the plugin to function
+ hs.map.list:
default: op
- hideandseek.start:
- description: Allows you to start the game
+ hs.map.status:
default: op
- hideandseek.stop:
- description: Allows you to stop the game
+ hs.map.save:
default: op
- hideandseek.savemap:
- description: Allows you to set the current game map
+ hs.map.debug:
default: op
- hideandseek.join:
- description: Allows you to join the game manual lobby
- default: true
- hideandseek.leave:
- description: Allows you to leave the game manual lobby
- default: true
- hideandseek.leavebounds:
- description: Allows players to leave specified game bounderies
+ hs.map.goto:
default: op
- hideandseek.wins:
- description: Allows players to see a players amount of wins
- default: true
- hideandseek.top:
- description: Allows players to see the global wins leaderboard
- default: true
- hideandseek.debug:
- description: Opens the debug menu
+ hs.map.set.lobby:
+ default: op
+ hs.map.set.spawn:
+ default: op
+ hs.map.set.seekerlobby:
+ default: op
+ hs.map.set.border:
default: op
- hideandseek.addmap:
- description: Adds a map to the plugin
+ hs.map.set.bounds:
default: op
- hideandseek.removemap:
- description: Removes a map from the plugin
+ hs.map.blockhunt.add:
default: op
- hideandseek.listmaps:
- description: Lists all maps in the plugin
+ hs.map.blockhunt.remove:
default: op
- hideandseek.setmap:
- description: Sets the current lobby to a new map
+ hs.map.blockhunt.list:
default: op
+