From 5615fa7f325bb45762d13a704a9ffddda3efbfbb Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Sun, 20 Nov 2022 23:39:55 -0500 Subject: 1.7.0 beta 5 --- .../net/tylermurphy/hideAndSeek/util/Location.java | 111 +++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 src/main/java/net/tylermurphy/hideAndSeek/util/Location.java (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util/Location.java') 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(); + } + +} -- cgit v1.2.3-freya From 1815b63bc94382a36b610be8082a423364e51b21 Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Mon, 21 Nov 2022 13:33:55 -0500 Subject: 1.7.0 beta 6 --- .../java/net/tylermurphy/hideAndSeek/Main.java | 62 +++++++++++++++++- .../tylermurphy/hideAndSeek/command/Confirm.java | 62 ++++++++++++++++++ .../hideAndSeek/command/world/Create.java | 66 +++++++++++++++++++ .../hideAndSeek/command/world/Delete.java | 74 ++++++++++++++++++++++ .../hideAndSeek/command/world/List.java | 46 ++++++++++++++ .../tylermurphy/hideAndSeek/command/world/Tp.java | 49 ++++++++++++++ .../hideAndSeek/configuration/ConfigManager.java | 4 +- .../hideAndSeek/configuration/Maps.java | 2 + .../tylermurphy/hideAndSeek/database/Database.java | 2 + .../database/connections/MySQLConnection.java | 8 +++ .../net/tylermurphy/hideAndSeek/util/Location.java | 22 ++++++- .../tylermurphy/hideAndSeek/world/WorldLoader.java | 2 +- src/main/resources/lang/localization_en-US.yml | 14 ++++ src/main/resources/plugin.yml | 10 +++ 14 files changed, 416 insertions(+), 7 deletions(-) create mode 100644 src/main/java/net/tylermurphy/hideAndSeek/command/Confirm.java create mode 100644 src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java create mode 100644 src/main/java/net/tylermurphy/hideAndSeek/command/world/Delete.java create mode 100644 src/main/java/net/tylermurphy/hideAndSeek/command/world/List.java create mode 100644 src/main/java/net/tylermurphy/hideAndSeek/command/world/Tp.java (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util/Location.java') diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Main.java b/src/main/java/net/tylermurphy/hideAndSeek/Main.java index 12e4bf4..656f60d 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/Main.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/Main.java @@ -23,6 +23,9 @@ import net.tylermurphy.hideAndSeek.command.*; import net.tylermurphy.hideAndSeek.command.map.*; import net.tylermurphy.hideAndSeek.command.map.blockhunt.Enabled; import net.tylermurphy.hideAndSeek.command.map.set.*; +import net.tylermurphy.hideAndSeek.command.world.Create; +import net.tylermurphy.hideAndSeek.command.world.Delete; +import net.tylermurphy.hideAndSeek.command.world.Tp; import net.tylermurphy.hideAndSeek.configuration.*; import net.tylermurphy.hideAndSeek.database.Database; import net.tylermurphy.hideAndSeek.game.*; @@ -39,6 +42,7 @@ import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.ArrayList; +import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -56,16 +60,28 @@ public class Main extends JavaPlugin implements Listener { private EntityHider entityHider; private Game game; private CommandGroup commandGroup; + private boolean loaded; public void onEnable() { + + long start = System.currentTimeMillis(); + + getLogger().info("Loading Kenshin's Hide and Seek"); Main.instance = this; - this.updateVersion(); + + getLogger().info("Getting minecraft version..."); + this.updateVersion();; try { + getLogger().info("Loading config.yml..."); Config.loadConfig(); + getLogger().info("Loading maps.yml..."); Maps.loadMaps(); + getLogger().info("Loading localization.yml..."); Localization.loadLocalization(); + getLogger().info("Loading items.yml..."); Items.loadItems(); + getLogger().info("Loading leaderboard.yml..."); Leaderboard.loadLeaderboard(); } catch (Exception e) { getLogger().severe(e.getMessage()); @@ -73,12 +89,18 @@ public class Main extends JavaPlugin implements Listener { return; } + getLogger().info("Creating internal scoreboard..."); this.board = new Board(); + getLogger().info("Connecting to database..."); this.database = new Database(); + getLogger().info("Loading disguises..."); this.disguiser = new Disguiser(); + getLogger().info("Loading entity hider..."); this.entityHider = new EntityHider(this, EntityHider.Policy.BLACKLIST); + getLogger().info("Registering listeners..."); this.registerListeners(); + getLogger().info("Registering commands..."); this.commandGroup = new CommandGroup("hs", new Help(), new Reload(), @@ -111,21 +133,38 @@ public class Main extends JavaPlugin implements Listener { new Debug(), new GoTo() ), + new CommandGroup("world", + new Create(), + new Delete(), + new net.tylermurphy.hideAndSeek.command.world.List(), + new Tp() + ), new SetExitLocation(), new Top(), - new Wins() + new Wins(), + new Confirm() ); + getLogger().info("Loading game..."); game = new Game(null, board); + getLogger().info("Scheduling tick tasks..."); getServer().getScheduler().runTaskTimer(this, this::onTick,0,1).getTaskId(); + getLogger().info("Registering outgoing bungeecord plugin channel..."); Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + getLogger().info("Checking for PlaceholderAPI..."); if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { + getLogger().info("PlaceholderAPI found..."); + getLogger().info("Registering PlaceholderAPI expansion..."); new PAPIExpansion().register(); } + long end = System.currentTimeMillis(); + getLogger().info("Finished loading plugin ("+(end-start)+"ms)"); + loaded = true; + } public void onDisable() { @@ -222,5 +261,24 @@ public class Main extends JavaPlugin implements Listener { public boolean supports(int v){ return version >= v; } + + public java.util.List getWorlds() { + java.util.List worlds = new ArrayList<>(); + File[] containers = getWorldContainer().listFiles(); + if(containers != null) { + Arrays.stream(containers).forEach(file -> { + if (!file.isDirectory()) return; + String[] files = file.list(); + if (files == null) return; + if (!Arrays.asList(files).contains("session.lock") && !Arrays.asList(files).contains("level.dat")) return; + worlds.add(file.getName()); + }); + } + return worlds; + } + + public boolean isLoaded() { + return loaded; + } } \ No newline at end of file diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Confirm.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Confirm.java new file mode 100644 index 0000000..a25185d --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Confirm.java @@ -0,0 +1,62 @@ +package net.tylermurphy.hideAndSeek.command; + +import net.tylermurphy.hideAndSeek.command.util.ICommand; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.*; +import java.util.function.Consumer; + +import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix; +import static net.tylermurphy.hideAndSeek.configuration.Localization.message; + +public class Confirm implements ICommand { + + public static final Map confirmations = new HashMap<>(); + + public void execute(Player sender, String[] args) { + Confirmation confirmation = confirmations.get(sender.getUniqueId()); + confirmations.remove(sender.getUniqueId()); + if(confirmation == null) { + sender.sendMessage(errorPrefix + message("NO_CONFIRMATION")); + } else { + long now = System.currentTimeMillis(); + float secs = (now - confirmation.start) / 1000F; + if(secs > 10) { + sender.sendMessage(errorPrefix + message("CONFIRMATION_TIMED_OUT")); + return; + } + confirmation.callback.accept(confirmation.data); + } + } + + public String getLabel() { + return "confirm"; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "Confirm another command if required"; + } + + public List autoComplete(@NotNull String parameter, @NotNull String typed) { + return null; + } + + public static class Confirmation { + public final Consumer callback; + public final String data; + public final long start; + + public Confirmation(String data, Consumer callback) { + this.callback = callback; + this.data = data; + this.start = System.currentTimeMillis(); + } + + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java new file mode 100644 index 0000000..5ab9039 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java @@ -0,0 +1,66 @@ +package net.tylermurphy.hideAndSeek.command.world; + +import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.command.util.ICommand; +import net.tylermurphy.hideAndSeek.util.Location; +import org.bukkit.WorldType; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +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 Create implements ICommand { + + public void execute(Player sender, String[] args) { + List worlds = Main.getInstance().getWorlds(); + if(worlds.contains(args[0])) { + sender.sendMessage(errorPrefix + message("WORLD_EXISTS").addAmount(args[0])); + } + WorldType type; + if(args[1].equals("normal")) { + type = WorldType.NORMAL; + } else if(args[1].equals("flat")) { + type = WorldType.FLAT; + } else { + sender.sendMessage(errorPrefix + message("INVALID_WORLD_TYPE").addAmount(args[1])); + return; + } + + Location temp = new Location(args[0], 0, 0, 0); + + if (temp.load(type) == null) { + sender.sendMessage(errorPrefix + message("WORLD_ADDED_FAILED")); + } else { + sender.sendMessage(messagePrefix + message("WORLD_ADDED").addAmount(args[0])); + } + + } + + public String getLabel() { + return "create"; + } + + public String getUsage() { + return " "; + } + + public String getDescription() { + return "Create a new world"; + } + + public List autoComplete(@NotNull String parameter, @NotNull String typed) { + if(parameter.equals("name")) { + return Collections.singletonList("name"); + } + if(parameter.equals("type")) { + return Arrays.asList("normal", "flat"); + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/world/Delete.java b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Delete.java new file mode 100644 index 0000000..4800e08 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Delete.java @@ -0,0 +1,74 @@ +package net.tylermurphy.hideAndSeek.command.world; + +import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.command.Confirm; +import net.tylermurphy.hideAndSeek.command.util.ICommand; +import net.tylermurphy.hideAndSeek.world.WorldLoader; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.util.List; + +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 Delete implements ICommand { + + public void execute(Player sender, String[] args) { + java.util.List worlds = Main.getInstance().getWorlds(); + if(!worlds.contains(args[0])) { + sender.sendMessage(errorPrefix + message("WORLD_DOESNT_EXIST").addAmount(args[0])); + } + + Confirm.Confirmation confirmation = new Confirm.Confirmation(args[0], world -> { + java.util.List worlds_now = Main.getInstance().getWorlds(); + if(!worlds_now.contains(world)) { + sender.sendMessage(errorPrefix + message("WORLD_DOESNT_EXIST").addAmount(world)); + } + World bukkit_world = Bukkit.getWorld(world); + if(bukkit_world != null && bukkit_world.getPlayers().size() > 0) { + sender.sendMessage(errorPrefix + message("WORLD_NOT_EMPTY")); + return; + } + String path = Main.getInstance().getWorldContainer().getPath() + File.separator + world; + if (!Bukkit.getServer().unloadWorld(world, false)) { + sender.sendMessage(errorPrefix + message("WORLD_REMOVED_FAILED")); + return; + } + try { + WorldLoader.deleteDirectory(new File(path)); + } catch (Exception e) { + sender.sendMessage(errorPrefix + message("WORLD_REMOVED_FAILED")); + return; + } + sender.sendMessage(messagePrefix + message("WORLD_REMOVED").addAmount(world)); + }); + + Confirm.confirmations.put(sender.getUniqueId(), confirmation); + sender.sendMessage(messagePrefix + message("CONFIRMATION")); + + } + + public String getLabel() { + return "delete"; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "Delete a world"; + } + + public List autoComplete(@NotNull String parameter, @NotNull String typed) { + if(parameter.equals("name")) { + return Main.getInstance().getWorlds(); + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/world/List.java b/src/main/java/net/tylermurphy/hideAndSeek/command/world/List.java new file mode 100644 index 0000000..2c0f745 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/world/List.java @@ -0,0 +1,46 @@ +package net.tylermurphy.hideAndSeek.command.world; + +import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.command.util.ICommand; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +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 implements ICommand { + + public void execute(Player sender, String[] args) { + java.util.List worlds = Main.getInstance().getWorlds(); + if(worlds.isEmpty()) { + sender.sendMessage(errorPrefix + message("NO_WORLDS")); + } else { + StringBuilder response = new StringBuilder(messagePrefix + message("LIST_WORLDS")); + for (String world : worlds) { + boolean loaded = Bukkit.getWorld(world) != null; + response.append("\n ").append(world).append(": ").append(loaded ? ChatColor.GREEN + "LOADED" : ChatColor.YELLOW + "NOT LOADED").append(ChatColor.WHITE); + } + sender.sendMessage(response.toString()); + } + } + + public String getLabel() { + return "list"; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "List all worlds in the server"; + } + + public java.util.List autoComplete(@NotNull String parameter, @NotNull String typed) { + return null; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/world/Tp.java b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Tp.java new file mode 100644 index 0000000..b166297 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Tp.java @@ -0,0 +1,49 @@ +package net.tylermurphy.hideAndSeek.command.world; + +import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.command.util.ICommand; +import net.tylermurphy.hideAndSeek.util.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix; +import static net.tylermurphy.hideAndSeek.configuration.Localization.message; + +public class Tp implements ICommand { + public void execute(Player sender, String[] args) { + Location test = new Location(args[0], 0, 0,0); + if(!test.exists()) { + sender.sendMessage(errorPrefix + message("WORLD_DOESNT_EXIT")); + return; + } + World world = test.load(); + if(world == null) { + sender.sendMessage(errorPrefix + message("WORLD_LOAD_FAILED")); + return; + } + Location loc = new Location(world.getName(), world.getSpawnLocation()); + loc.teleport(sender); + } + + public String getLabel() { + return "tp"; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "Teleport to another world"; + } + + public List autoComplete(@NotNull String parameter, @NotNull String typed) { + if(parameter.equals("world")) { + return Main.getInstance().getWorlds(); + } + return null; + } +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java index eda8470..be699ec 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java @@ -318,11 +318,11 @@ public class ConfigManager { int index = 0; for(String part : parts) { if (index == 0) { - index = yaml.indexOf(part + ":", index); + index = yaml.indexOf("\n" + part + ":", index) + 1; } else { index = yaml.indexOf(" " + part + ":", index) + 1; } - if (index == -1) break; + if (index == 0) break; } return index; } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Maps.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Maps.java index 98ba4a0..d691fa9 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Maps.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Maps.java @@ -3,6 +3,7 @@ package net.tylermurphy.hideAndSeek.configuration; import java.util.*; import java.util.stream.Collectors; +import net.tylermurphy.hideAndSeek.Main; import net.tylermurphy.hideAndSeek.util.Location; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; @@ -72,6 +73,7 @@ public class Maps { ConfigurationSection data = maps.getConfigurationSection(name); if(data == null) return null; Map map = new Map(name); + Main.getInstance().getLogger().info("Loading map: " + name + "..."); map.setSpawn(getSpawn(data, "game")); map.setLobby(getSpawn(data, "lobby")); map.setSeekerLobby(getSpawn(data, "seeker")); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java b/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java index e7bfb26..d2fb40d 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java @@ -45,8 +45,10 @@ public class Database { public Database(){ if(databaseType.equals("SQLITE")) { + Main.getInstance().getLogger().info("SQLITE database chosen"); connection = new SQLiteConnection(); } else { + Main.getInstance().getLogger().info("MYSQL database chosen"); connection = new MySQLConnection(); } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/database/connections/MySQLConnection.java b/src/main/java/net/tylermurphy/hideAndSeek/database/connections/MySQLConnection.java index b7c1b1d..56f53f6 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/database/connections/MySQLConnection.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/database/connections/MySQLConnection.java @@ -21,6 +21,7 @@ package net.tylermurphy.hideAndSeek.database.connections; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; +import net.tylermurphy.hideAndSeek.Main; import java.sql.Connection; import java.sql.SQLException; @@ -35,6 +36,13 @@ public class MySQLConnection implements DatabaseConnection { HikariConfig config = new HikariConfig(); + Main.getInstance().getLogger().info("Database host: " + databaseHost); + Main.getInstance().getLogger().info("Database port: " + databasePort); + Main.getInstance().getLogger().info("Database user: " + databaseUser); + Main.getInstance().getLogger().info("Database pass: xxxxxxxxxxx"); + Main.getInstance().getLogger().info("Database name: " + databaseName); + + config.setJdbcUrl("jdbc:mariadb://"+databaseHost+":"+databasePort+"/"+databaseName); config.addDataSourceProperty("cachePrepStmts", "true"); config.addDataSourceProperty("prepStmtCacheSize", "250"); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java index 2abdb9b..efc4329 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java @@ -4,6 +4,7 @@ import net.tylermurphy.hideAndSeek.Main; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.WorldCreator; +import org.bukkit.WorldType; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -42,13 +43,30 @@ public class Location { this.z = z; } - public World load() { + public Location(@NotNull String world, @NotNull org.bukkit.Location location) { + this.world = world; + this.x = location.getX(); + this.y = location.getY(); + this.z = location.getZ(); + } + + public World load(WorldType type) { World bukkitWorld = Bukkit.getWorld(world); if(bukkitWorld != null) return bukkitWorld; - Bukkit.getServer().createWorld(new WorldCreator(world)); + if (type == null) { + Bukkit.getServer().createWorld(new WorldCreator(world)); + } else { + Bukkit.getServer().createWorld(new WorldCreator(world).type(type)); + } return Bukkit.getWorld(world); } + public World load() { + if(!exists()) return null; + if(!Main.getInstance().isLoaded()) return null; + return load(null); + } + private org.bukkit.Location toBukkit() { return new org.bukkit.Location( Bukkit.getWorld(world), diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java index b3be907..6ea1773 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java @@ -155,7 +155,7 @@ public class WorldLoader { out.close(); } - private void deleteDirectory(File directoryToBeDeleted) { + public static void deleteDirectory(File directoryToBeDeleted) { File[] allContents = directoryToBeDeleted.listFiles(); if (allContents != null) { for (File file : allContents) { diff --git a/src/main/resources/lang/localization_en-US.yml b/src/main/resources/lang/localization_en-US.yml index d62153d..61d562b 100644 --- a/src/main/resources/lang/localization_en-US.yml +++ b/src/main/resources/lang/localization_en-US.yml @@ -107,6 +107,20 @@ Localization: BLOCKHUNT_BLOCK_REMOVED: "Removed {AMOUNT} from blockhunt config." BLOCKHUNT_LIST_BLOCKS: "The following blockhunt blocks are:" NO_BLOCKS: "There are no blockhunt blocks in this map." + WORLD_EXISTS: "A world named {AMOUNT} already exists." + WORLD_DOESNT_EXIST: "There is no world named {AMOUNT} that exists." + WORLD_ADDED: "Created a world named {AMOUNT}." + WORLD_ADDED_FAILED: "Failed to create new world." + WORLD_REMOVED: "Deleted a world named {AMOUNT}." + WORLD_REMOVED_FAILED: "Failed to delete world." + WORLD_NOT_EMPTY: "World must be empty to be deleted." + LIST_WORLDS: "The following worlds are:" + NO_WORLDS: "Failed to fetch any worlds." + WORLD_LOAD_FAILED: "Failed to load world." + INVALID_WORLD_TYPE: "Invalid world type: {AMOUNT}." + NO_CONFIRMATION: "You have nothing to confirm." + CONFIRMATION_TIMED_OUT: "The confirmation has timed out." + CONFIRMATION: "Run /hs confirm within 10s to confirm." # DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE version: 4 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 92c6483..c6ce455 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -62,4 +62,14 @@ permissions: default: op hs.map.blockhunt.list: default: op + hs.world.create: + default: op + hs.world.delete: + default: op + hs.world.list: + default: op + hs.world.tp: + default: op + hs.confirm: + default: op -- cgit v1.2.3-freya From efb2cf40e82e1b00d3d97e6986d8aed83d8a26dc Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Mon, 21 Nov 2022 15:04:10 -0500 Subject: 1.7.0 beta 7 --- .../java/net/tylermurphy/hideAndSeek/util/Location.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util/Location.java') diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java index efc4329..b75eb95 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java @@ -1,6 +1,7 @@ package net.tylermurphy.hideAndSeek.util; import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.world.VoidGenerator; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.WorldCreator; @@ -51,13 +52,17 @@ public class Location { } public World load(WorldType type) { + boolean mapSave = world.startsWith("hs_"); World bukkitWorld = Bukkit.getWorld(world); if(bukkitWorld != null) return bukkitWorld; - if (type == null) { - Bukkit.getServer().createWorld(new WorldCreator(world)); - } else { - Bukkit.getServer().createWorld(new WorldCreator(world).type(type)); + WorldCreator creator = new WorldCreator(world); + if(type != null) { + creator.type(type); } + if(mapSave) { + creator.generator(new VoidGenerator()); + } + Bukkit.getServer().createWorld(creator).setAutoSave(!mapSave); return Bukkit.getWorld(world); } -- cgit v1.2.3-freya From 934c04388ddfade47ea0ce78335d98fc49fc457c Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Mon, 21 Nov 2022 16:54:32 -0500 Subject: 1.7.0 beta 8 --- .../java/net/tylermurphy/hideAndSeek/Main.java | 5 +++ .../hideAndSeek/command/world/Create.java | 2 + .../net/tylermurphy/hideAndSeek/util/Location.java | 2 +- .../hideAndSeek/world/VoidGenerator.java | 46 ++++++++-------------- .../tylermurphy/hideAndSeek/world/WorldLoader.java | 12 +++--- 5 files changed, 32 insertions(+), 35 deletions(-) (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util/Location.java') diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Main.java b/src/main/java/net/tylermurphy/hideAndSeek/Main.java index 656f60d..ad49273 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/Main.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/Main.java @@ -280,5 +280,10 @@ public class Main extends JavaPlugin implements Listener { public boolean isLoaded() { return loaded; } + + public void scheduleTask(Runnable task) { + if(!isEnabled()) return; + Bukkit.getServer().getScheduler().runTask(this, task); + } } \ No newline at end of file diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java index 5ab9039..20ffd5a 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java @@ -3,8 +3,10 @@ package net.tylermurphy.hideAndSeek.command.world; import net.tylermurphy.hideAndSeek.Main; import net.tylermurphy.hideAndSeek.command.util.ICommand; import net.tylermurphy.hideAndSeek.util.Location; +import org.bukkit.Bukkit; import org.bukkit.WorldType; import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; import java.util.Arrays; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java index b75eb95..e769b05 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java @@ -84,7 +84,7 @@ public class Location { public void teleport(Player player) { if(!exists()) return; if(load() == null) return; - player.teleport(toBukkit()); + Main.getInstance().scheduleTask(() -> player.teleport(toBukkit())); } public Location changeWorld(String world) { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java b/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java index b0ce824..15ff45f 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java @@ -19,7 +19,9 @@ package net.tylermurphy.hideAndSeek.world; +import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.block.Biome; import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.ChunkGenerator; import org.jetbrains.annotations.NotNull; @@ -36,41 +38,27 @@ public class VoidGenerator extends ChunkGenerator { return Collections.emptyList(); } - public boolean shouldGenerateNoise() { - return false; - } - - public boolean shouldGenerateSurface() { - return false; - } - - public boolean shouldGenerateBedrock() { - return false; - } - - public boolean shouldGenerateCaves() { - return false; - } - - public boolean shouldGenerateDecorations() { - return false; + @Override + public boolean canSpawn(World world, int x, int z) { + return true; } - public boolean shouldGenerateMobs() { - return false; + @Override + public Location getFixedSpawnLocation(World world, Random random) { + return new Location(world, 0, 100, 0); } - public boolean shouldGenerateStructures() { - return false; - } + // 1.13 And Prev + public ChunkData generateChunkData(World world, Random random, int chunkX, int chunkZ, BiomeGrid biome) { + ChunkData chunkData = super.createChunkData(world); - public boolean canSpawn(@NotNull World world, int x, int z) { - return true; - } + for(int x = 0; x < 16; x++) { + for(int z = 0; z < 16; z++) { + biome.setBiome(x, z, Biome.PLAINS); + } + } - // 1.13 And Prev - public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull BiomeGrid biome) { - return createChunkData(world); + return chunkData; } // 1.8 diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java index 6ea1773..864397e 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java @@ -50,11 +50,13 @@ public class WorldLoader { return; } world.getPlayers().forEach(player -> exitPosition.teleport(player)); - if (Bukkit.getServer().unloadWorld(world, false)) { - Main.getInstance().getLogger().info("Successfully unloaded " + map.getGameSpawnName()); - }else{ - Main.getInstance().getLogger().severe("COULD NOT UNLOAD " + map.getGameSpawnName()); - } + Main.getInstance().scheduleTask(() -> { + if (Bukkit.getServer().unloadWorld(world, false)) { + Main.getInstance().getLogger().info("Successfully unloaded " + map.getGameSpawnName()); + } else { + Main.getInstance().getLogger().severe("COULD NOT UNLOAD " + map.getGameSpawnName()); + } + }); } public void loadMap() { -- cgit v1.2.3-freya From fcc3764a14d76fa24cddb75fe338a3ee36dec3fa Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Mon, 21 Nov 2022 23:47:04 -0500 Subject: 1.7.0 beta 9 --- lib/ProtocolLib.jar | Bin 4977063 -> 0 bytes pom.xml | 22 ++++++------- .../hideAndSeek/command/location/Locations.java | 17 +++------- .../hideAndSeek/command/util/CommandGroup.java | 2 +- .../hideAndSeek/command/world/Create.java | 36 ++++++++++++++------- .../hideAndSeek/command/world/Delete.java | 2 ++ .../hideAndSeek/command/world/List.java | 15 +++++++-- .../hideAndSeek/configuration/ConfigManager.java | 5 +-- .../net/tylermurphy/hideAndSeek/game/Board.java | 2 +- .../net/tylermurphy/hideAndSeek/game/Game.java | 6 ++-- .../hideAndSeek/game/listener/PlayerHandler.java | 1 - .../net/tylermurphy/hideAndSeek/util/Location.java | 7 ++-- .../tylermurphy/hideAndSeek/world/WorldLoader.java | 16 +++++---- 13 files changed, 75 insertions(+), 56 deletions(-) delete mode 100644 lib/ProtocolLib.jar (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util/Location.java') diff --git a/lib/ProtocolLib.jar b/lib/ProtocolLib.jar deleted file mode 100644 index daa31c7..0000000 Binary files a/lib/ProtocolLib.jar and /dev/null differ diff --git a/pom.xml b/pom.xml index 974cdc8..8b2a39d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,10 +4,13 @@ 1.7.0 Hide and Seek Plugin + + UTF-8 + + clean install src/main/java - org.apache.maven.plugins @@ -30,10 +33,6 @@ com.zaxxer.hikari net.tylermurphy.dependencies.hikari - - org.ibex.nestedvm - net.tylermurphy.dependencies.nestedvm - @@ -58,7 +57,6 @@ META-INF/services/java.sql.Driver - true @@ -82,10 +80,10 @@ spigot-repo https://hub.spigotmc.org/nexus/content/repositories/public/ - - - - + + dmulloy2-repo + https://repo.dmulloy2.net/repository/public/ + placeholderapi https://repo.extendedclip.com/content/repositories/placeholderapi/ @@ -109,8 +107,8 @@ com.comphenix.protocol ProtocolLib 4.4.0 - system - ${project.basedir}/lib/ProtocolLib.jar + + org.xerial diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/location/Locations.java b/src/main/java/net/tylermurphy/hideAndSeek/command/location/Locations.java index dd73dac..c1316f8 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/location/Locations.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/location/Locations.java @@ -5,22 +5,13 @@ package net.tylermurphy.hideAndSeek.command.location; */ public enum Locations { - GAME("spawns.game"), - LOBBY("spawns.lobby"), - EXIT("spawns.exit"), - SEEKER("spawns.seeker"); - - private final String path; - Locations(String path) { - this.path = path; - } + GAME, + LOBBY, + EXIT, + SEEKER; public String message() { return this + "_SPAWN"; } - public String path(String additive) { - return path + "." + additive; - } - } \ No newline at end of file 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 e9ed90c..b366b9a 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/util/CommandGroup.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/util/CommandGroup.java @@ -70,7 +70,7 @@ public class CommandGroup { 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("%s%sKenshin's Hide and Seek %s(%s1.7.0%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) ); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java index 20ffd5a..e399993 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Create.java @@ -3,10 +3,9 @@ package net.tylermurphy.hideAndSeek.command.world; import net.tylermurphy.hideAndSeek.Main; import net.tylermurphy.hideAndSeek.command.util.ICommand; import net.tylermurphy.hideAndSeek.util.Location; -import org.bukkit.Bukkit; +import org.bukkit.World; import org.bukkit.WorldType; import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -23,20 +22,35 @@ public class Create implements ICommand { List worlds = Main.getInstance().getWorlds(); if(worlds.contains(args[0])) { sender.sendMessage(errorPrefix + message("WORLD_EXISTS").addAmount(args[0])); + return; } WorldType type; - if(args[1].equals("normal")) { - type = WorldType.NORMAL; - } else if(args[1].equals("flat")) { - type = WorldType.FLAT; - } else { - sender.sendMessage(errorPrefix + message("INVALID_WORLD_TYPE").addAmount(args[1])); - return; + World.Environment environment; + switch (args[1]) { + case "normal": + type = WorldType.NORMAL; + environment = World.Environment.NORMAL; + break; + case "flat": + type = WorldType.FLAT; + environment = World.Environment.NORMAL; + break; + case "nether": + type = WorldType.NORMAL; + environment = World.Environment.NETHER; + break; + case "end": + type = WorldType.NORMAL; + environment = World.Environment.THE_END; + break; + default: + sender.sendMessage(errorPrefix + message("INVALID_WORLD_TYPE").addAmount(args[1])); + return; } Location temp = new Location(args[0], 0, 0, 0); - if (temp.load(type) == null) { + if (temp.load(type, environment) == null) { sender.sendMessage(errorPrefix + message("WORLD_ADDED_FAILED")); } else { sender.sendMessage(messagePrefix + message("WORLD_ADDED").addAmount(args[0])); @@ -61,7 +75,7 @@ public class Create implements ICommand { return Collections.singletonList("name"); } if(parameter.equals("type")) { - return Arrays.asList("normal", "flat"); + return Arrays.asList("normal", "flat", "nether", "end"); } return null; } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/world/Delete.java b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Delete.java index 4800e08..985ccdc 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/world/Delete.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/world/Delete.java @@ -22,12 +22,14 @@ public class Delete implements ICommand { java.util.List worlds = Main.getInstance().getWorlds(); if(!worlds.contains(args[0])) { sender.sendMessage(errorPrefix + message("WORLD_DOESNT_EXIST").addAmount(args[0])); + return; } Confirm.Confirmation confirmation = new Confirm.Confirmation(args[0], world -> { java.util.List worlds_now = Main.getInstance().getWorlds(); if(!worlds_now.contains(world)) { sender.sendMessage(errorPrefix + message("WORLD_DOESNT_EXIST").addAmount(world)); + return; } World bukkit_world = Bukkit.getWorld(world); if(bukkit_world != null && bukkit_world.getPlayers().size() > 0) { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/world/List.java b/src/main/java/net/tylermurphy/hideAndSeek/command/world/List.java index 2c0f745..bdb98e5 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/world/List.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/world/List.java @@ -4,6 +4,7 @@ import net.tylermurphy.hideAndSeek.Main; import net.tylermurphy.hideAndSeek.command.util.ICommand; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.World; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -20,8 +21,18 @@ public class List implements ICommand { } else { StringBuilder response = new StringBuilder(messagePrefix + message("LIST_WORLDS")); for (String world : worlds) { - boolean loaded = Bukkit.getWorld(world) != null; - response.append("\n ").append(world).append(": ").append(loaded ? ChatColor.GREEN + "LOADED" : ChatColor.YELLOW + "NOT LOADED").append(ChatColor.WHITE); + String status = ChatColor.GRAY + "NOT LOADED"; + World bukkit_world = Bukkit.getWorld(world); + if(bukkit_world != null) { + if(bukkit_world.getEnvironment() == World.Environment.NETHER) { + status = ChatColor.RED + "NETHER"; + } else if(bukkit_world.getEnvironment() == World.Environment.THE_END) { + status = ChatColor.YELLOW + "THE END"; + } else { + status = ChatColor.GREEN + bukkit_world.getWorldType().toString(); + } + } + response.append("\n ").append(world).append(": ").append(status).append(ChatColor.WHITE); } sender.sendMessage(response.toString()); } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java index be699ec..958d1ca 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java @@ -126,6 +126,7 @@ public class ConfigManager { return config.contains(path); } + @SuppressWarnings("unused") public double getDouble(String path) { if (!config.contains(path)) { return defaultConfig.getDouble(path); @@ -190,10 +191,6 @@ public class ConfigManager { config.set(path, defaultConfig.get(path)); } - public void resetAll() { - config = new YamlConfiguration(); - } - public void resetFile(String newDefaultFilename) { this.defaultFilename = newDefaultFilename; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java index 83fc2a6..1873fd4 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java @@ -268,7 +268,7 @@ public class Board { board.setLine(String.valueOf(i), line.replace("{TEAM}", value)); } else if (line.contains("{BORDER}")) { if (!Main.getInstance().getGame().getCurrentMap().isWorldBorderEnabled()) continue; - if (worldBorder == null || status == Status.STARTING) { + if (status == Status.STARTING) { board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_COUNTING.replace("{AMOUNT}", "0"))); } else if (!worldBorder.isRunning()) { board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_COUNTING.replaceFirst("\\{AMOUNT}", worldBorder.getDelay()/60+"").replaceFirst("\\{AMOUNT}", worldBorder.getDelay()%60+""))); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java index e238caf..e18a309 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java @@ -97,13 +97,15 @@ public class Game { } public void start() { + Player seeker; try { int rand = (int) (Math.random() * board.getPlayers().size()); - Player seeker = board.getPlayers().get(rand); - start(seeker); + seeker = board.getPlayers().get(rand); } catch (Exception e){ Main.getInstance().getLogger().warning("Failed to select random seeker."); + return; } + start(seeker); } public void start(Player seeker) { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java index 1e7ba69..d34cb11 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/PlayerHandler.java @@ -2,7 +2,6 @@ package net.tylermurphy.hideAndSeek.game.listener; import net.tylermurphy.hideAndSeek.Main; import net.tylermurphy.hideAndSeek.configuration.Items; -import net.tylermurphy.hideAndSeek.game.Game; import net.tylermurphy.hideAndSeek.game.util.Status; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java index e769b05..10fa783 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java @@ -51,7 +51,7 @@ public class Location { this.z = location.getZ(); } - public World load(WorldType type) { + public World load(WorldType type, World.Environment environment) { boolean mapSave = world.startsWith("hs_"); World bukkitWorld = Bukkit.getWorld(world); if(bukkitWorld != null) return bukkitWorld; @@ -59,6 +59,9 @@ public class Location { if(type != null) { creator.type(type); } + if(environment != null) { + creator.environment(environment); + } if(mapSave) { creator.generator(new VoidGenerator()); } @@ -69,7 +72,7 @@ public class Location { public World load() { if(!exists()) return null; if(!Main.getInstance().isLoaded()) return null; - return load(null); + return load(null, null); } private org.bukkit.Location toBukkit() { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java index 864397e..d14f617 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java @@ -60,13 +60,15 @@ public class WorldLoader { } public void loadMap() { - Bukkit.getServer().createWorld(new WorldCreator(map.getGameSpawnName()).generator(new VoidGenerator())); - World world = Bukkit.getServer().getWorld(map.getGameSpawnName()); - if (world == null) { - Main.getInstance().getLogger().severe("COULD NOT LOAD " + map.getGameSpawnName()); - return; - } - world.setAutoSave(false); + Main.getInstance().scheduleTask(() -> { + Bukkit.getServer().createWorld(new WorldCreator(map.getGameSpawnName()).generator(new VoidGenerator())); + World world = Bukkit.getServer().getWorld(map.getGameSpawnName()); + if (world == null) { + Main.getInstance().getLogger().severe("COULD NOT LOAD " + map.getGameSpawnName()); + return; + } + world.setAutoSave(false); + }); } public void rollback() { -- cgit v1.2.3-freya From 6b453dde9758bc6d4d399528209addc2b817ce1a Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Sat, 26 Nov 2022 14:23:39 -0500 Subject: 1.7.0RC1 --- .../java/net/tylermurphy/hideAndSeek/Main.java | 20 +- .../net/tylermurphy/hideAndSeek/command/Help.java | 19 -- .../net/tylermurphy/hideAndSeek/command/Join.java | 19 -- .../net/tylermurphy/hideAndSeek/command/Leave.java | 19 -- .../tylermurphy/hideAndSeek/command/Reload.java | 19 -- .../hideAndSeek/command/SetExitLocation.java | 19 -- .../net/tylermurphy/hideAndSeek/command/Start.java | 28 +-- .../net/tylermurphy/hideAndSeek/command/Stop.java | 19 -- .../net/tylermurphy/hideAndSeek/command/Top.java | 19 -- .../net/tylermurphy/hideAndSeek/command/Wins.java | 19 -- .../tylermurphy/hideAndSeek/command/map/Save.java | 21 +-- .../hideAndSeek/command/map/Status.java | 19 -- .../hideAndSeek/command/map/blockhunt/Enabled.java | 4 + .../command/map/blockhunt/blocks/Add.java | 4 + .../command/map/blockhunt/blocks/List.java | 5 + .../command/map/blockhunt/blocks/Remove.java | 4 + .../hideAndSeek/command/map/set/Border.java | 21 +-- .../hideAndSeek/command/map/set/Bounds.java | 40 ++-- .../hideAndSeek/command/map/set/Lobby.java | 19 -- .../hideAndSeek/command/map/set/SeekerLobby.java | 13 +- .../hideAndSeek/command/map/set/Spawn.java | 29 +-- .../hideAndSeek/command/util/CommandGroup.java | 19 -- .../hideAndSeek/command/util/ICommand.java | 19 -- .../hideAndSeek/configuration/Config.java | 19 -- .../hideAndSeek/configuration/ConfigManager.java | 19 -- .../hideAndSeek/configuration/Items.java | 19 -- .../hideAndSeek/configuration/Localization.java | 22 +-- .../configuration/LocalizationString.java | 19 -- .../tylermurphy/hideAndSeek/configuration/Map.java | 11 +- .../tylermurphy/hideAndSeek/database/Database.java | 19 -- .../hideAndSeek/database/GameDataTable.java | 16 +- .../net/tylermurphy/hideAndSeek/game/Board.java | 205 ++++++++++----------- .../game/listener/WorldInteractHandler.java | 48 +++++ .../tylermurphy/hideAndSeek/game/util/Status.java | 19 -- .../tylermurphy/hideAndSeek/game/util/WinType.java | 19 -- .../net/tylermurphy/hideAndSeek/util/Location.java | 8 + .../hideAndSeek/world/VoidGenerator.java | 19 -- .../tylermurphy/hideAndSeek/world/WorldLoader.java | 19 -- src/main/resources/config.yml | 7 +- src/main/resources/lang/localization_de-DE.yml | 66 ++++++- src/main/resources/lang/localization_en-US.yml | 5 + 41 files changed, 297 insertions(+), 679 deletions(-) create mode 100644 src/main/java/net/tylermurphy/hideAndSeek/game/listener/WorldInteractHandler.java (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util/Location.java') diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Main.java b/src/main/java/net/tylermurphy/hideAndSeek/Main.java index ad49273..36d92ee 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/Main.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/Main.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek; import net.tylermurphy.hideAndSeek.command.*; @@ -204,6 +185,7 @@ public class Main extends JavaPlugin implements Listener { getServer().getPluginManager().registerEvents(new MovementHandler(), this); getServer().getPluginManager().registerEvents(new PlayerHandler(), this); getServer().getPluginManager().registerEvents(new RespawnHandler(), this); + getServer().getPluginManager().registerEvents(new WorldInteractHandler(), this); } private void updateVersion(){ diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Help.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Help.java index 3efddcd..41db5a9 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/Help.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Help.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command; import net.tylermurphy.hideAndSeek.Main; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Join.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Join.java index 69387cd..0c01265 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/Join.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Join.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command; import net.tylermurphy.hideAndSeek.Main; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Leave.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Leave.java index cb0c745..109930b 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/Leave.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Leave.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command; import net.tylermurphy.hideAndSeek.Main; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java index df2944b..0c2b6b1 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command; import net.tylermurphy.hideAndSeek.Main; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/SetExitLocation.java b/src/main/java/net/tylermurphy/hideAndSeek/command/SetExitLocation.java index 0a57cfc..7da404f 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/SetExitLocation.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/SetExitLocation.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command; import net.tylermurphy.hideAndSeek.command.util.ICommand; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java index 74b8490..5184933 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command; import net.tylermurphy.hideAndSeek.Main; @@ -59,13 +40,8 @@ public class Start implements ICommand { } else { seekerName = args[0]; } - Player temp = Bukkit.getPlayer(seekerName); - if (temp == null) { - sender.sendMessage(errorPrefix + message("START_INVALID_NAME").addPlayer(seekerName)); - return; - } - Player seeker = Main.getInstance().getBoard().getPlayer(temp.getUniqueId()); - if (seeker == null) { + Player seeker = Bukkit.getPlayer(seekerName); + if (seeker == null || !Main.getInstance().getBoard().contains(seeker)) { sender.sendMessage(errorPrefix + message("START_INVALID_NAME").addPlayer(seekerName)); return; } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java index 4bc23fe..498e30d 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command; import net.tylermurphy.hideAndSeek.Main; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Top.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Top.java index 4ac4aa7..13f3069 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/Top.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Top.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command; import net.tylermurphy.hideAndSeek.Main; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Wins.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Wins.java index 1ba44ac..fb61fb2 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/Wins.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Wins.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command; import net.tylermurphy.hideAndSeek.Main; 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 a612026..03e23a8 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Save.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Save.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command.map; import net.tylermurphy.hideAndSeek.Main; @@ -53,7 +34,7 @@ public class Save implements ICommand { sender.sendMessage(errorPrefix + message("INVALID_MAP")); return; } - if (map.isSpawnNotSetup()) { + if (map.getSpawn().isNotSetup()) { sender.sendMessage(errorPrefix + message("ERROR_GAME_SPAWN")); 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 c7da88a..90615e5 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/map/Status.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/map/Status.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command.map; import net.tylermurphy.hideAndSeek.command.util.ICommand; 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 14ae8e0..2567427 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 @@ -20,6 +20,10 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.message; public class Enabled implements ICommand { public void execute(Player sender, String[] args) { + if (!Main.getInstance().supports(9)) { + sender.sendMessage(errorPrefix + message("BLOCKHUNT_UNSUPPORTED")); + return; + } if (Main.getInstance().getGame().getStatus() != Status.STANDBY) { sender.sendMessage(errorPrefix + message("GAME_INPROGRESS")); return; 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 fbdeecb..fea08ef 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 @@ -20,6 +20,10 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.message; public class Add implements ICommand { public void execute(Player sender, String[] args) { + if (!Main.getInstance().supports(9)) { + sender.sendMessage(errorPrefix + message("BLOCKHUNT_UNSUPPORTED")); + return; + } if (Main.getInstance().getGame().getStatus() != Status.STANDBY) { sender.sendMessage(errorPrefix + message("GAME_INPROGRESS")); return; 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 18f1b3c..de783ce 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,5 +1,6 @@ package net.tylermurphy.hideAndSeek.command.map.blockhunt.blocks; +import net.tylermurphy.hideAndSeek.Main; import net.tylermurphy.hideAndSeek.command.util.ICommand; import net.tylermurphy.hideAndSeek.configuration.Map; import net.tylermurphy.hideAndSeek.configuration.Maps; @@ -17,6 +18,10 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.message; public class List implements ICommand { public void execute(Player sender, String[] args) { + if (!Main.getInstance().supports(9)) { + sender.sendMessage(errorPrefix + message("BLOCKHUNT_UNSUPPORTED")); + return; + } Map map = Maps.getMap(args[0]); if(map == null) { sender.sendMessage(errorPrefix + message("INVALID_MAP")); 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 d2afdc1..1c16fdc 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 @@ -20,6 +20,10 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.message; public class Remove implements ICommand { public void execute(Player sender, String[] args) { + if (!Main.getInstance().supports(9)) { + sender.sendMessage(errorPrefix + message("BLOCKHUNT_UNSUPPORTED")); + return; + } if (Main.getInstance().getGame().getStatus() != Status.STANDBY) { sender.sendMessage(errorPrefix + message("GAME_INPROGRESS")); return; 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 f9e14f8..64bf5d4 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 @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command.map.set; import net.tylermurphy.hideAndSeek.Main; @@ -46,7 +27,7 @@ public class Border implements ICommand { sender.sendMessage(errorPrefix + message("INVALID_MAP")); return; } - if (map.isSpawnNotSetup()) { + if (map.getSpawn().isNotSetup()) { sender.sendMessage(errorPrefix + message("ERROR_GAME_SPAWN")); return; } 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 960863b..3d1f036 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 @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command.map.set; import net.tylermurphy.hideAndSeek.Main; @@ -24,6 +5,7 @@ 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; +import net.tylermurphy.hideAndSeek.util.Location; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -45,10 +27,14 @@ public class Bounds implements ICommand { sender.sendMessage(errorPrefix + message("INVALID_MAP")); return; } - if (map.isSpawnNotSetup()) { + if (map.getSpawn().isNotSetup()) { sender.sendMessage(errorPrefix + message("ERROR_GAME_SPAWN")); return; } + if (map.getSeekerLobby().isNotSetup()) { + sender.sendMessage(errorPrefix + message("ERROR_GAME_SEEKER_SPAWN")); + return; + } if (!sender.getWorld().getName().equals(map.getSpawnName())) { sender.sendMessage(errorPrefix + message("BOUNDS_WRONG_WORLD")); return; @@ -87,6 +73,20 @@ public class Bounds implements ICommand { } map.setBoundMin(bxs, bzs); map.setBoundMax(bxl, bzl); + if(!map.isBoundsNotSetup()) { + if(!map.getSpawn().isNotSetup()) { + if(map.getSpawn().isNotInBounds(bxs, bxl, bzs, bzl)) { + map.setSpawn(Location.getDefault()); + sender.sendMessage(warningPrefix + message("WARN_SPAWN_RESET")); + } + } + if(!map.getSeekerLobby().isNotSetup()) { + if(map.getSeekerLobby().isNotInBounds(bxs, bxl, bzs, bzl)) { + map.setSeekerLobby(Location.getDefault()); + sender.sendMessage(warningPrefix + message("WARN_SEEKER_SPAWN_RESET")); + } + } + } Maps.setMap(map.getName(), map); sender.sendMessage(messagePrefix + message("BOUNDS").addAmount(first ? 1 : 2)); } 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 ada76e2..6690ae9 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 @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command.map.set; import net.tylermurphy.hideAndSeek.command.util.ICommand; 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 9bc0249..b6c5cf0 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 @@ -6,24 +6,33 @@ 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.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; -import java.util.List; +import java.util.List;; import java.util.stream.Collectors; +import static net.tylermurphy.hideAndSeek.configuration.Config.warningPrefix; import static net.tylermurphy.hideAndSeek.configuration.Localization.message; public class SeekerLobby implements ICommand { public void execute(Player sender, String[] args) { LocationUtils.setLocation(sender, Locations.SEEKER, args[0], map -> { - if(map.isSpawnNotSetup()) { + if(map.getSpawn().isNotSetup()) { throw new RuntimeException(message("GAME_SPAWN_NEEDED").toString()); } if(!map.getSpawnName().equals(sender.getLocation().getWorld().getName())) { throw new RuntimeException(message("SEEKER_LOBBY_INVALID").toString()); } map.setSeekerLobby(Location.from(sender)); + if(!map.isBoundsNotSetup()) { + Vector boundsMin = map.getBoundsMin(); + Vector boundsMax = map.getBoundsMax(); + if(map.getSeekerLobby().isNotInBounds(boundsMin.getBlockX(), boundsMax.getBlockX(), boundsMin.getBlockZ(), boundsMax.getBlockZ())) { + sender.sendMessage(warningPrefix + message("WARN_MAP_BOUNDS")); + } + } }); } 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 b983404..0baf55e 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 @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command.map.set; import net.tylermurphy.hideAndSeek.command.util.ICommand; @@ -47,8 +28,16 @@ public class Spawn implements ICommand { map.setSpawn(Location.from(sender)); + if(!map.isBoundsNotSetup()) { + Vector boundsMin = map.getBoundsMin(); + Vector boundsMax = map.getBoundsMax(); + if(map.getSpawn().isNotInBounds(boundsMin.getBlockX(), boundsMax.getBlockX(), boundsMin.getBlockZ(), boundsMax.getBlockZ())) { + sender.sendMessage(warningPrefix + message("WARN_MAP_BOUNDS")); + } + } + if(map.getSeekerLobby().getWorld() != null && !map.getSeekerLobby().getWorld().equals(sender.getLocation().getWorld().getName())) { - sender.sendMessage(message("SEEKER_LOBBY_SPAWN_RESET").toString()); + sender.sendMessage(warningPrefix + message("SEEKER_LOBBY_SPAWN_RESET")); map.setSeekerLobby(Location.getDefault()); } 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 b366b9a..0cb307b 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/util/CommandGroup.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/util/CommandGroup.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command.util; import net.tylermurphy.hideAndSeek.command.map.Save; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/util/ICommand.java b/src/main/java/net/tylermurphy/hideAndSeek/command/util/ICommand.java index 3aa0ca4..1be678c 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/util/ICommand.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/util/ICommand.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.command.util; import org.bukkit.entity.Player; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java index dbc9e37..5881d19 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.configuration; import com.cryptomorin.xseries.XItemStack; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java index 958d1ca..92fa4ce 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.configuration; import net.tylermurphy.hideAndSeek.Main; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Items.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Items.java index 06dbb99..e5f970b 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Items.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Items.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.configuration; import com.cryptomorin.xseries.XItemStack; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java index 6f3f88b..b9f9b69 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.configuration; import net.md_5.bungee.api.ChatColor; @@ -38,7 +19,8 @@ public class Localization { }); put("de-DE", new String[][]{ {}, - {"TAUNTED"} + {"TAUNTED"}, + {"GAME_SETUP", "SETUP_GAME", "SETUP_LOBBY", "SETUP_SEEKER_LOBBY", "SETUP_EXIT", "SETUP_SAVEMAP", "SETUP_BOUNDS"} }); }}; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/LocalizationString.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/LocalizationString.java index 3d8bc0f..b457622 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/LocalizationString.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/LocalizationString.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.configuration; import org.bukkit.entity.Entity; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Map.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Map.java index 8c3f8a7..a23a1f7 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Map.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Map.java @@ -3,6 +3,7 @@ package net.tylermurphy.hideAndSeek.configuration; 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; @@ -80,7 +81,11 @@ public class Map { } public void setBlockhunt(boolean enabled, List blocks) { - this.blockhunt = enabled; + if (Main.getInstance().supports(9)) { + this.blockhunt = enabled; + } else { + this.blockhunt = false; + } this.blockhuntBlocks = blocks; } @@ -226,10 +231,6 @@ public class Map { return xBoundMin == 0 || zBoundMin == 0 || xBoundMax == 0 || zBoundMax == 0; } - public boolean isSpawnNotSetup() { - return spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0; - } - public boolean isBoundsNotSetup() { return xBoundMin == 0 || zBoundMin == 0 || xBoundMax == 0 || zBoundMax == 0; } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java b/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java index d2fb40d..dca2de0 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.database; import com.google.common.io.ByteStreams; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/database/GameDataTable.java b/src/main/java/net/tylermurphy/hideAndSeek/database/GameDataTable.java index 8f0ddde..c01f615 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/database/GameDataTable.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/database/GameDataTable.java @@ -175,10 +175,10 @@ public class GameDataTable { @NotNull Board board, @NotNull List uuids, @NotNull List winners, - @NotNull Map hider_kills, - @NotNull Map hider_deaths, - @NotNull Map seeker_kills, - @NotNull Map seeker_deaths, + @NotNull Map hider_kills, + @NotNull Map hider_deaths, + @NotNull Map seeker_kills, + @NotNull Map seeker_deaths, @NotNull WinType type ) { for(UUID uuid : uuids) { @@ -192,10 +192,10 @@ public class GameDataTable { info.getSeekerWins() + (winners.contains(uuid) && type == WinType.SEEKER_WIN ? 1 : 0), info.getHiderGames() + (board.isHider(uuid) || (board.isSeeker(uuid) && !board.getFirstSeeker().getUniqueId().equals(uuid)) ? 1 : 0), info.getSeekerGames() + (board.getFirstSeeker().getUniqueId().equals(uuid) ? 1 : 0), - info.getHiderKills() + hider_kills.getOrDefault(uuid.toString(), 0), - info.getSeekerKills() + seeker_kills.getOrDefault(uuid.toString(), 0), - info.getHiderDeaths() + hider_deaths.getOrDefault(uuid.toString(), 0), - info.getSeekerDeaths() + seeker_deaths.getOrDefault(uuid.toString(), 0) + info.getHiderKills() + hider_kills.getOrDefault(uuid, 0), + info.getSeekerKills() + seeker_kills.getOrDefault(uuid, 0), + info.getHiderDeaths() + hider_deaths.getOrDefault(uuid, 0), + info.getSeekerDeaths() + seeker_deaths.getOrDefault(uuid, 0) ); } } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java index 8c26bc8..2050f33 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.game; import net.tylermurphy.hideAndSeek.Main; @@ -38,109 +19,128 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.message; public class Board { - private final List Hider = new ArrayList<>(), Seeker = new ArrayList<>(), Spectator = new ArrayList<>(); - private final Map playerList = new HashMap<>(); - private final Map customBoards = new HashMap<>(); - private final Map hider_kills = new HashMap<>(), seeker_kills = new HashMap<>(), hider_deaths = new HashMap<>(), seeker_deaths = new HashMap<>(); + private enum Type { + HIDER, + SEEKER, + SPECTATOR, + } + + private UUID initialSeeker = null; + private final Map Players = new HashMap<>(); + private final Map customBoards = new HashMap<>(); + private final Map hider_kills = new HashMap<>(), seeker_kills = new HashMap<>(), hider_deaths = new HashMap<>(), seeker_deaths = new HashMap<>(); public boolean contains(Player player) { - return playerList.containsKey(player.getUniqueId().toString()); + return Players.containsKey(player.getUniqueId()); } public boolean isHider(Player player) { - return Hider.contains(player.getUniqueId().toString()); + return isHider(player.getUniqueId()); } public boolean isHider(UUID uuid) { - return Hider.contains(uuid.toString()); + if(!Players.containsKey(uuid)) return false; + return Players.get(uuid) == Type.HIDER; } public boolean isSeeker(Player player) { - return Seeker.contains(player.getUniqueId().toString()); + return isSeeker(player.getUniqueId()); } public boolean isSeeker(UUID uuid) { - return Seeker.contains(uuid.toString()); + if(!Players.containsKey(uuid)) return false; + return Players.get(uuid) == Type.SEEKER; } public boolean isSpectator(Player player) { - return Spectator.contains(player.getUniqueId().toString()); + return isSpectator(player.getUniqueId()); + } + + public boolean isSpectator(UUID uuid) { + if(!Players.containsKey(uuid)) return false; + return Players.get(uuid) == Type.SPECTATOR; } public int sizeHider() { - return Hider.size(); + return getHiders().size(); } public int sizeSeeker() { - return Seeker.size(); + return getSeekers().size(); } public int size() { - return playerList.values().size(); + return getPlayers().size(); } public List getHiders() { - return Hider.stream().filter(Objects::nonNull).map(playerList::get).filter(Objects::nonNull).collect(Collectors.toList()); + return Players.keySet().stream() + .filter(s -> Players.get(s) == Type.HIDER) + .map(Bukkit::getPlayer) + .filter(Objects::nonNull) + .collect(Collectors.toList()); } public List getSeekers() { - return Seeker.stream().filter(Objects::nonNull).map(playerList::get).filter(Objects::nonNull).collect(Collectors.toList()); - } - - public Player getFirstSeeker() { - return playerList.get(Seeker.get(0)); + return Players.keySet().stream() + .filter(s -> Players.get(s) == Type.SEEKER) + .map(Bukkit::getPlayer) + .filter(Objects::nonNull) + .collect(Collectors.toList()); } public List getSpectators() { - return Spectator.stream().filter(Objects::nonNull).map(playerList::get).filter(Objects::nonNull).collect(Collectors.toList()); + return Players.keySet().stream() + .filter(s -> Players.get(s) == Type.SPECTATOR) + .map(Bukkit::getPlayer) + .filter(Objects::nonNull) + .collect(Collectors.toList()); } public List getPlayers() { - return playerList.values().stream().filter(Objects::nonNull).collect(Collectors.toList()); + return Players.keySet().stream() + .map(Bukkit::getPlayer) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + public Player getFirstSeeker() { + if(initialSeeker == null) return null; + return Bukkit.getPlayer(initialSeeker); } public Player getPlayer(UUID uuid) { - return playerList.get(uuid.toString()); + if(!Players.containsKey(uuid)) { + return null; + } + return Bukkit.getPlayer(uuid); } public void addHider(Player player) { - Hider.add(player.getUniqueId().toString()); - Seeker.remove(player.getUniqueId().toString()); - Spectator.remove(player.getUniqueId().toString()); - playerList.put(player.getUniqueId().toString(), player); + Players.put(player.getUniqueId(), Type.HIDER); } public void addSeeker(Player player) { - Hider.remove(player.getUniqueId().toString()); - Seeker.add(player.getUniqueId().toString()); - Spectator.remove(player.getUniqueId().toString()); - playerList.put(player.getUniqueId().toString(), player); + if(initialSeeker == null) { + initialSeeker = player.getUniqueId(); + } + Players.put(player.getUniqueId(), Type.SEEKER); } public void addSpectator(Player player) { - Hider.remove(player.getUniqueId().toString()); - Seeker.remove(player.getUniqueId().toString()); - Spectator.add(player.getUniqueId().toString()); - playerList.put(player.getUniqueId().toString(), player); + Players.put(player.getUniqueId(), Type.SPECTATOR); } public void remove(Player player) { - Hider.remove(player.getUniqueId().toString()); - Seeker.remove(player.getUniqueId().toString()); - Spectator.remove(player.getUniqueId().toString()); - playerList.remove(player.getUniqueId().toString()); + Players.remove(player.getUniqueId()); } public boolean onSameTeam(Player player1, Player player2) { - if (Hider.contains(player1.getUniqueId().toString()) && Hider.contains(player2.getUniqueId().toString())) return true; - else if (Seeker.contains(player1.getUniqueId().toString()) && Seeker.contains(player2.getUniqueId().toString())) return true; - else return Spectator.contains(player1.getUniqueId().toString()) && Spectator.contains(player2.getUniqueId().toString()); + return Players.get(player1.getUniqueId()) == Players.get(player2.getUniqueId()); } public void reload() { - Hider.clear(); - Seeker.clear(); - Spectator.clear(); + Players.replaceAll((u, v) -> Type.HIDER); hider_kills.clear(); seeker_kills.clear(); hider_deaths.clear(); @@ -148,47 +148,38 @@ public class Board { } public void addKill(UUID uuid) { - if (Hider.contains(uuid.toString())) { - if (hider_kills.containsKey(uuid.toString())) { - hider_kills.put(uuid.toString(), hider_kills.get(uuid.toString())+1); - } else { - hider_kills.put(uuid.toString(), 1); - } - } else if (Seeker.contains(uuid.toString())) { - if (seeker_kills.containsKey(uuid.toString())) { - seeker_kills.put(uuid.toString(), seeker_kills.get(uuid.toString())+1); - } else { - seeker_kills.put(uuid.toString(), 1); - } + if(Players.get(uuid) == Type.HIDER) { + int kills = hider_kills.getOrDefault(uuid, 0); + hider_kills.put(uuid, kills + 1); + } else if(Players.get(uuid) == Type.SEEKER) { + int kills = seeker_kills.getOrDefault(uuid, 0); + seeker_kills.put(uuid, kills + 1); } } public void addDeath(UUID uuid) { - if (Hider.contains(uuid.toString())) { - if (hider_deaths.containsKey(uuid.toString())) { - hider_deaths.put(uuid.toString(), hider_deaths.get(uuid.toString())+1); - } else { - hider_deaths.put(uuid.toString(), 1); - } - } else if (Seeker.contains(uuid.toString())) { - if (seeker_deaths.containsKey(uuid.toString())) { - seeker_deaths.put(uuid.toString(), seeker_deaths.get(uuid.toString())+1); - } else { - seeker_deaths.put(uuid.toString(), 1); - } + if(Players.get(uuid) == Type.HIDER) { + int kills = hider_deaths.getOrDefault(uuid, 0); + hider_deaths.put(uuid, kills + 1); + } else if(Players.get(uuid) == Type.SEEKER) { + int kills = seeker_deaths.getOrDefault(uuid, 0); + seeker_deaths.put(uuid, kills + 1); } } - public Map getHiderKills() { + public Map getHiderKills() { return new HashMap<>(hider_kills); } - public Map getSeekerKills() { + + public Map getSeekerKills() { return new HashMap<>(seeker_kills); } - public Map getHiderDeaths() { + + public Map getHiderDeaths() { return new HashMap<>(hider_deaths); } - public Map getSeekerDeaths() { + + public Map getSeekerDeaths() { return new HashMap<>(seeker_deaths); } @@ -197,7 +188,7 @@ public class Board { } private void createLobbyBoard(Player player, boolean recreate) { - CustomBoard board = customBoards.get(player.getUniqueId().toString()); + CustomBoard board = customBoards.get(player.getUniqueId()); if (recreate || board == null) { board = new CustomBoard(player, LOBBY_TITLE); board.updateTeams(); @@ -228,7 +219,7 @@ public class Board { i++; } board.display(); - customBoards.put(player.getUniqueId().toString(), board); + customBoards.put(player.getUniqueId(), board); } public String getMapName() { @@ -242,7 +233,7 @@ public class Board { } private void createGameBoard(Player player, boolean recreate) { - CustomBoard board = customBoards.get(player.getUniqueId().toString()); + CustomBoard board = customBoards.get(player.getUniqueId()); if (recreate || board == null) { board = new CustomBoard(player, GAME_TITLE); board.updateTeams(); @@ -279,7 +270,7 @@ public class Board { if (!tauntEnabled) continue; if (taunt == null || status == Status.STARTING) { board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_COUNTING.replace("{AMOUNT}", "0"))); - } else if (!tauntLast && Hider.size() == 1) { + } else if (!tauntLast && sizeHider() == 1) { board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_EXPIRED)); } else if (!taunt.isRunning()) { board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_COUNTING.replaceFirst("\\{AMOUNT}", taunt.getDelay() / 60 + "").replaceFirst("\\{AMOUNT}", taunt.getDelay() % 60 + ""))); @@ -306,23 +297,23 @@ public class Board { i++; } board.display(); - customBoards.put(player.getUniqueId().toString(), board); + customBoards.put(player.getUniqueId(), board); } public void removeBoard(Player player) { ScoreboardManager manager = Bukkit.getScoreboardManager(); assert manager != null; player.setScoreboard(manager.getMainScoreboard()); - customBoards.remove(player.getUniqueId().toString()); + customBoards.remove(player.getUniqueId()); } public void reloadLobbyBoards() { - for(Player player : playerList.values()) + for(Player player : getPlayers()) createLobbyBoard(player, false); } public void reloadGameBoards() { - for(Player player : playerList.values()) + for(Player player : getPlayers()) createGameBoard(player, false); } @@ -332,17 +323,19 @@ public class Board { } private String getSeekerPercent() { - if (playerList.values().size() < 2) + int size = size(); + if (size < 2) return " --"; else - return " "+(int)(100*(1.0/playerList.size())); + return " "+(int)(100*(1.0/size)); } private String getHiderPercent() { - if (playerList.size() < 2) + int size = size(); + if (size < 2) return " --"; else - return " "+(int)(100-100*(1.0/playerList.size())); + return " "+(int)(100-100*(1.0/size)); } private String getTeam(Player player) { @@ -353,10 +346,8 @@ public class Board { } public void cleanup() { - playerList.clear(); - Hider.clear(); - Seeker.clear(); - Spectator.clear(); + Players.clear();; + initialSeeker = null; customBoards.clear(); } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/WorldInteractHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/WorldInteractHandler.java new file mode 100644 index 0000000..10b8e3e --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/WorldInteractHandler.java @@ -0,0 +1,48 @@ +package net.tylermurphy.hideAndSeek.game.listener; + +import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.game.Board; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.entity.EntityBreakDoorEvent; +import org.bukkit.event.hanging.HangingBreakByEntityEvent; + +public class WorldInteractHandler implements Listener { + + @EventHandler(priority = EventPriority.HIGHEST) + public void onBlockBreak(BlockBreakEvent event) { + Player player = event.getPlayer(); + Board board = Main.getInstance().getBoard(); + if(board.contains(player)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onHangingEntityBreakByEntity(HangingBreakByEntityEvent event) { + if (!(event.getRemover() instanceof Player)) { + return; + } + Player player = (Player) event.getRemover(); + Board board = Main.getInstance().getBoard(); + if(board.contains(player)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onBreakDoor(EntityBreakDoorEvent event) { + if (!(event.getEntity() instanceof Player)) { + return; + } + Player player = (Player) event.getEntity(); + Board board = Main.getInstance().getBoard(); + if(board.contains(player)) { + event.setCancelled(true); + } + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/util/Status.java b/src/main/java/net/tylermurphy/hideAndSeek/game/util/Status.java index e630070..44f19b2 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/util/Status.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/util/Status.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.game.util; public enum Status { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/util/WinType.java b/src/main/java/net/tylermurphy/hideAndSeek/game/util/WinType.java index f584d80..24544ba 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/util/WinType.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/util/WinType.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.game.util; public enum WinType { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java index 10fa783..a5060c6 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java @@ -134,4 +134,12 @@ public class Location { return destination.isDirectory(); } + public boolean isNotSetup() { + return getBlockX() == 0 && getBlockY() == 0 && getBlockZ() == 0; + } + + public boolean isNotInBounds(int xmin, int xmax, int zmin, int zmax) { + return getBlockX() < xmin || getBlockX() > xmax || getBlockZ() < zmin || getBlockZ() > zmax; + } + } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java b/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java index 15ff45f..4f9ad0d 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.world; import org.bukkit.Location; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java index d14f617..e5913aa 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java @@ -1,22 +1,3 @@ -/* - * This file is part of Kenshins Hide and Seek - * - * Copyright (c) 2021 Tyler Murphy. - * - * Kenshins Hide and Seek free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * he Free Software Foundation version 3. - * - * Kenshins Hide and Seek is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - package net.tylermurphy.hideAndSeek.world; import net.tylermurphy.hideAndSeek.Main; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 389352a..82b9379 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -268,11 +268,8 @@ locale: "en-US" # playing the game. blockedCommands: [ "msg", - "tp", - "gamemode", - "kill", - "give", - "effect" + "reply", + "me" ] # Stop interactions with any block by any user while playing the game. diff --git a/src/main/resources/lang/localization_de-DE.yml b/src/main/resources/lang/localization_de-DE.yml index 9789a75..92309ee 100644 --- a/src/main/resources/lang/localization_de-DE.yml +++ b/src/main/resources/lang/localization_de-DE.yml @@ -10,6 +10,7 @@ Localization: COMMAND_PLAYER_ONLY: "Dieser Befehl kann nur als Spieler ausgeführt werden." COMMAND_NOT_ALLOWED: "Es ist dir nicht gestattet diesen Befehl auszuführen." COMMAND_ERROR: "Ein unbekannter Fehler ist aufgetreten." + COMMAND_INVALID_ARG: "Ungültiges Argument: {AMOUNT}" GAME_PLAYER_DEATH: "&c{PLAYER}&f ist gestorben." GAME_PLAYER_FOUND: "&e{PLAYER}&f wurde gefunden und ist nun ein Seeker." GAME_PLAYER_FOUND_BY: "&e{PLAYER}&f wurde von &c{PLAYER}&f gefunden und ist nun ein Seeker." @@ -17,7 +18,7 @@ Localization: GAME_GAMEOVER_SEEKERS_QUIT: "All Seeker haben das Spiel verlassen." GAME_GAMEOVER_HIDERS_QUIT: "All Hider haben das Spiel verlassen." GAME_GAMEOVER_TIME: "Seekers haben keine Spielzeit mehr. Die Hiders haben gewonnen!" - GAME_SETUP: "Spiel wurde noch nicht eingerichtet. Führe &c/hs setup&f aus, um die Einrichtungsschritte zu sehen." + GAME_SETUP: "Es gibt keine Setup-Karten! Führen Sie /hs map status auf einer Karte aus, um zu sehen, was Sie tun müssen." GAME_INGAME: "Du bist bereits in der Lobby oder im Spiel." GAME_NOT_INGAME: "Du bist weder in einer Lobby noch in einem Spiel." GAME_INPROGRESS: "Es läuft bereits ein Spiel." @@ -25,6 +26,7 @@ Localization: GAME_JOIN: "{PLAYER} hat die Hide and Seek Lobby betreten." GAME_JOIN_SPECTATOR: "Du bist als Beobachter einem laufenden Spiel beigetreten." GAME_LEAVE: "{PLAYER} hat die Hide and Seek Lobby verlassen." + LOBBY_IN_USE: "Die Lobby kann nicht verändert werden, solange die Lobby nicht leer ist." CONFIG_RELOAD: "Konfiguration neu geladen." MAPSAVE_INPROGRESS: "Weltkarte wird aktuell gespeichert. Versuche es später nochmal." MAPSAVE_START: "Starte Speichervorgang der Weltkarte" @@ -32,6 +34,9 @@ Localization: MAPSAVE_END: "Speichervorgang abgeschlossen." MAPSAVE_ERROR: "Aktuelle Weltkarte konnte nicht gefunden werden." MAPSAVE_DISABLED: "Mapsave ist in config.yml deaktiviert." + MAPSAVE_FAIL_WORLD: "Mapsave fehlgeschlagen. Die aktuelle Welt konnte nicht geladen werden." + MAPSAVE_INVALID: "Ungültige Welt zum Speichern: {AMOUNT}" + MAPSAVE_FAIL_DIR: "Verzeichnis konnte nicht umbenannt werden: {AMOUNT}" WORLDBORDER_DISABLE: "World Border ausgeschaltet." WORLDBORDER_INVALID_INPUT: "Ungültiger Wert: {AMOUNT}" WORLDBORDER_MIN_SIZE: "World Border darf nicht geringer als 100 Blöcke sein." @@ -39,24 +44,32 @@ Localization: WORLDBORDER_ENABLE: "Setze World Border zentriert von dieser Position aus. Größe: {AMOUNT}. Verzögerung: {AMOUNT}." WORLDBORDER_DECREASING: "World Norder schrumpoft 100 Blöcke über die nächsten 30 Sekunden!" WORLDBORDER_WARN: "Die Weltgrenze wird in den nächsten 30er Jahren schrumpfen!" + WORLDBORDER_CHANGE_SIZE: "Die Änderung der Weltgrenze kann nicht 0 oder weniger sein." TAUNTED: "&c&oOh nein! Du wurdest geärgert!" TAUNT: "Ein zufälliger Hider wird in den nächsten 30 Sekunden geärgert." TAUNT_ACTIVATE: "Ärgern wurde aktiviert" ERROR_GAME_SPAWN: "Bitte erst die Spawn-Position für das Spiel festlegen." + ERROR_GAME_SEEKER_SPAWN: "Bitte setze zuerst den Sucher-Spawn-Ort" + ERROR_MAP_BOUNDS: "Bitte setzen Sie die Grenzen der Karte vor dem Speichern" + WARN_MAP_BOUNDS: "Dieser Ort liegt nicht innerhalb der Kartengrenzen, dies könnte Probleme verursachen" + WARN_SPAWN_RESET: "Spiel-Spawn wurde zurückgesetzt, da er nicht innerhalb der Kartengrenzen liegt" + WARN_SEEKER_SPAWN_RESET: "Seeker-Spawn zurückgesetzt, da er nicht innerhalb der Kartengrenzen liegt" SETUP: "&f&lFühre die folgenden Schritte zur Einrichtung aus:" - SETUP_GAME: "&c&l- &fTeleport-Position für den Spielbeginn festlegen mit /hs setspawn" - SETUP_LOBBY: "&c&l- &fTeleport-Position für die Lobby festlegen mit /hs setlobby" - SETUP_SEEKER_LOBBY: "&c&l- &fTeleport-Position für die Lobby Seekern festlegen mit /hs setseekerlobby" - SETUP_EXIT: "&c&l- &fTeleport-Position für das Spielende festlegen mit /hs setexit" - SETUP_SAVEMAP: "&c&l- &fHide and Seek Weltkarte speichern mit /hs savemap (nach /hs setspawn)" + SETUP_GAME: "&c&l- &fSpielspawn ist nicht gesetzt, /hs map set spawn " + SETUP_LOBBY: "&c&l- &fLobby-Spawn ist nicht gesetzt, /hs map set lobby " + SETUP_SEEKER_LOBBY: "&c&l- &fSucherlobby-Spawn ist nicht gesetzt, /hs map set seekerlobby " + SETUP_EXIT: "&c&l- &fBeenden/Verlassen der Teleportposition ist nicht festgelegt, /hs setexit" + SETUP_SAVEMAP: "&c&l- &fVerstecken und Suchen Karte wird nicht gespeichert, /hs map save " SETUP_COMPLETE: "Alles eingerichtet! Hide and Seek ist spielbereit." - SETUP_BOUNDS: "&c&l- &fSpielgrenze in 2 gegenüberliegenden Ecken der Welt festlegen mit /hs setbounds" + SETUP_BLOCKHUNT: "&c&l - &fWenn Blockhunt aktiviert ist, muss mindestens 1 Block gesetzt sein, /hs map blockhunt block add block " + SETUP_BOUNDS: "&c&l- &fBitte setzen Sie Spielgrenzen in 2 gegenüberliegenden Ecken der Spielkarte, /hs map set bounds " GAME_SPAWN: "Teleport-Position für Spielbeginn festgelegt" LOBBY_SPAWN: "Teleport-Position für Lobby festgelegt" EXIT_SPAWN: "Teleport-Position für Spielende festgelegt" SEEKER_SPAWN: "Teleport-Position für Seeker Lobby festgelegt" START_MIN_PLAYERS: "Um das Spiel zu starten benötigst du mindestens {AMOUNT} Spieler." START_INVALID_NAME: "Ungültiger Spieler: {PLAYER}." + START_FAILED_SEEKER: "Zufälliger Sucher konnte nicht ausgewählt werden." START_COUNTDOWN: "Die Hider haben {AMOUNT} Sekunden Zeit sich zu verstecken!" START_COUNTDOWN_LAST: "Die Hider haben {AMOUNT} Sekunde Zeit sich zu verstecken!" START: "Los, Seeker! Es ist Zeit, die Hider zu finden." @@ -76,7 +89,44 @@ Localization: FLYING_ENABLED: "Fliegen aktiviert" FLYING_DISABLED: "Fliegen deaktiviert" RESPAWN_NOTICE: "Du wirst in {AMOUNT} Sekunden respawnen." + INVALID_MAP: "Das ist ein ungültiger Kartenname!" + MAP_ALREADY_EXISTS: "Diese Karte existiert bereits!" + INVALID_MAP_NAME: "Der Name darf nur Zahlen oder Buchstaben enthalten." + MAP_CREATED: "Neue Karte erstellt: {AMOUNT}" + MAP_FAIL_DELETE: "Karte konnte nicht gelöscht werden: {AMOUNT}" + MAP_DELETED: "Gelöschte Landkarte: {AMOUNT}" + NO_MAPS: "Es gibt keine Karten im Plugin (/hs map add )" + MAP_NOT_SETUP: "Die Karte {AMOUNT} ist nicht eingerichtet (/hs map status )" + LIST_MAPS: "Die aktuellen Karten sind:" + ARGUMENT_COUNT: "Dieser Befehl erfordert mehr Argumente zur Ausführung." + GAME_SPAWN_NEEDED: "Der Hauptspawn muss vor dem Sucherspawn gesetzt werden." + SEEKER_LOBBY_SPAWN_RESET: "Der Spawn der Seeker-Lobby wurde zurückgesetzt, da der Spiel-Spawn in eine neue Welt verschoben wurde." + SEEKER_LOBBY_INVALID: "Die Lobby des Suchers muss sich in der gleichen Welt befinden, in der das Spiel startet." + CONFIG_ERROR: "Fehler beim Neuladen der Konfiguration. Prüfen Sie die Serverprotokolle." + BLOCKHUNT_DISABLED: "Bitte aktivieren Sie Blockhunt in dieser Karte in der maps.yml, um Verkleidungen zu ermöglichen. Blockhunt funktioniert nicht auf 1.8" + BLOCKHUNT_UNSUPPORTED: "Blockhunt funktioniert nicht unter 1.8" + BLOCKHUNT_SET_TO: "Blockjagd eingestellt auf {AMOUNT}." + BLOCKHUNT_BLOCK_EXISTS: "{AMOUNT} ist bereits in der Blockhunt-Konfiguration eingestellt." + BLOCKHUNT_BLOCK_DOESNT_EXIT: "{AMOUNT} ist bereits nicht in der blochunt-Konfiguration eingestellt." + BLOCKHUNT_BLOCK_ADDED: "{AMOUNT} zur Blockhunt-Konfiguration hinzugefügt." + BLOCKHUNT_BLOCK_REMOVED: "Entfernt {AMOUNT} aus der Blockhunt-Konfiguration." + BLOCKHUNT_LIST_BLOCKS: "Die folgenden Blockhunt-Blöcke sind:" + NO_BLOCKS: "Auf dieser Karte gibt es keine Blockhunt-Blöcke." + WORLD_EXISTS: "Eine Welt namens {AMOUNT} existiert bereits." + WORLD_DOESNT_EXIST: "Es gibt keine Welt namens {AMOUNT}, die existiert." + WORLD_ADDED: "Eine Welt mit dem Namen {AMOUNT} erstellt." + WORLD_ADDED_FAILED: "Fehlgeschlagen, eine neue Welt zu erschaffen." + WORLD_REMOVED: "Eine Welt namens {AMOUNT} wurde gelöscht." + WORLD_REMOVED_FAILED: "Welt konnte nicht gelöscht werden." + WORLD_NOT_EMPTY: "In einer zu löschenden Welt darf es keine Spieler geben." + LIST_WORLDS: "Die folgenden Welten sind:" + NO_WORLDS: "Failed to fetch any worlds." + WORLD_LOAD_FAILED: "Es konnten keine Welten geholt werden." + INVALID_WORLD_TYPE: "Ungültiger Welttyp: {AMOUNT}." + NO_CONFIRMATION: "Sie haben nichts zu bestätigen." + CONFIRMATION_TIMED_OUT: "Die Zeit für die Bestätigung ist abgelaufen." + CONFIRMATION: "Führen Sie /hs confirm innerhalb von 10s aus, um zu bestätigen." # DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE -version: 3 +version: 4 type: "de-DE" diff --git a/src/main/resources/lang/localization_en-US.yml b/src/main/resources/lang/localization_en-US.yml index 61d562b..062f4f2 100644 --- a/src/main/resources/lang/localization_en-US.yml +++ b/src/main/resources/lang/localization_en-US.yml @@ -49,7 +49,11 @@ Localization: TAUNT: "A random hider will be taunted in the next 30s." TAUNT_ACTIVATE: "Taunt has been activated." ERROR_GAME_SPAWN: "Please set game spawn location first" + ERROR_GAME_SEEKER_SPAWN: "Please set seeker spawn location first" ERROR_MAP_BOUNDS: "Please set map bounds before saving" + WARN_MAP_BOUNDS: "This location is not inside map bounds, this could cause issues" + WARN_SPAWN_RESET: "Game spawn reset due to not being inside map bounds" + WARN_SEEKER_SPAWN_RESET: "Seeker spawn reset due to not being inside map bounds" SETUP: "&f&lThe following is needed for setup..." SETUP_GAME: "&c&l- &fGame spawn isn't set, /hs map set spawn " SETUP_LOBBY: "&c&l- &fLobby spawn isn't set, /hs map set lobby " @@ -100,6 +104,7 @@ Localization: SEEKER_LOBBY_INVALID: "Seeker lobby must be in the same world as game spawn." CONFIG_ERROR: "Error reloading config. Check server logs." BLOCKHUNT_DISABLED: "Please enable blockhunt in this map inside maps.yml to enable disguises. Blockhunt does not work on 1.8" + BLOCKHUNT_UNSUPPORTED: "Blockhunt does not work on 1.8" BLOCKHUNT_SET_TO: "Blockhunt set to {AMOUNT}." BLOCKHUNT_BLOCK_EXISTS: "{AMOUNT} is already set in the blockhunt config." BLOCKHUNT_BLOCK_DOESNT_EXIT: "{AMOUNT} is already not set in the blochunt config." -- cgit v1.2.3-freya From 8541dbe99ec992f594305b4223de70712565d870 Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Sun, 5 Feb 2023 13:47:49 -0500 Subject: 1.7.0 rc3 --- src/main/java/net/tylermurphy/hideAndSeek/command/Send.java | 1 + src/main/java/net/tylermurphy/hideAndSeek/util/Location.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util/Location.java') diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Send.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Send.java index 95c0dd9..43620c5 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/Send.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Send.java @@ -40,6 +40,7 @@ public class Send implements ICommand { } Main.getInstance().getGame().setCurrentMap(map); + Main.getInstance().getBoard().reloadLobbyBoards(); for(Player player : Main.getInstance().getBoard().getPlayers()) { map.getLobby().teleport(player); } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java index a5060c6..606b64b 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java @@ -87,7 +87,7 @@ public class Location { public void teleport(Player player) { if(!exists()) return; if(load() == null) return; - Main.getInstance().scheduleTask(() -> player.teleport(toBukkit())); + player.teleport(toBukkit()); } public Location changeWorld(String world) { -- cgit v1.2.3-freya