custom model data, custom glow item, custom seeker ping
This commit is contained in:
parent
590ab6c0e8
commit
1005d4a8d8
5 changed files with 83 additions and 52 deletions
|
@ -21,6 +21,7 @@ package net.tylermurphy.hideAndSeek.configuration;
|
||||||
|
|
||||||
import com.cryptomorin.xseries.XItemStack;
|
import com.cryptomorin.xseries.XItemStack;
|
||||||
import com.cryptomorin.xseries.XMaterial;
|
import com.cryptomorin.xseries.XMaterial;
|
||||||
|
import com.cryptomorin.xseries.XSound;
|
||||||
import net.tylermurphy.hideAndSeek.util.Version;
|
import net.tylermurphy.hideAndSeek.util.Version;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
@ -100,6 +101,11 @@ public class Config {
|
||||||
lobbyItemLeavePosition,
|
lobbyItemLeavePosition,
|
||||||
lobbyItemStartPosition;
|
lobbyItemStartPosition;
|
||||||
|
|
||||||
|
public static float
|
||||||
|
seekerPingLeadingVolume,
|
||||||
|
seekerPingVolume,
|
||||||
|
seekerPingPitch;
|
||||||
|
|
||||||
public static List<String>
|
public static List<String>
|
||||||
blockedCommands,
|
blockedCommands,
|
||||||
blockedInteracts;
|
blockedInteracts;
|
||||||
|
@ -124,7 +130,12 @@ public class Config {
|
||||||
|
|
||||||
public static ItemStack
|
public static ItemStack
|
||||||
lobbyLeaveItem,
|
lobbyLeaveItem,
|
||||||
lobbyStartItem;
|
lobbyStartItem,
|
||||||
|
glowPowerupItem;
|
||||||
|
|
||||||
|
public static XSound
|
||||||
|
ringingSound,
|
||||||
|
heartbeatSound;
|
||||||
|
|
||||||
public static void loadConfig() {
|
public static void loadConfig() {
|
||||||
|
|
||||||
|
@ -196,6 +207,16 @@ public class Config {
|
||||||
glowLength = Math.max(1, config.getInt("glow.time"));
|
glowLength = Math.max(1, config.getInt("glow.time"));
|
||||||
glowStackable = config.getBoolean("glow.stackable");
|
glowStackable = config.getBoolean("glow.stackable");
|
||||||
glowEnabled = config.getBoolean("glow.enabled") && Version.atLeast("1.9");
|
glowEnabled = config.getBoolean("glow.enabled") && Version.atLeast("1.9");
|
||||||
|
if(glowEnabled) {
|
||||||
|
ConfigurationSection item = new YamlConfiguration().createSection("temp");
|
||||||
|
item.set("name", ChatColor.translateAlternateColorCodes('&',config.getString("glow.name")));
|
||||||
|
item.set("material", config.getString("glow.material"));
|
||||||
|
List<String> lore = config.getStringList("glow.lore");
|
||||||
|
if (lore != null && !lore.isEmpty()) item.set("lore", lore);
|
||||||
|
ItemStack temp = null;
|
||||||
|
try{ temp = XItemStack.deserialize(item); } catch(Exception ignored){}
|
||||||
|
glowPowerupItem = temp;
|
||||||
|
}
|
||||||
|
|
||||||
//Lobby
|
//Lobby
|
||||||
minPlayers = Math.max(2, config.getInt("minPlayers"));
|
minPlayers = Math.max(2, config.getInt("minPlayers"));
|
||||||
|
@ -210,6 +231,13 @@ public class Config {
|
||||||
seekerPingLevel1 = config.getInt("seekerPing.distances.level1");
|
seekerPingLevel1 = config.getInt("seekerPing.distances.level1");
|
||||||
seekerPingLevel2 = config.getInt("seekerPing.distances.level2");
|
seekerPingLevel2 = config.getInt("seekerPing.distances.level2");
|
||||||
seekerPingLevel3 = config.getInt("seekerPing.distances.level3");
|
seekerPingLevel3 = config.getInt("seekerPing.distances.level3");
|
||||||
|
seekerPingLeadingVolume = config.getFloat("seekerPing.sounds.leadingVolume");
|
||||||
|
seekerPingVolume = config.getFloat("seekerPing.sounds.volume");
|
||||||
|
seekerPingPitch = config.getFloat("seekerPing.sounds.pitch");
|
||||||
|
Optional<XSound> heartbeatOptional = XSound.matchXSound(config.getString("seekerPing.sounds.heartbeatNoise"));
|
||||||
|
heartbeatSound = heartbeatOptional.orElse(XSound.BLOCK_NOTE_BLOCK_BASEDRUM);
|
||||||
|
Optional<XSound> ringingOptional = XSound.matchXSound(config.getString("seekerPing.sounds.ringingNoise"));
|
||||||
|
ringingSound = heartbeatOptional.orElse(XSound.BLOCK_NOTE_BLOCK_PLING);
|
||||||
|
|
||||||
//Other
|
//Other
|
||||||
nametagsVisible = config.getBoolean("nametagsVisible");
|
nametagsVisible = config.getBoolean("nametagsVisible");
|
||||||
|
@ -259,7 +287,7 @@ public class Config {
|
||||||
item.set("name", ChatColor.translateAlternateColorCodes('&',config.getString("lobbyItems.leave.name")));
|
item.set("name", ChatColor.translateAlternateColorCodes('&',config.getString("lobbyItems.leave.name")));
|
||||||
item.set("material", config.getString("lobbyItems.leave.material"));
|
item.set("material", config.getString("lobbyItems.leave.material"));
|
||||||
if(Version.atLeast("1.14")){
|
if(Version.atLeast("1.14")){
|
||||||
if(config.contains("lobbyItems.leave.model-data")){
|
if(config.contains("lobbyItems.leave.model-data") && config.getInt("lobbyItems.leave.model-data") != 0){
|
||||||
config.set("model-data", config.getInt("lobbyItems.leave.model-data"));
|
config.set("model-data", config.getInt("lobbyItems.leave.model-data"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -282,7 +310,7 @@ public class Config {
|
||||||
lobbyItemStartAdmin = config.getBoolean("lobbyItems.start.adminOnly");
|
lobbyItemStartAdmin = config.getBoolean("lobbyItems.start.adminOnly");
|
||||||
lobbyItemStartPosition = config.getInt("lobbyItems.start.position");
|
lobbyItemStartPosition = config.getInt("lobbyItems.start.position");
|
||||||
if(Version.atLeast("1.14")){
|
if(Version.atLeast("1.14")){
|
||||||
if(config.contains("lobbyItems.start.model-data")){
|
if(config.contains("lobbyItems.start.model-data") && config.getInt("lobbyItems.start.model-data") != 0){
|
||||||
config.set("model-data", config.getInt("lobbyItems.start.model-data"));
|
config.set("model-data", config.getInt("lobbyItems.start.model-data"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,6 +130,15 @@ public class ConfigManager {
|
||||||
return defaultConfig.getInt(path);
|
return defaultConfig.getInt(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float getFloat(String path){
|
||||||
|
float value = (float) config.getDouble(path);
|
||||||
|
if(value == 0){
|
||||||
|
return (float) defaultConfig.getDouble(path);
|
||||||
|
} else {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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){
|
||||||
|
|
|
@ -32,7 +32,6 @@ import org.bukkit.attribute.AttributeInstance;
|
||||||
import org.bukkit.entity.Arrow;
|
import org.bukkit.entity.Arrow;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Snowball;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
@ -42,7 +41,6 @@ import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.event.player.*;
|
import org.bukkit.event.player.*;
|
||||||
|
|
||||||
import org.bukkit.inventory.EquipmentSlot;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.projectiles.ProjectileSource;
|
import org.bukkit.projectiles.ProjectileSource;
|
||||||
|
@ -239,24 +237,6 @@ public class EventListener implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
|
||||||
public void onProjectile(ProjectileLaunchEvent event) {
|
|
||||||
if(Game.status != Status.PLAYING) return;
|
|
||||||
if(event.getEntity() instanceof Snowball) {
|
|
||||||
if(!glowEnabled) return;
|
|
||||||
Snowball snowball = (Snowball) event.getEntity();
|
|
||||||
if(snowball.getShooter() instanceof Player) {
|
|
||||||
Player player = (Player) snowball.getShooter();
|
|
||||||
if(Board.isHider(player)) {
|
|
||||||
Game.glow.onProjectile();
|
|
||||||
snowball.remove();
|
|
||||||
assert XMaterial.SNOWBALL.parseMaterial() != null;
|
|
||||||
player.getInventory().remove(XMaterial.SNOWBALL.parseMaterial());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onFoodLevelChange(FoodLevelChangeEvent event) {
|
public void onFoodLevelChange(FoodLevelChangeEvent event) {
|
||||||
if(event.getEntity() instanceof Player) {
|
if(event.getEntity() instanceof Player) {
|
||||||
|
@ -297,18 +277,19 @@ public class EventListener implements Listener {
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||||
if(!Board.isPlayer(event.getPlayer())) return;
|
if(!Board.isPlayer(event.getPlayer())) return;
|
||||||
|
|
||||||
if(event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock() != null && blockedInteracts.contains(event.getClickedBlock().getType().name())){
|
if(event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock() != null && blockedInteracts.contains(event.getClickedBlock().getType().name())){
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Game.status != Status.STANDBY) return;
|
|
||||||
|
|
||||||
|
|
||||||
ItemStack temp = event.getItem();
|
ItemStack temp = event.getItem();
|
||||||
if(temp == null) return;
|
if(temp == null) return;
|
||||||
|
if(Game.status == Status.STANDBY)
|
||||||
|
onPlayerInteractLobby(temp, event);
|
||||||
|
if(Game.status == Status.PLAYING)
|
||||||
|
onPlayerInteractGame(temp, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onPlayerInteractLobby(ItemStack temp, PlayerInteractEvent event){
|
||||||
if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(lobbyLeaveItem.getItemMeta().getDisplayName()) && temp.getType() == lobbyLeaveItem.getType()) {
|
if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(lobbyLeaveItem.getItemMeta().getDisplayName()) && temp.getType() == lobbyLeaveItem.getType()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
Game.leave(event.getPlayer());
|
Game.leave(event.getPlayer());
|
||||||
|
@ -330,7 +311,20 @@ public class EventListener implements Listener {
|
||||||
}
|
}
|
||||||
Game.start();
|
Game.start();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onPlayerInteractGame(ItemStack temp, PlayerInteractEvent event){
|
||||||
|
if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(glowPowerupItem.getItemMeta().getDisplayName()) && temp.getType() == glowPowerupItem.getType()) {
|
||||||
|
if(!glowEnabled) return;
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if(Board.isHider(player)) {
|
||||||
|
Game.glow.onProjectile();
|
||||||
|
player.getInventory().remove(glowPowerupItem);
|
||||||
|
assert XMaterial.SNOWBALL.parseMaterial() != null;
|
||||||
|
player.getInventory().remove(XMaterial.SNOWBALL.parseMaterial());
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
@ -344,9 +338,8 @@ public class EventListener implements Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onItemDrop(PlayerDropItemEvent event)
|
public void onItemDrop(PlayerDropItemEvent event) {
|
||||||
{
|
if(Board.isPlayer(event.getPlayer())){
|
||||||
if(Board.isPlayer(event.getPlayer()) && Game.status == Status.STANDBY){
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -273,18 +273,7 @@ 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) {
|
||||||
assert XMaterial.SNOWBALL.parseMaterial() != null;
|
player.getInventory().addItem(glowPowerupItem);
|
||||||
ItemStack snowball = new ItemStack(XMaterial.SNOWBALL.parseMaterial(), 1);
|
|
||||||
ItemMeta snowballMeta = snowball.getItemMeta();
|
|
||||||
assert snowballMeta != null;
|
|
||||||
snowballMeta.setDisplayName("Glow Powerup");
|
|
||||||
List<String> snowballLore = new ArrayList<>();
|
|
||||||
snowballLore.add("Throw to make all seekers glow");
|
|
||||||
snowballLore.add("Last 30s, all hiders can see it");
|
|
||||||
snowballLore.add("Time stacks on multi use");
|
|
||||||
snowballMeta.setLore(snowballLore);
|
|
||||||
snowball.setItemMeta(snowballMeta);
|
|
||||||
player.getInventory().addItem(snowball);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -391,18 +380,18 @@ public class Game {
|
||||||
}
|
}
|
||||||
if(seekerPing) switch(tick%10) {
|
if(seekerPing) switch(tick%10) {
|
||||||
case 0:
|
case 0:
|
||||||
if(distance < seekerPingLevel1) XSound.BLOCK_NOTE_BLOCK_BASEDRUM.play(hider, .5f, 1f);
|
if(distance < seekerPingLevel1) heartbeatSound.play(hider, seekerPingLeadingVolume, seekerPingPitch);
|
||||||
if(distance < seekerPingLevel3) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
|
if(distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if(distance < seekerPingLevel1) XSound.BLOCK_NOTE_BLOCK_BASEDRUM.play(hider, .3f, 1f);
|
if(distance < seekerPingLevel1) heartbeatSound.play(hider, seekerPingVolume, seekerPingPitch);
|
||||||
if(distance < seekerPingLevel3) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
|
if(distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
if(distance < seekerPingLevel3) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
|
if(distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
if(distance < seekerPingLevel2) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
|
if(distance < seekerPingLevel2) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,6 +99,9 @@ glow:
|
||||||
time: 30
|
time: 30
|
||||||
stackable: true
|
stackable: true
|
||||||
enabled: true
|
enabled: true
|
||||||
|
name: "Glow Powerup"
|
||||||
|
lore: [ "Throw to make all seekers glow", "Last 30s, all hiders can see it", "Time stacks on multi use" ]
|
||||||
|
material: SNOWBALL
|
||||||
|
|
||||||
# The message prefixes displayed before messages. The message contents themselves
|
# The message prefixes displayed before messages. The message contents themselves
|
||||||
# can be changed in localization.yml.
|
# can be changed in localization.yml.
|
||||||
|
@ -124,21 +127,24 @@ lobby:
|
||||||
|
|
||||||
# Below are the two items given to you when you join a lobby. A item to click to leave the lobby, and another
|
# Below are the two items given to you when you join a lobby. A item to click to leave the lobby, and another
|
||||||
# to start the game. Each of these items can be toggled separately, but only these items are currently supported.
|
# to start the game. Each of these items can be toggled separately, but only these items are currently supported.
|
||||||
# You can customize the material, name, lore, and position of the item. And finally, the start item is marked as
|
# You can customize the material, name, lore, and position of the item. You can also change the model data if your
|
||||||
# adminOnly be default since the /hs start command is also admin by default. If you set adminOnly to false, only
|
# server is running 1.14 or above. Any earlier version, the model-data tag will be ignored; Model-data 0 is also ignored.
|
||||||
# the item will become non admin only, not the command.
|
# Finally, the start item is marked as adminOnly be default since the /hs start command is also admin by default.
|
||||||
|
# If you set adminOnly to false, only the item will become non admin only, not the command.
|
||||||
lobbyItems:
|
lobbyItems:
|
||||||
leave:
|
leave:
|
||||||
material: BED
|
material: BED
|
||||||
name: "&cLeave Lobby"
|
name: "&cLeave Lobby"
|
||||||
lore: ["Go back to server hub"]
|
lore: ["Go back to server hub"]
|
||||||
position: 8
|
position: 8
|
||||||
|
model-data: 0
|
||||||
enabled: true
|
enabled: true
|
||||||
start:
|
start:
|
||||||
material: CLOCK
|
material: CLOCK
|
||||||
name: "&bStart Game"
|
name: "&bStart Game"
|
||||||
lore: []
|
lore: []
|
||||||
position: 0
|
position: 0
|
||||||
|
model-data: 0
|
||||||
enabled: true
|
enabled: true
|
||||||
adminOnly: true
|
adminOnly: true
|
||||||
|
|
||||||
|
@ -150,6 +156,12 @@ seekerPing:
|
||||||
level1: 30
|
level1: 30
|
||||||
level2: 20
|
level2: 20
|
||||||
level3: 10
|
level3: 10
|
||||||
|
sounds:
|
||||||
|
leadingVolume: 0.5
|
||||||
|
volume: 0.3
|
||||||
|
pitch: 1
|
||||||
|
heartbeatNoise: BLOCK_NOTE_BLOCK_BASEDRUM
|
||||||
|
ringingNoise: BLOCK_NOTE_BLOCK_PLING
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
# Changes the default plugin language. Currently, Supported localizations are:
|
# Changes the default plugin language. Currently, Supported localizations are:
|
||||||
|
|
Loading…
Reference in a new issue