commit
44040cc87b
21 changed files with 693 additions and 302 deletions
58
pom.xml
58
pom.xml
|
@ -1,8 +1,11 @@
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>net.tylermurphy</groupId>
|
<groupId>net.tylermurphy</groupId>
|
||||||
<artifactId>HideAndSeek</artifactId>
|
<artifactId>HideAndSeek</artifactId>
|
||||||
<version>1.3.3</version>
|
<version>1.4.0</version>
|
||||||
<name>Hide and Seek Plugin</name>
|
<name>Hide and Seek Plugin</name>
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
@ -14,6 +17,50 @@
|
||||||
<target>8</target>
|
<target>8</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.2.4</version>
|
||||||
|
<configuration>
|
||||||
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
|
<relocations>
|
||||||
|
<relocation>
|
||||||
|
<pattern>com.cryptomorin.xseries</pattern>
|
||||||
|
<shadedPattern>net.tylermurphy.xseries</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
</relocations>
|
||||||
|
<artifactSet>
|
||||||
|
<excludes>
|
||||||
|
<exclude>org.spigotmc:spigot-api</exclude>
|
||||||
|
<exclude>com.comphenix.protocol:ProtocolLib</exclude>
|
||||||
|
<exclude>org.jetbrains:annotations</exclude>
|
||||||
|
<exclude>net.bytebuddy:byte-buddy</exclude>
|
||||||
|
</excludes>
|
||||||
|
</artifactSet>
|
||||||
|
<filters>
|
||||||
|
<filter>
|
||||||
|
<artifact>*:*</artifact>
|
||||||
|
<excludes>
|
||||||
|
<exclude>META-INF/*.MF</exclude>
|
||||||
|
<exclude>sqlite-jdbc.properties</exclude>
|
||||||
|
</excludes>
|
||||||
|
</filter>
|
||||||
|
</filters>
|
||||||
|
<transformers>
|
||||||
|
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
|
||||||
|
<resource>META-INF/services/java.sql.Driver</resource>
|
||||||
|
</transformer>
|
||||||
|
</transformers>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
<repositories>
|
<repositories>
|
||||||
|
@ -30,7 +77,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.18.1-R0.1-SNAPSHOT</version>
|
<version>1.13-R0.1-SNAPSHOT</version>
|
||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
@ -42,12 +89,17 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.xerial</groupId>
|
<groupId>org.xerial</groupId>
|
||||||
<artifactId>sqlite-jdbc</artifactId>
|
<artifactId>sqlite-jdbc</artifactId>
|
||||||
<version>3.36.0.3</version>
|
<version>3.7.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jetbrains</groupId>
|
<groupId>org.jetbrains</groupId>
|
||||||
<artifactId>annotations</artifactId>
|
<artifactId>annotations</artifactId>
|
||||||
<version>23.0.0</version>
|
<version>23.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.cryptomorin</groupId>
|
||||||
|
<artifactId>XSeries</artifactId>
|
||||||
|
<version>8.7.1</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
|
@ -46,7 +46,7 @@ public class Main extends JavaPlugin implements Listener {
|
||||||
|
|
||||||
public static Main plugin;
|
public static Main plugin;
|
||||||
public static File root, data;
|
public static File root, data;
|
||||||
private BukkitTask onTickTask;
|
private int onTickTask;
|
||||||
|
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
plugin = this;
|
plugin = this;
|
||||||
|
@ -69,13 +69,13 @@ public class Main extends JavaPlugin implements Listener {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
},0,1);
|
},0,1).getTaskId();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
if(onTickTask != null)
|
Main.plugin.getServer().getScheduler().cancelTask(onTickTask);
|
||||||
onTickTask.cancel();
|
|
||||||
UUIDFetcher.cleanup();
|
UUIDFetcher.cleanup();
|
||||||
|
Board.cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, String[] args) {
|
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, String[] args) {
|
||||||
|
|
|
@ -26,7 +26,7 @@ public class About implements ICommand {
|
||||||
|
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(CommandSender sender, String[] args) {
|
||||||
sender.sendMessage(
|
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("%sAuthor: %s[KenshinEto]\n", ChatColor.GRAY, ChatColor.WHITE) +
|
||||||
String.format("%sHelp Command: %s/hs %shelp", ChatColor.GRAY, ChatColor.AQUA, ChatColor.WHITE)
|
String.format("%sHelp Command: %s/hs %shelp", ChatColor.GRAY, ChatColor.AQUA, ChatColor.WHITE)
|
||||||
);
|
);
|
||||||
|
|
|
@ -24,6 +24,7 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
||||||
import net.tylermurphy.hideAndSeek.game.Board;
|
import net.tylermurphy.hideAndSeek.game.Board;
|
||||||
import net.tylermurphy.hideAndSeek.game.Game;
|
import net.tylermurphy.hideAndSeek.game.Game;
|
||||||
import net.tylermurphy.hideAndSeek.util.Status;
|
import net.tylermurphy.hideAndSeek.util.Status;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
@ -64,7 +65,12 @@ public class Start implements ICommand {
|
||||||
} else {
|
} else {
|
||||||
seekerName = args[0];
|
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) {
|
if(seeker == null) {
|
||||||
sender.sendMessage(errorPrefix + message("START_INVALID_NAME").addPlayer(seekerName));
|
sender.sendMessage(errorPrefix + message("START_INVALID_NAME").addPlayer(seekerName));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -19,11 +19,15 @@
|
||||||
|
|
||||||
package net.tylermurphy.hideAndSeek.configuration;
|
package net.tylermurphy.hideAndSeek.configuration;
|
||||||
|
|
||||||
|
import net.tylermurphy.hideAndSeek.util.Version;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class Config {
|
public class Config {
|
||||||
|
|
||||||
private static ConfigManager manager;
|
private static ConfigManager config, leaderboard;
|
||||||
|
|
||||||
public static String
|
public static String
|
||||||
messagePrefix,
|
messagePrefix,
|
||||||
|
@ -36,7 +40,7 @@ public class Config {
|
||||||
spawnWorld,
|
spawnWorld,
|
||||||
exitWorld,
|
exitWorld,
|
||||||
lobbyWorld,
|
lobbyWorld,
|
||||||
local;
|
locale;
|
||||||
|
|
||||||
public static Vector
|
public static Vector
|
||||||
spawnPosition,
|
spawnPosition,
|
||||||
|
@ -57,7 +61,8 @@ public class Config {
|
||||||
pvpEnabled,
|
pvpEnabled,
|
||||||
autoJoin,
|
autoJoin,
|
||||||
teleportToExit,
|
teleportToExit,
|
||||||
lobbyCountdownEnabled;
|
lobbyCountdownEnabled,
|
||||||
|
seekerPing;
|
||||||
|
|
||||||
public static int
|
public static int
|
||||||
minPlayers,
|
minPlayers,
|
||||||
|
@ -74,101 +79,152 @@ public class Config {
|
||||||
countdown,
|
countdown,
|
||||||
changeCountdown,
|
changeCountdown,
|
||||||
lobbyMin,
|
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() {
|
public static void loadConfig() {
|
||||||
|
|
||||||
manager = new ConfigManager("config.yml");
|
config = new ConfigManager("config.yml");
|
||||||
manager.saveConfig();
|
config.saveConfig();
|
||||||
|
leaderboard = new ConfigManager("leaderboard.yml");
|
||||||
|
leaderboard.saveConfig();
|
||||||
|
|
||||||
//Spawn
|
//Spawn
|
||||||
spawnPosition = new Vector(
|
spawnPosition = new Vector(
|
||||||
manager.getDouble("spawns.game.x"),
|
config.getDouble("spawns.game.x"),
|
||||||
Math.max(0, Math.min(255, manager.getDouble("spawns.game.y"))),
|
Math.max(0, Math.min(255, config.getDouble("spawns.game.y"))),
|
||||||
manager.getDouble("spawns.game.z")
|
config.getDouble("spawns.game.z")
|
||||||
);
|
);
|
||||||
spawnWorld = manager.getString("spawns.game.world");
|
spawnWorld = config.getString("spawns.game.world");
|
||||||
|
|
||||||
///Lobby
|
///Lobby
|
||||||
lobbyPosition = new Vector(
|
lobbyPosition = new Vector(
|
||||||
manager.getDouble("spawns.lobby.x"),
|
config.getDouble("spawns.lobby.x"),
|
||||||
Math.max(0, Math.min(255, manager.getDouble("spawns.lobby.y"))),
|
Math.max(0, Math.min(255, config.getDouble("spawns.lobby.y"))),
|
||||||
manager.getDouble("spawns.lobby.z")
|
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(
|
exitPosition = new Vector(
|
||||||
manager.getDouble("spawns.exit.x"),
|
config.getDouble("spawns.exit.x"),
|
||||||
Math.max(0, Math.min(255, manager.getDouble("spawns.exit.y"))),
|
Math.max(0, Math.min(255, config.getDouble("spawns.exit.y"))),
|
||||||
manager.getDouble("spawns.exit.z")
|
config.getDouble("spawns.exit.z")
|
||||||
);
|
);
|
||||||
exitWorld = manager.getString("spawns.exit.world");
|
exitWorld = config.getString("spawns.exit.world");
|
||||||
|
|
||||||
//World border
|
//World border
|
||||||
worldborderPosition = new Vector(
|
worldborderPosition = new Vector(
|
||||||
manager.getInt("worldBorder.x"),
|
config.getInt("worldBorder.x"),
|
||||||
0,
|
0,
|
||||||
manager.getInt("worldBorder.z")
|
config.getInt("worldBorder.z")
|
||||||
);
|
);
|
||||||
worldborderSize = Math.max(100, manager.getInt("worldBorder.size"));
|
worldborderSize = Math.max(100, config.getInt("worldBorder.size"));
|
||||||
worldborderDelay = Math.max(1, manager.getInt("worldBorder.delay"));
|
worldborderDelay = Math.max(1, config.getInt("worldBorder.delay"));
|
||||||
worldborderEnabled = manager.getBoolean("worldBorder.enabled");
|
worldborderEnabled = config.getBoolean("worldBorder.enabled");
|
||||||
|
|
||||||
//Prefix
|
//Prefix
|
||||||
char SYMBOLE = '\u00A7';
|
char SYMBOLE = '\u00A7';
|
||||||
String SYMBOLE_STRING = String.valueOf(SYMBOLE);
|
String SYMBOLE_STRING = String.valueOf(SYMBOLE);
|
||||||
|
|
||||||
messagePrefix = manager.getString("prefix.default").replace("&", SYMBOLE_STRING);
|
messagePrefix = config.getString("prefix.default").replace("&", SYMBOLE_STRING);
|
||||||
errorPrefix = manager.getString("prefix.error").replace("&", SYMBOLE_STRING);
|
errorPrefix = config.getString("prefix.error").replace("&", SYMBOLE_STRING);
|
||||||
tauntPrefix = manager.getString("prefix.taunt").replace("&", SYMBOLE_STRING);
|
tauntPrefix = config.getString("prefix.taunt").replace("&", SYMBOLE_STRING);
|
||||||
worldborderPrefix = manager.getString("prefix.border").replace("&", SYMBOLE_STRING);
|
worldborderPrefix = config.getString("prefix.border").replace("&", SYMBOLE_STRING);
|
||||||
abortPrefix = manager.getString("prefix.abort").replace("&", SYMBOLE_STRING);
|
abortPrefix = config.getString("prefix.abort").replace("&", SYMBOLE_STRING);
|
||||||
gameoverPrefix = manager.getString("prefix.gameover").replace("&", SYMBOLE_STRING);
|
gameoverPrefix = config.getString("prefix.gameover").replace("&", SYMBOLE_STRING);
|
||||||
warningPrefix = manager.getString("prefix.warning").replace("&", SYMBOLE_STRING);
|
warningPrefix = config.getString("prefix.warning").replace("&", SYMBOLE_STRING);
|
||||||
|
|
||||||
//Map Bounds
|
//Map Bounds
|
||||||
saveMinX = manager.getInt("bounds.min.x");
|
saveMinX = config.getInt("bounds.min.x");
|
||||||
saveMinZ = manager.getInt("bounds.min.z");
|
saveMinZ = config.getInt("bounds.min.z");
|
||||||
saveMaxX = manager.getInt("bounds.max.x");
|
saveMaxX = config.getInt("bounds.max.x");
|
||||||
saveMaxZ = manager.getInt("bounds.max.z");
|
saveMaxZ = config.getInt("bounds.max.z");
|
||||||
|
|
||||||
//Taunt
|
//Taunt
|
||||||
tauntEnabled = manager.getBoolean("taunt.enabled");
|
tauntEnabled = config.getBoolean("taunt.enabled");
|
||||||
tauntCountdown = manager.getBoolean("taunt.showCountdown");
|
tauntCountdown = config.getBoolean("taunt.showCountdown");
|
||||||
tauntDelay = Math.max(60,manager.getInt("taunt.delay"));
|
tauntDelay = Math.max(60, config.getInt("taunt.delay"));
|
||||||
tauntLast = manager.getBoolean("taunt.whenLastPerson");
|
tauntLast = config.getBoolean("taunt.whenLastPerson");
|
||||||
|
|
||||||
//Glow
|
//Glow
|
||||||
glowLength = Math.max(1,manager.getInt("glow.time"));
|
glowLength = Math.max(1, config.getInt("glow.time"));
|
||||||
glowStackable = manager.getBoolean("glow.stackable");
|
glowStackable = config.getBoolean("glow.stackable");
|
||||||
glowEnabled = manager.getBoolean("glow.enabled");
|
glowEnabled = config.getBoolean("glow.enabled") && Version.atLeast("1.9");
|
||||||
|
|
||||||
//Lobby
|
//Lobby
|
||||||
minPlayers = Math.max(2, manager.getInt("minPlayers"));
|
minPlayers = Math.max(2, config.getInt("minPlayers"));
|
||||||
countdown = Math.max(10,manager.getInt("lobby.countdown"));
|
countdown = Math.max(10, config.getInt("lobby.countdown"));
|
||||||
changeCountdown = Math.max(minPlayers,manager.getInt("lobby.changeCountdown"));
|
changeCountdown = Math.max(minPlayers, config.getInt("lobby.changeCountdown"));
|
||||||
lobbyMin = Math.max(minPlayers,manager.getInt("lobby.min"));
|
lobbyMin = Math.max(minPlayers, config.getInt("lobby.min"));
|
||||||
lobbyMax = manager.getInt("lobby.max");
|
lobbyMax = config.getInt("lobby.max");
|
||||||
lobbyCountdownEnabled = manager.getBoolean("lobby.enabled");
|
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
|
//Other
|
||||||
nametagsVisible = manager.getBoolean("nametagsVisible");
|
nametagsVisible = config.getBoolean("nametagsVisible");
|
||||||
permissionsRequired = manager.getBoolean("permissionsRequired");
|
permissionsRequired = config.getBoolean("permissionsRequired");
|
||||||
gameLength = manager.getInt("gameLength");
|
gameLength = config.getInt("gameLength");
|
||||||
pvpEnabled = manager.getBoolean("pvp");
|
pvpEnabled = config.getBoolean("pvp");
|
||||||
autoJoin = manager.getBoolean("autoJoin");
|
autoJoin = config.getBoolean("autoJoin");
|
||||||
teleportToExit = manager.getBoolean("teleportToExit");
|
teleportToExit = config.getBoolean("teleportToExit");
|
||||||
local = manager.getString("local");
|
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) {
|
public static void addToConfig(String path, Object value) {
|
||||||
manager.set(path, value);
|
config.set(path, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void saveConfig() {
|
public static void saveConfig() {
|
||||||
manager.saveConfig();
|
config.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -26,6 +26,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class ConfigManager {
|
public class ConfigManager {
|
||||||
|
@ -121,6 +122,10 @@ public class ConfigManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getDefaultInt(String path){
|
||||||
|
return defaultConfig.getInt(path);
|
||||||
|
}
|
||||||
|
|
||||||
public String getString(String path){
|
public String getString(String path){
|
||||||
String value = config.getString(path);
|
String value = config.getString(path);
|
||||||
if(value == null){
|
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){
|
public void reset(String path){
|
||||||
config.set(path, defaultConfig.get(path));
|
config.set(path, defaultConfig.get(path));
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,14 +19,12 @@
|
||||||
|
|
||||||
package net.tylermurphy.hideAndSeek.configuration;
|
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.Material;
|
||||||
import org.bukkit.NamespacedKey;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
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.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
import org.bukkit.inventory.meta.PotionMeta;
|
|
||||||
import org.bukkit.potion.*;
|
import org.bukkit.potion.*;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -63,7 +61,6 @@ public class Items {
|
||||||
if(item != null) HIDER_ITEMS.add(item);
|
if(item != null) HIDER_ITEMS.add(item);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
SEEKER_EFFECTS = new ArrayList<>();
|
SEEKER_EFFECTS = new ArrayList<>();
|
||||||
ConfigurationSection SeekerEffects = manager.getConfigurationSection("effects.seeker");
|
ConfigurationSection SeekerEffects = manager.getConfigurationSection("effects.seeker");
|
||||||
i = 1;
|
i = 1;
|
||||||
|
@ -89,55 +86,36 @@ public class Items {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ItemStack createItem(ConfigurationSection item) {
|
private static ItemStack createItem(ConfigurationSection item) {
|
||||||
String material_string = item.getString("material");
|
ConfigurationSection config = new YamlConfiguration().createSection("temp");
|
||||||
if(material_string == null) return null;
|
String material = item.getString("material").toUpperCase();
|
||||||
Material material = Material.valueOf(material_string.toUpperCase());
|
boolean splash = false;
|
||||||
int amount = item.getInt("amount");
|
if(!Version.atLeast("1.9")){
|
||||||
ItemStack stack = new ItemStack(material, amount);
|
if(material.contains("POTION")){
|
||||||
if(material == Material.POTION || material == Material.SPLASH_POTION || material == Material.LINGERING_POTION){
|
config.set("level", 1);
|
||||||
PotionMeta meta = getPotionMeta(stack, item);
|
}
|
||||||
stack.setItemMeta(meta);
|
if(material.equalsIgnoreCase("SPLASH_POTION") || material.equalsIgnoreCase("LINGERING_POTION")){
|
||||||
|
material = "POTION";
|
||||||
} else {
|
splash = true;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
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;
|
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){
|
private static PotionEffect getPotionEffect(ConfigurationSection item){
|
||||||
String type = item.getString("type");
|
String type = item.getString("type");
|
||||||
if(type == null) return null;
|
if(type == null) return null;
|
||||||
|
if(PotionEffectType.getByName(type.toUpperCase()) == null) return null;
|
||||||
return new PotionEffect(
|
return new PotionEffect(
|
||||||
Objects.requireNonNull(PotionEffectType.getByName(type.toUpperCase())),
|
Objects.requireNonNull(PotionEffectType.getByName(type.toUpperCase())),
|
||||||
item.getInt("duration"),
|
item.getInt("duration"),
|
||||||
|
|
|
@ -29,18 +29,21 @@ public class Localization {
|
||||||
|
|
||||||
public static final Map<String,LocalizationString> LOCAL = new HashMap<>();
|
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() {
|
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");
|
int VERSION = manager.getInt("version");
|
||||||
if(VERSION < PLUGIN_VERSION){
|
if(VERSION < PLUGIN_VERSION){
|
||||||
for(int i = VERSION; i < PLUGIN_VERSION; i++){
|
for(int i = VERSION; i < PLUGIN_VERSION; i++){
|
||||||
if(i < 1) continue;
|
if(i < 1) continue;
|
||||||
String[] changeList = CHANGES[i-1];
|
String[] changeList = CHANGES.get(Config.locale)[i-1];
|
||||||
for(String change : changeList)
|
for(String change : changeList)
|
||||||
manager.reset("Localization." + change);
|
manager.reset("Localization." + change);
|
||||||
}
|
}
|
||||||
|
@ -50,8 +53,8 @@ public class Localization {
|
||||||
String SELECTED_LOCAL = manager.getString("type");
|
String SELECTED_LOCAL = manager.getString("type");
|
||||||
if(SELECTED_LOCAL == null){
|
if(SELECTED_LOCAL == null){
|
||||||
manager.reset("type");
|
manager.reset("type");
|
||||||
} else if(!SELECTED_LOCAL.equals(Config.local)){
|
} else if(!SELECTED_LOCAL.equals(Config.locale)){
|
||||||
manager.resetFile("lang"+File.separator+"localization_"+Config.local+".yml");
|
manager.resetFile("lang"+File.separator+"localization_"+Config.locale +".yml");
|
||||||
}
|
}
|
||||||
|
|
||||||
manager.saveConfig();
|
manager.saveConfig();
|
||||||
|
|
|
@ -21,6 +21,8 @@ package net.tylermurphy.hideAndSeek.database;
|
||||||
|
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
|
import org.sqlite.SQLiteConfig;
|
||||||
|
import sun.font.ScriptRun;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -30,6 +32,8 @@ import java.nio.ByteBuffer;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
import java.sql.Statement;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class Database {
|
public class Database {
|
||||||
|
@ -37,14 +41,15 @@ public class Database {
|
||||||
private static final File databaseFile = new File(Main.data, "database.db");
|
private static final File databaseFile = new File(Main.data, "database.db");
|
||||||
|
|
||||||
public static PlayerInfoTable playerInfo;
|
public static PlayerInfoTable playerInfo;
|
||||||
|
private static SQLiteConfig config;
|
||||||
|
|
||||||
protected static Connection connect() {
|
protected static Connection connect() {
|
||||||
Connection conn = null;
|
Connection conn = null;
|
||||||
try {
|
try {
|
||||||
String url = "jdbc:sqlite:"+databaseFile;
|
String url = "jdbc:sqlite:"+databaseFile;
|
||||||
conn = DriverManager.getConnection(url);
|
conn = DriverManager.getConnection(url, config.toProperties());
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
System.out.println(e.getMessage());
|
Main.plugin.getLogger().severe(e.getMessage());
|
||||||
}
|
}
|
||||||
return conn;
|
return conn;
|
||||||
}
|
}
|
||||||
|
@ -68,6 +73,18 @@ public class Database {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void init(){
|
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();
|
playerInfo = new PlayerInfoTable();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,10 @@
|
||||||
package net.tylermurphy.hideAndSeek.database;
|
package net.tylermurphy.hideAndSeek.database;
|
||||||
|
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
|
import net.tylermurphy.hideAndSeek.configuration.Config;
|
||||||
import net.tylermurphy.hideAndSeek.util.WinType;
|
import net.tylermurphy.hideAndSeek.util.WinType;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
@ -42,7 +44,7 @@ public class PlayerInfoTable {
|
||||||
+ ");";
|
+ ");";
|
||||||
|
|
||||||
try(Connection connection = Database.connect(); Statement statement = connection.createStatement()){
|
try(Connection connection = Database.connect(); Statement statement = connection.createStatement()){
|
||||||
statement.execute(sql);
|
statement.executeUpdate(sql);
|
||||||
} catch (SQLException e){
|
} catch (SQLException e){
|
||||||
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
|
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
@ -59,6 +61,8 @@ public class PlayerInfoTable {
|
||||||
statement.setBytes(1, bytes);
|
statement.setBytes(1, bytes);
|
||||||
ResultSet rs = statement.executeQuery();
|
ResultSet rs = statement.executeQuery();
|
||||||
if(rs.next()){
|
if(rs.next()){
|
||||||
|
rs.close();
|
||||||
|
connection.close();
|
||||||
return new PlayerInfo(
|
return new PlayerInfo(
|
||||||
uuid,
|
uuid,
|
||||||
rs.getInt("wins"),
|
rs.getInt("wins"),
|
||||||
|
@ -67,6 +71,7 @@ public class PlayerInfoTable {
|
||||||
rs.getInt("games_played")
|
rs.getInt("games_played")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
rs.close();
|
||||||
} catch (SQLException e){
|
} catch (SQLException e){
|
||||||
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
|
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -84,7 +89,7 @@ public class PlayerInfoTable {
|
||||||
List<PlayerInfo> infoList = new ArrayList<>();
|
List<PlayerInfo> infoList = new ArrayList<>();
|
||||||
while(rs.next()){
|
while(rs.next()){
|
||||||
PlayerInfo info = new PlayerInfo(
|
PlayerInfo info = new PlayerInfo(
|
||||||
Database.convertBinaryStream(rs.getBinaryStream("uuid")),
|
Database.convertBinaryStream(new ByteArrayInputStream(rs.getBytes("uuid"))),
|
||||||
rs.getInt("wins"),
|
rs.getInt("wins"),
|
||||||
rs.getInt("seeker_wins"),
|
rs.getInt("seeker_wins"),
|
||||||
rs.getInt("hider_wins"),
|
rs.getInt("hider_wins"),
|
||||||
|
@ -92,6 +97,8 @@ public class PlayerInfoTable {
|
||||||
);
|
);
|
||||||
infoList.add(info);
|
infoList.add(info);
|
||||||
}
|
}
|
||||||
|
rs.close();
|
||||||
|
connection.close();
|
||||||
return infoList;
|
return infoList;
|
||||||
} catch (SQLException e){
|
} catch (SQLException e){
|
||||||
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
|
Main.plugin.getLogger().severe("SQL Error: " + e.getMessage());
|
||||||
|
|
|
@ -21,13 +21,11 @@ package net.tylermurphy.hideAndSeek.game;
|
||||||
|
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import net.tylermurphy.hideAndSeek.util.Status;
|
import net.tylermurphy.hideAndSeek.util.Status;
|
||||||
|
import net.tylermurphy.hideAndSeek.util.Version;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
@ -36,32 +34,28 @@ import org.bukkit.scoreboard.*;
|
||||||
|
|
||||||
public class Board {
|
public class Board {
|
||||||
|
|
||||||
private static final List<String> Hider = new ArrayList<>(), Seeker = new ArrayList<>(), Spectator = new ArrayList<>();
|
private static final List<UUID> Hider = new ArrayList<>(), Seeker = new ArrayList<>(), Spectator = new ArrayList<>();
|
||||||
private static final Map<String, Player> playerList = new HashMap<>();
|
private static final Map<UUID, Player> playerList = new HashMap<>();
|
||||||
private static final Map<String, CustomBoard> customBoards = new HashMap<>();
|
private static final Map<UUID, CustomBoard> customBoards = new HashMap<>();
|
||||||
|
|
||||||
public static boolean isPlayer(Player player) {
|
public static boolean isPlayer(Player player) {
|
||||||
return playerList.containsKey(player.getName());
|
return playerList.containsKey(player.getUniqueId());
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isPlayer(String name){
|
|
||||||
return playerList.containsKey(name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPlayer(CommandSender sender) {
|
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) {
|
public static boolean isHider(Player player) {
|
||||||
return Hider.contains(player.getName());
|
return Hider.contains(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSeeker(Player player) {
|
public static boolean isSeeker(Player player) {
|
||||||
return Seeker.contains(player.getName());
|
return Seeker.contains(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSpectator(Player player) {
|
public static boolean isSpectator(Player player) {
|
||||||
return Spectator.contains(player.getName());
|
return Spectator.contains(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int sizeHider() {
|
public static int sizeHider() {
|
||||||
|
@ -76,6 +70,13 @@ public class Board {
|
||||||
return playerList.values().size();
|
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(){
|
public static List<Player> getHiders(){
|
||||||
return Hider.stream().map(playerList::get).collect(Collectors.toList());
|
return Hider.stream().map(playerList::get).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
@ -96,42 +97,42 @@ public class Board {
|
||||||
return new ArrayList<>(playerList.values());
|
return new ArrayList<>(playerList.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Player getPlayer(String name) {
|
public static Player getPlayer(UUID uuid) {
|
||||||
return playerList.get(name);
|
return playerList.get(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addHider(Player player) {
|
public static void addHider(Player player) {
|
||||||
Hider.add(player.getName());
|
Hider.add(player.getUniqueId());
|
||||||
Seeker.remove(player.getName());
|
Seeker.remove(player.getUniqueId());
|
||||||
Spectator.remove(player.getName());
|
Spectator.remove(player.getUniqueId());
|
||||||
playerList.put(player.getName(), player);
|
playerList.put(player.getUniqueId(), player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addSeeker(Player player) {
|
public static void addSeeker(Player player) {
|
||||||
Hider.remove(player.getName());
|
Hider.remove(player.getUniqueId());
|
||||||
Seeker.add(player.getName());
|
Seeker.add(player.getUniqueId());
|
||||||
Spectator.remove(player.getName());
|
Spectator.remove(player.getUniqueId());
|
||||||
playerList.put(player.getName(), player);
|
playerList.put(player.getUniqueId(), player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addSpectator(Player player) {
|
public static void addSpectator(Player player) {
|
||||||
Hider.remove(player.getName());
|
Hider.remove(player.getUniqueId());
|
||||||
Seeker.remove(player.getName());
|
Seeker.remove(player.getUniqueId());
|
||||||
Spectator.add(player.getName());
|
Spectator.add(player.getUniqueId());
|
||||||
playerList.put(player.getName(), player);
|
playerList.put(player.getUniqueId(), player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void remove(Player player) {
|
public static void remove(Player player) {
|
||||||
Hider.remove(player.getName());
|
Hider.remove(player.getUniqueId());
|
||||||
Seeker.remove(player.getName());
|
Seeker.remove(player.getUniqueId());
|
||||||
Spectator.remove(player.getName());
|
Spectator.remove(player.getUniqueId());
|
||||||
playerList.remove(player.getName());
|
playerList.remove(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean onSameTeam(Player player1, Player player2) {
|
public static boolean onSameTeam(Player player1, Player player2) {
|
||||||
if(Hider.contains(player1.getName()) && Hider.contains(player2.getName())) return true;
|
if(Hider.contains(player1.getUniqueId()) && Hider.contains(player2.getUniqueId())) return true;
|
||||||
else if(Seeker.contains(player1.getName()) && Seeker.contains(player2.getName())) return true;
|
else if(Seeker.contains(player1.getUniqueId()) && Seeker.contains(player2.getUniqueId())) return true;
|
||||||
else return Spectator.contains(player1.getName()) && Spectator.contains(player2.getName());
|
else return Spectator.contains(player1.getUniqueId()) && Spectator.contains(player2.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void reload() {
|
public static void reload() {
|
||||||
|
@ -145,27 +146,36 @@ public class Board {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createLobbyBoard(Player player, boolean recreate) {
|
private static void createLobbyBoard(Player player, boolean recreate) {
|
||||||
CustomBoard board = customBoards.get(player.getName());
|
CustomBoard board = customBoards.get(player.getUniqueId());
|
||||||
if(recreate) {
|
if(recreate) {
|
||||||
board = new CustomBoard(player, "&l&eHIDE AND SEEK");
|
board = new CustomBoard(player, "&l&eHIDE AND SEEK");
|
||||||
board.updateTeams();
|
board.updateTeams();
|
||||||
}
|
}
|
||||||
board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDER %" + ChatColor.WHITE + getHiderPercent());
|
int i=0;
|
||||||
board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKER %" + ChatColor.WHITE + getSeekerPercent());
|
for(String line : LOBBY_CONTENTS){
|
||||||
board.addBlank();
|
if(line.equalsIgnoreCase("")){
|
||||||
board.setLine("players", "Players: " + playerList.values().size());
|
board.addBlank();
|
||||||
board.addBlank();
|
} else if(line.contains("{COUNTDOWN}")){
|
||||||
if(lobbyCountdownEnabled){
|
if(!lobbyCountdownEnabled){
|
||||||
if(Game.countdownTime == -1){
|
board.setLine(String.valueOf(i), line.replace("{COUNTDOWN}", COUNTDOWN_ADMINSTART));
|
||||||
board.setLine("waiting", "Waiting for players...");
|
} 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 {
|
} else {
|
||||||
board.setLine("waiting", "Starting in: "+ChatColor.GREEN + Game.countdownTime+"s");
|
board.setLine(String.valueOf(i), line);
|
||||||
}
|
}
|
||||||
} else {
|
i++;
|
||||||
board.setLine("waiting", "Waiting for gamemaster...");
|
|
||||||
}
|
}
|
||||||
board.display();
|
board.display();
|
||||||
customBoards.put(player.getName(), board);
|
customBoards.put(player.getUniqueId(), board);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void createGameBoard(Player player){
|
public static void createGameBoard(Player player){
|
||||||
|
@ -173,53 +183,69 @@ public class Board {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createGameBoard(Player player, boolean recreate){
|
private static void createGameBoard(Player player, boolean recreate){
|
||||||
CustomBoard board = customBoards.get(player.getName());
|
CustomBoard board = customBoards.get(player.getUniqueId());
|
||||||
if(recreate) {
|
if(recreate) {
|
||||||
board = new CustomBoard(player, "&l&eHIDE AND SEEK");
|
board = new CustomBoard(player, GAME_TITLE);
|
||||||
board.updateTeams();
|
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());
|
int i = 0;
|
||||||
board.addBlank();
|
for(String line : GAME_CONTENTS){
|
||||||
if(glowEnabled){
|
if(line.equalsIgnoreCase("")){
|
||||||
if(Game.glow == null || Game.status == Status.STARTING || !Game.glow.isRunning())
|
board.addBlank();
|
||||||
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");
|
|
||||||
} else {
|
} 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();
|
board.display();
|
||||||
customBoards.put(player.getName(), board);
|
customBoards.put(player.getUniqueId(), board);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void removeBoard(Player player) {
|
public static void removeBoard(Player player) {
|
||||||
ScoreboardManager manager = Bukkit.getScoreboardManager();
|
ScoreboardManager manager = Bukkit.getScoreboardManager();
|
||||||
assert manager != null;
|
assert manager != null;
|
||||||
player.setScoreboard(manager.getMainScoreboard());
|
player.setScoreboard(manager.getMainScoreboard());
|
||||||
customBoards.remove(player.getName());
|
customBoards.remove(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void reloadLobbyBoards() {
|
public static void reloadLobbyBoards() {
|
||||||
|
@ -258,6 +284,14 @@ public class Board {
|
||||||
else return ChatColor.WHITE + "UNKNOWN";
|
else return ChatColor.WHITE + "UNKNOWN";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void cleanup(){
|
||||||
|
playerList.clear();
|
||||||
|
Hider.clear();
|
||||||
|
Seeker.clear();
|
||||||
|
Spectator.clear();
|
||||||
|
customBoards.clear();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CustomBoard {
|
class CustomBoard {
|
||||||
|
@ -275,8 +309,13 @@ class CustomBoard {
|
||||||
this.board = manager.getNewScoreboard();
|
this.board = manager.getNewScoreboard();
|
||||||
this.LINES = new HashMap<>();
|
this.LINES = new HashMap<>();
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.obj = board.registerNewObjective(
|
if(Version.atLeast("1.13")){
|
||||||
"Scoreboard", "dummy", ChatColor.translateAlternateColorCodes('&', title));
|
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.blanks = 0;
|
||||||
this.displayed = false;
|
this.displayed = false;
|
||||||
this.updateTeams();
|
this.updateTeams();
|
||||||
|
@ -297,23 +336,38 @@ class CustomBoard {
|
||||||
seekerTeam.removeEntry(entry);
|
seekerTeam.removeEntry(entry);
|
||||||
for(Player player : Board.getSeekers())
|
for(Player player : Board.getSeekers())
|
||||||
seekerTeam.addEntry(player.getName());
|
seekerTeam.addEntry(player.getName());
|
||||||
if(nametagsVisible) {
|
if(Version.atLeast("1.9")){
|
||||||
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);
|
if(nametagsVisible) {
|
||||||
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OTHER_TEAMS);
|
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 {
|
} else {
|
||||||
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
|
if(nametagsVisible) {
|
||||||
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
|
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.setPrefix(ChatColor.translateAlternateColorCodes('&', "&6"));
|
||||||
|
seekerTeam.setPrefix(ChatColor.translateAlternateColorCodes('&', "&c"));
|
||||||
}
|
}
|
||||||
hiderTeam.setColor(ChatColor.GOLD);
|
|
||||||
seekerTeam.setColor(ChatColor.RED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLine(String key, String message){
|
public void setLine(String key, String message){
|
||||||
Line line = LINES.get(key);
|
Line line = LINES.get(key);
|
||||||
if(line == null)
|
if(line == null)
|
||||||
addLine(key, message);
|
addLine(key, ChatColor.translateAlternateColorCodes('&',message));
|
||||||
else
|
else
|
||||||
updateLine(key, message);
|
updateLine(key, ChatColor.translateAlternateColorCodes('&',message));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addLine(String key, String message){
|
private void addLine(String key, String message){
|
||||||
|
|
|
@ -21,8 +21,11 @@ package net.tylermurphy.hideAndSeek.game;
|
||||||
|
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
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.Main;
|
||||||
import net.tylermurphy.hideAndSeek.util.Status;
|
import net.tylermurphy.hideAndSeek.util.Status;
|
||||||
|
import net.tylermurphy.hideAndSeek.util.Version;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.attribute.AttributeInstance;
|
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.entity.EntityRegainHealthEvent.RegainReason;
|
||||||
import org.bukkit.event.player.*;
|
import org.bukkit.event.player.*;
|
||||||
|
|
||||||
import net.tylermurphy.hideAndSeek.util.Packet;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.projectiles.ProjectileSource;
|
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;
|
if (spawnPosition == null) return;
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
|
if(Version.atLeast("1.9")) {
|
||||||
if(attribute != null)
|
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
|
||||||
player.setHealth(attribute.getValue());
|
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()));
|
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)) {
|
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 (Board.isHider(player)) {
|
||||||
if (attacker == null) {
|
if (attacker == null) {
|
||||||
|
@ -217,7 +226,8 @@ public class EventListener implements Listener {
|
||||||
if(Board.isHider(player)) {
|
if(Board.isHider(player)) {
|
||||||
Game.glow.onProjectile();
|
Game.glow.onProjectile();
|
||||||
snowball.remove();
|
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();
|
Player player = event.getPlayer();
|
||||||
String message = event.getMessage();
|
String message = event.getMessage();
|
||||||
String[] array = message.split(" ");
|
String[] array = message.split(" ");
|
||||||
if(array[0].equalsIgnoreCase("/kill")){
|
String[] temp = array[0].split(":");
|
||||||
if(Board.isPlayer(player)){
|
for(String handle : blockedCommands){
|
||||||
Main.plugin.getLogger().info("Blocking "+player.getName()+ "from running /kill with anyone associated in the lobby");
|
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);
|
event.setCancelled(true);
|
||||||
} else if(array.length > 1){
|
break;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,14 +21,19 @@ package net.tylermurphy.hideAndSeek.game;
|
||||||
|
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
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.md_5.bungee.api.ChatColor;
|
||||||
import net.tylermurphy.hideAndSeek.configuration.Items;
|
import net.tylermurphy.hideAndSeek.configuration.Items;
|
||||||
import net.tylermurphy.hideAndSeek.database.Database;
|
import net.tylermurphy.hideAndSeek.database.Database;
|
||||||
import net.tylermurphy.hideAndSeek.util.Status;
|
import net.tylermurphy.hideAndSeek.util.Status;
|
||||||
|
import net.tylermurphy.hideAndSeek.util.Version;
|
||||||
import net.tylermurphy.hideAndSeek.util.WinType;
|
import net.tylermurphy.hideAndSeek.util.WinType;
|
||||||
import net.tylermurphy.hideAndSeek.world.WorldLoader;
|
import net.tylermurphy.hideAndSeek.world.WorldLoader;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
|
import org.bukkit.attribute.AttributeInstance;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Firework;
|
import org.bukkit.entity.Firework;
|
||||||
|
@ -42,7 +47,6 @@ import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
import java.beans.EventHandler;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -92,11 +96,12 @@ public class Game {
|
||||||
for(Player player : Board.getSeekers()) {
|
for(Player player : Board.getSeekers()) {
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS,1000000,127,false,false));
|
player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS,1000000,127,false,false));
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,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()) {
|
for(Player player : Board.getHiders()) {
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1000000,5,false,false));
|
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)
|
if(tauntEnabled)
|
||||||
taunt = new Taunt();
|
taunt = new Taunt();
|
||||||
|
@ -153,8 +158,10 @@ public class Game {
|
||||||
player.removePotionEffect(effect.getType());
|
player.removePotionEffect(effect.getType());
|
||||||
}
|
}
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 100));
|
player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 100));
|
||||||
for(Player temp : Board.getPlayers()) {
|
if(Version.atLeast("1.9")){
|
||||||
Packet.setGlow(player, temp, false);
|
for(Player temp : Board.getPlayers()) {
|
||||||
|
Packet.setGlow(player, temp, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EventListener.temp_loc.clear();
|
EventListener.temp_loc.clear();
|
||||||
|
@ -207,7 +214,8 @@ public class Game {
|
||||||
for(PotionEffect effect : Items.HIDER_EFFECTS)
|
for(PotionEffect effect : Items.HIDER_EFFECTS)
|
||||||
player.addPotionEffect(effect);
|
player.addPotionEffect(effect);
|
||||||
if(glowEnabled) {
|
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();
|
ItemMeta snowballMeta = snowball.getItemMeta();
|
||||||
assert snowballMeta != null;
|
assert snowballMeta != null;
|
||||||
snowballMeta.setDisplayName("Glow Powerup");
|
snowballMeta.setDisplayName("Glow Powerup");
|
||||||
|
@ -238,11 +246,16 @@ public class Game {
|
||||||
player.setGameMode(GameMode.SPECTATOR);
|
player.setGameMode(GameMode.SPECTATOR);
|
||||||
Board.createGameBoard(player);
|
Board.createGameBoard(player);
|
||||||
player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
|
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.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){
|
public static void removeItems(Player player){
|
||||||
|
@ -261,8 +274,10 @@ public class Game {
|
||||||
countdownTime = countdown;
|
countdownTime = countdown;
|
||||||
if(Board.size() >= changeCountdown)
|
if(Board.size() >= changeCountdown)
|
||||||
countdownTime = Math.min(countdownTime, 10);
|
countdownTime = Math.min(countdownTime, 10);
|
||||||
if(tick % 20 == 0)
|
if(tick % 20 == 0) {
|
||||||
countdownTime--;
|
countdownTime--;
|
||||||
|
Board.reloadLobbyBoards();
|
||||||
|
}
|
||||||
if(countdownTime == 0){
|
if(countdownTime == 0){
|
||||||
Optional<Player> rand = Board.getPlayers().stream().skip(new Random().nextInt(Board.size())).findFirst();
|
Optional<Player> rand = Board.getPlayers().stream().skip(new Random().nextInt(Board.size())).findFirst();
|
||||||
if(!rand.isPresent()){
|
if(!rand.isPresent()){
|
||||||
|
@ -270,7 +285,16 @@ public class Game {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String seekerName = rand.get().getName();
|
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);
|
start(seeker);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -296,20 +320,20 @@ public class Game {
|
||||||
distance = temp;
|
distance = temp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch(tick%10) {
|
if(seekerPing) switch(tick%10) {
|
||||||
case 0:
|
case 0:
|
||||||
if(distance < 30) Packet.playSound(hider, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .5f, 1f);
|
if(distance < seekerPingLevel1) XSound.BLOCK_NOTE_BLOCK_BASEDRUM.play(hider, .5f, 1f);
|
||||||
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;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if(distance < 30) Packet.playSound(hider, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .3f, 1f);
|
if(distance < seekerPingLevel1) XSound.BLOCK_NOTE_BLOCK_BASEDRUM.play(hider, .3f, 1f);
|
||||||
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;
|
break;
|
||||||
case 6:
|
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;
|
break;
|
||||||
case 9:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -362,21 +386,18 @@ class Glow {
|
||||||
public void onProjectile() {
|
public void onProjectile() {
|
||||||
if(glowStackable) glowTime += glowLength;
|
if(glowStackable) glowTime += glowLength;
|
||||||
else glowTime = glowLength;
|
else glowTime = glowLength;
|
||||||
if(!running)
|
running = true;
|
||||||
startGlow();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startGlow() {
|
private void sendPackets(){
|
||||||
running = true;
|
for(Player hider : Board.getHiders())
|
||||||
for(Player hider : Board.getHiders()) {
|
for(Player seeker : Board.getSeekers())
|
||||||
for(Player seeker : Board.getSeekers()) {
|
|
||||||
Packet.setGlow(hider, seeker, true);
|
Packet.setGlow(hider, seeker, true);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void update() {
|
protected void update() {
|
||||||
if(running) {
|
if(running) {
|
||||||
|
sendPackets();
|
||||||
glowTime--;
|
glowTime--;
|
||||||
glowTime = Math.max(glowTime, 0);
|
glowTime = Math.max(glowTime, 0);
|
||||||
if (glowTime == 0) {
|
if (glowTime == 0) {
|
||||||
|
@ -402,7 +423,7 @@ class Glow {
|
||||||
|
|
||||||
class Taunt {
|
class Taunt {
|
||||||
|
|
||||||
private String tauntPlayer;
|
private UUID tauntPlayer;
|
||||||
private int delay;
|
private int delay;
|
||||||
private boolean running;
|
private boolean running;
|
||||||
|
|
||||||
|
@ -429,7 +450,7 @@ class Taunt {
|
||||||
Player taunted = rand.get();
|
Player taunted = rand.get();
|
||||||
taunted.sendMessage(message("TAUNTED").toString());
|
taunted.sendMessage(message("TAUNTED").toString());
|
||||||
broadcastMessage(tauntPrefix + message("TAUNT"));
|
broadcastMessage(tauntPrefix + message("TAUNT"));
|
||||||
tauntPlayer = taunted.getName();
|
tauntPlayer = taunted.getUniqueId();
|
||||||
running = true;
|
running = true;
|
||||||
delay = 30;
|
delay = 30;
|
||||||
}
|
}
|
||||||
|
@ -439,7 +460,7 @@ class Taunt {
|
||||||
if(taunted != null) {
|
if(taunted != null) {
|
||||||
if(!Board.isHider(taunted)){
|
if(!Board.isHider(taunted)){
|
||||||
Main.plugin.getLogger().info("Taunted played died and is now seeker. Skipping taunt.");
|
Main.plugin.getLogger().info("Taunted played died and is now seeker. Skipping taunt.");
|
||||||
tauntPlayer = "";
|
tauntPlayer = null;
|
||||||
running = false;
|
running = false;
|
||||||
delay = tauntDelay;
|
delay = tauntDelay;
|
||||||
return;
|
return;
|
||||||
|
@ -447,7 +468,7 @@ class Taunt {
|
||||||
World world = taunted.getLocation().getWorld();
|
World world = taunted.getLocation().getWorld();
|
||||||
if(world == null){
|
if(world == null){
|
||||||
Main.plugin.getLogger().severe("Game world is null while trying to launch taunt.");
|
Main.plugin.getLogger().severe("Game world is null while trying to launch taunt.");
|
||||||
tauntPlayer = "";
|
tauntPlayer = null;
|
||||||
running = false;
|
running = false;
|
||||||
delay = tauntDelay;
|
delay = tauntDelay;
|
||||||
return;
|
return;
|
||||||
|
@ -468,7 +489,7 @@ class Taunt {
|
||||||
fw.setFireworkMeta(fwm);
|
fw.setFireworkMeta(fwm);
|
||||||
broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
|
broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
|
||||||
}
|
}
|
||||||
tauntPlayer = "";
|
tauntPlayer = null;
|
||||||
running = false;
|
running = false;
|
||||||
delay = tauntDelay;
|
delay = tauntDelay;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ package net.tylermurphy.hideAndSeek.util;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
import org.bukkit.Sound;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
import com.comphenix.protocol.PacketType;
|
||||||
|
@ -29,7 +28,6 @@ import com.comphenix.protocol.ProtocolLibrary;
|
||||||
import com.comphenix.protocol.ProtocolManager;
|
import com.comphenix.protocol.ProtocolManager;
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
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.Registry;
|
||||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer;
|
import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer;
|
||||||
|
|
||||||
|
@ -37,22 +35,6 @@ public class Packet {
|
||||||
|
|
||||||
private static final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
|
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) {
|
public static void setGlow(Player player, Player target, boolean glowing) {
|
||||||
PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.ENTITY_METADATA);
|
PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.ENTITY_METADATA);
|
||||||
packet.getIntegers().write(0, target.getEntityId());
|
packet.getIntegers().write(0, target.getEntityId());
|
||||||
|
|
45
src/main/java/net/tylermurphy/hideAndSeek/util/Version.java
Normal file
45
src/main/java/net/tylermurphy/hideAndSeek/util/Version.java
Normal file
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,6 +29,7 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
import net.tylermurphy.hideAndSeek.util.Version;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.WorldCreator;
|
import org.bukkit.WorldCreator;
|
||||||
|
@ -63,7 +64,7 @@ public class WorldLoader {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadMap(){
|
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);
|
World world = Bukkit.getServer().getWorld(savename);
|
||||||
if(world == null){
|
if(world == null){
|
||||||
Main.plugin.getLogger().severe("COULD NOT LOAD " + savename);
|
Main.plugin.getLogger().severe("COULD NOT LOAD " + savename);
|
||||||
|
@ -111,7 +112,10 @@ public class WorldLoader {
|
||||||
private void copyFileFolder(String name, Boolean isMca) throws IOException {
|
private void copyFileFolder(String name, Boolean isMca) throws IOException {
|
||||||
File region = new File(Main.root+File.separator+mapname+File.separator+name);
|
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);
|
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()) {
|
if(region.exists() && region.isDirectory()) {
|
||||||
|
System.out.println("passed");
|
||||||
if(!temp.exists())
|
if(!temp.exists())
|
||||||
if(!temp.mkdirs())
|
if(!temp.mkdirs())
|
||||||
throw new IOException("Couldn't create region directory!");
|
throw new IOException("Couldn't create region directory!");
|
||||||
|
@ -121,17 +125,17 @@ public class WorldLoader {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (String file : files) {
|
for (String file : files) {
|
||||||
|
System.out.println("Testing file "+ file);
|
||||||
if(isMca) {
|
if(isMca) {
|
||||||
int minX = (int)Math.floor(saveMinX / 32.0);
|
int minX = (int)Math.floor(saveMinX / 512.0);
|
||||||
int minZ = (int)Math.floor(saveMinZ / 32.0);
|
int minZ = (int)Math.floor(saveMinZ / 512.0);
|
||||||
int maxX = (int)Math.floor(saveMaxX / 32.0);
|
int maxX = (int)Math.floor(saveMaxX / 512.0);
|
||||||
int maxZ = (int)Math.floor(saveMaxZ / 32.0);
|
int maxZ = (int)Math.floor(saveMaxZ / 512.0);
|
||||||
|
|
||||||
String[] parts = file.split("\\.");
|
String[] parts = file.split("\\.");
|
||||||
if(parts.length > 1) {
|
if(parts.length > 1) {
|
||||||
Main.plugin.getLogger().info(file);
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
#============================================================#
|
||||||
|
# +--------------------------------------------------------+ #
|
||||||
|
# | Kenshins Hide and Seek | #
|
||||||
|
# | Configuration file | #
|
||||||
|
# | by KenshinEto | #
|
||||||
|
# +--------------------------------------------------------+ #
|
||||||
|
#============================================================#
|
||||||
|
|
||||||
# How long in seconds will the game last, set it < 1 to disable
|
# How long in seconds will the game last, set it < 1 to disable
|
||||||
# default: 1200 aka 20min
|
# default: 1200 aka 20min
|
||||||
gameLength: 1200
|
gameLength: 1200
|
||||||
|
@ -30,7 +38,7 @@ pvp: true
|
||||||
autoJoin: false
|
autoJoin: false
|
||||||
|
|
||||||
# (When autoJoin is false), when players join the world containing the lobby, they are automatically teleported
|
# (When autoJoin is false), when players join the world containing the lobby, they are automatically teleported
|
||||||
# to the designated exit position so that they possibly don't spawn in the lobby while not in the queue. Anyone
|
# to the designated exit position so that they don't spawn in the lobby while not in the queue. Anyone
|
||||||
# who ever joins in the game world (the duplicated world where the game is played) will always be teleported
|
# who ever joins in the game world (the duplicated world where the game is played) will always be teleported
|
||||||
# out regardless.
|
# out regardless.
|
||||||
# default: false
|
# default: false
|
||||||
|
@ -62,7 +70,8 @@ taunt:
|
||||||
# the amount of time set in seconds. You can allow it to be stackable, meaning
|
# the amount of time set in seconds. You can allow it to be stackable, meaning
|
||||||
# when multiple Hiders use the powerup at the same time, it stacks the times, or
|
# when multiple Hiders use the powerup at the same time, it stacks the times, or
|
||||||
# just overwrites. Only Hiders can see that the Seekers are glowing. Delay must
|
# just overwrites. Only Hiders can see that the Seekers are glowing. Delay must
|
||||||
# be longer than 1s.
|
# be longer than 1s. Since the glow effect wasn't added until Minecraft 1.9,
|
||||||
|
# any server running 1.8 will have this disabled regardless of the options below.
|
||||||
glow:
|
glow:
|
||||||
time: 30
|
time: 30
|
||||||
stackable: true
|
stackable: true
|
||||||
|
@ -90,10 +99,34 @@ lobby:
|
||||||
max: 10
|
max: 10
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
|
# As a hider, the closer a seeker gets to you, the louder and faster a pining noise will play.
|
||||||
|
# There are 3 separate distances (in blocks) you can set to the 3 different levels for the noise.
|
||||||
|
# The higher the level, the closer the seeker.
|
||||||
|
seekerPing:
|
||||||
|
distances:
|
||||||
|
level1: 30
|
||||||
|
level2: 20
|
||||||
|
level3: 10
|
||||||
|
enabled: true
|
||||||
|
|
||||||
# Changes the default plugin language. Currently, Supported localizations are:
|
# Changes the default plugin language. Currently, Supported localizations are:
|
||||||
# en-US (English - United States)
|
# en-US (English - United States)
|
||||||
# de-DE (German - Germany)
|
# de-DE (German - Germany)
|
||||||
local: "en-US"
|
locale: "en-US"
|
||||||
|
|
||||||
|
# Block's commands being run by any user while playing the game.
|
||||||
|
# Can be usefully If you aren't using a permission plugin and want
|
||||||
|
# to op people, but still want to block certain commands.
|
||||||
|
# Not really usefully if using permission plugins.
|
||||||
|
# You can add /kill for any use, but it's already blocked on those
|
||||||
|
# playing the game.
|
||||||
|
blockedCommands:
|
||||||
|
- msg
|
||||||
|
- tp
|
||||||
|
- gamemode
|
||||||
|
- kill
|
||||||
|
- give
|
||||||
|
- effect
|
||||||
|
|
||||||
# ---------------------------------------------------------- #
|
# ---------------------------------------------------------- #
|
||||||
# ONLY EDIT BEYOND THIS POINT IF YOU KNOW WHAT YOU ARE DOING #
|
# ONLY EDIT BEYOND THIS POINT IF YOU KNOW WHAT YOU ARE DOING #
|
||||||
|
@ -101,7 +134,7 @@ local: "en-US"
|
||||||
|
|
||||||
# The 2 coordinate bounds that will contain your hideAndSeek map. Its recommended
|
# The 2 coordinate bounds that will contain your hideAndSeek map. Its recommended
|
||||||
# that you use /hs setbounds for this, and not edit this directly, as breaking
|
# that you use /hs setbounds for this, and not edit this directly, as breaking
|
||||||
# this section will completely break the entire plugin when you run /hs mapsave.
|
# this section will completely break the entire plugin when you run /hs savemap.
|
||||||
bounds:
|
bounds:
|
||||||
min:
|
min:
|
||||||
x: 0
|
x: 0
|
||||||
|
|
|
@ -64,6 +64,7 @@ Localization:
|
||||||
NOT_AT_ZERO: "Bitte nicht an einer Position setzen, die eine Koordinate bei 0 enthält."
|
NOT_AT_ZERO: "Bitte nicht an einer Position setzen, die eine Koordinate bei 0 enthält."
|
||||||
NO_GAME_INFO: "Keine Informationen zum Gameplay für diesen Spieler vorhanden."
|
NO_GAME_INFO: "Keine Informationen zum Gameplay für diesen Spieler vorhanden."
|
||||||
INFORMATION_FOR: "Gewinninformationen für {PLAYER}:"
|
INFORMATION_FOR: "Gewinninformationen für {PLAYER}:"
|
||||||
|
BLOCKED_COMMAND: "Command blocked by Kenshin's Hide And Seek"
|
||||||
|
|
||||||
# DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE
|
# DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE
|
||||||
version: 2
|
version: 2
|
||||||
|
|
|
@ -37,7 +37,7 @@ Localization:
|
||||||
WORLDBORDER_ENABLE: "Set border center to current location, size to {AMOUNT}, and delay to {AMOUNT}."
|
WORLDBORDER_ENABLE: "Set border center to current location, size to {AMOUNT}, and delay to {AMOUNT}."
|
||||||
WORLDBORDER_DECREASING: "World border decreasing by 100 blocks over the next 30s."
|
WORLDBORDER_DECREASING: "World border decreasing by 100 blocks over the next 30s."
|
||||||
WORLDBORDER_WARN: "World border will shrink in the next 30s!"
|
WORLDBORDER_WARN: "World border will shrink in the next 30s!"
|
||||||
TAUNTED: "$c$oOh no! You have been chosen to be taunted."
|
TAUNTED: "&c&oOh no! You have been chosen to be taunted."
|
||||||
TAUNT: "A random hider will be taunted in the next 30s."
|
TAUNT: "A random hider will be taunted in the next 30s."
|
||||||
TAUNT_ACTIVATE: "Taunt has been activated."
|
TAUNT_ACTIVATE: "Taunt has been activated."
|
||||||
ERROR_GAME_SPAWN: "Please set game spawn location first"
|
ERROR_GAME_SPAWN: "Please set game spawn location first"
|
||||||
|
@ -54,7 +54,7 @@ Localization:
|
||||||
START_MIN_PLAYERS: "You must have at least {AMOUNT} players to start."
|
START_MIN_PLAYERS: "You must have at least {AMOUNT} players to start."
|
||||||
START_INVALID_NAME: "Invalid player: {PLAYER}."
|
START_INVALID_NAME: "Invalid player: {PLAYER}."
|
||||||
START_COUNTDOWN: "Hiders have {AMOUNT} seconds to hide!"
|
START_COUNTDOWN: "Hiders have {AMOUNT} seconds to hide!"
|
||||||
START: "Attention SEEKERS, its time to fin the hiders!"
|
START: "Attention SEEKERS, its time to find the hiders!"
|
||||||
STOP: "Game has been force stopped."
|
STOP: "Game has been force stopped."
|
||||||
HIDERS_SUBTITLE: "Hide away from the seekers"
|
HIDERS_SUBTITLE: "Hide away from the seekers"
|
||||||
SEEKERS_SUBTITLE: "Eliminate all hiders"
|
SEEKERS_SUBTITLE: "Eliminate all hiders"
|
||||||
|
@ -64,7 +64,8 @@ Localization:
|
||||||
NOT_AT_ZERO: "Please do not set at a location containing a coordinate at 0."
|
NOT_AT_ZERO: "Please do not set at a location containing a coordinate at 0."
|
||||||
NO_GAME_INFO: "Player has no gameplay information."
|
NO_GAME_INFO: "Player has no gameplay information."
|
||||||
INFORMATION_FOR: "Win information for {PLAYER}:"
|
INFORMATION_FOR: "Win information for {PLAYER}:"
|
||||||
|
BLOCKED_COMMAND: "Command blocked by Hide And Seek plugin."
|
||||||
|
|
||||||
# DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE
|
# DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE
|
||||||
version: 2
|
version: 3
|
||||||
type: "en-US"
|
type: "en-US"
|
87
src/main/resources/leaderboard.yml
Normal file
87
src/main/resources/leaderboard.yml
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#============================================================#
|
||||||
|
# +--------------------------------------------------------+ #
|
||||||
|
# | Kenshins Hide and Seek | #
|
||||||
|
# | Leaderboard file | #
|
||||||
|
# | by KenshinEto | #
|
||||||
|
# +--------------------------------------------------------+ #
|
||||||
|
#============================================================#
|
||||||
|
# This config file allows you to change what is displayed on the scoreboard\leaderboard
|
||||||
|
# while in the lobby, or in the game. Below are a list of predefined placeholders.
|
||||||
|
#
|
||||||
|
# LOBBY BOARD PLACEHOLDERS
|
||||||
|
#
|
||||||
|
# {COUNTDOWN} - Displays the time left in the lobby countdown. If there are not enough
|
||||||
|
# people in the lobby, or the lobby countdown its disabled, it just
|
||||||
|
# displays waiting for players. The text displayed can be changed below.
|
||||||
|
# {COUNT} - The amount of player currently in the lobby.
|
||||||
|
# {SEEKER%} - The chance that a player will be selected to be a seeker.
|
||||||
|
# {HIDER%} - The chance that a player will be selected to be a hider.
|
||||||
|
#
|
||||||
|
# GAME BOARD PLACEHOLDERS
|
||||||
|
#
|
||||||
|
# {TIME} - The amount of time left in the game in MmSs.
|
||||||
|
# {TEAM} - The team you are on. Hider, Seeker, or Spectator.
|
||||||
|
# {BORDER} - The current status of the world boarder, if enabled.
|
||||||
|
# If the world border is disabled, this line is removed
|
||||||
|
# automatically. Displays the time left until the border
|
||||||
|
# moves in MmSs, or "Decreasing" if it's decreasing.
|
||||||
|
# What is displayed exactly can be changed below.
|
||||||
|
# {TAUNT} - The current status of the taunt system, if enabled.
|
||||||
|
# If taunts are disabled, any line with {TAUNT} will be
|
||||||
|
# automatically removed. Shows the time left till next
|
||||||
|
# taunt in MmSs, if the taunt is active, and if the taunt
|
||||||
|
# has expired (one player left). What is displayed exactly
|
||||||
|
# can be changed below.
|
||||||
|
# {GLOW} - The current status of the glow powerup, if enabled.
|
||||||
|
# This line is automatically removed if the glow poewrup
|
||||||
|
# is disabled. Tells all players if a Glow powerup is active,
|
||||||
|
# only Hiders will be able to see its effects though.
|
||||||
|
# {#SEEKER} - Number of current seekers.
|
||||||
|
# {#HIDER} - Number of current hiders.
|
||||||
|
#
|
||||||
|
# YOU CANNOT USE TWO PLACEHOLDERS ON THE SAME LINE. ONLY THE FIRST ONE WILL
|
||||||
|
# BE CHANGED, AND THE SECOND ONE WILL SAY A PLACEHOLDER MARKER!
|
||||||
|
|
||||||
|
lobby:
|
||||||
|
title: "&eHIDE AND SEEK"
|
||||||
|
content: [
|
||||||
|
"{COUNTDOWN}",
|
||||||
|
"",
|
||||||
|
"Players: {COUNT}",
|
||||||
|
"",
|
||||||
|
"&cSEEKER % &f{SEEKER%}",
|
||||||
|
"&6HIDER % &f{HIDER%}"
|
||||||
|
]
|
||||||
|
|
||||||
|
game:
|
||||||
|
title: "&eHIDE AND SEEK"
|
||||||
|
content: [
|
||||||
|
"Team: {TEAM}",
|
||||||
|
"",
|
||||||
|
"Time Left: &a{TIME}",
|
||||||
|
"",
|
||||||
|
"Taunt: &e{TAUNT}",
|
||||||
|
"Glow: {GLOW}",
|
||||||
|
"WorldBorder: &b{BORDER}",
|
||||||
|
"",
|
||||||
|
"&cSEEKERS: &f{#SEEKER}",
|
||||||
|
"&6HIDERS: &f{#HIDER}"
|
||||||
|
]
|
||||||
|
|
||||||
|
countdown:
|
||||||
|
waiting: "Waiting for players..."
|
||||||
|
adminStart: "Waiting for gamemaster..."
|
||||||
|
counting: "Starting in: $a{AMOUNT}s"
|
||||||
|
|
||||||
|
taunt:
|
||||||
|
counting: "{AMOUNT}m{AMOUNT}s"
|
||||||
|
active: "Active"
|
||||||
|
expired: "Expired"
|
||||||
|
|
||||||
|
glow:
|
||||||
|
active: "&aActive"
|
||||||
|
inactive: "&cInactive"
|
||||||
|
|
||||||
|
border:
|
||||||
|
counting: "{AMOUNT}m{AMOUNT}s"
|
||||||
|
decreasing: "Decreasing"
|
|
@ -1,9 +1,9 @@
|
||||||
name: HideAndSeek
|
name: HideAndSeek
|
||||||
main: net.tylermurphy.hideAndSeek.Main
|
main: net.tylermurphy.hideAndSeek.Main
|
||||||
version: 1.3.3
|
version: 1.4.0
|
||||||
author: KenshinEto
|
author: KenshinEto
|
||||||
load: STARTUP
|
load: STARTUP
|
||||||
api-version: 1.14
|
api-version: 1.13
|
||||||
depend: [ProtocolLib]
|
depend: [ProtocolLib]
|
||||||
commands:
|
commands:
|
||||||
hideandseek:
|
hideandseek:
|
||||||
|
@ -29,6 +29,8 @@ permissions:
|
||||||
hideandseek.join: true
|
hideandseek.join: true
|
||||||
hideandseek.leave: true
|
hideandseek.leave: true
|
||||||
hideandseek.leavebounds: true
|
hideandseek.leavebounds: true
|
||||||
|
hideandseek.wins: true
|
||||||
|
hideand.top: true
|
||||||
hideandseek.about:
|
hideandseek.about:
|
||||||
description: Allows you to run the about command
|
description: Allows you to run the about command
|
||||||
default: true
|
default: true
|
||||||
|
@ -74,3 +76,9 @@ permissions:
|
||||||
hideandseek.leavebounds:
|
hideandseek.leavebounds:
|
||||||
description: Allows players to leave specified game bounderies
|
description: Allows players to leave specified game bounderies
|
||||||
default: op
|
default: op
|
||||||
|
hideandseek.wins:
|
||||||
|
description: Allows players to see a players amount of wins
|
||||||
|
default: true
|
||||||
|
hideandseek.top:
|
||||||
|
description: Allows players to see the global wins leaderboard
|
||||||
|
default: true
|
||||||
|
|
Loading…
Reference in a new issue