summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2022-04-13 14:02:00 -0400
committerGitHub <noreply@github.com>2022-04-13 14:02:00 -0400
commit44040cc87b23726d19834de76f1cdae6f6458448 (patch)
treeccbbc26fb4622775394a3388a8836d9c28f9ff9b /src/main/java/net/tylermurphy
parentMerge pull request #20 from tylermurphy534/1.3.3 (diff)
parent1.4.0 rc3 (diff)
downloadkenshinshideandseek-44040cc87b23726d19834de76f1cdae6f6458448.tar.gz
kenshinshideandseek-44040cc87b23726d19834de76f1cdae6f6458448.tar.bz2
kenshinshideandseek-44040cc87b23726d19834de76f1cdae6f6458448.zip
Merge pull request #22 from tylermurphy534/1.4.0
1.4.0
Diffstat (limited to 'src/main/java/net/tylermurphy')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/Main.java8
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/About.java2
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/Start.java8
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java170
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java28
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/configuration/Items.java74
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java15
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/database/Database.java21
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/database/PlayerInfoTable.java11
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/Board.java244
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java46
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/Game.java81
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/Packet.java18
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/Version.java45
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java18
15 files changed, 499 insertions, 290 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Main.java b/src/main/java/net/tylermurphy/hideAndSeek/Main.java
index e486cda..cdba285 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/Main.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/Main.java
@@ -46,7 +46,7 @@ public class Main extends JavaPlugin implements Listener {
public static Main plugin;
public static File root, data;
- private BukkitTask onTickTask;
+ private int onTickTask;
public void onEnable() {
plugin = this;
@@ -69,13 +69,13 @@ public class Main extends JavaPlugin implements Listener {
} catch (Exception e) {
e.printStackTrace();
}
- },0,1);
+ },0,1).getTaskId();
}
public void onDisable() {
- if(onTickTask != null)
- onTickTask.cancel();
+ Main.plugin.getServer().getScheduler().cancelTask(onTickTask);
UUIDFetcher.cleanup();
+ Board.cleanup();
}
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, String[] args) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/About.java b/src/main/java/net/tylermurphy/hideAndSeek/command/About.java
index de1062b..bfc6c85 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/About.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/About.java
@@ -26,7 +26,7 @@ public class About implements ICommand {
public void execute(CommandSender sender, String[] args) {
sender.sendMessage(
- String.format("%s%sHide and Seek %s(%s1.3.3%s)\n", ChatColor.AQUA, ChatColor.BOLD, ChatColor.GRAY,ChatColor.WHITE,ChatColor.GRAY) +
+ String.format("%s%sHide and Seek %s(%s1.4.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/Start.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java
index b82e3b5..8605764 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java
@@ -24,6 +24,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
import net.tylermurphy.hideAndSeek.game.Board;
import net.tylermurphy.hideAndSeek.game.Game;
import net.tylermurphy.hideAndSeek.util.Status;
+import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -64,7 +65,12 @@ public class Start implements ICommand {
} else {
seekerName = args[0];
}
- Player seeker = Board.getPlayer(seekerName);
+ Player temp = Bukkit.getPlayer(seekerName);
+ if(temp == null) {
+ sender.sendMessage(errorPrefix + message("START_INVALID_NAME").addPlayer(seekerName));
+ return;
+ }
+ Player seeker = Board.getPlayer(temp.getUniqueId());
if(seeker == null) {
sender.sendMessage(errorPrefix + message("START_INVALID_NAME").addPlayer(seekerName));
return;
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java
index 524eeac..5213f5d 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java
@@ -19,11 +19,15 @@
package net.tylermurphy.hideAndSeek.configuration;
+import net.tylermurphy.hideAndSeek.util.Version;
import org.bukkit.util.Vector;
+import java.util.Collections;
+import java.util.List;
+
public class Config {
- private static ConfigManager manager;
+ private static ConfigManager config, leaderboard;
public static String
messagePrefix,
@@ -36,7 +40,7 @@ public class Config {
spawnWorld,
exitWorld,
lobbyWorld,
- local;
+ locale;
public static Vector
spawnPosition,
@@ -57,7 +61,8 @@ public class Config {
pvpEnabled,
autoJoin,
teleportToExit,
- lobbyCountdownEnabled;
+ lobbyCountdownEnabled,
+ seekerPing;
public static int
minPlayers,
@@ -74,101 +79,152 @@ public class Config {
countdown,
changeCountdown,
lobbyMin,
- lobbyMax;
+ lobbyMax,
+ seekerPingLevel1,
+ seekerPingLevel2,
+ seekerPingLevel3;
+
+ public static String
+ LOBBY_TITLE,
+ GAME_TITLE,
+ COUNTDOWN_WAITING,
+ COUNTDOWN_COUNTING,
+ COUNTDOWN_ADMINSTART,
+ TAUNT_COUNTING,
+ TAUNT_ACTIVE,
+ TAUNT_EXPIRED,
+ GLOW_ACTIVE,
+ GLOW_INACTIVE,
+ BORDER_COUNTING,
+ BORDER_DECREASING;
+
+ public static List<String>
+ LOBBY_CONTENTS,
+ GAME_CONTENTS;
+
+ public static List<String>
+ blockedCommands;
public static void loadConfig() {
- manager = new ConfigManager("config.yml");
- manager.saveConfig();
+ config = new ConfigManager("config.yml");
+ config.saveConfig();
+ leaderboard = new ConfigManager("leaderboard.yml");
+ leaderboard.saveConfig();
//Spawn
spawnPosition = new Vector(
- manager.getDouble("spawns.game.x"),
- Math.max(0, Math.min(255, manager.getDouble("spawns.game.y"))),
- manager.getDouble("spawns.game.z")
+ config.getDouble("spawns.game.x"),
+ Math.max(0, Math.min(255, config.getDouble("spawns.game.y"))),
+ config.getDouble("spawns.game.z")
);
- spawnWorld = manager.getString("spawns.game.world");
+ spawnWorld = config.getString("spawns.game.world");
///Lobby
lobbyPosition = new Vector(
- manager.getDouble("spawns.lobby.x"),
- Math.max(0, Math.min(255, manager.getDouble("spawns.lobby.y"))),
- manager.getDouble("spawns.lobby.z")
+ config.getDouble("spawns.lobby.x"),
+ Math.max(0, Math.min(255, config.getDouble("spawns.lobby.y"))),
+ config.getDouble("spawns.lobby.z")
);
- lobbyWorld = manager.getString("spawns.lobby.world");
+ lobbyWorld = config.getString("spawns.lobby.world");
- announceMessagesToNonPlayers = manager.getBoolean("announceMessagesToNonPlayers");
+ announceMessagesToNonPlayers = config.getBoolean("announceMessagesToNonPlayers");
exitPosition = new Vector(
- manager.getDouble("spawns.exit.x"),
- Math.max(0, Math.min(255, manager.getDouble("spawns.exit.y"))),
- manager.getDouble("spawns.exit.z")
+ config.getDouble("spawns.exit.x"),
+ Math.max(0, Math.min(255, config.getDouble("spawns.exit.y"))),
+ config.getDouble("spawns.exit.z")
);
- exitWorld = manager.getString("spawns.exit.world");
+ exitWorld = config.getString("spawns.exit.world");
//World border
worldborderPosition = new Vector(
- manager.getInt("worldBorder.x"),
+ config.getInt("worldBorder.x"),
0,
- manager.getInt("worldBorder.z")
+ config.getInt("worldBorder.z")
);
- worldborderSize = Math.max(100, manager.getInt("worldBorder.size"));
- worldborderDelay = Math.max(1, manager.getInt("worldBorder.delay"));
- worldborderEnabled = manager.getBoolean("worldBorder.enabled");
+ worldborderSize = Math.max(100, config.getInt("worldBorder.size"));
+ worldborderDelay = Math.max(1, config.getInt("worldBorder.delay"));
+ worldborderEnabled = config.getBoolean("worldBorder.enabled");
//Prefix
char SYMBOLE = '\u00A7';
String SYMBOLE_STRING = String.valueOf(SYMBOLE);
- messagePrefix = manager.getString("prefix.default").replace("&", SYMBOLE_STRING);
- errorPrefix = manager.getString("prefix.error").replace("&", SYMBOLE_STRING);
- tauntPrefix = manager.getString("prefix.taunt").replace("&", SYMBOLE_STRING);
- worldborderPrefix = manager.getString("prefix.border").replace("&", SYMBOLE_STRING);
- abortPrefix = manager.getString("prefix.abort").replace("&", SYMBOLE_STRING);
- gameoverPrefix = manager.getString("prefix.gameover").replace("&", SYMBOLE_STRING);
- warningPrefix = manager.getString("prefix.warning").replace("&", SYMBOLE_STRING);
+ messagePrefix = config.getString("prefix.default").replace("&", SYMBOLE_STRING);
+ errorPrefix = config.getString("prefix.error").replace("&", SYMBOLE_STRING);
+ tauntPrefix = config.getString("prefix.taunt").replace("&", SYMBOLE_STRING);
+ worldborderPrefix = config.getString("prefix.border").replace("&", SYMBOLE_STRING);
+ abortPrefix = config.getString("prefix.abort").replace("&", SYMBOLE_STRING);
+ gameoverPrefix = config.getString("prefix.gameover").replace("&", SYMBOLE_STRING);
+ warningPrefix = config.getString("prefix.warning").replace("&", SYMBOLE_STRING);
//Map Bounds
- saveMinX = manager.getInt("bounds.min.x");
- saveMinZ = manager.getInt("bounds.min.z");
- saveMaxX = manager.getInt("bounds.max.x");
- saveMaxZ = manager.getInt("bounds.max.z");
+ saveMinX = config.getInt("bounds.min.x");
+ saveMinZ = config.getInt("bounds.min.z");
+ saveMaxX = config.getInt("bounds.max.x");
+ saveMaxZ = config.getInt("bounds.max.z");
//Taunt
- tauntEnabled = manager.getBoolean("taunt.enabled");
- tauntCountdown = manager.getBoolean("taunt.showCountdown");
- tauntDelay = Math.max(60,manager.getInt("taunt.delay"));
- tauntLast = manager.getBoolean("taunt.whenLastPerson");
+ tauntEnabled = config.getBoolean("taunt.enabled");
+ tauntCountdown = config.getBoolean("taunt.showCountdown");
+ tauntDelay = Math.max(60, config.getInt("taunt.delay"));
+ tauntLast = config.getBoolean("taunt.whenLastPerson");
//Glow
- glowLength = Math.max(1,manager.getInt("glow.time"));
- glowStackable = manager.getBoolean("glow.stackable");
- glowEnabled = manager.getBoolean("glow.enabled");
+ glowLength = Math.max(1, config.getInt("glow.time"));
+ glowStackable = config.getBoolean("glow.stackable");
+ glowEnabled = config.getBoolean("glow.enabled") && Version.atLeast("1.9");
//Lobby
- minPlayers = Math.max(2, manager.getInt("minPlayers"));
- countdown = Math.max(10,manager.getInt("lobby.countdown"));
- changeCountdown = Math.max(minPlayers,manager.getInt("lobby.changeCountdown"));
- lobbyMin = Math.max(minPlayers,manager.getInt("lobby.min"));
- lobbyMax = manager.getInt("lobby.max");
- lobbyCountdownEnabled = manager.getBoolean("lobby.enabled");
+ minPlayers = Math.max(2, config.getInt("minPlayers"));
+ countdown = Math.max(10, config.getInt("lobby.countdown"));
+ changeCountdown = Math.max(minPlayers, config.getInt("lobby.changeCountdown"));
+ lobbyMin = Math.max(minPlayers, config.getInt("lobby.min"));
+ lobbyMax = config.getInt("lobby.max");
+ lobbyCountdownEnabled = config.getBoolean("lobby.enabled");
+
+ //SeekerPing
+ seekerPing = config.getBoolean("seekerPing.enabled");
+ seekerPingLevel1 = config.getInt("seekerPing.distances.level1");
+ seekerPingLevel2 = config.getInt("seekerPing.distances.level2");
+ seekerPingLevel3 = config.getInt("seekerPing.distances.level3");
//Other
- nametagsVisible = manager.getBoolean("nametagsVisible");
- permissionsRequired = manager.getBoolean("permissionsRequired");
- gameLength = manager.getInt("gameLength");
- pvpEnabled = manager.getBoolean("pvp");
- autoJoin = manager.getBoolean("autoJoin");
- teleportToExit = manager.getBoolean("teleportToExit");
- local = manager.getString("local");
+ nametagsVisible = config.getBoolean("nametagsVisible");
+ permissionsRequired = config.getBoolean("permissionsRequired");
+ gameLength = config.getInt("gameLength");
+ pvpEnabled = config.getBoolean("pvp");
+ autoJoin = config.getBoolean("autoJoin");
+ teleportToExit = config.getBoolean("teleportToExit");
+ locale = config.getString("locale", "local");
+ blockedCommands = config.getStringList("blockedCommands");
+
+ //Leaderboard
+ LOBBY_TITLE = leaderboard.getString("lobby.title");
+ GAME_TITLE = leaderboard.getString("game.title");
+ LOBBY_CONTENTS = leaderboard.getStringList("lobby.content");
+ Collections.reverse(LOBBY_CONTENTS);
+ GAME_CONTENTS = leaderboard.getStringList("game.content");
+ Collections.reverse(GAME_CONTENTS);
+ COUNTDOWN_WAITING = leaderboard.getString("countdown.waiting");
+ COUNTDOWN_COUNTING = leaderboard.getString("countdown.counting");
+ COUNTDOWN_ADMINSTART = leaderboard.getString("countdown.adminStart");
+ TAUNT_COUNTING = leaderboard.getString("taunt.counting");
+ TAUNT_ACTIVE = leaderboard.getString("taunt.active");
+ TAUNT_EXPIRED = leaderboard.getString("taunt.expired");
+ GLOW_ACTIVE = leaderboard.getString("glow.active");
+ GLOW_INACTIVE = leaderboard.getString("glow.inactive");
+ BORDER_COUNTING = leaderboard.getString("border.counting");
+ BORDER_DECREASING = leaderboard.getString("border.decreasing");
}
public static void addToConfig(String path, Object value) {
- manager.set(path, value);
+ config.set(path, value);
}
public static void saveConfig() {
- manager.saveConfig();
+ config.saveConfig();
}
} \ No newline at end of file
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java
index 84ad5b4..66073cd 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java
@@ -26,6 +26,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
+import java.util.List;
import java.util.Map;
public class ConfigManager {
@@ -121,6 +122,10 @@ public class ConfigManager {
}
}
+ public int getDefaultInt(String path){
+ return defaultConfig.getInt(path);
+ }
+
public String getString(String path){
String value = config.getString(path);
if(value == null){
@@ -130,6 +135,29 @@ public class ConfigManager {
}
}
+ public String getString(String path, String oldPath){
+ String value = config.getString(path);
+ if(value == null){
+ String oldValue = config.getString(oldPath);
+ if(oldValue == null){
+ return defaultConfig.getString(path);
+ } else {
+ return oldValue;
+ }
+ } else {
+ return value;
+ }
+ }
+
+ public List<String> getStringList(String path){
+ List<String> value = config.getStringList(path);
+ if(value == null){
+ return defaultConfig.getStringList(path);
+ } else {
+ return value;
+ }
+ }
+
public void reset(String path){
config.set(path, defaultConfig.get(path));
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Items.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Items.java
index 569cae6..1c77ec2 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Items.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Items.java
@@ -19,14 +19,12 @@
package net.tylermurphy.hideAndSeek.configuration;
-import org.bukkit.ChatColor;
+import com.cryptomorin.xseries.XItemStack;
+import net.tylermurphy.hideAndSeek.util.Version;
import org.bukkit.Material;
-import org.bukkit.NamespacedKey;
import org.bukkit.configuration.ConfigurationSection;
-import org.bukkit.enchantments.Enchantment;
+import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.*;
import java.util.ArrayList;
@@ -63,7 +61,6 @@ public class Items {
if(item != null) HIDER_ITEMS.add(item);
i++;
}
-
SEEKER_EFFECTS = new ArrayList<>();
ConfigurationSection SeekerEffects = manager.getConfigurationSection("effects.seeker");
i = 1;
@@ -89,55 +86,36 @@ public class Items {
}
private static ItemStack createItem(ConfigurationSection item) {
- String material_string = item.getString("material");
- if(material_string == null) return null;
- Material material = Material.valueOf(material_string.toUpperCase());
- int amount = item.getInt("amount");
- ItemStack stack = new ItemStack(material, amount);
- if(material == Material.POTION || material == Material.SPLASH_POTION || material == Material.LINGERING_POTION){
- PotionMeta meta = getPotionMeta(stack, item);
- stack.setItemMeta(meta);
-
- } else {
- ConfigurationSection enchantments = item.getConfigurationSection("enchantments");
- if (enchantments != null)
- for (String enchantment_string : enchantments.getKeys(false)) {
- Enchantment enchantment = Enchantment.getByKey(NamespacedKey.minecraft(enchantment_string));
- if (enchantment == null) continue;
- stack.addUnsafeEnchantment(
- enchantment,
- enchantments.getInt(enchantment_string)
- );
- }
- ItemMeta meta = getItemMeta(stack,item);
- stack.setItemMeta(meta);
+ ConfigurationSection config = new YamlConfiguration().createSection("temp");
+ String material = item.getString("material").toUpperCase();
+ boolean splash = false;
+ if(!Version.atLeast("1.9")){
+ if(material.contains("POTION")){
+ config.set("level", 1);
+ }
+ if(material.equalsIgnoreCase("SPLASH_POTION") || material.equalsIgnoreCase("LINGERING_POTION")){
+ material = "POTION";
+ splash = true;
+ }
}
+ config.set("name", item.getString("name"));
+ config.set("material", material);
+ config.set("enchants", item.getConfigurationSection("enchantments"));
+ config.set("unbreakable", item.getBoolean("unbreakable"));
+ if(item.isSet("lore"))
+ config.set("lore", item.getStringList("lore"));
+ if (material.equalsIgnoreCase("POTION") || material.equalsIgnoreCase("SPLASH_POTION") || material.equalsIgnoreCase("LINGERING_POTION"))
+ config.set("base-effect", String.format("%s,%s,%s", item.getString("type"), false, splash));
+ ItemStack stack = XItemStack.deserialize(config);
+ stack.setAmount(item.getInt("amount"));
+ if(stack.getData().getItemType() == Material.AIR) return null;
return stack;
}
- private static ItemMeta getItemMeta(ItemStack stack, ConfigurationSection item){
- ItemMeta meta = stack.getItemMeta();
- assert meta != null;
- String name = item.getString("name");
- if(name != null)
- meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name));
- meta.setUnbreakable(item.getBoolean("unbreakable"));
- meta.setLore(item.getStringList("lore"));
- return meta;
- }
-
- private static PotionMeta getPotionMeta(ItemStack stack, ConfigurationSection item){
- String type = item.getString("type");
- PotionMeta meta = (PotionMeta) stack.getItemMeta();
- if(type==null) return meta;
- assert meta != null;
- meta.setBasePotionData(new PotionData((PotionType.valueOf(type.toUpperCase()))));
- return meta;
- }
-
private static PotionEffect getPotionEffect(ConfigurationSection item){
String type = item.getString("type");
if(type == null) return null;
+ if(PotionEffectType.getByName(type.toUpperCase()) == null) return null;
return new PotionEffect(
Objects.requireNonNull(PotionEffectType.getByName(type.toUpperCase())),
item.getInt("duration"),
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java
index d5ae01d..b93329f 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java
@@ -29,18 +29,21 @@ public class Localization {
public static final Map<String,LocalizationString> LOCAL = new HashMap<>();
- private static final String[][] CHANGES = {{"WORLDBORDER_DECREASING"}};
+ private static final Map<String,String[][]> CHANGES = new HashMap<String,String[][]>() {{
+ put("en-US", new String[][]{{"WORLDBORDER_DECREASING"},{"START","TAUNTED"}});
+ put("de-DE", new String[][]{{}});
+ }};
public static void loadLocalization() {
- ConfigManager manager = new ConfigManager("localization.yml", "lang"+File.separator+"localization_"+Config.local+".yml");
+ ConfigManager manager = new ConfigManager("localization.yml", "lang/localization_"+Config.locale +".yml");
- int PLUGIN_VERSION = 2;
+ int PLUGIN_VERSION = manager.getDefaultInt("version");
int VERSION = manager.getInt("version");
if(VERSION < PLUGIN_VERSION){
for(int i = VERSION; i < PLUGIN_VERSION; i++){
if(i < 1) continue;
- String[] changeList = CHANGES[i-1];
+ String[] changeList = CHANGES.get(Config.locale)[i-1];
for(String change : changeList)
manager.reset("Localization." + change);
}
@@ -50,8 +53,8 @@ public class Localization {
String SELECTED_LOCAL = manager.getString("type");
if(SELECTED_LOCAL == null){
manager.reset("type");
- } else if(!SELECTED_LOCAL.equals(Config.local)){
- manager.resetFile("lang"+File.separator+"localization_"+Config.local+".yml");
+ } else if(!SELECTED_LOCAL.equals(Config.locale)){
+ manager.resetFile("lang"+File.separator+"localization_"+Config.locale +".yml");
}
manager.saveConfig();
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java b/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java
index 602c948..8001368 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/database/Database.java
@@ -21,6 +21,8 @@ package net.tylermurphy.hideAndSeek.database;
import com.google.common.io.ByteStreams;
import net.tylermurphy.hideAndSeek.Main;
+import org.sqlite.SQLiteConfig;
+import sun.font.ScriptRun;
import java.io.ByteArrayInputStream;
import java.io.File;
@@ -30,6 +32,8 @@ import java.nio.ByteBuffer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
+
+import java.sql.Statement;
import java.util.UUID;
public class Database {
@@ -37,14 +41,15 @@ public class Database {
private static final File databaseFile = new File(Main.data, "database.db");
public static PlayerInfoTable playerInfo;
+ private static SQLiteConfig config;
protected static Connection connect() {
Connection conn = null;
try {
String url = "jdbc:sqlite:"+databaseFile;
- conn = DriverManager.getConnection(url);
+ conn = DriverManager.getConnection(url, config.toProperties());
} catch (SQLException e) {
- System.out.println(e.getMessage());
+ Main.plugin.getLogger().severe(e.getMessage());
}
return conn;
}
@@ -68,6 +73,18 @@ public class Database {
}
public static void init(){
+ try {
+ Class.forName("org.sqlite.JDBC");
+ } catch (ClassNotFoundException e) {
+ Main.plugin.getLogger().severe(e.getMessage());
+ throw new RuntimeException(e.getMessage());
+ }
+
+ config = new SQLiteConfig();
+ config.setSynchronous(SQLiteConfig.SynchronousMode.NORMAL);
+ config.setTempStore(SQLiteConfig.TempStore.MEMORY);
+
playerInfo = new PlayerInfoTable();
}
+
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/database/PlayerInfoTable.java b/src/main/java/net/tylermurphy/hideAndSeek/database/PlayerInfoTable.java
index e859687..7b9b476 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/database/PlayerInfoTable.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/database/PlayerInfoTable.java
@@ -20,8 +20,10 @@
package net.tylermurphy.hideAndSeek.database;
import net.tylermurphy.hideAndSeek.Main;
+import net.tylermurphy.hideAndSeek.configuration.Config;
import net.tylermurphy.hideAndSeek.util.WinType;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
@@ -42,7 +44,7 @@ public class PlayerInfoTable {
+ ");";
try(Connection connection = Database.connect(); Statement statement = connection.createStatement()){
- statement.execute(sql);
+ statement.executeUpdate(sql);
} catch (SQLException e){
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
}
@@ -59,6 +61,8 @@ public class PlayerInfoTable {
statement.setBytes(1, bytes);
ResultSet rs = statement.executeQuery();
if(rs.next()){
+ rs.close();
+ connection.close();
return new PlayerInfo(
uuid,
rs.getInt("wins"),
@@ -67,6 +71,7 @@ public class PlayerInfoTable {
rs.getInt("games_played")
);
}
+ rs.close();
} catch (SQLException e){
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
} catch (IOException e) {
@@ -84,7 +89,7 @@ public class PlayerInfoTable {
List<PlayerInfo> infoList = new ArrayList<>();
while(rs.next()){
PlayerInfo info = new PlayerInfo(
- Database.convertBinaryStream(rs.getBinaryStream("uuid")),
+ Database.convertBinaryStream(new ByteArrayInputStream(rs.getBytes("uuid"))),
rs.getInt("wins"),
rs.getInt("seeker_wins"),
rs.getInt("hider_wins"),
@@ -92,6 +97,8 @@ public class PlayerInfoTable {
);
infoList.add(info);
}
+ rs.close();
+ connection.close();
return infoList;
} catch (SQLException e){
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java
index 936f7ac..e91e3da 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java
@@ -21,13 +21,11 @@ package net.tylermurphy.hideAndSeek.game;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
import net.tylermurphy.hideAndSeek.util.Status;
+import net.tylermurphy.hideAndSeek.util.Version;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
@@ -36,32 +34,28 @@ import org.bukkit.scoreboard.*;
public class Board {
- private static final List<String> Hider = new ArrayList<>(), Seeker = new ArrayList<>(), Spectator = new ArrayList<>();
- private static final Map<String, Player> playerList = new HashMap<>();
- private static final Map<String, CustomBoard> customBoards = new HashMap<>();
+ private static final List<UUID> Hider = new ArrayList<>(), Seeker = new ArrayList<>(), Spectator = new ArrayList<>();
+ private static final Map<UUID, Player> playerList = new HashMap<>();
+ private static final Map<UUID, CustomBoard> customBoards = new HashMap<>();
public static boolean isPlayer(Player player) {
- return playerList.containsKey(player.getName());
- }
-
- public static boolean isPlayer(String name){
- return playerList.containsKey(name);
+ return playerList.containsKey(player.getUniqueId());
}
public static boolean isPlayer(CommandSender sender) {
- return playerList.containsKey(sender.getName());
+ return playerList.containsKey(Bukkit.getPlayer(sender.getName()).getUniqueId());
}
public static boolean isHider(Player player) {
- return Hider.contains(player.getName());
+ return Hider.contains(player.getUniqueId());
}
public static boolean isSeeker(Player player) {
- return Seeker.contains(player.getName());
+ return Seeker.contains(player.getUniqueId());
}
public static boolean isSpectator(Player player) {
- return Spectator.contains(player.getName());
+ return Spectator.contains(player.getUniqueId());
}
public static int sizeHider() {
@@ -76,6 +70,13 @@ public class Board {
return playerList.values().size();
}
+ public static void check(){
+ for(UUID uuid : playerList.keySet()){
+ if(Bukkit.getPlayer(uuid) == null)
+ playerList.remove(uuid);
+ }
+ }
+
public static List<Player> getHiders(){
return Hider.stream().map(playerList::get).collect(Collectors.toList());
}
@@ -96,42 +97,42 @@ public class Board {
return new ArrayList<>(playerList.values());
}
- public static Player getPlayer(String name) {
- return playerList.get(name);
+ public static Player getPlayer(UUID uuid) {
+ return playerList.get(uuid);
}
public static void addHider(Player player) {
- Hider.add(player.getName());
- Seeker.remove(player.getName());
- Spectator.remove(player.getName());
- playerList.put(player.getName(), player);
+ Hider.add(player.getUniqueId());
+ Seeker.remove(player.getUniqueId());
+ Spectator.remove(player.getUniqueId());
+ playerList.put(player.getUniqueId(), player);
}
public static void addSeeker(Player player) {
- Hider.remove(player.getName());
- Seeker.add(player.getName());
- Spectator.remove(player.getName());
- playerList.put(player.getName(), player);
+ Hider.remove(player.getUniqueId());
+ Seeker.add(player.getUniqueId());
+ Spectator.remove(player.getUniqueId());
+ playerList.put(player.getUniqueId(), player);
}
public static void addSpectator(Player player) {
- Hider.remove(player.getName());
- Seeker.remove(player.getName());
- Spectator.add(player.getName());
- playerList.put(player.getName(), player);
+ Hider.remove(player.getUniqueId());
+ Seeker.remove(player.getUniqueId());
+ Spectator.add(player.getUniqueId());
+ playerList.put(player.getUniqueId(), player);
}
public static void remove(Player player) {
- Hider.remove(player.getName());
- Seeker.remove(player.getName());
- Spectator.remove(player.getName());
- playerList.remove(player.getName());
+ Hider.remove(player.getUniqueId());
+ Seeker.remove(player.getUniqueId());
+ Spectator.remove(player.getUniqueId());
+ playerList.remove(player.getUniqueId());
}
public static boolean onSameTeam(Player player1, Player player2) {
- if(Hider.contains(player1.getName()) && Hider.contains(player2.getName())) return true;
- else if(Seeker.contains(player1.getName()) && Seeker.contains(player2.getName())) return true;
- else return Spectator.contains(player1.getName()) && Spectator.contains(player2.getName());
+ if(Hider.contains(player1.getUniqueId()) && Hider.contains(player2.getUniqueId())) return true;
+ else if(Seeker.contains(player1.getUniqueId()) && Seeker.contains(player2.getUniqueId())) return true;
+ else return Spectator.contains(player1.getUniqueId()) && Spectator.contains(player2.getUniqueId());
}
public static void reload() {
@@ -145,27 +146,36 @@ public class Board {
}
private static void createLobbyBoard(Player player, boolean recreate) {
- CustomBoard board = customBoards.get(player.getName());
+ CustomBoard board = customBoards.get(player.getUniqueId());
if(recreate) {
board = new CustomBoard(player, "&l&eHIDE AND SEEK");
board.updateTeams();
}
- board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDER %" + ChatColor.WHITE + getHiderPercent());
- board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKER %" + ChatColor.WHITE + getSeekerPercent());
- board.addBlank();
- board.setLine("players", "Players: " + playerList.values().size());
- board.addBlank();
- if(lobbyCountdownEnabled){
- if(Game.countdownTime == -1){
- board.setLine("waiting", "Waiting for players...");
+ int i=0;
+ for(String line : LOBBY_CONTENTS){
+ if(line.equalsIgnoreCase("")){
+ board.addBlank();
+ } else if(line.contains("{COUNTDOWN}")){
+ if(!lobbyCountdownEnabled){
+ board.setLine(String.valueOf(i), line.replace("{COUNTDOWN}", COUNTDOWN_ADMINSTART));
+ } else if(Game.countdownTime == -1){
+ board.setLine(String.valueOf(i), line.replace("{COUNTDOWN}", COUNTDOWN_WAITING));
+ } else {
+ board.setLine(String.valueOf(i), line.replace("{COUNTDOWN}", COUNTDOWN_COUNTING.replace("{AMOUNT}",Game.countdownTime+"")));
+ }
+ } else if(line.contains("{COUNT}")){
+ board.setLine(String.valueOf(i), line.replace("{COUNT}", getPlayers().size()+""));
+ } else if(line.contains("{SEEKER%}")){
+ board.setLine(String.valueOf(i), line.replace("{SEEKER%}", getSeekerPercent()+""));
+ } else if(line.contains("{HIDER%}")){
+ board.setLine(String.valueOf(i), line.replace("{HIDER%}", getHiderPercent()+""));
} else {
- board.setLine("waiting", "Starting in: "+ChatColor.GREEN + Game.countdownTime+"s");
+ board.setLine(String.valueOf(i), line);
}
- } else {
- board.setLine("waiting", "Waiting for gamemaster...");
+ i++;
}
board.display();
- customBoards.put(player.getName(), board);
+ customBoards.put(player.getUniqueId(), board);
}
public static void createGameBoard(Player player){
@@ -173,53 +183,69 @@ public class Board {
}
private static void createGameBoard(Player player, boolean recreate){
- CustomBoard board = customBoards.get(player.getName());
+ CustomBoard board = customBoards.get(player.getUniqueId());
if(recreate) {
- board = new CustomBoard(player, "&l&eHIDE AND SEEK");
+ board = new CustomBoard(player, GAME_TITLE);
board.updateTeams();
}
- board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDERS:" + ChatColor.WHITE + " " + Hider.size());
- board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKERS:" + ChatColor.WHITE + " " + Seeker.size());
- board.addBlank();
- if(glowEnabled){
- if(Game.glow == null || Game.status == Status.STARTING || !Game.glow.isRunning())
- board.setLine("glow", "Glow: " + ChatColor.RED + "Inactive");
- else
- board.setLine("glow", "Glow: " + ChatColor.GREEN + "Active");
- }
- if(tauntEnabled && tauntCountdown){
- if(Game.taunt == null || Game.status == Status.STARTING)
- board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "0m0s");
- else if(!tauntLast && Hider.size() == 1){
- board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "Expired");
- } else if(!Game.taunt.isRunning())
- board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + Game.taunt.getDelay()/60 + "m" + Game.taunt.getDelay()%60 + "s");
- else
- board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "Active");
- }
- if(worldborderEnabled){
- if(Game.worldBorder == null || Game.status == Status.STARTING){
- board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + "0m0s");
- } else if(!Game.worldBorder.isRunning()) {
- board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + Game.worldBorder.getDelay()/60 + "m" + Game.worldBorder.getDelay()%60 + "s");
+
+ int i = 0;
+ for(String line : GAME_CONTENTS){
+ if(line.equalsIgnoreCase("")){
+ board.addBlank();
} else {
- board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + "Decreasing");
+ if(line.contains("{TIME}")) {
+ String value = Game.timeLeft/60 + "m" + Game.timeLeft%60 + "s";
+ board.setLine(String.valueOf(i), line.replace("{TIME}", value));
+ } else if(line.contains("{TEAM}")) {
+ String value = getTeam(player);
+ board.setLine(String.valueOf(i), line.replace("{TEAM}", value));
+ } else if(line.contains("{BORDER}")) {
+ if(!worldborderEnabled) continue;
+ if(Game.worldBorder == null || Game.status == Status.STARTING){
+ board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_COUNTING.replace("{AMOUNT}", "0")));
+ } else if(!Game.worldBorder.isRunning()) {
+ board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_COUNTING.replaceFirst("\\{AMOUNT}", Game.worldBorder.getDelay()/60+"").replaceFirst("\\{AMOUNT}", Game.worldBorder.getDelay()%60+"")));
+ } else {
+ board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_DECREASING));
+ }
+ } else if(line.contains("{TAUNT}")){
+ if(!tauntEnabled) continue;
+ if(Game.taunt == null || Game.status == Status.STARTING) {
+ board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_COUNTING.replace("{AMOUNT}", "0")));
+ } else if(!tauntLast && Hider.size() == 1){
+ board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_EXPIRED));
+ } else if(!Game.taunt.isRunning()) {
+ board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_COUNTING.replaceFirst("\\{AMOUNT}", Game.taunt.getDelay() / 60 + "").replaceFirst("\\{AMOUNT}", Game.taunt.getDelay() % 60 + "")));
+ } else {
+ board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_ACTIVE));
+ }
+ } else if(line.contains("{GLOW}")){
+ if(!glowEnabled) return;
+ if(Game.glow == null || Game.status == Status.STARTING || !Game.glow.isRunning()) {
+ board.setLine(String.valueOf(i), line.replace("{GLOW}", GLOW_INACTIVE));
+ } else {
+ board.setLine(String.valueOf(i), line.replace("{GLOW}", GLOW_ACTIVE));
+ }
+ } else if(line.contains("{#SEEKER}")) {
+ board.setLine(String.valueOf(i), line.replace("{#SEEKER}", getSeekers().size()+""));
+ } else if(line.contains("{#HIDER}")) {
+ board.setLine(String.valueOf(i), line.replace("{#HIDER}", getHiders().size()+""));
+ } else {
+ board.setLine(String.valueOf(i), line);
+ }
}
+ i++;
}
- if(glowEnabled || (tauntEnabled && tauntCountdown) || worldborderEnabled)
- board.addBlank();
- board.setLine("time", "Time Left: " + ChatColor.GREEN + Game.timeLeft/60 + "m" + Game.timeLeft%60 + "s");
- board.addBlank();
- board.setLine("team", "Team: " + getTeam(player));
board.display();
- customBoards.put(player.getName(), board);
+ customBoards.put(player.getUniqueId(), board);
}
public static void removeBoard(Player player) {
ScoreboardManager manager = Bukkit.getScoreboardManager();
assert manager != null;
player.setScoreboard(manager.getMainScoreboard());
- customBoards.remove(player.getName());
+ customBoards.remove(player.getUniqueId());
}
public static void reloadLobbyBoards() {
@@ -258,6 +284,14 @@ public class Board {
else return ChatColor.WHITE + "UNKNOWN";
}
+ public static void cleanup(){
+ playerList.clear();
+ Hider.clear();
+ Seeker.clear();
+ Spectator.clear();
+ customBoards.clear();
+ }
+
}
class CustomBoard {
@@ -275,8 +309,13 @@ class CustomBoard {
this.board = manager.getNewScoreboard();
this.LINES = new HashMap<>();
this.player = player;
- this.obj = board.registerNewObjective(
- "Scoreboard", "dummy", ChatColor.translateAlternateColorCodes('&', title));
+ if(Version.atLeast("1.13")){
+ this.obj = board.registerNewObjective(
+ "Scoreboard", "dummy", ChatColor.translateAlternateColorCodes('&', title));
+ } else {
+ this.obj = board.registerNewObjective("Scoreboard", "dummy");
+ this.obj.setDisplayName(ChatColor.translateAlternateColorCodes('&', title));
+ }
this.blanks = 0;
this.displayed = false;
this.updateTeams();
@@ -297,23 +336,38 @@ class CustomBoard {
seekerTeam.removeEntry(entry);
for(Player player : Board.getSeekers())
seekerTeam.addEntry(player.getName());
- if(nametagsVisible) {
- hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);
- seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OTHER_TEAMS);
+ if(Version.atLeast("1.9")){
+ if(nametagsVisible) {
+ hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);
+ seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OTHER_TEAMS);
+ } else {
+ hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
+ seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
+ }
+ } else {
+ if(nametagsVisible) {
+ hiderTeam.setNameTagVisibility(NameTagVisibility.HIDE_FOR_OTHER_TEAMS);
+ seekerTeam.setNameTagVisibility(NameTagVisibility.HIDE_FOR_OWN_TEAM);
+ } else {
+ hiderTeam.setNameTagVisibility(NameTagVisibility.NEVER);
+ seekerTeam.setNameTagVisibility(NameTagVisibility.NEVER);
+ }
+ }
+ if(Version.atLeast("1.12")){
+ hiderTeam.setColor(ChatColor.GOLD);
+ seekerTeam.setColor(ChatColor.RED);
} else {
- hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
- seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
+ hiderTeam.setPrefix(ChatColor.translateAlternateColorCodes('&', "&6"));
+ seekerTeam.setPrefix(ChatColor.translateAlternateColorCodes('&', "&c"));
}
- hiderTeam.setColor(ChatColor.GOLD);
- seekerTeam.setColor(ChatColor.RED);
}
public void setLine(String key, String message){
Line line = LINES.get(key);
if(line == null)
- addLine(key, message);
+ addLine(key, ChatColor.translateAlternateColorCodes('&',message));
else
- updateLine(key, message);
+ updateLine(key, ChatColor.translateAlternateColorCodes('&',message));
}
private void addLine(String key, String message){
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java b/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java
index 42589bc..ffe452b 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java
@@ -21,8 +21,11 @@ package net.tylermurphy.hideAndSeek.game;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import com.cryptomorin.xseries.XMaterial;
+import com.cryptomorin.xseries.XSound;
import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.util.Status;
+import net.tylermurphy.hideAndSeek.util.Version;
import org.bukkit.*;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance;
@@ -37,7 +40,6 @@ import org.bukkit.event.entity.*;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.event.player.*;
-import net.tylermurphy.hideAndSeek.util.Packet;
import org.bukkit.potion.PotionEffect;
import org.bukkit.projectiles.ProjectileSource;
@@ -178,16 +180,23 @@ public class EventListener implements Listener {
}
}
}
- if (player.getHealth() - event.getDamage() < 0 || !pvpEnabled) {
+ if (player.getHealth() - event.getFinalDamage() < 0.5 || !pvpEnabled) {
if (spawnPosition == null) return;
event.setCancelled(true);
- AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
- if(attribute != null)
- player.setHealth(attribute.getValue());
+ if(Version.atLeast("1.9")) {
+ AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
+ if (attribute != null) player.setHealth(attribute.getValue());
+ } else {
+ player.setHealth(player.getMaxHealth());
+ }
player.teleport(new Location(Bukkit.getWorld("hideandseek_" + spawnWorld), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
- Packet.playSound(player, Sound.ENTITY_PLAYER_DEATH, 1, 1);
+ if(Version.atLeast("1.9")){
+ XSound.ENTITY_PLAYER_DEATH.play(player, 1, 1);
+ } else {
+ XSound.ENTITY_PLAYER_HURT.play(player, 1, 1);
+ }
if (Board.isSeeker(player)) {
- Bukkit.broadcastMessage(message("GAME_PLAYER_DEATH").addPlayer(player).toString());
+ Game.broadcastMessage(message("GAME_PLAYER_DEATH").addPlayer(player).toString());
}
if (Board.isHider(player)) {
if (attacker == null) {
@@ -217,7 +226,8 @@ public class EventListener implements Listener {
if(Board.isHider(player)) {
Game.glow.onProjectile();
snowball.remove();
- player.getInventory().remove(Material.SNOWBALL);
+ assert XMaterial.SNOWBALL.parseMaterial() != null;
+ player.getInventory().remove(XMaterial.SNOWBALL.parseMaterial());
}
}
}
@@ -246,18 +256,16 @@ public class EventListener implements Listener {
Player player = event.getPlayer();
String message = event.getMessage();
String[] array = message.split(" ");
- if(array[0].equalsIgnoreCase("/kill")){
- if(Board.isPlayer(player)){
- Main.plugin.getLogger().info("Blocking "+player.getName()+ "from running /kill with anyone associated in the lobby");
+ String[] temp = array[0].split(":");
+ for(String handle : blockedCommands){
+ if(
+ array[0].substring(1).equalsIgnoreCase(handle) && Board.isPlayer(player) &&
+ temp[temp.length-1].substring(1).equalsIgnoreCase(handle) && Board.isPlayer(player) &&
+ Game.status != Status.STANDBY
+ ) {
+ player.sendMessage(errorPrefix + message("BLOCKED_COMMAND"));
event.setCancelled(true);
- } else if(array.length > 1){
- for(int i=1; i<array.length; i++){
- if(Board.isPlayer(array[i])){
- Main.plugin.getLogger().info("Blocking "+player.getName()+ "from running /kill with anyone associated in the lobby");
- event.setCancelled(true);
- return;
- }
- }
+ break;
}
}
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
index 225eab0..41b0bc8 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
@@ -21,14 +21,19 @@ package net.tylermurphy.hideAndSeek.game;
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import com.cryptomorin.xseries.XMaterial;
+import com.cryptomorin.xseries.XSound;
+import com.cryptomorin.xseries.messages.Titles;
import net.md_5.bungee.api.ChatColor;
import net.tylermurphy.hideAndSeek.configuration.Items;
import net.tylermurphy.hideAndSeek.database.Database;
import net.tylermurphy.hideAndSeek.util.Status;
+import net.tylermurphy.hideAndSeek.util.Version;
import net.tylermurphy.hideAndSeek.util.WinType;
import net.tylermurphy.hideAndSeek.world.WorldLoader;
import org.bukkit.*;
import org.bukkit.attribute.Attribute;
+import org.bukkit.attribute.AttributeInstance;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Firework;
@@ -42,7 +47,6 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
-import java.beans.EventHandler;
import java.io.File;
import java.util.*;
import java.util.stream.Collectors;
@@ -92,11 +96,12 @@ public class Game {
for(Player player : Board.getSeekers()) {
player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS,1000000,127,false,false));
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,1000000,127,false,false));
- player.sendTitle(ChatColor.RED + "" + ChatColor.BOLD + "SEEKER", ChatColor.WHITE + message("SEEKERS_SUBTITLE").toString(), 10, 70, 20);
+ player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP,1000000,128,false,false));
+ Titles.sendTitle(player, 10, 70, 20, ChatColor.RED + "" + ChatColor.BOLD + "SEEKER", ChatColor.WHITE + message("SEEKERS_SUBTITLE").toString());
}
for(Player player : Board.getHiders()) {
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1000000,5,false,false));
- player.sendTitle(ChatColor.GOLD + "" + ChatColor.BOLD + "HIDER", ChatColor.WHITE + message("HIDERS_SUBTITLE").toString(), 10, 70, 20);
+ Titles.sendTitle(player, 10, 70, 20, ChatColor.GOLD + "" + ChatColor.BOLD + "HIDER", ChatColor.WHITE + message("HIDERS_SUBTITLE").toString());
}
if(tauntEnabled)
taunt = new Taunt();
@@ -153,8 +158,10 @@ public class Game {
player.removePotionEffect(effect.getType());
}
player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 100));
- for(Player temp : Board.getPlayers()) {
- Packet.setGlow(player, temp, false);
+ if(Version.atLeast("1.9")){
+ for(Player temp : Board.getPlayers()) {
+ Packet.setGlow(player, temp, false);
+ }
}
}
EventListener.temp_loc.clear();
@@ -207,7 +214,8 @@ public class Game {
for(PotionEffect effect : Items.HIDER_EFFECTS)
player.addPotionEffect(effect);
if(glowEnabled) {
- ItemStack snowball = new ItemStack(Material.SNOWBALL, 1);
+ assert XMaterial.SNOWBALL.parseMaterial() != null;
+ ItemStack snowball = new ItemStack(XMaterial.SNOWBALL.parseMaterial(), 1);
ItemMeta snowballMeta = snowball.getItemMeta();
assert snowballMeta != null;
snowballMeta.setDisplayName("Glow Powerup");
@@ -238,11 +246,16 @@ public class Game {
player.setGameMode(GameMode.SPECTATOR);
Board.createGameBoard(player);
player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
- player.sendTitle(ChatColor.GRAY + "" + ChatColor.BOLD + "SPECTATING", ChatColor.WHITE + message("SPECTATOR_SUBTITLE").toString(), 10, 70, 20);
+ Titles.sendTitle(player, 10, 70, 20, ChatColor.GRAY + "" + ChatColor.BOLD + "SPECTATING", ChatColor.WHITE + message("SPECTATOR_SUBTITLE").toString());
}
player.setFoodLevel(20);
- player.setHealth(Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)).getBaseValue());
+ if(Version.atLeast("1.9")) {
+ AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
+ if (attribute != null) player.setHealth(attribute.getValue());
+ } else {
+ player.setHealth(player.getMaxHealth());
+ }
}
public static void removeItems(Player player){
@@ -261,8 +274,10 @@ public class Game {
countdownTime = countdown;
if(Board.size() >= changeCountdown)
countdownTime = Math.min(countdownTime, 10);
- if(tick % 20 == 0)
+ if(tick % 20 == 0) {
countdownTime--;
+ Board.reloadLobbyBoards();
+ }
if(countdownTime == 0){
Optional<Player> rand = Board.getPlayers().stream().skip(new Random().nextInt(Board.size())).findFirst();
if(!rand.isPresent()){
@@ -270,7 +285,16 @@ public class Game {
return;
}
String seekerName = rand.get().getName();
- Player seeker = Board.getPlayer(seekerName);
+ Player temp = Bukkit.getPlayer(seekerName);
+ if(temp == null){
+ Main.plugin.getLogger().warning("Failed to select random seeker.");
+ return;
+ }
+ Player seeker = Board.getPlayer(temp.getUniqueId());
+ if(seeker == null){
+ Main.plugin.getLogger().warning("Failed to select random seeker.");
+ return;
+ }
start(seeker);
}
} else {
@@ -296,20 +320,20 @@ public class Game {
distance = temp;
}
}
- switch(tick%10) {
+ if(seekerPing) switch(tick%10) {
case 0:
- if(distance < 30) Packet.playSound(hider, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .5f, 1f);
- if(distance < 10) Packet.playSound(hider, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f);
+ if(distance < seekerPingLevel1) XSound.BLOCK_NOTE_BLOCK_BASEDRUM.play(hider, .5f, 1f);
+ if(distance < seekerPingLevel3) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
break;
case 3:
- if(distance < 30) Packet.playSound(hider, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .3f, 1f);
- if(distance < 10) Packet.playSound(hider, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f);
+ if(distance < seekerPingLevel1) XSound.BLOCK_NOTE_BLOCK_BASEDRUM.play(hider, .3f, 1f);
+ if(distance < seekerPingLevel3) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
break;
case 6:
- if(distance < 10) Packet.playSound(hider, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f);
+ if(distance < seekerPingLevel3) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
break;
case 9:
- if(distance < 20) Packet.playSound(hider, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f);
+ if(distance < seekerPingLevel2) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
break;
}
}
@@ -362,21 +386,18 @@ class Glow {
public void onProjectile() {
if(glowStackable) glowTime += glowLength;
else glowTime = glowLength;
- if(!running)
- startGlow();
+ running = true;
}
- private void startGlow() {
- running = true;
- for(Player hider : Board.getHiders()) {
- for(Player seeker : Board.getSeekers()) {
+ private void sendPackets(){
+ for(Player hider : Board.getHiders())
+ for(Player seeker : Board.getSeekers())
Packet.setGlow(hider, seeker, true);
- }
- }
}
protected void update() {
if(running) {
+ sendPackets();
glowTime--;
glowTime = Math.max(glowTime, 0);
if (glowTime == 0) {
@@ -402,7 +423,7 @@ class Glow {
class Taunt {
- private String tauntPlayer;
+ private UUID tauntPlayer;
private int delay;
private boolean running;
@@ -429,7 +450,7 @@ class Taunt {
Player taunted = rand.get();
taunted.sendMessage(message("TAUNTED").toString());
broadcastMessage(tauntPrefix + message("TAUNT"));
- tauntPlayer = taunted.getName();
+ tauntPlayer = taunted.getUniqueId();
running = true;
delay = 30;
}
@@ -439,7 +460,7 @@ class Taunt {
if(taunted != null) {
if(!Board.isHider(taunted)){
Main.plugin.getLogger().info("Taunted played died and is now seeker. Skipping taunt.");
- tauntPlayer = "";
+ tauntPlayer = null;
running = false;
delay = tauntDelay;
return;
@@ -447,7 +468,7 @@ class Taunt {
World world = taunted.getLocation().getWorld();
if(world == null){
Main.plugin.getLogger().severe("Game world is null while trying to launch taunt.");
- tauntPlayer = "";
+ tauntPlayer = null;
running = false;
delay = tauntDelay;
return;
@@ -468,7 +489,7 @@ class Taunt {
fw.setFireworkMeta(fwm);
broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
}
- tauntPlayer = "";
+ tauntPlayer = null;
running = false;
delay = tauntDelay;
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Packet.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Packet.java
index 18913da..9cb17ce 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/util/Packet.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Packet.java
@@ -21,7 +21,6 @@ package net.tylermurphy.hideAndSeek.util;
import java.lang.reflect.InvocationTargetException;
-import org.bukkit.Sound;
import org.bukkit.entity.Player;
import com.comphenix.protocol.PacketType;
@@ -29,29 +28,12 @@ import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
-import com.comphenix.protocol.wrappers.EnumWrappers.SoundCategory;
import com.comphenix.protocol.wrappers.WrappedDataWatcher.Registry;
import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer;
public class Packet {
private static final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
-
- public static void playSound(Player player, Sound sound, float volume, float pitch) {
- PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.NAMED_SOUND_EFFECT);
- packet.getSoundCategories().write(0, SoundCategory.MASTER);
- packet.getSoundEffects().write(0, sound);
- packet.getIntegers().write(0, (int)(player.getLocation().getX() * 8.0));
- packet.getIntegers().write(1, (int)(player.getLocation().getY() * 8.0));
- packet.getIntegers().write(2, (int)(player.getLocation().getZ() * 8.0));
- packet.getFloat().write(0, volume);
- packet.getFloat().write(1, pitch);
- try {
- protocolManager.sendServerPacket(player, packet);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
public static void setGlow(Player player, Player target, boolean glowing) {
PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.ENTITY_METADATA);
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Version.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Version.java
new file mode 100644
index 0000000..96854db
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Version.java
@@ -0,0 +1,45 @@
+package net.tylermurphy.hideAndSeek.util;
+
+import org.bukkit.Bukkit;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Version {
+
+ private static final Map<String,Boolean> CACHE = new HashMap<>();
+
+ public static boolean atLeast(String testVersion){
+
+
+ if(CACHE.containsKey(testVersion)) return CACHE.get(testVersion);
+
+ String[] serverCheckTemp = Bukkit.getBukkitVersion().substring(2,Bukkit.getBukkitVersion().indexOf('-')).split("\\.");
+ int[] serverCheck = new int[serverCheckTemp.length];
+ for(int i=0; i<serverCheck.length; i++){
+ serverCheck[i] = Integer.parseInt(serverCheckTemp[i]);
+ }
+
+ String[] customCheckTemp = testVersion.substring(2).split("\\.");
+ int[] customCheck = new int[customCheckTemp.length];
+ for(int i=0; i<customCheck.length; i++){
+ customCheck[i] = Integer.parseInt(customCheckTemp[i]);
+ }
+
+ boolean result = getResult(customCheck, serverCheck);
+ CACHE.put(testVersion, result);
+ return result;
+ }
+
+ private static boolean getResult(int[] customCheck, int[] serverCheck){
+ if(customCheck[0] > serverCheck[0]) return false;
+ else if(customCheck[0] < serverCheck[0]) return true;
+ else {
+ if (customCheck.length == 1 && serverCheck.length == 1) return true;
+ else if(customCheck.length == 2 && serverCheck.length == 2){
+ return customCheck[1] <= serverCheck[1];
+ }
+ else return serverCheck.length == 2;
+ }
+ }
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java
index 5d6e377..011d334 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java
@@ -29,6 +29,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import net.tylermurphy.hideAndSeek.util.Version;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.WorldCreator;
@@ -63,7 +64,7 @@ public class WorldLoader {
}
public void loadMap(){
- Bukkit.getServer().createWorld(new WorldCreator(savename).generator(new VoidGenerator()));
+ Bukkit.getServer().createWorld(new WorldCreator(savename).generator(new VoidGenerator()));
World world = Bukkit.getServer().getWorld(savename);
if(world == null){
Main.plugin.getLogger().severe("COULD NOT LOAD " + savename);
@@ -111,7 +112,10 @@ public class WorldLoader {
private void copyFileFolder(String name, Boolean isMca) throws IOException {
File region = new File(Main.root+File.separator+mapname+File.separator+name);
File temp = new File(Main.root+File.separator+"temp_"+savename+File.separator+name);
+ System.out.println(region.getAbsolutePath());
+ System.out.println(temp.getAbsolutePath());
if(region.exists() && region.isDirectory()) {
+ System.out.println("passed");
if(!temp.exists())
if(!temp.mkdirs())
throw new IOException("Couldn't create region directory!");
@@ -121,17 +125,17 @@ public class WorldLoader {
return;
}
for (String file : files) {
-
+ System.out.println("Testing file "+ file);
if(isMca) {
- int minX = (int)Math.floor(saveMinX / 32.0);
- int minZ = (int)Math.floor(saveMinZ / 32.0);
- int maxX = (int)Math.floor(saveMaxX / 32.0);
- int maxZ = (int)Math.floor(saveMaxZ / 32.0);
+ int minX = (int)Math.floor(saveMinX / 512.0);
+ int minZ = (int)Math.floor(saveMinZ / 512.0);
+ int maxX = (int)Math.floor(saveMaxX / 512.0);
+ int maxZ = (int)Math.floor(saveMaxZ / 512.0);
String[] parts = file.split("\\.");
if(parts.length > 1) {
Main.plugin.getLogger().info(file);
- if( Integer.parseInt(parts[1]) < minX || Integer.parseInt(parts[1]) > maxX ||Integer.parseInt(parts[2]) < minZ || Integer.parseInt(parts[2]) > maxZ )
+ if( Integer.parseInt(parts[1]) < minX || Integer.parseInt(parts[1]) > maxX || Integer.parseInt(parts[2]) < minZ || Integer.parseInt(parts[2]) > maxZ )
continue;
}
}