1.4.0 initial
This commit is contained in:
parent
31d60d7d23
commit
e9daa95473
17 changed files with 579 additions and 73 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.hideAndSeek.util.xseries</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
</relocations>
|
||||||
|
<artifactSet>
|
||||||
|
<includes>
|
||||||
|
<include>com.github.cryptomorin:XSeries</include>
|
||||||
|
<include>org.xerial:sqlite-jdbc</include>
|
||||||
|
</includes>
|
||||||
|
</artifactSet>
|
||||||
|
<filters>
|
||||||
|
<filter>
|
||||||
|
<artifact>*:*</artifact>
|
||||||
|
<excludes>
|
||||||
|
<exclude>META-INF/*.MF</exclude>
|
||||||
|
<exclude>com/cryptomorin/xseries/XBiome*</exclude>
|
||||||
|
<exclude>com/cryptomorin/xseries/NMSExtras*</exclude>
|
||||||
|
<exclude>com/cryptomorin/xseries/NoteBlockMusic*</exclude>
|
||||||
|
<exclude>com/cryptomorin/xseries/SkullCacheListener*</exclude>
|
||||||
|
<exclude>com/cryptomorin/xseries/XBlock*</exclude>
|
||||||
|
<exclude>com/cryptomorin/xseries/XEntity*</exclude>
|
||||||
|
<exclude>com/cryptomorin/xseries/particles/*</exclude>
|
||||||
|
<exclude>com/cryptomorin/xseries/messages/ActionBar*</exclude>
|
||||||
|
</excludes>
|
||||||
|
</filter>
|
||||||
|
</filters>
|
||||||
|
</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.9-R0.1-SNAPSHOT</version>
|
||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
@ -43,11 +90,18 @@
|
||||||
<groupId>org.xerial</groupId>
|
<groupId>org.xerial</groupId>
|
||||||
<artifactId>sqlite-jdbc</artifactId>
|
<artifactId>sqlite-jdbc</artifactId>
|
||||||
<version>3.36.0.3</version>
|
<version>3.36.0.3</version>
|
||||||
|
<type>jar</type>
|
||||||
|
<scope>provided</scope>
|
||||||
</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>
|
|
@ -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)
|
||||||
);
|
);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
public class Config {
|
public class Config {
|
||||||
|
@ -36,7 +37,7 @@ public class Config {
|
||||||
spawnWorld,
|
spawnWorld,
|
||||||
exitWorld,
|
exitWorld,
|
||||||
lobbyWorld,
|
lobbyWorld,
|
||||||
local;
|
locale;
|
||||||
|
|
||||||
public static Vector
|
public static Vector
|
||||||
spawnPosition,
|
spawnPosition,
|
||||||
|
@ -57,7 +58,8 @@ public class Config {
|
||||||
pvpEnabled,
|
pvpEnabled,
|
||||||
autoJoin,
|
autoJoin,
|
||||||
teleportToExit,
|
teleportToExit,
|
||||||
lobbyCountdownEnabled;
|
lobbyCountdownEnabled,
|
||||||
|
seekerPing;
|
||||||
|
|
||||||
public static int
|
public static int
|
||||||
minPlayers,
|
minPlayers,
|
||||||
|
@ -74,7 +76,10 @@ public class Config {
|
||||||
countdown,
|
countdown,
|
||||||
changeCountdown,
|
changeCountdown,
|
||||||
lobbyMin,
|
lobbyMin,
|
||||||
lobbyMax;
|
lobbyMax,
|
||||||
|
seekerPingLevel1,
|
||||||
|
seekerPingLevel2,
|
||||||
|
seekerPingLevel3;
|
||||||
|
|
||||||
public static void loadConfig() {
|
public static void loadConfig() {
|
||||||
|
|
||||||
|
@ -143,7 +148,7 @@ public class Config {
|
||||||
//Glow
|
//Glow
|
||||||
glowLength = Math.max(1,manager.getInt("glow.time"));
|
glowLength = Math.max(1,manager.getInt("glow.time"));
|
||||||
glowStackable = manager.getBoolean("glow.stackable");
|
glowStackable = manager.getBoolean("glow.stackable");
|
||||||
glowEnabled = manager.getBoolean("glow.enabled");
|
glowEnabled = manager.getBoolean("glow.enabled") && Version.atLeast("1.9");
|
||||||
|
|
||||||
//Lobby
|
//Lobby
|
||||||
minPlayers = Math.max(2, manager.getInt("minPlayers"));
|
minPlayers = Math.max(2, manager.getInt("minPlayers"));
|
||||||
|
@ -153,6 +158,12 @@ public class Config {
|
||||||
lobbyMax = manager.getInt("lobby.max");
|
lobbyMax = manager.getInt("lobby.max");
|
||||||
lobbyCountdownEnabled = manager.getBoolean("lobby.enabled");
|
lobbyCountdownEnabled = manager.getBoolean("lobby.enabled");
|
||||||
|
|
||||||
|
//SeekerPing
|
||||||
|
seekerPing = manager.getBoolean("seekerPing.enabled");
|
||||||
|
seekerPingLevel1 = manager.getInt("seekerPing.distances.level1");
|
||||||
|
seekerPingLevel2 = manager.getInt("seekerPing.distances.level2");
|
||||||
|
seekerPingLevel3 = manager.getInt("seekerPing.distances.level3");
|
||||||
|
|
||||||
//Other
|
//Other
|
||||||
nametagsVisible = manager.getBoolean("nametagsVisible");
|
nametagsVisible = manager.getBoolean("nametagsVisible");
|
||||||
permissionsRequired = manager.getBoolean("permissionsRequired");
|
permissionsRequired = manager.getBoolean("permissionsRequired");
|
||||||
|
@ -160,7 +171,7 @@ public class Config {
|
||||||
pvpEnabled = manager.getBoolean("pvp");
|
pvpEnabled = manager.getBoolean("pvp");
|
||||||
autoJoin = manager.getBoolean("autoJoin");
|
autoJoin = manager.getBoolean("autoJoin");
|
||||||
teleportToExit = manager.getBoolean("teleportToExit");
|
teleportToExit = manager.getBoolean("teleportToExit");
|
||||||
local = manager.getString("local");
|
locale = manager.getString("locale", "local");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addToConfig(String path, Object value) {
|
public static void addToConfig(String path, Object value) {
|
||||||
|
|
|
@ -130,6 +130,20 @@ 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 void reset(String path){
|
public void reset(String path){
|
||||||
config.set(path, defaultConfig.get(path));
|
config.set(path, defaultConfig.get(path));
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,13 @@
|
||||||
|
|
||||||
package net.tylermurphy.hideAndSeek.configuration;
|
package net.tylermurphy.hideAndSeek.configuration;
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XEnchantment;
|
||||||
|
import com.cryptomorin.xseries.XMaterial;
|
||||||
|
import com.cryptomorin.xseries.XPotion;
|
||||||
|
import net.tylermurphy.hideAndSeek.util.Version;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
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.enchantments.Enchantment;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
@ -63,7 +67,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;
|
||||||
|
@ -91,18 +94,22 @@ public class Items {
|
||||||
private static ItemStack createItem(ConfigurationSection item) {
|
private static ItemStack createItem(ConfigurationSection item) {
|
||||||
String material_string = item.getString("material");
|
String material_string = item.getString("material");
|
||||||
if(material_string == null) return null;
|
if(material_string == null) return null;
|
||||||
Material material = Material.valueOf(material_string.toUpperCase());
|
if(!XMaterial.matchXMaterial(material_string.toUpperCase()).isPresent()) return null;
|
||||||
|
Material material = XMaterial.matchXMaterial(material_string.toUpperCase()).get().parseMaterial();
|
||||||
int amount = item.getInt("amount");
|
int amount = item.getInt("amount");
|
||||||
|
if(material == null) return null;
|
||||||
ItemStack stack = new ItemStack(material, amount);
|
ItemStack stack = new ItemStack(material, amount);
|
||||||
if(material == Material.POTION || material == Material.SPLASH_POTION || material == Material.LINGERING_POTION){
|
if(material == XMaterial.POTION.parseMaterial() || material == XMaterial.SPLASH_POTION.parseMaterial() || material == XMaterial.LINGERING_POTION.parseMaterial()){
|
||||||
PotionMeta meta = getPotionMeta(stack, item);
|
PotionMeta meta = getPotionMeta(stack, item);
|
||||||
|
if(meta == null) return null;
|
||||||
stack.setItemMeta(meta);
|
stack.setItemMeta(meta);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ConfigurationSection enchantments = item.getConfigurationSection("enchantments");
|
ConfigurationSection enchantments = item.getConfigurationSection("enchantments");
|
||||||
if (enchantments != null)
|
if (enchantments != null)
|
||||||
for (String enchantment_string : enchantments.getKeys(false)) {
|
for (String enchantment_string : enchantments.getKeys(false)) {
|
||||||
Enchantment enchantment = Enchantment.getByKey(NamespacedKey.minecraft(enchantment_string));
|
if(!XEnchantment.matchXEnchantment(enchantment_string).isPresent()) continue;
|
||||||
|
Enchantment enchantment = XEnchantment.matchXEnchantment(enchantment_string).get().getEnchant();
|
||||||
if (enchantment == null) continue;
|
if (enchantment == null) continue;
|
||||||
stack.addUnsafeEnchantment(
|
stack.addUnsafeEnchantment(
|
||||||
enchantment,
|
enchantment,
|
||||||
|
@ -121,23 +128,38 @@ public class Items {
|
||||||
String name = item.getString("name");
|
String name = item.getString("name");
|
||||||
if(name != null)
|
if(name != null)
|
||||||
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name));
|
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name));
|
||||||
|
if(Version.atLeast("1.11")){
|
||||||
meta.setUnbreakable(item.getBoolean("unbreakable"));
|
meta.setUnbreakable(item.getBoolean("unbreakable"));
|
||||||
|
} else {
|
||||||
|
meta.spigot().setUnbreakable(true);
|
||||||
|
}
|
||||||
meta.setLore(item.getStringList("lore"));
|
meta.setLore(item.getStringList("lore"));
|
||||||
return meta;
|
return meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PotionMeta getPotionMeta(ItemStack stack, ConfigurationSection item){
|
private static PotionMeta getPotionMeta(ItemStack stack, ConfigurationSection item) {
|
||||||
String type = item.getString("type");
|
String type = item.getString("type");
|
||||||
PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||||
if(type==null) return meta;
|
if(type==null) return meta;
|
||||||
assert meta != null;
|
assert meta != null;
|
||||||
meta.setBasePotionData(new PotionData((PotionType.valueOf(type.toUpperCase()))));
|
XPotion.Effect potionEffect = XPotion.parseEffect(type.toUpperCase());
|
||||||
|
if(potionEffect == null) return null;
|
||||||
|
XPotion xpotion = potionEffect.getXPotion();
|
||||||
|
if(xpotion == null) return null;
|
||||||
|
PotionEffectType potionType = xpotion.getPotionEffectType();
|
||||||
|
if(potionType == null) return null;
|
||||||
|
if(Version.atLeast("1.9")) {
|
||||||
|
meta.setBasePotionData(new PotionData(xpotion.getPotionType()));
|
||||||
|
} else {
|
||||||
|
meta.setMainEffect(potionType);
|
||||||
|
}
|
||||||
return meta;
|
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"),
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class Localization {
|
||||||
|
|
||||||
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"+File.separator+"localization_"+Config.locale +".yml");
|
||||||
|
|
||||||
int PLUGIN_VERSION = 2;
|
int PLUGIN_VERSION = 2;
|
||||||
int VERSION = manager.getInt("version");
|
int VERSION = manager.getInt("version");
|
||||||
|
@ -50,8 +50,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();
|
||||||
|
|
|
@ -68,6 +68,13 @@ public class Database {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void init(){
|
public static void init(){
|
||||||
|
try {
|
||||||
|
Class.forName("org.sqlite.JDBC");
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
Main.plugin.getLogger().severe("Unable to load SQLite driver!");
|
||||||
|
System.exit(-1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
playerInfo = new PlayerInfoTable();
|
playerInfo = new PlayerInfoTable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ 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;
|
||||||
|
@ -275,8 +276,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;
|
||||||
|
if(Version.atLeast("1.13")){
|
||||||
this.obj = board.registerNewObjective(
|
this.obj = board.registerNewObjective(
|
||||||
"Scoreboard", "dummy", ChatColor.translateAlternateColorCodes('&', title));
|
"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,6 +303,7 @@ 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(Version.atLeast("1.9")){
|
||||||
if(nametagsVisible) {
|
if(nametagsVisible) {
|
||||||
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);
|
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);
|
||||||
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OTHER_TEAMS);
|
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OTHER_TEAMS);
|
||||||
|
@ -304,8 +311,22 @@ class CustomBoard {
|
||||||
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
|
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
|
||||||
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
|
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if(nametagsVisible) {
|
||||||
|
hiderTeam.setNameTagVisibility(NameTagVisibility.HIDE_FOR_OTHER_TEAMS);
|
||||||
|
seekerTeam.setNameTagVisibility(NameTagVisibility.HIDE_FOR_OWN_TEAM);
|
||||||
|
} else {
|
||||||
|
hiderTeam.setNameTagVisibility(NameTagVisibility.NEVER);
|
||||||
|
seekerTeam.setNameTagVisibility(NameTagVisibility.NEVER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(Version.atLeast("1.12")){
|
||||||
hiderTeam.setColor(ChatColor.GOLD);
|
hiderTeam.setColor(ChatColor.GOLD);
|
||||||
seekerTeam.setColor(ChatColor.RED);
|
seekerTeam.setColor(ChatColor.RED);
|
||||||
|
} else {
|
||||||
|
hiderTeam.setPrefix(ChatColor.translateAlternateColorCodes('&', "&6"));
|
||||||
|
seekerTeam.setPrefix(ChatColor.translateAlternateColorCodes('&', "&c"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLine(String key, String message){
|
public void setLine(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;
|
||||||
|
@ -178,16 +181,23 @@ public class EventListener implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (player.getHealth() - event.getDamage() < 0 || !pvpEnabled) {
|
if (player.getHealth() - event.getFinalDamage() < 0 || !pvpEnabled) {
|
||||||
if (spawnPosition == null) return;
|
if (spawnPosition == null) return;
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
if(Version.atLeast("1.9")) {
|
||||||
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
|
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
|
||||||
if(attribute != null)
|
if (attribute != null) player.setHealth(attribute.getValue());
|
||||||
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 +227,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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,11 @@ 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);
|
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,10 +157,12 @@ 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));
|
||||||
|
if(Version.atLeast("1.9")){
|
||||||
for(Player temp : Board.getPlayers()) {
|
for(Player temp : Board.getPlayers()) {
|
||||||
Packet.setGlow(player, temp, false);
|
Packet.setGlow(player, temp, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
EventListener.temp_loc.clear();
|
EventListener.temp_loc.clear();
|
||||||
worldLoader.unloadMap();
|
worldLoader.unloadMap();
|
||||||
Board.reloadLobbyBoards();
|
Board.reloadLobbyBoards();
|
||||||
|
@ -207,7 +213,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 +245,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){
|
||||||
|
@ -296,20 +308,36 @@ public class Game {
|
||||||
distance = temp;
|
distance = temp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch(tick%10) {
|
// if(seekerPing) switch(tick%10) {
|
||||||
|
// case 0:
|
||||||
|
// if(distance < seekerPingLevel1) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_BASEDRUM.parseSound(), .5f, 1f);
|
||||||
|
// if(distance < seekerPingLevel3) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_PLING.parseSound(), .3f, 1f);
|
||||||
|
// break;
|
||||||
|
// case 3:
|
||||||
|
// if(distance < seekerPingLevel1) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_BASEDRUM.parseSound(), .3f, 1f);
|
||||||
|
// if(distance < seekerPingLevel3) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_PLING.parseSound(), .3f, 1f);
|
||||||
|
// break;
|
||||||
|
// case 6:
|
||||||
|
// if(distance < seekerPingLevel3) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_PLING.parseSound(), .3f, 1f);
|
||||||
|
// break;
|
||||||
|
// case 9:
|
||||||
|
// if(distance < seekerPingLevel2) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_PLING.parseSound(), .3f, 1f);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,8 @@ package net.tylermurphy.hideAndSeek.util;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
|
import net.tylermurphy.hideAndSeek.util.protocollib.WrapperPlayServerNamedSoundEffect;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
@ -38,19 +40,15 @@ 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) {
|
public static void playSound(Player player, Sound sound, float volume, float pitch) {
|
||||||
PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.NAMED_SOUND_EFFECT);
|
WrapperPlayServerNamedSoundEffect packet = new WrapperPlayServerNamedSoundEffect();
|
||||||
packet.getSoundCategories().write(0, SoundCategory.MASTER);
|
packet.setSoundCategory(SoundCategory.MASTER);
|
||||||
packet.getSoundEffects().write(0, sound);
|
packet.setSoundEffect(sound);
|
||||||
packet.getIntegers().write(0, (int)(player.getLocation().getX() * 8.0));
|
packet.setEffectPositionX((int)(player.getLocation().getX() * 8.0));
|
||||||
packet.getIntegers().write(1, (int)(player.getLocation().getY() * 8.0));
|
packet.setEffectPositionY((int)(player.getLocation().getY() * 8.0));
|
||||||
packet.getIntegers().write(2, (int)(player.getLocation().getZ() * 8.0));
|
packet.setEffectPositionZ((int)(player.getLocation().getZ() * 8.0));
|
||||||
packet.getFloat().write(0, volume);
|
packet.setPitch(pitch);
|
||||||
packet.getFloat().write(1, pitch);
|
packet.setVolume(volume);
|
||||||
try {
|
packet.sendPacket(player);
|
||||||
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) {
|
||||||
|
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,115 @@
|
||||||
|
/**
|
||||||
|
* PacketWrapper - ProtocolLib wrappers for Minecraft packets
|
||||||
|
* Copyright (C) dmulloy2 <http://dmulloy2.net>
|
||||||
|
* Copyright (C) Kristian S. Strangeland
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.tylermurphy.hideAndSeek.util.protocollib;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.PacketType;
|
||||||
|
import com.comphenix.protocol.ProtocolLibrary;
|
||||||
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
|
import com.google.common.base.Objects;
|
||||||
|
|
||||||
|
public abstract class AbstractPacket {
|
||||||
|
// The packet we will be modifying
|
||||||
|
protected PacketContainer handle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new strongly typed wrapper for the given packet.
|
||||||
|
*
|
||||||
|
* @param handle - handle to the raw packet data.
|
||||||
|
* @param type - the packet type.
|
||||||
|
*/
|
||||||
|
protected AbstractPacket(PacketContainer handle, PacketType type) {
|
||||||
|
// Make sure we're given a valid packet
|
||||||
|
if (handle == null)
|
||||||
|
throw new IllegalArgumentException("Packet handle cannot be NULL.");
|
||||||
|
if (!Objects.equal(handle.getType(), type))
|
||||||
|
throw new IllegalArgumentException(handle.getHandle()
|
||||||
|
+ " is not a packet of type " + type);
|
||||||
|
|
||||||
|
this.handle = handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve a handle to the raw packet data.
|
||||||
|
*
|
||||||
|
* @return Raw packet data.
|
||||||
|
*/
|
||||||
|
public PacketContainer getHandle() {
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send the current packet to the given receiver.
|
||||||
|
*
|
||||||
|
* @param receiver - the receiver.
|
||||||
|
* @throws RuntimeException If the packet cannot be sent.
|
||||||
|
*/
|
||||||
|
public void sendPacket(Player receiver) {
|
||||||
|
try {
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(receiver,
|
||||||
|
getHandle());
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
throw new RuntimeException("Cannot send packet.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send the current packet to all online players.
|
||||||
|
*/
|
||||||
|
public void broadcastPacket() {
|
||||||
|
ProtocolLibrary.getProtocolManager().broadcastServerPacket(getHandle());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simulate receiving the current packet from the given sender.
|
||||||
|
*
|
||||||
|
* @param sender - the sender.
|
||||||
|
* @throws RuntimeException If the packet cannot be received.
|
||||||
|
* @deprecated Misspelled. recieve to receive
|
||||||
|
* @see #receivePacket(Player)
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public void recievePacket(Player sender) {
|
||||||
|
try {
|
||||||
|
ProtocolLibrary.getProtocolManager().recieveClientPacket(sender,
|
||||||
|
getHandle());
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("Cannot recieve packet.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simulate receiving the current packet from the given sender.
|
||||||
|
*
|
||||||
|
* @param sender - the sender.
|
||||||
|
* @throws RuntimeException if the packet cannot be received.
|
||||||
|
*/
|
||||||
|
public void receivePacket(Player sender) {
|
||||||
|
try {
|
||||||
|
ProtocolLibrary.getProtocolManager().recieveClientPacket(sender,
|
||||||
|
getHandle());
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("Cannot receive packet.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,158 @@
|
||||||
|
/**
|
||||||
|
* PacketWrapper - ProtocolLib wrappers for Minecraft packets
|
||||||
|
* Copyright (C) dmulloy2 <http://dmulloy2.net>
|
||||||
|
* Copyright (C) Kristian S. Strangeland
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.tylermurphy.hideAndSeek.util.protocollib;
|
||||||
|
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.PacketType;
|
||||||
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
|
import com.comphenix.protocol.wrappers.EnumWrappers.SoundCategory;
|
||||||
|
|
||||||
|
public class WrapperPlayServerNamedSoundEffect extends AbstractPacket {
|
||||||
|
public static final PacketType TYPE =
|
||||||
|
PacketType.Play.Server.NAMED_SOUND_EFFECT;
|
||||||
|
|
||||||
|
public WrapperPlayServerNamedSoundEffect() {
|
||||||
|
super(new PacketContainer(TYPE), TYPE);
|
||||||
|
handle.getModifier().writeDefaults();
|
||||||
|
}
|
||||||
|
|
||||||
|
public WrapperPlayServerNamedSoundEffect(PacketContainer packet) {
|
||||||
|
super(packet, TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sound getSoundEffect() {
|
||||||
|
return handle.getSoundEffects().read(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSoundEffect(Sound value) {
|
||||||
|
handle.getSoundEffects().write(0, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SoundCategory getSoundCategory() {
|
||||||
|
return handle.getSoundCategories().read(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSoundCategory(SoundCategory value) {
|
||||||
|
handle.getSoundCategories().write(0, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Effect position X.
|
||||||
|
* <p>
|
||||||
|
* Notes: effect X multiplied by 8
|
||||||
|
*
|
||||||
|
* @return The current Effect position X
|
||||||
|
*/
|
||||||
|
public int getEffectPositionX() {
|
||||||
|
return handle.getIntegers().read(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Effect position X.
|
||||||
|
*
|
||||||
|
* @param value - new value.
|
||||||
|
*/
|
||||||
|
public void setEffectPositionX(int value) {
|
||||||
|
handle.getIntegers().write(0, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Effect position Y.
|
||||||
|
* <p>
|
||||||
|
* Notes: effect Y multiplied by 8
|
||||||
|
*
|
||||||
|
* @return The current Effect position Y
|
||||||
|
*/
|
||||||
|
public int getEffectPositionY() {
|
||||||
|
return handle.getIntegers().read(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Effect position Y.
|
||||||
|
*
|
||||||
|
* @param value - new value.
|
||||||
|
*/
|
||||||
|
public void setEffectPositionY(int value) {
|
||||||
|
handle.getIntegers().write(1, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Effect position Z.
|
||||||
|
* <p>
|
||||||
|
* Notes: effect Z multiplied by 8
|
||||||
|
*
|
||||||
|
* @return The current Effect position Z
|
||||||
|
*/
|
||||||
|
public int getEffectPositionZ() {
|
||||||
|
return handle.getIntegers().read(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Effect position Z.
|
||||||
|
*
|
||||||
|
* @param value - new value.
|
||||||
|
*/
|
||||||
|
public void setEffectPositionZ(int value) {
|
||||||
|
handle.getIntegers().write(2, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Volume.
|
||||||
|
* <p>
|
||||||
|
* Notes: 1 is 100%, can be more
|
||||||
|
*
|
||||||
|
* @return The current Volume
|
||||||
|
*/
|
||||||
|
public float getVolume() {
|
||||||
|
return handle.getFloat().read(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Volume.
|
||||||
|
*
|
||||||
|
* @param value - new value.
|
||||||
|
*/
|
||||||
|
public void setVolume(float value) {
|
||||||
|
handle.getFloat().write(0, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Pitch.
|
||||||
|
* <p>
|
||||||
|
* Notes: 63 is 100%, can be more
|
||||||
|
*
|
||||||
|
* @return The current Pitch
|
||||||
|
*/
|
||||||
|
public float getPitch() {
|
||||||
|
return handle.getFloat().read(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Pitch.
|
||||||
|
*
|
||||||
|
* @param value - new value.
|
||||||
|
*/
|
||||||
|
public void setPitch(float value) {
|
||||||
|
handle.getFloat().write(1, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,10 +90,20 @@ 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"
|
||||||
|
|
||||||
# ---------------------------------------------------------- #
|
# ---------------------------------------------------------- #
|
||||||
# ONLY EDIT BEYOND THIS POINT IF YOU KNOW WHAT YOU ARE DOING #
|
# ONLY EDIT BEYOND THIS POINT IF YOU KNOW WHAT YOU ARE DOING #
|
||||||
|
|
|
@ -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