1.3.1 build 3
This commit is contained in:
parent
3ebb86268a
commit
4188dadbe3
12 changed files with 345 additions and 172 deletions
|
@ -27,7 +27,8 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import net.tylermurphy.hideAndSeek.util.Packet;
|
import net.tylermurphy.hideAndSeek.util.Packet;
|
||||||
import net.tylermurphy.hideAndSeek.util.Util;
|
import net.tylermurphy.hideAndSeek.util.Util;
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
import net.tylermurphy.hideAndSeek.command.Start;
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
||||||
|
|
||||||
public class EventListener implements Listener {
|
public class EventListener implements Listener {
|
||||||
|
@ -52,6 +53,9 @@ public class EventListener implements Listener {
|
||||||
} else {
|
} else {
|
||||||
Main.plugin.board.reloadGameBoards();
|
Main.plugin.board.reloadGameBoards();
|
||||||
}
|
}
|
||||||
|
for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){
|
||||||
|
event.getPlayer().removePotionEffect(effect.getType());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -62,6 +66,9 @@ public class EventListener implements Listener {
|
||||||
} else {
|
} else {
|
||||||
Main.plugin.board.reloadGameBoards();
|
Main.plugin.board.reloadGameBoards();
|
||||||
}
|
}
|
||||||
|
for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){
|
||||||
|
event.getPlayer().removePotionEffect(effect.getType());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
@ -100,7 +107,8 @@ public class EventListener implements Listener {
|
||||||
}
|
}
|
||||||
Main.plugin.board.addSeeker(player);
|
Main.plugin.board.addSeeker(player);
|
||||||
}
|
}
|
||||||
Start.resetPlayer(player);
|
Util.resetPlayer(player);
|
||||||
|
Main.plugin.board.reloadBoardTeams();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,6 +117,7 @@ public class EventListener implements Listener {
|
||||||
public void onProjectile(ProjectileLaunchEvent event) {
|
public void onProjectile(ProjectileLaunchEvent event) {
|
||||||
if(!Main.plugin.status.equals("Playing")) return;
|
if(!Main.plugin.status.equals("Playing")) return;
|
||||||
if(event.getEntity() instanceof Snowball) {
|
if(event.getEntity() instanceof Snowball) {
|
||||||
|
if(!glowEnabled) return;
|
||||||
Snowball snowball = (Snowball) event.getEntity();
|
Snowball snowball = (Snowball) event.getEntity();
|
||||||
if(snowball.getShooter() instanceof Player) {
|
if(snowball.getShooter() instanceof Player) {
|
||||||
Player player = (Player) snowball.getShooter();
|
Player player = (Player) snowball.getShooter();
|
||||||
|
|
|
@ -31,16 +31,19 @@ public class Join implements ICommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Main.plugin.status.equals("Standby")) {
|
if(Main.plugin.status.equals("Standby")) {
|
||||||
|
player.getInventory().clear();
|
||||||
Main.plugin.board.addHider(player);
|
Main.plugin.board.addHider(player);
|
||||||
if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
|
if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
|
||||||
else Util.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
|
else Util.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
|
||||||
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
|
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
|
||||||
player.setGameMode(GameMode.ADVENTURE);
|
player.setGameMode(GameMode.ADVENTURE);
|
||||||
|
Main.plugin.board.createLobbyBoard(player);
|
||||||
Main.plugin.board.reloadLobbyBoards();
|
Main.plugin.board.reloadLobbyBoards();
|
||||||
} else {
|
} else {
|
||||||
Main.plugin.board.addSeeker(player);
|
Main.plugin.board.addSpectator(player);
|
||||||
player.sendMessage(messagePrefix + message("GAME_JOIN_SPECTATOR"));
|
player.sendMessage(messagePrefix + message("GAME_JOIN_SPECTATOR"));
|
||||||
player.setGameMode(GameMode.SPECTATOR);
|
player.setGameMode(GameMode.SPECTATOR);
|
||||||
|
Main.plugin.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()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class Leave implements ICommand {
|
||||||
Main.plugin.board.reloadLobbyBoards();
|
Main.plugin.board.reloadLobbyBoards();
|
||||||
} else {
|
} else {
|
||||||
Main.plugin.board.reloadGameBoards();
|
Main.plugin.board.reloadGameBoards();
|
||||||
|
Main.plugin.board.reloadBoardTeams();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,9 @@ public class Start implements ICommand {
|
||||||
player.sendTitle(ChatColor.GOLD + "" + ChatColor.BOLD + "HIDER", ChatColor.WHITE + message("HIDERS_SUBTITLE").toString(), 10, 70, 20);
|
player.sendTitle(ChatColor.GOLD + "" + ChatColor.BOLD + "HIDER", ChatColor.WHITE + message("HIDERS_SUBTITLE").toString(), 10, 70, 20);
|
||||||
}
|
}
|
||||||
Worldborder.resetWorldborder("hideandseek_"+spawnWorld);
|
Worldborder.resetWorldborder("hideandseek_"+spawnWorld);
|
||||||
|
for(Player player : Main.plugin.board.getPlayers()){
|
||||||
|
Main.plugin.board.createGameBoard(player);
|
||||||
|
}
|
||||||
Main.plugin.board.reloadGameBoards();
|
Main.plugin.board.reloadGameBoards();
|
||||||
Main.plugin.status = "Starting";
|
Main.plugin.status = "Starting";
|
||||||
int temp = Main.plugin.gameId;
|
int temp = Main.plugin.gameId;
|
||||||
|
@ -106,7 +109,7 @@ public class Start implements ICommand {
|
||||||
Util.broadcastMessage(messagePrefix + message("START"));
|
Util.broadcastMessage(messagePrefix + message("START"));
|
||||||
Main.plugin.status = "Playing";
|
Main.plugin.status = "Playing";
|
||||||
for(Player player : Main.plugin.board.getPlayers()) {
|
for(Player player : Main.plugin.board.getPlayers()) {
|
||||||
resetPlayer(player);
|
Util.resetPlayer(player);
|
||||||
}
|
}
|
||||||
Main.plugin.worldborder = null;
|
Main.plugin.worldborder = null;
|
||||||
Main.plugin.taunt = null;
|
Main.plugin.taunt = null;
|
||||||
|
@ -117,10 +120,14 @@ public class Start implements ICommand {
|
||||||
Main.plugin.worldborder.schedule();
|
Main.plugin.worldborder.schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(tauntEnabled) {
|
||||||
Main.plugin.taunt = new Taunt(Main.plugin.gameId);
|
Main.plugin.taunt = new Taunt(Main.plugin.gameId);
|
||||||
Main.plugin.taunt.schedule();
|
Main.plugin.taunt.schedule();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (glowEnabled) {
|
||||||
Main.plugin.glow = new Glow(Main.plugin.gameId);
|
Main.plugin.glow = new Glow(Main.plugin.gameId);
|
||||||
|
}
|
||||||
|
|
||||||
if(gameLength > 0) {
|
if(gameLength > 0) {
|
||||||
Main.plugin.timeLeft = gameLength;
|
Main.plugin.timeLeft = gameLength;
|
||||||
|
@ -130,69 +137,6 @@ public class Start implements ICommand {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void resetPlayer(Player player) {
|
|
||||||
player.getInventory().clear();
|
|
||||||
for(PotionEffect effect : player.getActivePotionEffects()){
|
|
||||||
player.removePotionEffect(effect.getType());
|
|
||||||
}
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.DOLPHINS_GRACE, 1000000, 1, false, false));
|
|
||||||
if(Main.plugin.board.isSeeker(player)){
|
|
||||||
ItemStack diamondSword = new ItemStack(Material.DIAMOND_SWORD,1);
|
|
||||||
diamondSword.addEnchantment(Enchantment.DAMAGE_ALL, 1);
|
|
||||||
ItemMeta diamondSwordMeta = diamondSword.getItemMeta();
|
|
||||||
diamondSwordMeta.setDisplayName("Seeker Sword");
|
|
||||||
diamondSwordMeta.setUnbreakable(true);
|
|
||||||
diamondSword.setItemMeta(diamondSwordMeta);
|
|
||||||
player.getInventory().addItem(diamondSword);
|
|
||||||
|
|
||||||
ItemStack wackyStick = new ItemStack(Material.STICK,1);
|
|
||||||
wackyStick.addUnsafeEnchantment(Enchantment.KNOCKBACK, 3);
|
|
||||||
ItemMeta wackyStickMeta = wackyStick.getItemMeta();
|
|
||||||
wackyStickMeta.setDisplayName("Wacky Stick");
|
|
||||||
wackyStick.setItemMeta(wackyStickMeta);
|
|
||||||
player.getInventory().addItem(wackyStick);
|
|
||||||
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 1000000, 2, false, false));
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 1000000, 1, false, false));
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 1000000, 1, false, false));
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 10, false, false));
|
|
||||||
}
|
|
||||||
else if(Main.plugin.board.isHider(player)){
|
|
||||||
ItemStack stoneSword = new ItemStack(Material.STONE_SWORD,1);
|
|
||||||
stoneSword.addEnchantment(Enchantment.DAMAGE_ALL, 2);
|
|
||||||
ItemMeta stoneSwordMeta = stoneSword.getItemMeta();
|
|
||||||
stoneSwordMeta.setDisplayName("Hider Sword");
|
|
||||||
stoneSwordMeta.setUnbreakable(true);
|
|
||||||
stoneSword.setItemMeta(stoneSwordMeta);
|
|
||||||
player.getInventory().addItem(stoneSword);
|
|
||||||
|
|
||||||
ItemStack splashPotion = new ItemStack(Material.SPLASH_POTION,1);
|
|
||||||
PotionMeta splashPotionMeta = (PotionMeta) splashPotion.getItemMeta();
|
|
||||||
splashPotionMeta.setBasePotionData(new PotionData(PotionType.REGEN));
|
|
||||||
splashPotion.setItemMeta(splashPotionMeta);
|
|
||||||
player.getInventory().addItem(splashPotion);
|
|
||||||
|
|
||||||
ItemStack potion = new ItemStack(Material.POTION,2);
|
|
||||||
PotionMeta potionMeta = (PotionMeta) potion.getItemMeta();
|
|
||||||
potionMeta.setBasePotionData(new PotionData(PotionType.INSTANT_HEAL));
|
|
||||||
potion.setItemMeta(potionMeta);
|
|
||||||
player.getInventory().addItem(potion);
|
|
||||||
|
|
||||||
ItemStack snowball = new ItemStack(Material.SNOWBALL,1);
|
|
||||||
ItemMeta snowballMeta = snowball.getItemMeta();
|
|
||||||
snowballMeta.setDisplayName("Glow Powerup");
|
|
||||||
List<String> snowballLore = new ArrayList<String>();
|
|
||||||
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);
|
|
||||||
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 1, false, false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLabel() {
|
public String getLabel() {
|
||||||
return "start";
|
return "start";
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,8 +45,8 @@ public class Stop implements ICommand {
|
||||||
Main.plugin.timeLeft = 0;
|
Main.plugin.timeLeft = 0;
|
||||||
Worldborder.resetWorldborder("hideandseek_"+spawnWorld);
|
Worldborder.resetWorldborder("hideandseek_"+spawnWorld);
|
||||||
for(Player player : Main.plugin.board.getPlayers()) {
|
for(Player player : Main.plugin.board.getPlayers()) {
|
||||||
|
Main.plugin.board.createLobbyBoard(player);
|
||||||
player.setGameMode(GameMode.ADVENTURE);
|
player.setGameMode(GameMode.ADVENTURE);
|
||||||
player.setLevel(0);
|
|
||||||
Main.plugin.board.addHider(player);
|
Main.plugin.board.addHider(player);
|
||||||
player.getInventory().clear();
|
player.getInventory().clear();
|
||||||
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
|
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
|
||||||
|
|
|
@ -37,7 +37,12 @@ public class Config {
|
||||||
nametagsVisible,
|
nametagsVisible,
|
||||||
permissionsRequired,
|
permissionsRequired,
|
||||||
announceMessagesToNonPlayers,
|
announceMessagesToNonPlayers,
|
||||||
worldborderEnabled;
|
worldborderEnabled,
|
||||||
|
tauntEnabled,
|
||||||
|
tauntCountdown,
|
||||||
|
tauntLast,
|
||||||
|
glowEnabled,
|
||||||
|
glowStackable;
|
||||||
|
|
||||||
public static int
|
public static int
|
||||||
minPlayers,
|
minPlayers,
|
||||||
|
@ -48,11 +53,14 @@ public class Config {
|
||||||
saveMinX,
|
saveMinX,
|
||||||
saveMinZ,
|
saveMinZ,
|
||||||
saveMaxX,
|
saveMaxX,
|
||||||
saveMaxZ;
|
saveMaxZ,
|
||||||
|
tauntDelay,
|
||||||
|
glowLength;
|
||||||
|
|
||||||
public static void loadConfig() {
|
public static void loadConfig() {
|
||||||
|
|
||||||
manager = new ConfigManager("config.yml");
|
manager = new ConfigManager("config.yml");
|
||||||
|
manager.saveConfig();
|
||||||
|
|
||||||
//Spawn
|
//Spawn
|
||||||
spawnPosition = new Vector(
|
spawnPosition = new Vector(
|
||||||
|
@ -91,7 +99,7 @@ public class Config {
|
||||||
|
|
||||||
//Prefix
|
//Prefix
|
||||||
char SYMBOLE = '\u00A7';
|
char SYMBOLE = '\u00A7';
|
||||||
String SYMBOLE_STRING = new String(new char[]{SYMBOLE});
|
String SYMBOLE_STRING = String.valueOf(SYMBOLE);
|
||||||
|
|
||||||
messagePrefix = manager.getString("prefix.default").replace("&", SYMBOLE_STRING);
|
messagePrefix = manager.getString("prefix.default").replace("&", SYMBOLE_STRING);
|
||||||
errorPrefix = manager.getString("prefix.error").replace("&", SYMBOLE_STRING);
|
errorPrefix = manager.getString("prefix.error").replace("&", SYMBOLE_STRING);
|
||||||
|
@ -107,13 +115,22 @@ public class Config {
|
||||||
saveMaxX = manager.getInt("bounds.max.x");
|
saveMaxX = manager.getInt("bounds.max.x");
|
||||||
saveMaxZ = manager.getInt("bounds.max.z");
|
saveMaxZ = manager.getInt("bounds.max.z");
|
||||||
|
|
||||||
|
//Taunt
|
||||||
|
tauntEnabled = manager.getBoolean("taunt.enabled");
|
||||||
|
tauntCountdown = manager.getBoolean("taunt.showCountdown");
|
||||||
|
tauntDelay = Math.max(60,manager.getInt("taunt.delay"));
|
||||||
|
tauntLast = manager.getBoolean("taunt.whenLastPerson");
|
||||||
|
|
||||||
|
//Glow
|
||||||
|
glowLength = Math.max(1,manager.getInt("glow.time"));
|
||||||
|
glowStackable = manager.getBoolean("glow.stackable");
|
||||||
|
glowEnabled = manager.getBoolean("glow.enabled");
|
||||||
|
|
||||||
//Other
|
//Other
|
||||||
nametagsVisible = manager.getBoolean("nametagsVisible");
|
nametagsVisible = manager.getBoolean("nametagsVisible");
|
||||||
permissionsRequired = manager.getBoolean("permissionsRequired");
|
permissionsRequired = manager.getBoolean("permissionsRequired");
|
||||||
minPlayers = Math.max(2, manager.getInt("minPlayers"));
|
minPlayers = Math.max(2, manager.getInt("minPlayers"));
|
||||||
gameLength = manager.getInt("gameLength");
|
gameLength = manager.getInt("gameLength");
|
||||||
|
|
||||||
manager.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addToConfig(String path, Object value) {
|
public static void addToConfig(String path, Object value) {
|
||||||
|
|
|
@ -6,6 +6,8 @@ import org.bukkit.entity.Player;
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
import net.tylermurphy.hideAndSeek.util.Packet;
|
import net.tylermurphy.hideAndSeek.util.Packet;
|
||||||
|
|
||||||
|
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||||
|
|
||||||
public class Glow {
|
public class Glow {
|
||||||
|
|
||||||
private final int temp;
|
private final int temp;
|
||||||
|
@ -18,7 +20,8 @@ public class Glow {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onProjectilve() {
|
public void onProjectilve() {
|
||||||
glowTime++;
|
if(glowStackable) glowTime += glowLength;
|
||||||
|
else glowTime = glowLength;
|
||||||
if(!running)
|
if(!running)
|
||||||
startGlow();
|
startGlow();
|
||||||
}
|
}
|
||||||
|
@ -45,15 +48,20 @@ public class Glow {
|
||||||
waitGlow();
|
waitGlow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 20*30);
|
}, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stopGlow() {
|
private void stopGlow() {
|
||||||
|
running = false;
|
||||||
for(Player hider : Main.plugin.board.getHiders()) {
|
for(Player hider : Main.plugin.board.getHiders()) {
|
||||||
for(Player seeker : Main.plugin.board.getSeekers()) {
|
for (Player seeker : Main.plugin.board.getSeekers()) {
|
||||||
Packet.setGlow(hider, seeker, false);
|
Packet.setGlow(hider, seeker, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isRunning() {
|
||||||
|
return running;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,38 +18,31 @@ public class Taunt {
|
||||||
|
|
||||||
private final int temp;
|
private final int temp;
|
||||||
private String tauntPlayer;
|
private String tauntPlayer;
|
||||||
|
private int delay;
|
||||||
|
private boolean running;
|
||||||
|
|
||||||
public Taunt(int temp) {
|
public Taunt(int temp) {
|
||||||
this.temp = temp;
|
this.temp = temp;
|
||||||
|
this.delay = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void schedule() {
|
public void schedule() {
|
||||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
delay = tauntDelay;
|
||||||
public void run() {
|
waitTaunt();
|
||||||
tryTaunt();
|
|
||||||
}
|
|
||||||
},20*60*5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void waitTaunt() {
|
private void waitTaunt() {
|
||||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
tryTaunt();
|
if(delay == 0) {
|
||||||
}
|
if(!tauntLast && Main.plugin.board.size() < 2) return;
|
||||||
},20*60);
|
else executeTaunt();
|
||||||
}
|
|
||||||
|
|
||||||
private void tryTaunt() {
|
|
||||||
if(temp != Main.plugin.gameId) return;
|
|
||||||
if(Math.random() > .8) {
|
|
||||||
executeTaunt();
|
|
||||||
} else {
|
} else {
|
||||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
delay--;
|
||||||
public void run() {
|
waitTaunt();
|
||||||
tryTaunt();
|
|
||||||
}
|
}
|
||||||
},20*60);
|
|
||||||
}
|
}
|
||||||
|
},20);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void executeTaunt() {
|
private void executeTaunt() {
|
||||||
|
@ -65,6 +58,7 @@ public class Taunt {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(taunted != null) {
|
if(taunted != null) {
|
||||||
|
running = true;
|
||||||
taunted.sendMessage(message("TAUNTED").toString());
|
taunted.sendMessage(message("TAUNTED").toString());
|
||||||
Util.broadcastMessage(tauntPrefix + message("TAUNT"));
|
Util.broadcastMessage(tauntPrefix + message("TAUNT"));
|
||||||
tauntPlayer = taunted.getName();
|
tauntPlayer = taunted.getName();
|
||||||
|
@ -90,12 +84,21 @@ public class Taunt {
|
||||||
Util.broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
|
Util.broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
|
||||||
}
|
}
|
||||||
tauntPlayer = "";
|
tauntPlayer = "";
|
||||||
waitTaunt();
|
running = false;
|
||||||
|
schedule();
|
||||||
}
|
}
|
||||||
},20*30);
|
},20*30);
|
||||||
} else {
|
} else {
|
||||||
waitTaunt();
|
schedule();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getDelay(){
|
||||||
|
return delay;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRunning() {
|
||||||
|
return running;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ public class Board {
|
||||||
|
|
||||||
private List<String> Hider, Seeker, Spectator;
|
private List<String> Hider, Seeker, Spectator;
|
||||||
private Map<String, Player> playerList = new HashMap<String,Player>();
|
private Map<String, Player> playerList = new HashMap<String,Player>();
|
||||||
|
private Map<String, CustomBoard> customBoards = new HashMap<String, CustomBoard>();
|
||||||
|
|
||||||
public boolean isPlayer(Player player) {
|
public boolean isPlayer(Player player) {
|
||||||
return playerList.containsKey(player.getName());
|
return playerList.containsKey(player.getName());
|
||||||
|
@ -146,63 +147,80 @@ public class Board {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createLobbyBoard(Player player) {
|
public void createLobbyBoard(Player player) {
|
||||||
|
createLobbyBoard(player, true);
|
||||||
Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
|
|
||||||
Objective obj = board.registerNewObjective("LobbyScoreboard", "dummy",
|
|
||||||
ChatColor.translateAlternateColorCodes('&', "&l&eHIDE AND SEEK"));
|
|
||||||
createTeamsForBoard(board);
|
|
||||||
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
|
|
||||||
Score waiting = obj.getScore("Waiting to start...");
|
|
||||||
waiting.setScore(6);
|
|
||||||
Score blank1 = obj.getScore(ChatColor.RESET.toString());
|
|
||||||
blank1.setScore(5);
|
|
||||||
Score players = obj.getScore("Players: "+playerList.values().size());
|
|
||||||
players.setScore(4);
|
|
||||||
Score blank2 = obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString());
|
|
||||||
blank2.setScore(3);
|
|
||||||
Score seeker = obj.getScore(ChatColor.BOLD + "" + ChatColor.RED + "SEEKER%" + ChatColor.WHITE + getSeekerPercent());
|
|
||||||
seeker.setScore(2);
|
|
||||||
Score hider = obj.getScore(ChatColor.BOLD + "" + ChatColor.GOLD + "HIDER%" + ChatColor.WHITE + getHiderPercent());
|
|
||||||
hider.setScore(1);
|
|
||||||
player.setScoreboard(board);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createGameBoard(Player player) {
|
private void createLobbyBoard(Player player, boolean recreate) {
|
||||||
Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
|
CustomBoard board = customBoards.get(player.getName());
|
||||||
Objective obj = board.registerNewObjective("GameScoreboard", "dummy",
|
if(recreate) {
|
||||||
ChatColor.translateAlternateColorCodes('&', "&l&eHIDE AND SEEK"));
|
board = new CustomBoard(player, "&l&eHIDE AND SEEK");
|
||||||
createTeamsForBoard(board);
|
board.updateTeams();
|
||||||
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
|
|
||||||
Score team = obj.getScore("Team: " + getTeam(player));
|
|
||||||
team.setScore(6);
|
|
||||||
Score blank1 = obj.getScore(ChatColor.RESET.toString());
|
|
||||||
blank1.setScore(5);
|
|
||||||
if(gameLength > 0) {
|
|
||||||
Score waiting = obj.getScore(ChatColor.GREEN + "Time Left: " + ChatColor.WHITE + Main.plugin.timeLeft/60 + "m" + Main.plugin.timeLeft%60 + "s");
|
|
||||||
waiting.setScore(4);
|
|
||||||
Score blank2 = obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString());
|
|
||||||
blank2.setScore(3);
|
|
||||||
}
|
}
|
||||||
Score seeker = obj.getScore(ChatColor.BOLD + "" + ChatColor.RED + "SEEKERS:" + ChatColor.WHITE + " " + Seeker.size());
|
board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDER%" + ChatColor.WHITE + getHiderPercent());
|
||||||
seeker.setScore(2);
|
board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKER%" + ChatColor.WHITE + getSeekerPercent());
|
||||||
Score hider = obj.getScore(ChatColor.BOLD + "" + ChatColor.GOLD + "HIDERS:" + ChatColor.WHITE + " " + Hider.size());
|
board.addBlank(recreate);
|
||||||
hider.setScore(1);
|
board.setLine("players", "Players: " + playerList.values().size());
|
||||||
player.setScoreboard(board);
|
board.addBlank(recreate);
|
||||||
|
board.setLine("waiting", "Waiting to start...");
|
||||||
|
board.display();
|
||||||
|
customBoards.put(player.getName(), board);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createGameBoard(Player player){
|
||||||
|
createGameBoard(player, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createGameBoard(Player player, boolean recreate){
|
||||||
|
CustomBoard board = customBoards.get(player.getName());
|
||||||
|
if(recreate) {
|
||||||
|
board = new CustomBoard(player, "&l&eHIDE AND SEEK");
|
||||||
|
board.updateTeams();
|
||||||
|
}
|
||||||
|
board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDERS:" + ChatColor.WHITE + " " + Hider.size());
|
||||||
|
board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKERS:" + ChatColor.WHITE + " " + Seeker.size());
|
||||||
|
board.addBlank(recreate);
|
||||||
|
if(glowEnabled){
|
||||||
|
if(Main.plugin.glow == null || !Main.plugin.glow.isRunning())
|
||||||
|
board.setLine("glow", "Glow: " + ChatColor.RED + "Inactive");
|
||||||
|
else
|
||||||
|
board.setLine("glow", "Glow: " + ChatColor.GREEN + "Active");
|
||||||
|
}
|
||||||
|
if(tauntEnabled && tauntCountdown){
|
||||||
|
if(Main.plugin.taunt == null)
|
||||||
|
board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "0m0s");
|
||||||
|
else if(!Main.plugin.taunt.isRunning())
|
||||||
|
board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + Main.plugin.taunt.getDelay()/60 + "m" + Main.plugin.taunt.getDelay()%60 + "s");
|
||||||
|
else
|
||||||
|
board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "Active");
|
||||||
|
}
|
||||||
|
if(glowEnabled || (tauntEnabled && tauntCountdown))
|
||||||
|
board.addBlank(recreate);
|
||||||
|
board.setLine("time", "Time Left: " + ChatColor.GREEN + Main.plugin.timeLeft/60 + "m" + Main.plugin.timeLeft%60 + "s");
|
||||||
|
board.addBlank(recreate);
|
||||||
|
board.setLine("team", "Team: " + getTeam(player));
|
||||||
|
board.display();
|
||||||
|
customBoards.put(player.getName(), board);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeBoard(Player player) {
|
public void removeBoard(Player player) {
|
||||||
player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard());
|
player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard());
|
||||||
|
customBoards.remove(player.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reloadLobbyBoards() {
|
public void reloadLobbyBoards() {
|
||||||
for(Player player : playerList.values())
|
for(Player player : playerList.values())
|
||||||
createLobbyBoard(player);
|
createLobbyBoard(player, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reloadGameBoards() {
|
public void reloadGameBoards() {
|
||||||
for(Player player : playerList.values())
|
for(Player player : playerList.values())
|
||||||
createGameBoard(player);
|
createGameBoard(player, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reloadBoardTeams() {
|
||||||
|
for(CustomBoard board : customBoards.values())
|
||||||
|
board.updateTeams();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getSeekerPercent() {
|
private String getSeekerPercent() {
|
||||||
|
|
117
src/main/java/net/tylermurphy/hideAndSeek/util/CustomBoard.java
Normal file
117
src/main/java/net/tylermurphy/hideAndSeek/util/CustomBoard.java
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
package net.tylermurphy.hideAndSeek.util;
|
||||||
|
|
||||||
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scoreboard.*;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||||
|
|
||||||
|
public class CustomBoard {
|
||||||
|
|
||||||
|
private final Scoreboard board;
|
||||||
|
private final Objective obj;
|
||||||
|
private final Player player;
|
||||||
|
private final Map<String,Line> LINES;
|
||||||
|
private int blanks;
|
||||||
|
|
||||||
|
public CustomBoard(Player player, String title){
|
||||||
|
this.board = Bukkit.getScoreboardManager().getNewScoreboard();
|
||||||
|
this.LINES = new HashMap<String,Line>();
|
||||||
|
this.player = player;
|
||||||
|
this.obj = board.registerNewObjective(
|
||||||
|
"Scoreboard", "dummy", ChatColor.translateAlternateColorCodes('&', title));
|
||||||
|
this.blanks = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateTeams() {
|
||||||
|
try{ board.registerNewTeam("Hider"); } catch (Exception e){}
|
||||||
|
try{ board.registerNewTeam("Seeker"); } catch (Exception e){}
|
||||||
|
Team hiderTeam = board.getTeam("Hider");
|
||||||
|
for(String entry : hiderTeam.getEntries())
|
||||||
|
hiderTeam.removeEntry(entry);
|
||||||
|
for(Player player : Main.plugin.board.getHiders())
|
||||||
|
hiderTeam.addEntry(player.getName());
|
||||||
|
Team seekerTeam = board.getTeam("Seeker");
|
||||||
|
for(String entry : seekerTeam.getEntries())
|
||||||
|
seekerTeam.removeEntry(entry);
|
||||||
|
for(Player player : Main.plugin.board.getSeekers())
|
||||||
|
seekerTeam.addEntry(player.getName());
|
||||||
|
if(nametagsVisible) {
|
||||||
|
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);
|
||||||
|
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OTHER_TEAMS);
|
||||||
|
} else {
|
||||||
|
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
|
||||||
|
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
|
||||||
|
}
|
||||||
|
hiderTeam.setColor(ChatColor.GOLD);
|
||||||
|
seekerTeam.setColor(ChatColor.RED);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLine(String key, String message){
|
||||||
|
Line line = LINES.get(key);
|
||||||
|
if(line == null)
|
||||||
|
addLine(key, message);
|
||||||
|
else
|
||||||
|
updateLine(key, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addLine(String key, String message){
|
||||||
|
Score score = obj.getScore(message);
|
||||||
|
score.setScore(LINES.values().size()+1);
|
||||||
|
Line line = new Line(LINES.values().size()+1, message);
|
||||||
|
LINES.put(key, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addBlank(boolean value){
|
||||||
|
if(!value) return;
|
||||||
|
String temp = "";
|
||||||
|
for(int i = 0; i <= blanks; i ++)
|
||||||
|
temp += ChatColor.RESET;
|
||||||
|
blanks++;
|
||||||
|
addLine("blank"+blanks, temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateLine(String key, String message){
|
||||||
|
Line line = LINES.get(key);
|
||||||
|
board.resetScores(line.getMessage());
|
||||||
|
line.setMessage(message);
|
||||||
|
Score newScore = obj.getScore(message);
|
||||||
|
|
||||||
|
newScore.setScore(line.getScore());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void display() {
|
||||||
|
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||||
|
player.setScoreboard(board);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Line {
|
||||||
|
|
||||||
|
private int score;
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
public Line(int score, String message){
|
||||||
|
this.score = score;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getScore() {
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,14 +3,25 @@ package net.tylermurphy.hideAndSeek.util;
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import net.tylermurphy.hideAndSeek.configuration.LocalizationString;
|
import net.tylermurphy.hideAndSeek.configuration.LocalizationString;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.inventory.meta.PotionMeta;
|
||||||
|
import org.bukkit.potion.PotionData;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
import org.bukkit.potion.PotionType;
|
||||||
|
|
||||||
public class Util {
|
public class Util {
|
||||||
|
|
||||||
|
@ -39,27 +50,68 @@ public class Util {
|
||||||
}, delay);
|
}, delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
public YamlConfiguration loadDefaultConfig(String name) {
|
public static void resetPlayer(Player player) {
|
||||||
|
player.getInventory().clear();
|
||||||
YamlConfiguration defaultConfig = null;
|
for (PotionEffect effect : player.getActivePotionEffects()) {
|
||||||
|
player.removePotionEffect(effect.getType());
|
||||||
InputStream deafult_stream = null;
|
|
||||||
InputStreamReader default_stream_reader = null;
|
|
||||||
try {
|
|
||||||
deafult_stream = Class.class.getResourceAsStream(name + ".yml");
|
|
||||||
default_stream_reader = new InputStreamReader(deafult_stream);
|
|
||||||
defaultConfig = YamlConfiguration.loadConfiguration(default_stream_reader);
|
|
||||||
} catch (Exception e) {
|
|
||||||
// No Issue Here
|
|
||||||
} finally {
|
|
||||||
try {
|
|
||||||
deafult_stream.close();
|
|
||||||
default_stream_reader.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.DOLPHINS_GRACE, 1000000, 1, false, false));
|
||||||
|
if (Main.plugin.board.isSeeker(player)) {
|
||||||
|
ItemStack diamondSword = new ItemStack(Material.DIAMOND_SWORD, 1);
|
||||||
|
diamondSword.addEnchantment(Enchantment.DAMAGE_ALL, 1);
|
||||||
|
ItemMeta diamondSwordMeta = diamondSword.getItemMeta();
|
||||||
|
diamondSwordMeta.setDisplayName("Seeker Sword");
|
||||||
|
diamondSwordMeta.setUnbreakable(true);
|
||||||
|
diamondSword.setItemMeta(diamondSwordMeta);
|
||||||
|
player.getInventory().addItem(diamondSword);
|
||||||
|
|
||||||
|
ItemStack wackyStick = new ItemStack(Material.STICK, 1);
|
||||||
|
wackyStick.addUnsafeEnchantment(Enchantment.KNOCKBACK, 3);
|
||||||
|
ItemMeta wackyStickMeta = wackyStick.getItemMeta();
|
||||||
|
wackyStickMeta.setDisplayName("Wacky Stick");
|
||||||
|
wackyStick.setItemMeta(wackyStickMeta);
|
||||||
|
player.getInventory().addItem(wackyStick);
|
||||||
|
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 1000000, 2, false, false));
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 1000000, 1, false, false));
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 1000000, 1, false, false));
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 10, false, false));
|
||||||
|
} else if (Main.plugin.board.isHider(player)) {
|
||||||
|
ItemStack stoneSword = new ItemStack(Material.STONE_SWORD, 1);
|
||||||
|
stoneSword.addEnchantment(Enchantment.DAMAGE_ALL, 2);
|
||||||
|
ItemMeta stoneSwordMeta = stoneSword.getItemMeta();
|
||||||
|
stoneSwordMeta.setDisplayName("Hider Sword");
|
||||||
|
stoneSwordMeta.setUnbreakable(true);
|
||||||
|
stoneSword.setItemMeta(stoneSwordMeta);
|
||||||
|
player.getInventory().addItem(stoneSword);
|
||||||
|
|
||||||
|
ItemStack splashPotion = new ItemStack(Material.SPLASH_POTION, 1);
|
||||||
|
PotionMeta splashPotionMeta = (PotionMeta) splashPotion.getItemMeta();
|
||||||
|
splashPotionMeta.setBasePotionData(new PotionData(PotionType.REGEN));
|
||||||
|
splashPotion.setItemMeta(splashPotionMeta);
|
||||||
|
player.getInventory().addItem(splashPotion);
|
||||||
|
|
||||||
|
ItemStack potion = new ItemStack(Material.POTION, 2);
|
||||||
|
PotionMeta potionMeta = (PotionMeta) potion.getItemMeta();
|
||||||
|
potionMeta.setBasePotionData(new PotionData(PotionType.INSTANT_HEAL));
|
||||||
|
potion.setItemMeta(potionMeta);
|
||||||
|
player.getInventory().addItem(potion);
|
||||||
|
|
||||||
|
if(glowEnabled) {
|
||||||
|
ItemStack snowball = new ItemStack(Material.SNOWBALL, 1);
|
||||||
|
ItemMeta snowballMeta = snowball.getItemMeta();
|
||||||
|
snowballMeta.setDisplayName("Glow Powerup");
|
||||||
|
List<String> snowballLore = new ArrayList<String>();
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 1, false, false));
|
||||||
}
|
}
|
||||||
return defaultConfig;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -54,7 +54,7 @@ worldBorder:
|
||||||
# The taunt will activate every delay set in seconds. It will spawn a firework
|
# The taunt will activate every delay set in seconds. It will spawn a firework
|
||||||
# on a random Hider to alert a Seeker where someone may be. You can choose
|
# on a random Hider to alert a Seeker where someone may be. You can choose
|
||||||
# to publially show the taunt countdown, and have the taunt run with only
|
# to publially show the taunt countdown, and have the taunt run with only
|
||||||
# one Hider left.
|
# one Hider left. Taunt delay must at least be 60s.
|
||||||
taunt:
|
taunt:
|
||||||
delay: 360
|
delay: 360
|
||||||
whenLastPerson: false
|
whenLastPerson: false
|
||||||
|
@ -64,7 +64,8 @@ taunt:
|
||||||
# The glow powerup allows all Hiders to see where every Seeker is. It last for
|
# The glow powerup allows all Hiders to see where every Seeker is. It last for
|
||||||
# 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.
|
# just overwrites. Only Hiders can see that the Seekers are glowing. Delay must
|
||||||
|
# be longer than 1s.
|
||||||
glow:
|
glow:
|
||||||
time: 30
|
time: 30
|
||||||
stackable: true
|
stackable: true
|
||||||
|
|
Loading…
Reference in a new issue