From 52f0941fb95e7496bf5db85e63c0c2331cc9b2a4 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Tue, 17 Mar 2015 23:59:24 +1300 Subject: [PATCH 001/104] Add resourcepack options --- .../core/resourcepack/ResPackManager.java | 41 ++++ .../core/resourcepack/ResUnloadCheck.java | 9 + .../redis/RedisUnloadResPack.java | 19 ++ .../Mineplex.Hub/src/mineplex/hub/Hub.java | 9 + .../nautilus/game/arcade/ArcadeManager.java | 220 +++++++++++++++++- .../src/nautilus/game/arcade/game/Game.java | 2 + 6 files changed, 299 insertions(+), 1 deletion(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResPackManager.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResUnloadCheck.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/resourcepack/redis/RedisUnloadResPack.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResPackManager.java b/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResPackManager.java new file mode 100644 index 000000000..2e5d8490b --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResPackManager.java @@ -0,0 +1,41 @@ +package mineplex.core.resourcepack; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import mineplex.core.resourcepack.redis.RedisUnloadResPack; +import mineplex.serverdata.CommandCallback; +import mineplex.serverdata.ServerCommand; +import mineplex.serverdata.ServerCommandManager; + +public class ResPackManager implements CommandCallback +{ + private ResUnloadCheck _packUnloadCheck; + + public ResPackManager(ResUnloadCheck packUnloadCheck) + { + _packUnloadCheck = packUnloadCheck; + + ServerCommandManager.getInstance().registerCommandType("RedisUnloadResPack", RedisUnloadResPack.class, this); + } + + @Override + public void run(ServerCommand command) + { + if (command instanceof RedisUnloadResPack) + { + RedisUnloadResPack redisCommand = (RedisUnloadResPack) command; + + Player player = Bukkit.getPlayerExact(redisCommand.getPlayer()); + + if (player != null) + { + if (_packUnloadCheck.canSendUnload(player)) + { + player.setResourcePack("http://www.chivebox.com/file/c/empty.zip"); + } + } + } + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResUnloadCheck.java b/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResUnloadCheck.java new file mode 100644 index 000000000..c25175c58 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResUnloadCheck.java @@ -0,0 +1,9 @@ +package mineplex.core.resourcepack; + +import org.bukkit.entity.Player; + +public interface ResUnloadCheck +{ + + public boolean canSendUnload(Player player); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/redis/RedisUnloadResPack.java b/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/redis/RedisUnloadResPack.java new file mode 100644 index 000000000..88876b510 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/redis/RedisUnloadResPack.java @@ -0,0 +1,19 @@ +package mineplex.core.resourcepack.redis; + +import mineplex.serverdata.ServerCommand; + +public class RedisUnloadResPack extends ServerCommand +{ + private String _player; + + public RedisUnloadResPack(String player) + { + + _player = player; + } + + public String getPlayer() + { + return _player; + } +} diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index a6adf0e0a..865b402a2 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -34,6 +34,8 @@ import mineplex.core.preferences.PreferencesManager; import mineplex.core.projectile.ProjectileManager; import mineplex.core.punish.Punish; import mineplex.core.recharge.Recharge; +import mineplex.core.resourcepack.ResUnloadCheck; +import mineplex.core.resourcepack.ResPackManager; import mineplex.core.serverConfig.ServerConfiguration; import mineplex.core.spawn.Spawn; import mineplex.core.stats.StatsManager; @@ -123,6 +125,13 @@ public class Hub extends JavaPlugin implements IRelation new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion()); new CustomTagFix(this, packetHandler); new TablistFix(this); + new ResPackManager(new ResUnloadCheck() + { + public boolean canSendUnload(Player player) + { + return true; + } + }); //new Replay(this, packetHandler); new PersonalServerManager(this, clientManager); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 867c8dce7..b3b0ebb14 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -2,13 +2,17 @@ package nautilus.game.arcade; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; +import java.util.Map.Entry; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.OfflinePlayer; +import org.bukkit.Sound; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.entity.EntityType; @@ -28,6 +32,8 @@ import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.server.ServerListPingEvent; +import com.google.common.base.Objects; + import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; import mineplex.core.achievement.AchievementManager; @@ -37,9 +43,12 @@ import mineplex.core.chat.Chat; import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTime; import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.creature.Creature; import mineplex.core.disguise.DisguiseManager; @@ -51,12 +60,19 @@ import mineplex.core.hologram.HologramManager; import mineplex.core.inventory.InventoryManager; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.movement.Movement; +import mineplex.core.packethandler.IPacketHandler; import mineplex.core.packethandler.PacketHandler; +import mineplex.core.packethandler.PacketInfo; +import mineplex.core.packethandler.PacketPlayResourcePackStatus; +import mineplex.core.packethandler.PacketPlayResourcePackStatus.EnumResourcePackStatus; import mineplex.core.party.PartyManager; import mineplex.core.pet.PetManager; import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; import mineplex.core.projectile.ProjectileManager; +import mineplex.core.resourcepack.ResUnloadCheck; +import mineplex.core.resourcepack.ResPackManager; +import mineplex.core.resourcepack.redis.RedisUnloadResPack; import mineplex.core.reward.RewardRarity; import mineplex.core.reward.rewards.PetReward; import mineplex.core.stats.StatsManager; @@ -64,6 +80,7 @@ import mineplex.core.status.ServerStatusManager; import mineplex.core.task.TaskManager; import mineplex.core.teleport.Teleport; import mineplex.core.timing.TimingManager; +import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.classcombat.Class.ClassManager; import mineplex.minecraft.game.classcombat.Condition.SkillConditionManager; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -163,7 +180,11 @@ public class ArcadeManager extends MiniPlugin implements IRelation private ArcadeRepository _arcadeRepository; private PacketHandler _packetHandler; - + private IPacketHandler _resourcePacketHandler; + private String _resourcePackUrl; + private boolean _resourcePackRequired; + private NautHashMap _resourcePackUsers = new NautHashMap(); + private NautHashMap _resourcePackNoResponse = new NautHashMap(); // Observers private HashSet _specList = new HashSet(); @@ -296,6 +317,78 @@ public class ArcadeManager extends MiniPlugin implements IRelation } }, 80L); } + + _resourcePacketHandler = new IPacketHandler() + { + + @Override + public void handle(PacketInfo packetInfo) + { + if (_resourcePackUrl != null && packetInfo.getPacket() instanceof PacketPlayResourcePackStatus) + { + + final Player player = packetInfo.getPlayer(); + final EnumResourcePackStatus response = ((PacketPlayResourcePackStatus) packetInfo.getPacket()) + .getResourcePackStatus(); + + Bukkit.getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable() + { + + @Override + public void run() + { + if (_resourcePackRequired) + { + if (response == EnumResourcePackStatus.ACCEPTED) + { + _resourcePackNoResponse.remove(player.getName()); + } + else if (response == EnumResourcePackStatus.DECLINED) + { + _resourcePackNoResponse.remove(player.getName()); + + returnHubNoResPack(player); + } + else if (response == EnumResourcePackStatus.FAILED_DOWNLOAD) + { + System.out.println(player.getName() + " failed to download resource pack, trying again.."); + + _resourcePackNoResponse.put(player.getName(), System.currentTimeMillis()); + + player.setResourcePack(_resourcePackUrl); + + return; + } + } + + if (response == EnumResourcePackStatus.ACCEPTED || response == EnumResourcePackStatus.LOADED) + { + _resourcePackUsers.put(player.getName(), response); + } + else + { + _resourcePackUsers.remove(player.getName()); + } + } + }); + } + } + }; + + new ResPackManager(new ResUnloadCheck() + { + public boolean canSendUnload(Player player) + { + if (_resourcePackUsers.containsKey(player.getName())) + { + return false; + } + + return true; + } + }); + + getPacketHandler().addPacketHandler(_resourcePacketHandler); } @Override @@ -1179,4 +1272,129 @@ public class ArcadeManager extends MiniPlugin implements IRelation { return _partyManager; } + + @EventHandler + public void onSecond(UpdateEvent event) + { + Iterator> itel = _resourcePackNoResponse.entrySet().iterator(); + + while (itel.hasNext()) + { + Entry entry = itel.next(); + + if (UtilTime.elapsed(entry.getValue(), 10000)) + { + Player player = Bukkit.getPlayerExact(entry.getKey()); + + if (player != null) + { + // Send it again, enforce it! + _resourcePackNoResponse.put(player.getName(), System.currentTimeMillis()); + player.setResourcePack(_resourcePackUrl); + } + else + { + itel.remove(); + } + } + } + } + + @EventHandler + public void ResourcePackQuit(PlayerQuitEvent event) + { + + Player player = event.getPlayer(); + + EnumResourcePackStatus status = _resourcePackUsers.get(player.getName()); + + if (status == EnumResourcePackStatus.ACCEPTED || status == EnumResourcePackStatus.LOADED) + { + + new RedisUnloadResPack(player.getName()).publish(); + + _resourcePackUsers.remove(player.getName()); + } + } + + @EventHandler + public void outdatedVersion(GameStateChangeEvent event) + { + if (!_resourcePackRequired) + return; + + for (Player player : UtilServer.getPlayers()) + { + if (!UtilPlayer.is1_8(player)) + returnHubNoResPack(player); + } + } + + private void returnHubNoResPack(Player player) + { + UtilPlayer.message(player, " "); + UtilPlayer.message(player, C.cGold + C.Bold + "You need to be using 1.8 to play " + GetGame().GetName() + "!"); + UtilPlayer.message(player, " "); + + player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); + GetPortal().sendPlayerToServer(player, "Lobby"); + } + + @EventHandler + public void ResourcePackJoin(PlayerJoinEvent event) + { + Player player = event.getPlayer(); + + if (!UtilPlayer.is1_8(player) && _resourcePackRequired) + { + returnHubNoResPack(player); + + return; + } + + if (_resourcePackUrl != null) + { + if (_resourcePackRequired) + { + _resourcePackNoResponse.put(player.getName(), System.currentTimeMillis()); + } + + _resourcePackUsers.put(player.getName(), null); + player.setResourcePack(_resourcePackUrl); + } + } + + public void setResourcePack(String resourcePack, boolean forceResourcePack) + { + if (!Objects.equal(resourcePack, _resourcePackUrl) || forceResourcePack != _resourcePackRequired) + { + _resourcePackNoResponse.clear(); + _resourcePackUsers.clear(); + _resourcePackUrl = resourcePack == null || resourcePack.isEmpty() ? null : resourcePack; + _resourcePackRequired = forceResourcePack; + + if (_resourcePackUrl == null || _resourcePackUrl.isEmpty()) + { + _resourcePackRequired = false; + + for (Player player : Bukkit.getOnlinePlayers()) + { + player.setResourcePack("http://www.chivebox.com/file/c/empty.zip"); + } + } + else + { + for (Player player : Bukkit.getOnlinePlayers()) + { + if (_resourcePackRequired) + { + _resourcePackNoResponse.put(player.getName(), System.currentTimeMillis()); + } + + _resourcePackUsers.put(player.getName(), null); + player.setResourcePack(_resourcePackUrl); + } + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 4f5a985e6..8b6ac7d57 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -312,6 +312,8 @@ public abstract class Game implements Listener new TeamKillsStatTracker(this) ); } + + Manager.setResourcePack(gameType.getResourcePackUrl(), gameType.isEnforceResourcePack()); System.out.println("Loading " + GetName() + "..."); } From 261b18fcf087ba05d783da6bba3ee50da655bddb Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Tue, 17 Mar 2015 23:59:59 +1300 Subject: [PATCH 002/104] Add GameType options --- .../src/nautilus/game/arcade/GameType.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 3e67b2fb8..28a6a668b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -60,6 +60,8 @@ public enum GameType Material _mat; byte _data; GameCategory _gameCategory; + boolean _enforceResourcePack; + String _resourcePack; private int _gameId; // Unique identifying id for this gamemode (used for statistics) public int getGameId() { return _gameId; } @@ -79,6 +81,16 @@ public enum GameType _gameId = gameId; } + public boolean isEnforceResourcePack() + { + return _enforceResourcePack; + } + + public String getResourcePackUrl() + { + return _resourcePack; + } + public String GetName() { return _name; From bb821996b1b048e4b96366444ed6f1a19d732171 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 3 Apr 2015 09:22:31 +1300 Subject: [PATCH 003/104] Wizard modifications --- .../games/wizards/spells/SpellBridge.java | 102 -------------- .../game/games/wizards/spells/SpellGust.java | 35 +++++ .../games/wizards/spells/SpellLaunch.java | 40 ------ .../wizards/spells/SpellRainbowPath.java | 130 ++++++++++++++++++ .../games/wizards/spells/SpellSpiderman.java | 77 ----------- .../games/wizards/spells/SpellWebShot.java | 106 ++++++++++++++ 6 files changed, 271 insertions(+), 219 deletions(-) delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellBridge.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunch.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpiderman.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellBridge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellBridge.java deleted file mode 100644 index 0a83385d6..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellBridge.java +++ /dev/null @@ -1,102 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map.Entry; - -import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilShapes; -import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.wizards.Spell; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickBlock; - -import org.bukkit.Effect; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.scheduler.BukkitRunnable; - -public class SpellBridge extends Spell implements SpellClickBlock -{ - final BlockFace[] radial = - { - BlockFace.SOUTH, BlockFace.SOUTH_WEST, BlockFace.WEST, BlockFace.NORTH_WEST, BlockFace.NORTH, - BlockFace.NORTH_EAST, BlockFace.EAST, BlockFace.SOUTH_EAST - }; - private HashMap _wallExpires = new HashMap(); - - @EventHandler - public void onUpdate(UpdateEvent event) - { - Iterator> itel = _wallExpires.entrySet().iterator(); - - while (itel.hasNext()) - { - Entry entry = itel.next(); - - if (entry.getValue() < System.currentTimeMillis()) - { - itel.remove(); - - if (entry.getKey().getType() == Material.DIRT) - { - entry.getKey().setType(Material.AIR); - } - } - } - } - - @Override - public void castSpell(Player p, final Block target) - { - final BlockFace facing = radial[Math.round(p.getEyeLocation().getYaw() / 45f) & 0x7]; - - p.getWorld().playEffect(target.getLocation(), Effect.STEP_SOUND, Material.DIRT.getId()); - - final int maxDist = 10 * getSpellLevel(p); - - new BukkitRunnable() - { - Block block = target; - int blocks = 0; - - @Override - public void run() - { - if (!Wizards.IsLive() || blocks++ >= maxDist) - { - cancel(); - return; - } - - block = block.getRelative(facing); - Block bs[] = UtilShapes.getSideBlocks(block, facing); - - bs = new Block[] - { - bs[0], bs[1], block - }; - - for (Block b : bs) - { - if (UtilBlock.solid(b)) - { - continue; - } - - b.setType(Material.DIRT); - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getTypeId()); - - _wallExpires.put(b, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); - } - - } - }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 5, 1); - - charge(p); - } - -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java new file mode 100644 index 000000000..ad4947087 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java @@ -0,0 +1,35 @@ +package nautilus.game.arcade.game.games.wizards.spells; + +import java.util.HashMap; + +import mineplex.core.common.util.UtilPlayer; +import nautilus.game.arcade.game.games.wizards.Spell; +import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +public class SpellGust extends Spell implements SpellClick +{ + + @Override + public void castSpell(Player player) + { + Vector vector = player.getLocation().getDirection().normalize().multiply(0.3); + + HashMap effected = UtilPlayer.getPlayersInPyramid(player, 45, 10 * getSpellLevel(player)); + + for (Player target : effected.keySet()) + { + target.setVelocity(vector); + target.getWorld().playSound(target.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F); + } + + if (!effected.isEmpty()) + { + player.playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F); + charge(player); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunch.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunch.java deleted file mode 100644 index 886a5986a..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunch.java +++ /dev/null @@ -1,40 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells; - -import nautilus.game.arcade.game.games.wizards.Spell; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickEntity; - -import org.bukkit.Bukkit; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - -public class SpellLaunch extends Spell implements SpellClickEntity -{ - - @Override - public void castSpell(Player player, final Entity entity) - { - if (entity instanceof LivingEntity) - { - - Wizards.getArcadeManager().GetCondition().Factory() - .Falling("Launch", (LivingEntity) entity, player, 10, false, false); - - final int spellLevel = getSpellLevel(player); - - Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable() - { - public void run() - { - ((LivingEntity) entity).setVelocity(new Vector(0, 1F + (spellLevel * 0.15F), 0)); - entity.getWorld().playSound(((LivingEntity) entity).getLocation(), Sound.BAT_TAKEOFF, 2, 0); - entity.setFallDistance(-spellLevel * 1.5F); - } - }); - - charge(player); - } - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java new file mode 100644 index 000000000..b2f006c68 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java @@ -0,0 +1,130 @@ +package nautilus.game.arcade.game.games.wizards.spells; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilMath; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.game.games.wizards.Spell; +import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; +import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickBlock; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +public class SpellRainbowPath extends Spell implements SpellClick, SpellClickBlock +{ + final BlockFace[] radial = + { + BlockFace.SOUTH, BlockFace.SOUTH_WEST, BlockFace.WEST, BlockFace.NORTH_WEST, BlockFace.NORTH, + BlockFace.NORTH_EAST, BlockFace.EAST, BlockFace.SOUTH_EAST + }; + final int[] _rainbow = new int[] + { + 1, 2, 3, 4, 5, 6, 9, 10, 11, 13, 14 + }; + + private HashMap _wallExpires = new HashMap(); + + @EventHandler + public void onUpdate(UpdateEvent event) + { + Iterator> itel = _wallExpires.entrySet().iterator(); + + while (itel.hasNext()) + { + Entry entry = itel.next(); + + if (entry.getValue() < System.currentTimeMillis()) + { + itel.remove(); + + if (entry.getKey().getType() == Material.STAINED_GLASS) + { + entry.getKey().setType(Material.AIR); + } + } + } + } + + @Override + public void castSpell(Player p) + { + Vector vector = p.getEyeLocation().getDirection().setY(0).normalize(); + + vector.setX(Math.round(vector.getX())); + vector.setZ(Math.round(vector.getZ())); + + castSpell(p, p.getLocation().add(vector).getBlock()); + } + + @Override + public void castSpell(Player p, final Block target) + { + final Vector vector = p.getEyeLocation().getDirection().normalize().multiply(0.5); + vector.setY(Math.max(Math.min(vector.getY(), -0.5), 0.5)); + vector.normalize(); + + p.getWorld().playEffect(target.getLocation(), Effect.STEP_SOUND, Material.WOOL.getId(), _rainbow[UtilMath.r(_rainbow.length)]); + p.getWorld().playSound(p.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1); + + final int maxDist = 10 * getSpellLevel(p); + + new BukkitRunnable() + { + Location loc = target.getLocation().add(0.5, 0.5, 0.5); + int blocks; + int colorProgress; + + @Override + public void run() + { + if (!Wizards.IsLive() || blocks++ >= maxDist) + { + cancel(); + return; + } + + loc.add(vector); + Block block = loc.getBlock(); + + Block[] bs = new Block[] + { + block, UtilAlg.getLeft(vector).toLocation(block.getWorld()).getBlock(), + UtilAlg.getRight(vector).toLocation(block.getWorld()).getBlock() + }; + + for (Block b : bs) + { + if (UtilBlock.solid(b)) + { + continue; + } + + b.setType(Material.STAINED_GLASS); + b.setData((byte) _rainbow[colorProgress++ % _rainbow.length]); + + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WOOL, b.getData()); + + _wallExpires.put(b, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); + } + + block.getWorld().playSound(block.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1); + + } + }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 5, 1); + + charge(p); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpiderman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpiderman.java deleted file mode 100644 index 11b125400..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpiderman.java +++ /dev/null @@ -1,77 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells; - -import mineplex.core.common.util.UtilBlock; -import nautilus.game.arcade.game.games.wizards.Spell; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.entity.FallingBlock; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -public class SpellSpiderman extends Spell implements SpellClick -{ - - @Override - public void castSpell(final Player player) - { - shoot(player); - - for (int i = 1; i < getSpellLevel(player) * 2; i++) - { - - Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable() - { - - @Override - public void run() - { - shoot(player); - } - - }, i * 10); - } - - charge(player); - } - - private void shoot(Player player) - { - - if (Wizards.IsAlive(player)) - { - - final FallingBlock block = player.getWorld().spawnFallingBlock(player.getEyeLocation(), Material.WEB, (byte) 0); - block.setVelocity(player.getEyeLocation().getDirection().multiply(2)); - block.getWorld().playSound(block.getLocation(), Sound.CLICK, 0.5F, 0); - block.setDropItem(false); - - new BukkitRunnable() - { - public void run() - { - - if (!Wizards.IsLive()) - { - cancel(); - } - else if (!block.isValid()) - { - cancel(); - - Block b = block.getLocation().getBlock(); - - if (UtilBlock.airFoliage(b) && b.getType() != Material.WEB) - { - b.setType(Material.WEB); - } - } - } - }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 0, 0); - - } - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java new file mode 100644 index 000000000..ccee25e0a --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java @@ -0,0 +1,106 @@ +package nautilus.game.arcade.game.games.wizards.spells; + +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.projectile.IThrown; +import mineplex.core.projectile.ProjectileUser; +import nautilus.game.arcade.game.games.wizards.Spell; +import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.util.Vector; + +public class SpellWebShot extends Spell implements SpellClick, IThrown +{ + + @Override + public void castSpell(final Player player) + { + shoot(player); + + for (int i = 1; i < getSpellLevel(player) * 2; i++) + { + + Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable() + { + + @Override + public void run() + { + shoot(player); + } + + }, i * 10); + } + + charge(player); + } + + private void shoot(Player player) + { + + if (Wizards.IsAlive(player)) + { + // Boost + UtilAction.velocity(player, 1.2, 0.2, 1.2, true); + + org.bukkit.entity.Item ent = player.getWorld().dropItem( + player.getLocation().add(0, 0.5, 0), + ItemStackFactory.Instance.CreateStack(Material.WEB, (byte) 0, 1, + "Web " + player.getName() + " " + System.currentTimeMillis())); + + Vector random = new Vector(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5); + random.normalize(); + random.multiply(0.2); + + UtilAction.velocity(ent, player.getLocation().getDirection().multiply(-1).add(random), 1 + Math.random() * 0.4, + false, 0, 0.2, 10, false); + Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2d); + + } + } + + @Override + public void Collide(LivingEntity target, Block block, ProjectileUser data) + { + if (target != null) + { + data.GetThrown().remove(); + + // Damage Event + Wizards.getArcadeManager().GetDamage().NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 2, false, false, false, + UtilEnt.getName(data.GetThrower()), "Web Shot"); + } + + Web(data); + } + + @Override + public void Idle(ProjectileUser data) + { + Web(data); + } + + @Override + public void Expire(ProjectileUser data) + { + Web(data); + } + + public void Web(ProjectileUser data) + { + Location loc = data.GetThrown().getLocation(); + data.GetThrown().remove(); + + if (data.GetThrown().getTicksLived() > 3 && UtilBlock.airFoliage(loc.getBlock())) + loc.getBlock().setType(Material.WEB); + } +} From 6faf5011a80e8e7e2a010b06abb5735538ec4a63 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 3 Apr 2015 19:33:49 +1300 Subject: [PATCH 004/104] Wizards: Add spells: Gust, RainbowPath, SpectralArrow, IcePrison. Remove spells: ExplosiveRune, HealingRune, LaunchRune, Launch, TeleportRune. Explosions now launch blocks. Other changes done such as modified spells. --- .../game/games/wizards/SpellButton.java | 2 +- .../arcade/game/games/wizards/SpellType.java | 430 ++- .../arcade/game/games/wizards/Wizards.java | 2868 +++++++++-------- .../game/games/wizards/spells/SpellDroom.java | 166 +- .../wizards/spells/SpellExplosiveRune.java | 79 - .../games/wizards/spells/SpellFireball.java | 71 +- .../game/games/wizards/spells/SpellFlash.java | 89 +- ...lStoneWall.java => SpellFrostBarrier.java} | 8 +- .../game/games/wizards/spells/SpellGust.java | 4 +- .../wizards/spells/SpellHealingRune.java | 70 - .../games/wizards/spells/SpellIcePrison.java | 121 + .../games/wizards/spells/SpellIceShards.java | 164 + .../games/wizards/spells/SpellImplode.java | 172 +- .../game/games/wizards/spells/SpellLance.java | 101 - .../games/wizards/spells/SpellLaunchRune.java | 100 - .../wizards/spells/SpellLightningStrike.java | 2 +- .../games/wizards/spells/SpellNapalm.java | 99 + .../wizards/spells/SpellRainbowBeam.java | 76 +- .../wizards/spells/SpellRainbowPath.java | 22 +- .../games/wizards/spells/SpellRumble.java | 359 ++- .../wizards/spells/SpellSpectralArrow.java | 85 + .../wizards/spells/SpellTeleportRune.java | 87 - .../games/wizards/spells/SpellTrapRune.java | 316 +- .../games/wizards/spells/SpellWebShot.java | 29 +- .../wizards/spells/SpellWizardsCompass.java | 121 +- .../spells/subclasses/ExplosiveRune.java | 62 - 26 files changed, 2981 insertions(+), 2722 deletions(-) delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellExplosiveRune.java rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/{SpellStoneWall.java => SpellFrostBarrier.java} (90%) delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellHealingRune.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLance.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunchRune.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTeleportRune.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/ExplosiveRune.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java index e5a122a07..c6aaeaab4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java @@ -30,7 +30,7 @@ public class SpellButton implements IButton { wizard.setSpell(player.getInventory().getHeldItemSlot(), _spell); - player.sendMessage(C.cBlue + "Set spell on wand to " + _spell.getElement().getColor() + _spell.getSpellName()); + player.sendMessage(C.cBlue + "Spell on wand set to " + _spell.getElement().getColor() + _spell.getSpellName()); player.playSound(player.getLocation(), Sound.ORB_PICKUP, 10, 1); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java index 9818bc2f1..89dac68eb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java @@ -2,28 +2,7 @@ package nautilus.game.arcade.game.games.wizards; import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; -import nautilus.game.arcade.game.games.wizards.spells.SpellBridge; -import nautilus.game.arcade.game.games.wizards.spells.SpellDroom; -import nautilus.game.arcade.game.games.wizards.spells.SpellExplosiveRune; -import nautilus.game.arcade.game.games.wizards.spells.SpellFireball; -import nautilus.game.arcade.game.games.wizards.spells.SpellFlash; -import nautilus.game.arcade.game.games.wizards.spells.SpellHeal; -import nautilus.game.arcade.game.games.wizards.spells.SpellHealingRune; -import nautilus.game.arcade.game.games.wizards.spells.SpellImplode; -import nautilus.game.arcade.game.games.wizards.spells.SpellLance; -import nautilus.game.arcade.game.games.wizards.spells.SpellLaunch; -import nautilus.game.arcade.game.games.wizards.spells.SpellLaunchRune; -import nautilus.game.arcade.game.games.wizards.spells.SpellLightningStrike; -import nautilus.game.arcade.game.games.wizards.spells.SpellMagicMissile; -import nautilus.game.arcade.game.games.wizards.spells.SpellRainbowBeam; -import nautilus.game.arcade.game.games.wizards.spells.SpellRumble; -import nautilus.game.arcade.game.games.wizards.spells.SpellSpeedBoost; -import nautilus.game.arcade.game.games.wizards.spells.SpellSpiderman; -import nautilus.game.arcade.game.games.wizards.spells.SpellStoneWall; -import nautilus.game.arcade.game.games.wizards.spells.SpellSummonWolves; -import nautilus.game.arcade.game.games.wizards.spells.SpellTeleportRune; -import nautilus.game.arcade.game.games.wizards.spells.SpellTrapRune; -import nautilus.game.arcade.game.games.wizards.spells.SpellWizardsCompass; +import nautilus.game.arcade.game.games.wizards.spells.*; import org.bukkit.Material; import org.bukkit.entity.EntityType; @@ -31,26 +10,6 @@ import org.bukkit.inventory.ItemStack; public enum SpellType // ❤ { - - Bridge(SpellElement.MISC, // Spell element - "Bridge", // Spell name - new ItemStack(Material.FENCE), // Spell icon - SpellBridge.class, // Spell class - 3, // Spell max level - 50, // Mana cost - 20, // Spell cooldown - 0, // Mana cost change per level - -5, // Cooldown change per level - 3, // Item amount in loot - - C.cGold + C.Bold + "Length: " + C.Bold + C.cWhite + "Spell Level x 10", - - "", - - "Left click on the block before the chasm", - - "and a mighty dirt bridge will appear!"), - Droom(SpellElement.ATTACK, // Spell element "Droom", // Spell name new ItemStack(Material.ANVIL), // Spell icon @@ -68,44 +27,6 @@ public enum SpellType // ❤ "Summons exploding anvils over everyone near you!"), - /*Drain(SpellElement.MISC, // Spell element - "Drain", // Spell name - new ItemStack(Material.BUCKET), // Spell icon - SpellDrain.class, // Spell class - 3, // Spell max level - 30, // Mana cost - 20, // Spell cooldown - -3, // Mana cost change per level - -4, // Cooldown change per level - 3, // Item amount in loot - - "", - - "Right click other players with this spell", - - "to empty their mana reserves!", TODO Make this area based and drain completely of mana or a rune and drain passively. - - "You gain a third of the absorbed mana!"),*/ - - ExplosiveRune(SpellElement.RUNES, // Spell element - "Explosive Rune", // Spell name - new ItemStack(Material.FIREBALL), // Spell icon - SpellExplosiveRune.class, // Spell class - 3, // Spell max level - 60, // Mana cost - 30, // Spell cooldown - 0, // Mana cost change per level - 0, // Cooldown change per level - 5, // Item amount in loot - - C.cGold + C.Bold + "Explosion Size: " + C.Bold + C.cWhite + "Spell Level", - - C.cGold + C.Bold + "Rune Size: " + C.Bold + C.cWhite + "Spell Level + 1", - - "", - - "Draws a rune that explodes after a delay!"), - Fireball(SpellElement.ATTACK, // Spell element "Fireball", // Spell name new ItemStack(Material.FIREBALL), // Spell icon @@ -142,6 +63,44 @@ public enum SpellType // ❤ "Teleport to the block you are looking at!"), + FrostBarrier(SpellElement.MISC, // Spell element + "Frost Barrier", // Spell name + new ItemStack(Material.ICE), // Spell icon + SpellFrostBarrier.class, // Spell class + 3, // Spell max level + 60, // Mana cost + 30, // Spell cooldown + 0, // Mana cost change per level + -5, // Cooldown change per level + 3, // Item amount in loot + + C.cGold + C.Bold + "Height: " + C.Bold + C.cWhite + "Spell Level + 1", + + C.cGold + C.Bold + "Width: " + C.Bold + C.cWhite + "Spell Level x 5", + + "", + + "Create a wall of ice!"), + + Gust(SpellElement.MISC, // Spell element + "Gust", // Spell name + new ItemStack(Material.FEATHER), // Spell icon + SpellGust.class, // Spell class + 3, // Spell max level + 60, // Mana cost + 20, // Spell cooldown + 0, // Mana cost change per level + 0, // Cooldown change per level + 5, // Item amount in loot + + C.cGold + C.Bold + "Gust Size: " + C.Bold + C.cWhite + "10 x Spell Level blocks", + + C.cGold + C.Bold + "Gust Strenth: " + C.Bold + C.cWhite + "Spell Level x 30%", + + "", + + "Cast the spell and watch your enemies fly!"), + Heal(SpellElement.SUPPORT, // Spell element "Heal", // Spell name new ItemStack(Material.POTION, 1, (short) 8261), // Spell icon @@ -161,26 +120,64 @@ public enum SpellType // ❤ "Use this! Heal yourself up!"), - HealingRune(SpellElement.RUNES, // Spell element - "Rune of Healing", // Spell name - new ItemStack(Material.POTION, 1, (short) 8197), // Spell icon - SpellHealingRune.class, // Spell class + /*Drain(SpellElement.MISC, // Spell element + "Drain", // Spell name + new ItemStack(Material.BUCKET), // Spell icon + SpellDrain.class, // Spell class + 3, // Spell max level + 30, // Mana cost + 20, // Spell cooldown + -3, // Mana cost change per level + -4, // Cooldown change per level + 3, // Item amount in loot + + "", + + "Right click other players with this spell", + + "to empty their mana reserves!", TODO Make this area based and drain completely of mana or a rune and drain passively. + + "You gain a third of the absorbed mana!"),*/ + + IcePrison(SpellElement.ATTACK, // Spell element + "Ice Prison", // Spell name + new ItemStack(Material.ICE), // Spell icon + SpellIcePrison.class, // Spell class 3, // Spell max level - 60, // Mana cost - 30, // Spell cooldown + 50, // Mana cost + 20, // Spell cooldown 0, // Mana cost change per level -5, // Cooldown change per level 3, // Item amount in loot - C.cGold + C.Bold + "Size: " + C.Bold + C.cWhite + "(Spell Level x 0.5) + 2", - - C.cGold + C.Bold + "Lasts for: " + C.Bold + C.cWhite + "(Spell Level x 3) + 5 seconds", + C.cGold + C.Bold + "Size: " + C.Bold + C.cWhite + "Spell Level + 3", "", - "Draws a rune of healing players can step inside", + "On impact creates a mighty ice", - "to recover their health."), + "prison to capture thy enemies!"), + + IceShards(SpellElement.ATTACK, // Spell element + "Ice Shards", // Spell name + new ItemStack(Material.GHAST_TEAR), // Spell icon + SpellIceShards.class, // Spell class + 3, // Spell max level + 30, // Mana cost + 20, // Spell cooldown + 0, // Mana cost change per level + -5, // Cooldown change per level + 3, // Item amount in loot + + C.cGold + C.Bold + "Shards: " + C.Bold + C.cWhite + "Spell Level + 1", + + "", + + "Stack the damage and hit them consecutively!", + + "Each shard from the same spell will deal", + + "more damage for every shard that hit!"), Implode(SpellElement.MISC, // Spell element "Implode", // Spell name @@ -205,67 +202,6 @@ public enum SpellType // ❤ "and scatters them about the area"), - Lance(SpellElement.ATTACK, // Spell element - "Lance", // Spell name - new ItemStack(Material.STICK), // Spell icon - SpellLance.class, // Spell class - 3, // Spell max level - 75, // Mana cost - 50, // Spell cooldown - 0, // Mana cost change per level - -10, // Cooldown change per level - 10, // Item amount in loot - - C.cGold + C.Bold + "Lance Size: " + C.Bold + C.cWhite + "Spell Level x 6", - - "", - - "Summon an lance of explosions!"), - - Launch(SpellElement.MISC, // Spell element - "Launch", // Spell name - new ItemStack(Material.FEATHER), // Spell icon - SpellLaunch.class, // Spell class - 3, // Spell max level - 60, // Mana cost - 20, // Spell cooldown - 0, // Mana cost change per level - 0, // Cooldown change per level - 5, // Item amount in loot - - C.cGold + C.Bold + "Launch Height: " + C.Bold + C.cWhite + "(Spell Level x 3) + 5 blocks", - - "", - - "Cast the spell by hitting the victim", - - "and they will be sent flying into the air!"), - - LaunchRune(SpellElement.RUNES, // Spell element - "Launch Rune", // Spell name - new ItemStack(Material.FEATHER), // Spell icon - SpellLaunchRune.class, // Spell class - 3, // Spell max level - 60, // Mana cost - 30, // Spell cooldown - 0, // Mana cost change per level - 0, // Cooldown change per level - 5, // Item amount in loot - - C.cGold + C.Bold + "Launch Height: " + C.Bold + C.cWhite + "(Spell Level x 2) + 5 blocks", - - C.cGold + C.Bold + "Rune Size: " + C.Bold + C.cWhite + "Spell Level x 0.8", - - "", - - "Draws a white rune on the ground", - - "Rune lasts for a minute and will", - - "activate when stepped on to launch", - - "the people into the air"), - LightningStrike(SpellElement.ATTACK, // Spell element "Lightning Strike", // Spell name new ItemStack(Material.WOOD_AXE), // Spell icon @@ -280,7 +216,7 @@ public enum SpellType // ❤ "", "Summon a mighty lightning strike", - + "to hit the target you point out!"), MagicMissile(SpellElement.ATTACK, // Spell element @@ -304,6 +240,27 @@ public enum SpellType // ❤ "This creates a magic missile that is commonly attributed to the magic profession."), + Napalm(SpellElement.ATTACK, // Spell element + "Napalm", // Spell name + new ItemStack(Material.FIREBALL), // Spell icon + SpellNapalm.class, // Spell class + 3, // Spell max level + 60, // Mana cost + 60, // Spell cooldown + 5, // Mana cost change per level + -10, // Cooldown change per level + 3, // Item amount in loot + + C.cGold + C.Bold + "Length: " + C.Bold + C.cWhite + "(Spell Level x 4) + 8", + + "", + + "Create fire into being where your", + + "vision falls, a wall of fire!", + + "* Fire resistance not included."), + RainbowBeam(SpellElement.ATTACK, // Spell element "Rainbow Beam", // Spell name new ItemStack(Material.EMERALD), // Spell icon @@ -315,17 +272,36 @@ public enum SpellType // ❤ 1, // Cooldown change per level 10, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 3", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 2*", - C.cGold + C.Bold + "Ramge: " + C.Bold + C.cWhite + "Spell Level x 20", + C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "80", "", - "Magical girl beam of rainbows!", + "Finally you too can be a", - "This may not do much damage,", + "magical girl of love and hope!", - "but it sure is pretty!"), + "Damage lowers after 30 blocks!"), + + RainbowPath(SpellElement.MISC, // Spell element + "Rainbow Path", // Spell name + new ItemStack(Material.STAINED_GLASS, 1, (short) 4), // Spell icon + SpellRainbowPath.class, // Spell class + 3, // Spell max level + 50, // Mana cost + 20, // Spell cooldown + 0, // Mana cost change per level + -5, // Cooldown change per level + 3, // Item amount in loot + + C.cGold + C.Bold + "Length: " + C.Bold + C.cWhite + "Spell Level x 10", + + "", + + "Summon into being a mighty path", + + "of rainbows for thee to walk on!"), Rumble(SpellElement.ATTACK, // Spell element "Rumble", // Spell name @@ -342,13 +318,36 @@ public enum SpellType // ❤ C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "Spell Level x 10", + C.cGold + C.Bold + "Slowness Level: " + C.Bold + C.cWhite + "Spell Level", + "", "Creates an targeted earthquake", "in the direction you point", - "from the block you left click!"), + "from the block you left click!", + + "Effected players lose their footing!"), + + SpectralArrow(SpellElement.ATTACK, // Spell element + "Spectral Arrow", // Spell name + new ItemStack(Material.ARROW), // Spell icon + SpellSpectralArrow.class, // Spell class + 3, // Spell max level + 40, // Mana cost + 15, // Spell cooldown + -5, // Mana cost change per level + 0, // Cooldown change per level + 3, // Item amount in loot + + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Distance / (8 - Spell Level)", + + "", + + "Shoot an arrow that penetrates!", + + "Further the distance, higher the damage!"), SpeedBoost(SpellElement.SUPPORT, // Spell element "Speed Boost", // Spell name @@ -356,12 +355,12 @@ public enum SpellType // ❤ SpellSpeedBoost.class, // Spell class 2, // Spell max level 20, // Mana cost - 100, // Spell cooldown + 40, // Spell cooldown 0, // Mana cost change per level 0, // Cooldown change per level 3, // Item amount in loot - C.cGold + C.Bold + "Length: " + C.Bold + C.cWhite + "Spell Level x 30", + C.cGold + C.Bold + "Length: " + C.Bold + C.cWhite + "20 seconds", C.cGold + C.Bold + "Strength: " + C.Bold + C.cWhite + "Spell Level", @@ -369,42 +368,6 @@ public enum SpellType // ❤ "Gain a speed potion effect to outrun your enemies"), - Spiderman(SpellElement.MISC, // Spell element - "Spiderman", // Spell name - new ItemStack(Material.WEB), // Spell icon - SpellSpiderman.class, // Spell class - 3, // Spell max level - 40, // Mana cost - 20, // Spell cooldown - -5, // Mana cost change per level - -5, // Cooldown change per level - 3, // Item amount in loot - - C.cGold + C.Bold + "Webs: " + C.Bold + C.cWhite + "Spell Level x 2", - - "", - - "Shoot webs just like your favorite hero!"), - - StoneWall(SpellElement.MISC, // Spell element - "Stone Wall", // Spell name - new ItemStack(Material.STONE), // Spell icon - SpellStoneWall.class, // Spell class - 3, // Spell max level - 60, // Mana cost - 30, // Spell cooldown - 0, // Mana cost change per level - -5, // Cooldown change per level - 3, // Item amount in loot - - C.cGold + C.Bold + "Height: " + C.Bold + C.cWhite + "Spell Level + 1", - - C.cGold + C.Bold + "Width: " + C.Bold + C.cWhite + "Spell Level x 5", - - "", - - "Create a wall of stone!"), - SummonWolves(SpellElement.ATTACK, // Spell element "Summon Wolves", // Spell name new ItemStack(Material.MONSTER_EGG, 1, EntityType.WOLF.getTypeId()), // Spell icon @@ -424,32 +387,7 @@ public enum SpellType // ❤ "They will fight for you and after 30 seconds, will disappear"), - TeleportRune(SpellElement.RUNES, // Spell element - "Teleport Rune", // Spell name - new ItemStack(Material.ENDER_PEARL), // Spell icon - SpellTeleportRune.class, // Spell class - 3, // Spell max level - 70, // Mana cost - 40, // Spell cooldown - -5, // Mana cost change per level - -5, // Cooldown change per level - 4, // Item amount in loot - - C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "Spell Level x 25", - - C.cGold + C.Bold + "Size: " + C.Bold + C.cWhite + "Spell Level x 1.5", - - "", - - "This draws a teleport rune on the ground", - - "The created rune is usable by anyone and lasts", - - "for 5 seconds after the 2 second warmup period.", - - "The teleport is one way, you cannot return."), - - TrapRune(SpellElement.RUNES, // Spell element + TrapRune(SpellElement.MISC, // Spell element "Trap Rune", // Spell name new ItemStack(Material.TRAP_DOOR), // Spell icon SpellTrapRune.class, // Spell class @@ -472,6 +410,23 @@ public enum SpellType // ❤ "The rune takes 5 seconds to prepare and will damage even you!"), + WebShot(SpellElement.ATTACK, // Spell element + "Web Shot", // Spell name + new ItemStack(Material.WEB), // Spell icon + SpellWebShot.class, // Spell class + 3, // Spell max level + 40, // Mana cost + 20, // Spell cooldown + -5, // Mana cost change per level + -5, // Cooldown change per level + 3, // Item amount in loot + + C.cGold + C.Bold + "Webs: " + C.Bold + C.cWhite + "Spell Level x 2", + + "", + + "Shoot webs just like your favorite hero!"), + WizardsCompass(SpellElement.MISC, // Spell element "Wizard's Compass", // Spell name new ItemStack(Material.COMPASS), // Spell icon @@ -489,19 +444,16 @@ public enum SpellType // ❤ public enum SpellElement { - ATTACK(0, 0, 1, new ItemBuilder(Material.IRON_SWORD).setTitle(C.cRed + "Attack Spells") + ATTACK(1, 0, 2, new ItemBuilder(Material.IRON_SWORD).setTitle(C.cRed + "Attack Spells") .addLore(C.cGray + "Spells of destruction").build(), C.cRed), - MISC(7, 7, 8, new ItemBuilder(Material.COAL_BLOCK).setTitle(C.cDGray + "Misc Spells").addLore( + MISC(7, 6, 8, new ItemBuilder(Material.COAL_BLOCK).setTitle(C.cDGray + "Misc Spells").addLore( C.cGray + "Misc spells that don't fit in", "These spells generally effect the world itself").build(), C.cGray), - RUNES(3, 3, 3, new ItemBuilder(Material.NETHER_STAR).setTitle(C.cGold + "Rune Spells") - .addLore(C.cGray + "Spells for creation of runes").build(), C.cGold), - - SUPPORT(5, 5, 5, new ItemBuilder(Material.IRON_BOOTS).setTitle(C.cDGreen + "Support Spells") + SUPPORT(4, 4, 4, new ItemBuilder(Material.IRON_BOOTS).setTitle(C.cDGreen + "Support Spells") .addLore(C.cGray + "Spells of assistance").build(), C.cDGreen); private String _chatColor; @@ -627,6 +579,16 @@ public enum SpellType // ❤ _itemAmount = itemAmount; } + public int getBaseCooldown() + { + return _spellCooldown; + } + + public int getBaseManaCost() + { + return _spellCost; + } + public String[] getDesc() { return _desc; @@ -642,16 +604,6 @@ public enum SpellType // ❤ return _itemAmount; } - public int getBaseManaCost() - { - return _spellCost; - } - - public int getBaseCooldown() - { - return _spellCooldown; - } - public int getManaCost(Wizard wizard) { return Math.max(0, diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 9e3ee69af..4906d3182 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -96,1435 +96,1465 @@ import org.bukkit.util.Vector; public class Wizards extends SoloGame { - private NautHashMap> _learnedSpellChests = new NautHashMap>(); - /** - * The entry is so I can randomize the amounts of the items found - */ - private ArrayList> _randomItems = new ArrayList>(); - private NautHashMap _spells = new NautHashMap(); - private NautHashMap _timeSinceDisplayedMiddle = new NautHashMap(); - private WizardSpellMenu _wizard; - private ArrayList _droppedWandsBooks = new ArrayList(); - private NautHashMap _wizards = new NautHashMap(); - private float _fireballSize = 1.5F; - private int _fireballCounter; - private float _fireballAdd = 0.05F; - private float _fireballsToSpawn; - - public Wizards(ArcadeManager manager) - { - super(manager, GameType.Wizards, new Kit[0], new String[] - { - - "Find loot and spells in chests", - - "Right click wands to assign spells", - - "Left click with wands to cast magic", - - "The last wizard alive wins!" - - }); - - setKits(new Kit[] - { - new KitMage(manager), - - new KitSorcerer(manager), - - new KitMystic(manager), - - new KitWitchDoctor(manager), - - // new KitWarlock(manager) - }); - - _wizard = new WizardSpellMenu("Wizard Spell Menu", getArcadeManager().getPlugin(), this); - - BlockBreak = true; - BlockPlace = true; - ItemPickup = true; - ItemDrop = true; - InventoryOpenBlock = true; - InventoryOpenChest = true; - InventoryClick = true; - WorldBlockBurn = true; - DisableKillCommand = false; - SoupEnabled = false; - DamageTeamSelf = true; - - Manager.getCosmeticManager().setHideParticles(true); - Manager.GetDamage().GetCombatManager().setUseWeaponName(AttackReason.DefaultWeaponName); - - createLoot(); - } - - @EventHandler - public void joinMessage(PlayerJoinEvent event) - { - if (!UtilPlayer.is1_8(event.getPlayer())) - returnToHub(event.getPlayer()); - } - - public void returnToHub(Player player) - { - UtilPlayer.message(player, " "); - UtilPlayer.message(player, C.cGold + C.Bold + "Wizards requires you to be using Minecraft 1.8!"); - UtilPlayer.message(player, " "); - - player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - Manager.GetPortal().sendPlayerToServer(player, "Lobby"); - } - - @EventHandler - public void outdatedVersion(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC) - return; - - for (Player player : UtilServer.getPlayers()) - { - if (!UtilPlayer.is1_8(player)) - returnToHub(player); - } - } - - private void addMiddleText(Player p, String message) - { - ArrayList arraylist = new ArrayList(); - - if (_learnedSpellChests.containsKey(p.getName())) - { - arraylist = _learnedSpellChests.get(p.getName()); - } - else - { - _learnedSpellChests.put(p.getName(), arraylist); - } - - arraylist.add(message); - } - - private void addRandomItem(int amount, Material itemType, int newDurability, int minAmount, int maxAmount) - { - HashMap.SimpleEntry entry = new HashMap.SimpleEntry(new ItemStack(itemType, minAmount, (short) newDurability), maxAmount - - minAmount); - - for (int i = 0; i < amount; i++) - { - _randomItems.add(entry); - } - } - - public String buildTime() - { - String s = ""; - - for (char c : ("" + System.nanoTime()).toCharArray()) - { - s += "§" + c; - } - - return s; - } - - public void changeWandsTitles(Player player) - { - PlayerInventory inv = player.getInventory(); - Wizard wizard = getWizard(player); - - for (int slot = 0; slot < 5; slot++) - { - ItemStack item = inv.getItem(slot); - SpellType type = wizard.getSpell(slot); - - if (item != null && item.getType() == Material.BLAZE_ROD) - { - ItemMeta meta = item.getItemMeta(); - String display; - - if (type != null) - { - display = C.cYellow + "Mana " + ChatColor.RESET + type.getManaCost(wizard) - - + " " + - - C.cYellow + "Cooldown " + ChatColor.RESET - - + UtilTime.convertString((long) (type.getSpellCooldown(wizard) * 1000), 1, TimeUnit.FIT); - } - else - { - display = C.cWhite + "Right click to set a spell"; - } - - if (!meta.hasDisplayName() || !meta.getDisplayName().equals(display)) - { - meta.setDisplayName(display); - item.setItemMeta(meta); - } - } - } - } - - private void CreateChestCraftEnchant() - { - ArrayList chests = WorldData.GetCustomLocs("54"); - - System.out.println("Map Chest Locations: " + chests.size()); - - int spawn = 0; - Location spawnPoint = UtilWorld.averageLocation(GetTeamList().get(0).GetSpawns()); - - // Chests - System.out.println("Chests: " + Math.min(250, chests.size())); - for (int i = 0; i < 250 && !chests.isEmpty(); i++) - { - Location loc = chests.remove(UtilMath.r(chests.size())); - - fillWithLoot(loc.getBlock()); - if (UtilMath.offset2d(loc, spawnPoint) < 8) - spawn++; - } - - for (Location loc : chests) - { - if (spawn < 10 && UtilMath.offset(loc, spawnPoint) < 8) - { - spawn++; - fillWithLoot(loc.getBlock()); - continue; - } - - loc.getBlock().setType(Material.AIR); - } - } - - private void createLoot() - { - for (SpellType spellType : SpellType.values()) - { - for (int i = 0; i < spellType.getItemAmount(); i++) - { - _randomItems.add(new HashMap.SimpleEntry(spellType.getSpellBook(this), 0)); - } - } - - for (int i = 0; i < 4; i++) - { - _randomItems.add(new HashMap.SimpleEntry(makeUnusedWand(), 0)); - } - - addRandomItem(5, Material.RAW_FISH, 0, 1, 2); - addRandomItem(5, Material.RAW_BEEF, 0, 1, 2); - addRandomItem(5, Material.RAW_CHICKEN, 0, 1, 2); - addRandomItem(5, Material.POTATO_ITEM, 0, 1, 2); - addRandomItem(5, Material.CARROT_ITEM, 0, 1, 2); - addRandomItem(5, Material.WHEAT, 0, 1, 2); - addRandomItem(1, Material.TNT, 0, 1, 1); - addRandomItem(5, Material.ROTTEN_FLESH, 0, 1, 2); - addRandomItem(5, Material.STICK, 0, 1, 2); - addRandomItem(5, Material.WOOD, 0, 1, 10); - addRandomItem(5, Material.BOAT, 0, 1, 2); - addRandomItem(5, Material.FLINT, 0, 1, 2); - addRandomItem(5, Material.FEATHER, 0, 1, 2); - addRandomItem(5, Material.GOLD_INGOT, 0, 1, 2); - addRandomItem(5, Material.LEATHER_BOOTS, 0, 1, 1); - addRandomItem(5, Material.LEATHER_CHESTPLATE, 0, 1, 1); - addRandomItem(5, Material.LEATHER_HELMET, 0, 1, 1); - addRandomItem(5, Material.LEATHER_LEGGINGS, 0, 1, 1); - addRandomItem(3, Material.CHAINMAIL_BOOTS, 0, 1, 1); - addRandomItem(3, Material.CHAINMAIL_CHESTPLATE, 0, 1, 1); - addRandomItem(3, Material.CHAINMAIL_HELMET, 0, 1, 1); - addRandomItem(3, Material.CHAINMAIL_LEGGINGS, 0, 1, 1); - addRandomItem(3, Material.FISHING_ROD, 0, 1, 1); - // addRandomItem(5, Material.BOW, 0, 1, 1); - // addRandomItem(5, Material.ARROW, 0, 1, 5); - addRandomItem(5, Material.PORK, 0, 1, 2); - addRandomItem(5, Material.BAKED_POTATO, 0, 1, 2); - addRandomItem(5, Material.CAKE, 0, 1, 1); - addRandomItem(5, Material.COOKED_BEEF, 0, 1, 2); - addRandomItem(5, Material.COOKED_CHICKEN, 0, 1, 2); - addRandomItem(5, Material.COOKED_FISH, 0, 1, 2); - addRandomItem(5, Material.GRILLED_PORK, 0, 1, 2); - addRandomItem(5, Material.COOKIE, 0, 1, 2); - addRandomItem(5, Material.PUMPKIN_PIE, 0, 1, 2); - addRandomItem(5, Material.APPLE, 0, 1, 2); - addRandomItem(5, Material.IRON_INGOT, 0, 1, 2); - addRandomItem(2, Material.DIAMOND, 0, 1, 1); - addRandomItem(5, Material.EXP_BOTTLE, 0, 1, 2); - addRandomItem(1, Material.IRON_BOOTS, 0, 1, 1); - addRandomItem(1, Material.IRON_CHESTPLATE, 0, 1, 1); - addRandomItem(1, Material.IRON_HELMET, 0, 1, 1); - addRandomItem(1, Material.IRON_LEGGINGS, 0, 1, 1); - } - - @EventHandler - public void CreateRandomChests(GameStateChangeEvent event) - { - if (event.GetState() != GameState.Recruit) - return; - - HashSet ignore = new HashSet(); - - ignore.add(Material.LEAVES); - - int xDiff = WorldData.MaxX - WorldData.MinX; - int zDiff = WorldData.MaxZ - WorldData.MinZ; - - int done = 0; - - while (done < 40) - { - - Block block = UtilBlock.getHighest(WorldData.World, WorldData.MinX + UtilMath.r(xDiff), - WorldData.MinZ + UtilMath.r(zDiff), ignore); - - if (!UtilBlock.airFoliage(block) || !UtilBlock.solid(block.getRelative(BlockFace.DOWN))) - continue; - - block.setTypeIdAndData(54, (byte) UtilMath.r(4), true); - fillWithLoot(block); - done++; - } - } - - public void drawUtilTextBottom(Player player) - { - int heldSlot = player.getInventory().getHeldItemSlot(); - - if (heldSlot >= 0 && heldSlot < 5) - { - Wizard wizard = getWizard(player); - - if (wizard != null) - { - - SpellType type = wizard.getSpell(heldSlot); - - if (type != null) - { - - double usableTime = 0;// Time in seconds till usable - - if (wizard.getMana() < type.getManaCost(wizard)) - { - usableTime = (type.getManaCost(wizard) - wizard.getMana()) / (20 * wizard.getManaPerTick()); - } - - double cooldown = wizard.getCooldown(type) != 0 ? (double) (wizard.getCooldown(type) - System - .currentTimeMillis()) / 1000D : 0; - boolean displayCooldown = false; - - if (cooldown > 0 && cooldown > usableTime) - { - usableTime = cooldown; - displayCooldown = true; - } - - if (usableTime > 0) - { - - usableTime = UtilMath.trim(1, usableTime); - - double maxSeconds = Math.max(type.getSpellCooldown(wizard), - type.getManaCost(wizard) / (wizard.getManaPerTick() * 20)); - - displayProgress(displayCooldown ? C.cRed : C.cDPurple, - type.getElement().getColor() + type.getSpellName(), 1f - (usableTime / maxSeconds), - - (displayCooldown ? - - UtilTime.convertString((long) (usableTime * 1000), 1, TimeUnit.FIT) - - : - - usableTime + (usableTime < 60 ? "s" : "m") + " for mana"), - - player); - - } - else - { - UtilTextBottom.display(type.getElement().getColor() + C.Bold + type.getSpellName(), player); - } - } - else - { - UtilTextBottom.display("Spell Wand", player); - } - } - } - } - - private void displayProgress(String progressColor, String prefix, double amount, String suffix, Player... players) - { - // Generate Bar - int bars = 52; - String progressBar = C.cGreen + ""; - boolean colorChange = false; - for (int i = 0; i < bars; i++) - { - if (!colorChange && (float) i / (float) bars >= amount) - { - progressBar += progressColor;// C.cRed; - colorChange = true; - } - - progressBar += "|"; - } - - // Send to Player - for (Player player : players) - { - // 1.7 - Add Color - if (!UtilPlayer.is1_8(player)) - { - UtilTextTop.displayProgress((prefix == null ? "" : C.cYellow + C.Bold + prefix) - + (suffix == null ? "" : ChatColor.RESET + C.Bold + " - " + C.cGreen + C.Bold + suffix), amount, player); - } - // 1.8 - else - { - UtilTextBottom.display((prefix == null ? "" : prefix + ChatColor.RESET + " ") + progressBar - + (suffix == null ? "" : ChatColor.RESET + " " + suffix), players); - } - } - } - - private void dropSpells(Player player) - { - HashSet spells = new HashSet(); - ArrayList itemsToDrop = new ArrayList(); - ArrayList normalItemsToDrop = UtilInv.getItems(player); - - Wizard wizard = getWizard(player); - int wandsHeld = 0; - - for (int i = 0; i < 5; i++) - { - SpellType type = wizard.getSpell(i); - - if (type != null && type != SpellType.MagicMissile) - { - spells.add(type); - } - } - - Iterator itel = normalItemsToDrop.iterator(); - - while (itel.hasNext()) - { - ItemStack item = itel.next(); - if (item.getType() == Material.BLAZE_ROD) - { - wandsHeld++; - itel.remove(); - } - else if (item.getType() == Material.STAINED_GLASS_PANE) - { - itel.remove(); - } - else - { - player.getWorld().dropItemNaturally(player.getLocation(), item); - } - } - - for (SpellType type : spells) - { - itemsToDrop.add(type.getSpellBook(this)); - } - - if (wandsHeld > 3 || UtilMath.random.nextBoolean()) - { - itemsToDrop.add(makeUnusedWand()); - } - - itemsToDrop.add(new ItemBuilder(Material.NETHER_STAR).setTitle(buildTime()).build()); - - Collections.shuffle(itemsToDrop, new Random()); - - double beginnerAngle = Math.random() * 360; - - for (ItemStack itemstack : itemsToDrop) - { - Item item = player.getWorld().dropItem(player.getLocation(), itemstack); - item.setPickupDelay(60); - - beginnerAngle += 360D / itemsToDrop.size(); - double angle = (((2 * Math.PI) / 360) * beginnerAngle) % 360; - double x = 0.2 * Math.cos(angle); - double z = 0.2 * Math.sin(angle); - - item.setVelocity(new Vector(x, 0.3, z)); - } - } - - private void fillWithLoot(Block block) - { - BlockState state = block.getState(); - if (state instanceof InventoryHolder) - { - - InventoryHolder holder = (InventoryHolder) state; - Inventory inv = holder.getInventory(); - boolean containsSpell = false; - - for (int i = 0; i < 5 || !containsSpell; i++) - { - - Entry entry = _randomItems.get(UtilMath.r(_randomItems.size())); - ItemStack item = entry.getKey().clone(); - - // Every chest has a spell. - if (i > 5 && item.getType() != Material.ENCHANTED_BOOK) - { - continue; - } - - if (!containsSpell) - { - containsSpell = item.getType() == Material.ENCHANTED_BOOK; - } - - item.setAmount(item.getAmount() + UtilMath.r(entry.getValue() + 1)); - inv.setItem(UtilMath.r(inv.getSize()), item); - } - - state.update(); - } - } - - private SpellType getSpell(ItemStack item) - { - if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) - { - String title = item.getItemMeta().getDisplayName(); - title = ChatColor.stripColor(title.substring(title.split(" ")[0].length() + 1)); - - for (SpellType spell : SpellType.values()) - { - if (spell.getSpellName().equals(title)) - return spell; - } - } - - return null; - } - - public Wizard getWizard(org.bukkit.entity.Player player) - { - return _wizards.get(player.getName()); - } - - public ItemStack makeUnusedWand() - { - ItemBuilder builder = new ItemBuilder(Material.BLAZE_ROD); - builder.setTitle(ChatColor.WHITE + "Spell Wand" + buildTime()); - - builder.addLore( - - C.cPurple + C.Bold + "LEFT CLICK" + C.cDGreen + " Cast spell", - - C.cGreen + C.Bold + "RIGHT CLICK" + C.cBlue + " Open Spellbook"); - - return builder.build(); - } - - private void onCastSpell(Player player, Object obj) - { - ItemStack item = player.getItemInHand(); - - if (IsLive() && IsAlive(player) && item != null && item.getType() == Material.BLAZE_ROD - && player.getInventory().getHeldItemSlot() < 5) - { - - Wizard wizard = getWizard(player); - SpellType spell = wizard.getSpell(player.getInventory().getHeldItemSlot()); - - if (spell != null) - { - - int spellLevel = wizard.getSpellLevel(spell); - if (spellLevel > 0) - { - - if (wizard.getCooldown(spell) == 0) - { - - if (wizard.getMana() >= spell.getManaCost(wizard)) - { - - Spell sp = _spells.get(spell); - - if (obj instanceof Block && sp instanceof SpellClickBlock) - { - ((SpellClickBlock) sp).castSpell(player, (Block) obj); - } - - if (wizard.getCooldown(spell) == 0 && obj instanceof Entity && sp instanceof SpellClickEntity) - { - ((SpellClickEntity) sp).castSpell(player, (Entity) obj); - } - - if (wizard.getCooldown(spell) == 0 && sp instanceof SpellClick) - { - ((SpellClick) sp).castSpell(player); - } - } - else - { - player.playSound(player.getLocation(), Sound.FIZZ, 300, 1); - player.sendMessage(ChatColor.BLUE + "The spell sputters and dies."); - player.sendMessage(ChatColor.BLUE + "You do not have enough mana!"); - } - } - else - { - - player.playSound(player.getLocation(), Sound.FIZZ, 300, 1); - player.sendMessage(ChatColor.BLUE + "The spell hasn't recharged yet!"); - - } - - } - - } - } - } - - @EventHandler - public void onChat(PlayerChatEvent event) - { - if (Manager.GetClients().Get(event.getPlayer()).GetRank().Has(Rank.DEVELOPER)) - { - if (event.getMessage().equalsIgnoreCase("spells")) - { - Wizard wizard = getWizard(event.getPlayer()); - for (SpellType type : SpellType.values()) - { - if (wizard.getSpellLevel(type) < type.getMaxLevel()) - { - wizard.learnSpell(type); - } - } - - event.setCancelled(true); - event.getPlayer().sendMessage("All spells leveled up once"); - } - - if (event.getMessage().equalsIgnoreCase("overtime")) - { - setGameLiveTime(System.currentTimeMillis() - (10 * 60 * 1000)); - } - - if (event.getMessage().equalsIgnoreCase("hit me")) - { - summonMeteor(event.getPlayer()); - } - - if (event.getMessage().startsWith("setyield")) - { - _fireballSize = Float.parseFloat(event.getMessage().split(" ")[1]); - } - - if (event.getMessage().equalsIgnoreCase("end game")) - { - sendMeteors(); - event.setCancelled(true); - } - } - } - - @EventHandler - public void onClick(InventoryClickEvent event) - { - ItemStack item = event.getCurrentItem(); - - if (item != null) - { - Player p = (Player) event.getWhoClicked(); - - if (event.getInventory().getHolder() instanceof Chest || event.getInventory().getHolder() instanceof DoubleChest) - { - - if (item != null && item.getType() == Material.ENCHANTED_BOOK) - { - - SpellType spell = getSpell(item); - - if (spell != null) - { - if (onSpellLearn(p, spell)) - { - event.setCurrentItem(new ItemStack(Material.AIR)); - - addMiddleText(p, spell.getElement().getColor() + spell.getSpellName() + " leveled to " - + spell.getElement().getColor() + getWizard(p).getSpellLevel(spell)); - } - } - } - } - - if (item.getType() == Material.BLAZE_ROD - && (event.getClickedInventory().getType() != InventoryType.PLAYER || event.getSlot() > 4)) - { - - if (onGainWand(p)) - { - event.setCancelled(true); - event.setCurrentItem(new ItemStack(Material.AIR)); - } - } - - } - } + private NautHashMap> _learnedSpellChests = new NautHashMap>(); + /** + * The entry is so I can randomize the amounts of the items found + */ + private ArrayList> _randomItems = new ArrayList>(); + private NautHashMap _spells = new NautHashMap(); + private NautHashMap _timeSinceDisplayedMiddle = new NautHashMap(); + private WizardSpellMenu _wizard; + private ArrayList _droppedWandsBooks = new ArrayList(); + private NautHashMap _wizards = new NautHashMap(); + private float _fireballSize = 1.5F; + private int _fireballCounter; + private ArrayList _fireballQueue = new ArrayList(); + private Iterator _fireballItel; + private float _fireballSpeed = 0.05F; + private long _lastFireball; + private long _nextFireball = 400; + + public Wizards(ArcadeManager manager) + { + super(manager, GameType.Wizards, new Kit[0], new String[] + { + + "Find loot and spells in chests", + + "Right click wands to assign spells", + + "Left click with wands to cast magic", + + "The last wizard alive wins!" + + }); + + setKits(new Kit[] + { + new KitMage(manager), + + new KitSorcerer(manager), + + new KitMystic(manager), + + new KitWitchDoctor(manager) + }); + + _wizard = new WizardSpellMenu("Wizard Spell Menu", getArcadeManager().getPlugin(), this); + + BlockBreak = true; + BlockPlace = true; + ItemPickup = true; + ItemDrop = true; + InventoryOpenBlock = true; + InventoryOpenChest = true; + InventoryClick = true; + WorldBlockBurn = true; + DisableKillCommand = false; + SoupEnabled = false; + DamageTeamSelf = true; + + Manager.getCosmeticManager().setHideParticles(true); + Manager.GetDamage().GetCombatManager().setUseWeaponName(AttackReason.DefaultWeaponName); + + createLoot(); + } + + @EventHandler + public void joinMessage(PlayerJoinEvent event) + { + if (!UtilPlayer.is1_8(event.getPlayer())) + returnToHub(event.getPlayer()); + } + + public void returnToHub(Player player) + { + UtilPlayer.message(player, " "); + UtilPlayer.message(player, C.cGold + C.Bold + "Wizards requires you to be using Minecraft 1.8!"); + UtilPlayer.message(player, " "); + + player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); + Manager.GetPortal().sendPlayerToServer(player, "Lobby"); + } + + @EventHandler + public void outdatedVersion(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + return; + + for (Player player : UtilServer.getPlayers()) + { + if (!UtilPlayer.is1_8(player)) + returnToHub(player); + } + } + + private void addMiddleText(Player p, String message) + { + ArrayList arraylist = new ArrayList(); + + if (_learnedSpellChests.containsKey(p.getName())) + { + arraylist = _learnedSpellChests.get(p.getName()); + } + else + { + _learnedSpellChests.put(p.getName(), arraylist); + } + + arraylist.add(message); + } + + private void addRandomItem(int amount, Material itemType, int newDurability, int minAmount, int maxAmount) + { + HashMap.SimpleEntry entry = new HashMap.SimpleEntry(new ItemStack(itemType, minAmount, (short) newDurability), maxAmount + - minAmount); + + for (int i = 0; i < amount; i++) + { + _randomItems.add(entry); + } + } + + public String buildTime() + { + String s = ""; + + for (char c : ("" + System.nanoTime()).toCharArray()) + { + s += "§" + c; + } + + return s; + } + + public void changeWandsTitles(Player player) + { + PlayerInventory inv = player.getInventory(); + Wizard wizard = getWizard(player); + + for (int slot = 0; slot < 5; slot++) + { + ItemStack item = inv.getItem(slot); + SpellType type = wizard.getSpell(slot); + + if (item != null && item.getType() == Material.BLAZE_ROD) + { + ItemMeta meta = item.getItemMeta(); + String display; + + if (type != null) + { + display = C.cYellow + "Mana " + ChatColor.RESET + type.getManaCost(wizard) + + + " " + + + C.cYellow + "Cooldown " + ChatColor.RESET + + + UtilTime.convertString((long) (type.getSpellCooldown(wizard) * 1000), 1, TimeUnit.FIT); + } + else + { + display = C.cWhite + "Right click to set a spell"; + } + + if (!meta.hasDisplayName() || !meta.getDisplayName().equals(display)) + { + meta.setDisplayName(display); + item.setItemMeta(meta); + } + } + } + } + + private void CreateChestCraftEnchant() + { + ArrayList chests = WorldData.GetCustomLocs("54"); + + System.out.println("Map Chest Locations: " + chests.size()); + + int spawn = 0; + Location spawnPoint = UtilWorld.averageLocation(GetTeamList().get(0).GetSpawns()); + + // Chests + System.out.println("Chests: " + Math.min(250, chests.size())); + for (int i = 0; i < 250 && !chests.isEmpty(); i++) + { + Location loc = chests.remove(UtilMath.r(chests.size())); + + fillWithLoot(loc.getBlock()); + if (UtilMath.offset2d(loc, spawnPoint) < 8) + spawn++; + } + + for (Location loc : chests) + { + if (spawn < 10 && UtilMath.offset(loc, spawnPoint) < 8) + { + spawn++; + fillWithLoot(loc.getBlock()); + continue; + } + + loc.getBlock().setType(Material.AIR); + } + } + + private void createLoot() + { + for (SpellType spellType : SpellType.values()) + { + for (int i = 0; i < spellType.getItemAmount(); i++) + { + _randomItems.add(new HashMap.SimpleEntry(spellType.getSpellBook(this), 0)); + } + } + + for (int i = 0; i < 4; i++) + { + _randomItems.add(new HashMap.SimpleEntry(makeUnusedWand(), 0)); + } + + addRandomItem(5, Material.RAW_FISH, 0, 1, 2); + addRandomItem(5, Material.RAW_BEEF, 0, 1, 2); + addRandomItem(5, Material.RAW_CHICKEN, 0, 1, 2); + addRandomItem(5, Material.POTATO_ITEM, 0, 1, 2); + addRandomItem(5, Material.CARROT_ITEM, 0, 1, 2); + addRandomItem(5, Material.WHEAT, 0, 1, 2); + addRandomItem(1, Material.TNT, 0, 1, 1); + addRandomItem(5, Material.ROTTEN_FLESH, 0, 1, 2); + addRandomItem(5, Material.STICK, 0, 1, 2); + addRandomItem(5, Material.WOOD, 0, 1, 10); + addRandomItem(5, Material.BOAT, 0, 1, 2); + addRandomItem(5, Material.FLINT, 0, 1, 2); + addRandomItem(5, Material.FEATHER, 0, 1, 2); + addRandomItem(5, Material.GOLD_INGOT, 0, 1, 2); + addRandomItem(5, Material.LEATHER_BOOTS, 0, 1, 1); + addRandomItem(5, Material.LEATHER_CHESTPLATE, 0, 1, 1); + addRandomItem(5, Material.LEATHER_HELMET, 0, 1, 1); + addRandomItem(5, Material.LEATHER_LEGGINGS, 0, 1, 1); + addRandomItem(3, Material.CHAINMAIL_BOOTS, 0, 1, 1); + addRandomItem(3, Material.CHAINMAIL_CHESTPLATE, 0, 1, 1); + addRandomItem(3, Material.CHAINMAIL_HELMET, 0, 1, 1); + addRandomItem(3, Material.CHAINMAIL_LEGGINGS, 0, 1, 1); + addRandomItem(3, Material.FISHING_ROD, 0, 1, 1); + // addRandomItem(5, Material.BOW, 0, 1, 1); + // addRandomItem(5, Material.ARROW, 0, 1, 5); + addRandomItem(5, Material.PORK, 0, 1, 2); + addRandomItem(5, Material.BAKED_POTATO, 0, 1, 2); + addRandomItem(5, Material.CAKE, 0, 1, 1); + addRandomItem(5, Material.COOKED_BEEF, 0, 1, 2); + addRandomItem(5, Material.COOKED_CHICKEN, 0, 1, 2); + addRandomItem(5, Material.COOKED_FISH, 0, 1, 2); + addRandomItem(5, Material.GRILLED_PORK, 0, 1, 2); + addRandomItem(5, Material.COOKIE, 0, 1, 2); + addRandomItem(5, Material.PUMPKIN_PIE, 0, 1, 2); + addRandomItem(5, Material.APPLE, 0, 1, 2); + addRandomItem(5, Material.IRON_INGOT, 0, 1, 2); + addRandomItem(2, Material.DIAMOND, 0, 1, 1); + addRandomItem(5, Material.EXP_BOTTLE, 0, 1, 2); + addRandomItem(1, Material.IRON_BOOTS, 0, 1, 1); + addRandomItem(1, Material.IRON_CHESTPLATE, 0, 1, 1); + addRandomItem(1, Material.IRON_HELMET, 0, 1, 1); + addRandomItem(1, Material.IRON_LEGGINGS, 0, 1, 1); + } + + @EventHandler + public void CreateRandomChests(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Recruit) + return; + + HashSet ignore = new HashSet(); + + ignore.add(Material.LEAVES); + + int xDiff = WorldData.MaxX - WorldData.MinX; + int zDiff = WorldData.MaxZ - WorldData.MinZ; + + int done = 0; + + while (done < 40) + { + + Block block = UtilBlock.getHighest(WorldData.World, WorldData.MinX + UtilMath.r(xDiff), + WorldData.MinZ + UtilMath.r(zDiff), ignore); + + if (!UtilBlock.airFoliage(block) || !UtilBlock.solid(block.getRelative(BlockFace.DOWN))) + continue; + + block.setTypeIdAndData(54, (byte) UtilMath.r(4), true); + fillWithLoot(block); + done++; + } + } + + public void drawUtilTextBottom(Player player) + { + int heldSlot = player.getInventory().getHeldItemSlot(); + + if (heldSlot >= 0 && heldSlot < 5) + { + Wizard wizard = getWizard(player); + + if (wizard != null) + { + + SpellType type = wizard.getSpell(heldSlot); + + if (type != null) + { + + double usableTime = 0;// Time in seconds till usable + + if (wizard.getMana() < type.getManaCost(wizard)) + { + usableTime = (type.getManaCost(wizard) - wizard.getMana()) / (20 * wizard.getManaPerTick()); + } + + double cooldown = wizard.getCooldown(type) != 0 ? (double) (wizard.getCooldown(type) - System + .currentTimeMillis()) / 1000D : 0; + boolean displayCooldown = false; + + if (cooldown > 0 && cooldown > usableTime) + { + usableTime = cooldown; + displayCooldown = true; + } + + if (usableTime > 0) + { + + usableTime = UtilMath.trim(1, usableTime); + + double maxSeconds = Math.max(type.getSpellCooldown(wizard), + type.getManaCost(wizard) / (wizard.getManaPerTick() * 20)); + + displayProgress(C.cRed, C.cRed + type.getSpellName(), 1f - (usableTime / maxSeconds), + + (displayCooldown ? + + UtilTime.convertString((long) (usableTime * 1000), 1, TimeUnit.FIT) + + : + + usableTime + (usableTime < 60 ? "s" : "m") + " for mana"), + + player); + + } + else + { + UtilTextBottom.display(C.cGreen + C.Bold + type.getSpellName(), player); + } + } + else + { + UtilTextBottom.display("Spell Wand", player); + } + } + } + } + + private void displayProgress(String progressColor, String prefix, double amount, String suffix, Player... players) + { + // Generate Bar + int bars = 52; + String progressBar = C.cGreen + ""; + boolean colorChange = false; + for (int i = 0; i < bars; i++) + { + if (!colorChange && (float) i / (float) bars >= amount) + { + progressBar += progressColor;// C.cRed; + colorChange = true; + } + + progressBar += "|"; + } + + // Send to Player + for (Player player : players) + { + // 1.7 - Add Color + if (!UtilPlayer.is1_8(player)) + { + UtilTextTop.displayProgress((prefix == null ? "" : C.cYellow + C.Bold + prefix) + + (suffix == null ? "" : ChatColor.RESET + C.Bold + " - " + C.cGreen + C.Bold + suffix), amount, player); + } + // 1.8 + else + { + UtilTextBottom.display((prefix == null ? "" : prefix + ChatColor.RESET + " ") + progressBar + + (suffix == null ? "" : ChatColor.RESET + " " + suffix), players); + } + } + } + + private void dropSpells(Player player) + { + HashSet spells = new HashSet(); + ArrayList itemsToDrop = new ArrayList(); + ArrayList normalItemsToDrop = UtilInv.getItems(player); + + Wizard wizard = getWizard(player); + int wandsHeld = 0; + + for (int i = 0; i < 5; i++) + { + SpellType type = wizard.getSpell(i); + + if (type != null && type != SpellType.MagicMissile) + { + spells.add(type); + } + } + + Iterator itel = normalItemsToDrop.iterator(); + + while (itel.hasNext()) + { + ItemStack item = itel.next(); + if (item.getType() == Material.BLAZE_ROD) + { + wandsHeld++; + itel.remove(); + } + else if (item.getType() == Material.STAINED_GLASS_PANE) + { + itel.remove(); + } + else + { + player.getWorld().dropItemNaturally(player.getLocation(), item); + } + } + + for (SpellType type : spells) + { + itemsToDrop.add(type.getSpellBook(this)); + } + + if (wandsHeld > 3 || UtilMath.random.nextBoolean()) + { + itemsToDrop.add(makeUnusedWand()); + } + + itemsToDrop.add(new ItemBuilder(Material.NETHER_STAR).setTitle(buildTime()).build()); + + Collections.shuffle(itemsToDrop, new Random()); + + double beginnerAngle = Math.random() * 360; + + for (ItemStack itemstack : itemsToDrop) + { + Item item = player.getWorld().dropItem(player.getLocation(), itemstack); + item.setPickupDelay(60); + + beginnerAngle += 360D / itemsToDrop.size(); + double angle = (((2 * Math.PI) / 360) * beginnerAngle) % 360; + double x = 0.2 * Math.cos(angle); + double z = 0.2 * Math.sin(angle); + + item.setVelocity(new Vector(x, 0.3, z)); + } + } + + private void fillWithLoot(Block block) + { + BlockState state = block.getState(); + if (state instanceof InventoryHolder) + { + + InventoryHolder holder = (InventoryHolder) state; + Inventory inv = holder.getInventory(); + boolean containsSpell = false; + + for (int i = 0; i < 5 || !containsSpell; i++) + { + + Entry entry = _randomItems.get(UtilMath.r(_randomItems.size())); + ItemStack item = entry.getKey().clone(); + + // Every chest has a spell. + if (i > 5 && item.getType() != Material.ENCHANTED_BOOK) + { + continue; + } + + if (!containsSpell) + { + containsSpell = item.getType() == Material.ENCHANTED_BOOK; + } + + item.setAmount(item.getAmount() + UtilMath.r(entry.getValue() + 1)); + inv.setItem(UtilMath.r(inv.getSize()), item); + } + + state.update(); + } + } + + private SpellType getSpell(ItemStack item) + { + if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) + { + String title = item.getItemMeta().getDisplayName(); + title = ChatColor.stripColor(title.substring(title.split(" ")[0].length() + 1)); + + for (SpellType spell : SpellType.values()) + { + if (spell.getSpellName().equals(title)) + return spell; + } + } + + return null; + } + + public Wizard getWizard(org.bukkit.entity.Player player) + { + return _wizards.get(player.getName()); + } + + public ItemStack makeUnusedWand() + { + ItemBuilder builder = new ItemBuilder(Material.BLAZE_ROD); + builder.setTitle(ChatColor.WHITE + "Spell Wand" + buildTime()); + + builder.addLore( + + C.cPurple + C.Bold + "LEFT CLICK" + C.cDGreen + " Cast spell", + + C.cGreen + C.Bold + "RIGHT CLICK" + C.cBlue + " Open Spellbook"); + + return builder.build(); + } + + private void onCastSpell(Player player, Object obj) + { + ItemStack item = player.getItemInHand(); + + if (IsLive() && IsAlive(player) && item != null && item.getType() == Material.BLAZE_ROD + && player.getInventory().getHeldItemSlot() < 5) + { + + Wizard wizard = getWizard(player); + SpellType spell = wizard.getSpell(player.getInventory().getHeldItemSlot()); + + if (spell != null) + { + castSpell(player, wizard, spell, obj); + } + } + } + + public void castSpell(Player player, Wizard wizard, SpellType spell, Object interacted) + { + + int spellLevel = wizard.getSpellLevel(spell); + if (spellLevel > 0) + { + + if (wizard.getCooldown(spell) == 0) + { + + if (wizard.getMana() >= spell.getManaCost(wizard)) + { + + Spell sp = _spells.get(spell); + + if (interacted instanceof Block && sp instanceof SpellClickBlock) + { + ((SpellClickBlock) sp).castSpell(player, (Block) interacted); + } + + if (wizard.getCooldown(spell) == 0 && interacted instanceof Entity && sp instanceof SpellClickEntity) + { + ((SpellClickEntity) sp).castSpell(player, (Entity) interacted); + } + + if (wizard.getCooldown(spell) == 0 && sp instanceof SpellClick) + { + ((SpellClick) sp).castSpell(player); + } + } + else + { + player.playSound(player.getLocation(), Sound.FIZZ, 300, 1); + player.sendMessage(ChatColor.BLUE + "The spell sputters and dies."); + player.sendMessage(ChatColor.BLUE + "You do not have enough mana!"); + } + } + else + { + + player.playSound(player.getLocation(), Sound.FIZZ, 300, 1); + player.sendMessage(ChatColor.BLUE + "The spell hasn't recharged yet!"); + + } + + } + } + + @EventHandler + public void onChat(PlayerChatEvent event) + { + if (Manager.GetClients().Get(event.getPlayer()).GetRank().Has(Rank.DEVELOPER)) + { + if (event.getMessage().equalsIgnoreCase("spells")) + { + Wizard wizard = getWizard(event.getPlayer()); + for (SpellType type : SpellType.values()) + { + if (wizard.getSpellLevel(type) < type.getMaxLevel()) + { + wizard.learnSpell(type); + } + } + + event.setCancelled(true); + event.getPlayer().sendMessage("All spells leveled up once"); + } + + if (event.getMessage().equalsIgnoreCase("overtime")) + { + setGameLiveTime(System.currentTimeMillis() - (10 * 60 * 1000)); + } + + if (event.getMessage().equalsIgnoreCase("hit me")) + { + summonMeteor(event.getPlayer().getLocation(), _fireballSize); + } + + if (event.getMessage().startsWith("setyield")) + { + _fireballSize = Float.parseFloat(event.getMessage().split(" ")[1]); + } + } + } + + @EventHandler + public void onClick(InventoryClickEvent event) + { + ItemStack item = event.getCurrentItem(); + + if (item != null) + { + Player p = (Player) event.getWhoClicked(); + + if (event.getInventory().getHolder() instanceof Chest || event.getInventory().getHolder() instanceof DoubleChest) + { + + if (item != null && item.getType() == Material.ENCHANTED_BOOK) + { + + SpellType spell = getSpell(item); + + if (spell != null) + { + if (onSpellLearn(p, spell)) + { + event.setCurrentItem(new ItemStack(Material.AIR)); + + addMiddleText(p, spell.getElement().getColor() + spell.getSpellName() + " leveled to " + + spell.getElement().getColor() + getWizard(p).getSpellLevel(spell)); + } + } + } + } + + if (item.getType() == Material.BLAZE_ROD + && (event.getClickedInventory().getType() != InventoryType.PLAYER || event.getSlot() > 4)) + { + + if (onGainWand(p)) + { + event.setCancelled(true); + event.setCurrentItem(new ItemStack(Material.AIR)); + } + } + + } + } + + @EventHandler + public void onDamage(EntityDamageByEntityEvent event) + { + if (IsAlive(event.getDamager())) + { + onCastSpell((Player) event.getDamager(), event.getEntity()); - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) - { - if (IsAlive(event.getDamager())) - { - onCastSpell((Player) event.getDamager(), event.getEntity()); + if (event.getDamage() > 0.5) + { + event.setDamage(0.5); + if (event.getEntity() instanceof LivingEntity) + { + UtilParticle.PlayParticle((Player) event.getDamager(), ParticleType.HEART, + ((LivingEntity) event.getEntity()).getEyeLocation(), 0, 0, 0, 0, 1); + } + } + } + } + + @EventHandler + public void onDeath(PlayerDeathEvent event) + { + if (IsAlive(event.getEntity())) + { + dropSpells(event.getEntity()); + + Iterator itel = event.getDrops().iterator(); + + while (itel.hasNext()) + { + ItemStack item = itel.next(); - if (event.getDamage() > 0.5) - { - event.setDamage(0.5); - if (event.getEntity() instanceof LivingEntity) - { - UtilParticle.PlayParticle((Player) event.getDamager(), ParticleType.HEART, - ((LivingEntity) event.getEntity()).getEyeLocation(), 0, 0, 0, 0, 1); - } - } - } - } - - @EventHandler - public void onDeath(PlayerDeathEvent event) - { - if (IsAlive(event.getEntity())) - { - dropSpells(event.getEntity()); + if (item.getType() == Material.BLAZE_ROD || item.getType() == Material.STAINED_GLASS_PANE) + { + itel.remove(); + } + } + } - Iterator itel = event.getDrops().iterator(); + _wizards.remove(event.getEntity().getName()); + } - while (itel.hasNext()) - { - ItemStack item = itel.next(); + @EventHandler + public void onDropItem(ItemSpawnEvent event) + { + ItemStack item = event.getEntity().getItemStack(); - if (item.getType() == Material.BLAZE_ROD || item.getType() == Material.STAINED_GLASS_PANE) - { - itel.remove(); - } - } - } + if (item.getType() == Material.ENCHANTED_BOOK) + { + + SpellType spell = getSpell(item); + + if (spell != null) + { + + Hologram holo = new Hologram(getArcadeManager().getHologramManager(), + + event.getEntity().getLocation().add(0, 1, 0), + + C.cDPurple + C.Bold + "Spellbook", + + spell.getElement().getColor() + spell.getSpellName()); + + holo.setFollowEntity(event.getEntity()); + + holo.setRemoveOnEntityDeath(); + + holo.start(); + + _droppedWandsBooks.add(event.getEntity()); + + } + } + else if (item.getType() == Material.BLAZE_ROD) + { + + Hologram holo = new Hologram(getArcadeManager().getHologramManager(), + + event.getEntity().getLocation().add(0, 1, 0), + + C.Bold + "Spell Wand"); + + holo.setFollowEntity(event.getEntity()); + + holo.setRemoveOnEntityDeath(); + + holo.start(); + + _droppedWandsBooks.add(event.getEntity()); + } + else if (item.getType() == Material.NETHER_STAR) + { + Hologram holo = new Hologram(getArcadeManager().getHologramManager(), + + event.getEntity().getLocation().add(0, 1, 0), + + C.Bold + "Wizard Soul"); + + holo.setFollowEntity(event.getEntity()); + + holo.setRemoveOnEntityDeath(); + + holo.start(); + + _droppedWandsBooks.add(event.getEntity()); + } + else if (item.getType() == Material.BOOK) + { + event.getEntity().remove(); + } + } + + @EventHandler + public void onDropItem(PlayerDropItemEvent event) + { + if (event.getPlayer().getInventory().getHeldItemSlot() < 5) + { + event.setCancelled(true); + } + } + + @EventHandler + public void onEndOrPrepare(GameStateChangeEvent event) + { + if (event.GetState() == GameState.Live) + { + for (SpellType spells : SpellType.values()) + { + try + { + Spell spell = spells.getSpellClass().newInstance(); + + if (!(spell instanceof SpellClick || spell instanceof SpellClickBlock || spell instanceof SpellClickEntity)) + throw new IllegalClassException(spells.getSpellName() + "'s spell class doesn't extend a spell interface"); + + spell.setSpellType(spells); + spell.Wizards = this; + + _spells.put(spells, spell); + + Bukkit.getPluginManager().registerEvents(spell, getArcadeManager().getPlugin()); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + } + else if (event.GetState() == GameState.Dead || event.GetState() == GameState.End) + { + for (Spell spell : _spells.values()) + { + HandlerList.unregisterAll(spell); + } + _spells.clear(); + } + } + + private boolean onGainWand(Player p) + { + int slot = p.getInventory().first(Material.STAINED_GLASS_PANE); + + if (slot >= 0 && slot < 5) + { + p.getInventory().setItem(slot, + new ItemBuilder(makeUnusedWand()).setTitle(C.cWhite + "Right click to set a spell").build()); + + p.updateInventory(); + + addMiddleText(p, C.cGold + "Gained a wand"); + } + else + { + Wizard wizard = getWizard(p); + + if (wizard.getMana() < wizard.getMaxMana()) + { + wizard.setMana(wizard.getMaxMana()); + addMiddleText(p, ChatColor.GOLD + "Converted wand into mana"); + } + } + + return true; + } + + private void onGainSoulStar(Player p) + { + Wizard wizard = getWizard(p); + addMiddleText(p, ChatColor.GOLD + "Absorbed Wizard Soul"); + wizard.addSoulStar(); + drawUtilTextBottom(p); + } + + @EventHandler + public void onGameEnd(GameStateChangeEvent event) + { + if (event.GetState() == GameState.End || event.GetState() == GameState.Dead) + { + HandlerList.unregisterAll(_wizard); + } + } + + @EventHandler + public void onInteract(PlayerInteractEvent event) + { + ItemStack item = event.getItem(); + if (item != null) + { + + Player p = event.getPlayer(); + if (event.getAction().name().contains("LEFT")) + { + + if (item.getType() == Material.BLAZE_ROD) + { + + onCastSpell(p, event.getClickedBlock()); + } + } + } + } + + @EventHandler + public void onItemClick(InventoryClickEvent event) + { + int slot = event.getClick().isKeyboardClick() ? event.getHotbarButton() : event.getSlot(); + + if (slot >= 0 && slot < 5 + && (event.getClickedInventory().getType() == InventoryType.PLAYER || event.getClick() == ClickType.NUMBER_KEY)) + { + event.setCancelled(true); + ((Player) event.getWhoClicked()).updateInventory(); + } + } + + @EventHandler + public void onLive(GameStateChangeEvent event) + { + if (event.GetState() == GameState.Live) + { + for (Player player : GetPlayers(true)) + { + Kit kit = GetKit(player); + Wizard wizard = new Wizard(kit instanceof KitWitchDoctor ? 150 : 100); + + _wizards.put(player.getName(), wizard); + + if (kit instanceof KitMage) + { + for (int a = 0; a < 2; a++) + { + for (int i = 0; i < 100; i++) + { + SpellType spell = SpellType.values()[UtilMath.r(SpellType.values().length)]; + + if (wizard.getSpellLevel(spell) < spell.getMaxLevel()) + { + onSpellLearn(player, spell); + + addMiddleText(player, spell.getElement().getColor() + spell.getSpellName() + " leveled to " + + spell.getElement().getColor() + wizard.getSpellLevel(spell)); + + break; + } + } + } + } + else if (kit instanceof KitMystic) + { + wizard.setManaPerTick(wizard.getManaPerTick() * 1.1F); + } + + changeWandsTitles(player); + } + } + } + + @EventHandler + public void onPickup(PlayerPickupItemEvent event) + { + ItemStack item = event.getItem().getItemStack(); + Player p = event.getPlayer(); + + if (IsAlive(p)) + { + + if (item.getType() == Material.BLAZE_ROD) + { + + if (onGainWand(p)) + { + event.setCancelled(true); + event.getItem().remove(); + } + + } + else if (item.getType() == Material.ENCHANTED_BOOK) + { + + SpellType spell = getSpell(item); + + if (spell != null) + { + + if (onSpellLearn(p, spell)) + { + Wizard wizard = getWizard(p); + + addMiddleText(p, spell.getElement().getColor() + spell.getSpellName() + " leveled to " + + spell.getElement().getColor() + wizard.getSpellLevel(spell)); + + event.setCancelled(true); + event.getItem().remove(); + } + } + + } + else if (item.getType() == Material.NETHER_STAR) + { + onGainSoulStar(p); + + event.setCancelled(true); + event.getItem().remove(); + } + } + } + + @EventHandler + public void onQuit(PlayerQuitEvent event) + { + Player p = event.getPlayer(); + + if (IsAlive(p)) + { + dropSpells(p); + } + + _wizards.remove(p.getName()); + _learnedSpellChests.remove(p.getName()); + } + + @EventHandler + public void checkPickupBooks(UpdateEvent event) + { + if (event.getType() == UpdateType.TICK && IsLive()) + { + Iterator itel = _droppedWandsBooks.iterator(); + + while (itel.hasNext()) + { + Item item = itel.next(); + + if (item.isValid()) + { + Player player = UtilPlayer.getClosest(item.getLocation(), (Entity) null); + + if (player != null && player.getLocation().distance(item.getLocation()) < 1.7) + { + onPickup(new PlayerPickupItemEvent(player, item, 0)); + } + } + + if (!item.isValid()) + { + itel.remove(); + } + } + } + } + + @EventHandler + public void updateMiddleText(UpdateEvent event) + { + if (event.getType() == UpdateType.TICK && IsLive()) + { + Iterator>> itel = _learnedSpellChests.entrySet().iterator(); + + while (itel.hasNext()) + { + + Entry> entry = itel.next(); + + Player p = Bukkit.getPlayerExact(entry.getKey()); + + if (p != null && IsAlive(p)) + { + // If 40 ticks has passed since last sent the middle text, send another. + + if ((!_timeSinceDisplayedMiddle.containsKey(entry.getKey()) || _timeSinceDisplayedMiddle.get(entry.getKey()) <= System + .currentTimeMillis()) && p.getOpenInventory().getTopInventory().getHolder() == p) + { + + UtilTextMiddle.display("", entry.getValue().remove(0), 5, 30, 5, p); + + if (entry.getValue().isEmpty()) + { + itel.remove(); + } + + else + { + + _timeSinceDisplayedMiddle.put(entry.getKey(), System.currentTimeMillis() + 3000L); + + } + + } + } + else + { + itel.remove(); + _timeSinceDisplayedMiddle.remove(entry.getKey()); + } + } + } + } + + private boolean onSpellLearn(Player p, SpellType spell) + { + Wizard wiz = getWizard(p); + + int spellLevel = wiz.getSpellLevel(spell); + + if (spellLevel < spell.getMaxLevel()) + { + wiz.learnSpell(spell); + } + else if (wiz.getMana() < wiz.getMaxMana()) + { + wiz.setMana(Math.min(wiz.getMaxMana(), wiz.getMana() + 50)); + addMiddleText(p, ChatColor.GOLD + "Converted spellbook into mana"); + } + + return true; + } + + @EventHandler + public void onSwapItem(PlayerItemHeldEvent event) + { + if (IsLive()) + { + Player p = event.getPlayer(); + + if (event.getNewSlot() >= 0 && event.getNewSlot() < 5) + { + drawUtilTextBottom(p); + } + else + { + + // Get rid of the old wand message + if (event.getPreviousSlot() >= 0 && event.getPreviousSlot() < 5) + { + UtilTextBottom.display(C.Bold, p); + } + } + } + } + + @EventHandler + public void updateMana(UpdateEvent event) + { + if ((event.getType() == UpdateType.TICK) && GetState() == GameState.Live) + { + Iterator> itel = _wizards.entrySet().iterator(); + + while (itel.hasNext()) + { + Entry entry = itel.next(); + Player player = Bukkit.getPlayerExact(entry.getKey()); + + Wizard wizard = getWizard(player); + float newMana = wizard.getMana(); + + if (newMana < wizard.getMaxMana()) + { + newMana = Math.min(newMana + wizard.getManaPerTick(), wizard.getMaxMana()); + wizard.setMana(newMana); + } + + float percentage = Math.min(1, wizard.getMana() / wizard.getMaxMana()); + + String text = (int) Math.floor(wizard.getMana()) + "/" + (int) wizard.getMaxMana() + " mana " + + UtilTime.convert((int) (wizard.getManaPerTick() * 20000), 1, TimeUnit.SECONDS) + "mps"; + + UtilTextTop.displayTextBar(player, percentage, text); + + drawUtilTextBottom(player); + } + } + } + + @EventHandler + public void onUnplaceablePlace(BlockPlaceEvent event) + { + if (event.getPlayer().getInventory().getHeldItemSlot() < 5) + { + event.setCancelled(true); + } + } + + @EventHandler + public void onWeaponCraft(PrepareItemCraftEvent event) + { + Recipe recipe = event.getRecipe(); + + ItemStack result = recipe != null ? recipe.getResult() : null; + + if (result != null && (result.getType().name().contains("_SWORD") || result.getType().name().contains("_AXE"))) + { + event.getInventory().setResult(new ItemStack(Material.AIR)); + UtilPlayer.message(event.getViewers().get(0), C.cRed + "You may not craft weaponsa"); + } + } + + @Override + public void ParseData() + { + CreateChestCraftEnchant(); + } + + private int _lastGamePace; + + @EventHandler + public void increaseGamePace(UpdateEvent event) + { + + if (event.getType() != UpdateType.SEC) + return; + + if (!IsLive()) + return; + + int timesShouldIncrease = (int) Math.floor((System.currentTimeMillis() - getGameLiveTime()) / 60000D); + + if (timesShouldIncrease < 10 && timesShouldIncrease != _lastGamePace + && (timesShouldIncrease % 2 == 0 || timesShouldIncrease == 9)) + { + _lastGamePace = timesShouldIncrease; + + Announce(C.cYellow + C.Bold + "Power surges through the battlefield!"); + Announce(C.cYellow + C.Bold + "Mana cost and spell cooldown has been lowered!", false); + + for (Player player : GetPlayers(true)) + { + Wizard wizard = getWizard(player); + + wizard.decreaseCooldown(); + + changeWandsTitles(player); + } + } + } + + @EventHandler + public void onMeteorHit(ProjectileHitEvent event) + { + Projectile projectile = event.getEntity(); + + if (projectile.hasMetadata("Meteor")) + { + projectile.remove(); + + CustomExplosion explosion = new CustomExplosion(getArcadeManager().GetDamage(), getArcadeManager().GetExplosion(), + projectile.getLocation(), _fireballSize, "Meteor"); + + explosion.setBlockExplosionSize(explosion.size * 2F); + + explosion.setFallingBlockExplosion(true); + + explosion.setDropItems(false); + + explosion.setBlocksDamagedEqually(true); + + explosion.explode(); + } + } + + @EventHandler + public void summonMeteors(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + return; + + if (!IsLive()) + return; + + if (System.currentTimeMillis() > getGameLiveTime() + (20 * 60 * 1000)) + { + ArrayList players = new ArrayList(GetPlayers(true)); + + Collections.sort(players, new Comparator() + { + + @Override + public int compare(Player o1, Player o2) + { + // Compare them backwards so the lesser health people are last + // Just so the bigger camper loses more. + return new Double(o2.getHealth()).compareTo(o1.getHealth()); + } + }); + + Iterator itel = players.iterator(); + + while (itel.hasNext()) + { + Player player = itel.next(); + + // Don't kill them if they are the last person in this list. + if (itel.hasNext()) + { + this.getArcadeManager() + .GetDamage() + .NewDamageEvent(player, null, null, DamageCause.ENTITY_EXPLOSION, 9999, false, true, true, "Meteor", + "Meteor"); + } + } + } + } + + @EventHandler + public void sendMeteors(UpdateEvent event) + { + if (!IsLive()) + { + return; + } + + if (event.getType() != UpdateType.TICK) + { + return; + } + + if (System.currentTimeMillis() <= getGameLiveTime() + (10 * 60 * 1000)) + { + return; + } + + if (_fireballCounter < 7) + { + if (_fireballCounter == 0) + { + Announce(C.cYellow + C.Bold + "Broken is the cage, the skies scream with rage!"); + } + else if (_fireballCounter == 2) + { + Announce(C.cYellow + C.Bold + "The ground trembles with fear, your doom is here!"); + } + else if (_fireballCounter == 4) + { + Announce(C.cYellow + C.Bold + "Where the wizards stand, meteors strike the land!"); + } + else if (_fireballCounter == 6) + { + Announce(C.cYellow + C.Bold + "Fight to the death! Fight with your dying breath!"); + } + + _fireballCounter++; + } + + if (_fireballCounter >= 6 && UtilTime.elapsed(_lastFireball, _nextFireball)) + { + _fireballSpeed += 0.01; + _fireballSize += 0.08; + + _nextFireball--; + _lastFireball = System.currentTimeMillis(); + + Location loc; + + if (UtilMath.r(3) != 0) + { + loc = new Location(WorldData.World, WorldData.MinX + UtilMath.r(WorldData.MaxX - WorldData.MinX), 0, + WorldData.MinZ + UtilMath.r(WorldData.MaxZ - WorldData.MinZ)); + + loc = loc.getWorld().getHighestBlockAt(loc).getLocation(); + } + else + { + if (_fireballQueue.isEmpty()) + { + _fireballQueue = GetPlayers(true); + } + + if (_fireballItel == null || !_fireballItel.hasNext()) + { + _fireballItel = _fireballQueue.iterator(); + } + + loc = _fireballItel.next().getLocation(); + + } + + summonMeteor(loc, _fireballSize); + + } + } + + private void summonMeteor(Location loc, float fireballSize) + { + Vector vector = new Vector(UtilMath.random.nextDouble() - 0.5D, 0.8, UtilMath.random.nextDouble() - 0.5D).normalize(); + + vector.multiply(40); + + loc.add((UtilMath.random.nextDouble() - 0.5) * 7, 0, (UtilMath.random.nextDouble() - 0.5) * 7); + + loc.add(vector); + + final Fireball fireball = (Fireball) loc.getWorld().spawnEntity(loc, EntityType.FIREBALL); + + fireball.setMetadata("Meteor", new FixedMetadataValue(getArcadeManager().getPlugin(), fireballSize)); + + new BukkitRunnable() + { + int i; + + public void run() + { + if (fireball.isValid() && IsLive()) + { + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, fireball.getLocation(), 0.3F, 0.3F, 0.3F, 0, 3); + + if (i++ % 6 == 0) + { + fireball.getWorld().playSound(fireball.getLocation(), Sound.CAT_HISS, 1.4F, 0F); + } + } + else + { + cancel(); + } + } + }.runTaskTimer(getArcadeManager().getPlugin(), 0, 0); + + vector.normalize().multiply(-(0.04 + ((_fireballSpeed - 0.05) / 2))); + + // We can't call the bukkit methods because for some weird reason, it enforces a certain speed. + EntityFireball eFireball = ((CraftFireball) fireball).getHandle(); + eFireball.dirX = vector.getX(); + eFireball.dirY = vector.getY(); + eFireball.dirZ = vector.getZ(); + + fireball.setBounce(false); + fireball.setYield(0); + fireball.setIsIncendiary(true); + fireball.setFireTicks(9999); + } - _wizards.remove(event.getEntity().getName()); - } + @EventHandler + public void removeDamageToLevel(CustomDamageEvent event) + { + event.SetDamageToLevel(false); + } - @EventHandler - public void onDropItem(ItemSpawnEvent event) - { - ItemStack item = event.getEntity().getItemStack(); + @EventHandler + public void ScoreboardUpdate(UpdateEvent event) + { + GetScoreboard().Reset(); - if (item.getType() == Material.ENCHANTED_BOOK) - { - - SpellType spell = getSpell(item); - - if (spell != null) - { - - Hologram holo = new Hologram(getArcadeManager().getHologramManager(), - - event.getEntity().getLocation().add(0, 1, 0), - - C.cDPurple + C.Bold + "Spellbook", - - spell.getElement().getColor() + spell.getSpellName()); - - holo.setFollowEntity(event.getEntity()); - - holo.setRemoveOnEntityDeath(); - - holo.start(); - - _droppedWandsBooks.add(event.getEntity()); - - } - } - else if (item.getType() == Material.BLAZE_ROD) - { - - Hologram holo = new Hologram(getArcadeManager().getHologramManager(), - - event.getEntity().getLocation().add(0, 1, 0), - - C.Bold + "Spell Wand"); - - holo.setFollowEntity(event.getEntity()); - - holo.setRemoveOnEntityDeath(); - - holo.start(); - - _droppedWandsBooks.add(event.getEntity()); - } - else if (item.getType() == Material.NETHER_STAR) - { - Hologram holo = new Hologram(getArcadeManager().getHologramManager(), - - event.getEntity().getLocation().add(0, 1, 0), - - C.Bold + "Wizard Soul"); - - holo.setFollowEntity(event.getEntity()); - - holo.setRemoveOnEntityDeath(); - - holo.start(); - - _droppedWandsBooks.add(event.getEntity()); - } - else if (item.getType() == Material.BOOK) - { - event.getEntity().remove(); - } - } - - @EventHandler - public void onDropItem(PlayerDropItemEvent event) - { - if (event.getPlayer().getInventory().getHeldItemSlot() < 5) - { - event.setCancelled(true); - } - } - - @EventHandler - public void onEndOrPrepare(GameStateChangeEvent event) - { - if (event.GetState() == GameState.Live) - { - for (SpellType spells : SpellType.values()) - { - try - { - Spell spell = spells.getSpellClass().newInstance(); - - if (!(spell instanceof SpellClick || spell instanceof SpellClickBlock || spell instanceof SpellClickEntity)) - throw new IllegalClassException(spells.getSpellName() + "'s spell class doesn't extend a spell interface"); - - spell.setSpellType(spells); - spell.Wizards = this; - - _spells.put(spells, spell); - - Bukkit.getPluginManager().registerEvents(spell, getArcadeManager().getPlugin()); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - } - else if (event.GetState() == GameState.Dead || event.GetState() == GameState.End) - { - for (Spell spell : _spells.values()) - { - HandlerList.unregisterAll(spell); - } - _spells.clear(); - } - } - - private boolean onGainWand(Player p) - { - int slot = p.getInventory().first(Material.STAINED_GLASS_PANE); - - if (slot >= 0 && slot < 5) - { - p.getInventory().setItem(slot, - new ItemBuilder(makeUnusedWand()).setTitle(C.cWhite + "Right click to set a spell").build()); - - p.updateInventory(); - - addMiddleText(p, C.cGold + "Gained a wand"); - } - else - { - Wizard wizard = getWizard(p); - - if (wizard.getMana() < wizard.getMaxMana()) - { - wizard.setMana(wizard.getMaxMana()); - addMiddleText(p, ChatColor.GOLD + "Converted wand into mana"); - } - } - - return true; - } - - private void onGainSoulStar(Player p) - { - Wizard wizard = getWizard(p); - addMiddleText(p, ChatColor.GOLD + "Absorbed Wizard Soul"); - wizard.addSoulStar(); - drawUtilTextBottom(p); - } - - @EventHandler - public void onGameEnd(GameStateChangeEvent event) - { - if (event.GetState() == GameState.End || event.GetState() == GameState.Dead) - { - HandlerList.unregisterAll(_wizard); - } - } - - @EventHandler - public void onInteract(PlayerInteractEvent event) - { - ItemStack item = event.getItem(); - if (item != null) - { - - Player p = event.getPlayer(); - if (event.getAction().name().contains("LEFT")) - { - - if (item.getType() == Material.BLAZE_ROD) - { - - onCastSpell(p, event.getClickedBlock()); - } - } - } - } - - @EventHandler - public void onItemClick(InventoryClickEvent event) - { - int slot = event.getClick().isKeyboardClick() ? event.getHotbarButton() : event.getSlot(); - - if (slot >= 0 && slot < 5 - && (event.getClickedInventory().getType() == InventoryType.PLAYER || event.getClick() == ClickType.NUMBER_KEY)) - { - event.setCancelled(true); - ((Player) event.getWhoClicked()).updateInventory(); - } - } - - @EventHandler - public void onLive(GameStateChangeEvent event) - { - if (event.GetState() == GameState.Live) - { - for (Player player : GetPlayers(true)) - { - Kit kit = GetKit(player); - Wizard wizard = new Wizard(kit instanceof KitWitchDoctor ? 150 : 100); - - _wizards.put(player.getName(), wizard); - - if (kit instanceof KitMage) - { - for (int a = 0; a < 2; a++) - { - for (int i = 0; i < 100; i++) - { - SpellType spell = SpellType.values()[UtilMath.r(SpellType.values().length)]; - - if (wizard.getSpellLevel(spell) < spell.getMaxLevel()) - { - onSpellLearn(player, spell); - - addMiddleText(player, spell.getElement().getColor() + spell.getSpellName() + " leveled to " - + spell.getElement().getColor() + wizard.getSpellLevel(spell)); - - break; - } - } - } - } - else if (kit instanceof KitMystic) - { - wizard.setManaPerTick(wizard.getManaPerTick() * 1.1F); - } - - changeWandsTitles(player); - } - } - } - - @EventHandler - public void onPickup(PlayerPickupItemEvent event) - { - ItemStack item = event.getItem().getItemStack(); - Player p = event.getPlayer(); - - if (IsAlive(p)) - { - - if (item.getType() == Material.BLAZE_ROD) - { - - if (onGainWand(p)) - { - event.setCancelled(true); - event.getItem().remove(); - } - - } - else if (item.getType() == Material.ENCHANTED_BOOK) - { - - SpellType spell = getSpell(item); - - if (spell != null) - { - - if (onSpellLearn(p, spell)) - { - Wizard wizard = getWizard(p); - - addMiddleText(p, spell.getElement().getColor() + spell.getSpellName() + " leveled to " - + spell.getElement().getColor() + wizard.getSpellLevel(spell)); - - event.setCancelled(true); - event.getItem().remove(); - } - } - - } - else if (item.getType() == Material.NETHER_STAR) - { - onGainSoulStar(p); - - event.setCancelled(true); - event.getItem().remove(); - } - } - } - - @EventHandler - public void onQuit(PlayerQuitEvent event) - { - Player p = event.getPlayer(); - - if (IsAlive(p)) - { - dropSpells(p); - } - - _wizards.remove(p.getName()); - _learnedSpellChests.remove(p.getName()); - } - - @EventHandler - public void checkPickupBooks(UpdateEvent event) - { - if (event.getType() == UpdateType.TICK && IsLive()) - { - Iterator itel = _droppedWandsBooks.iterator(); - - while (itel.hasNext()) - { - Item item = itel.next(); - - if (item.isValid()) - { - Player player = UtilPlayer.getClosest(item.getLocation(), (Entity) null); - - if (player != null && player.getLocation().distance(item.getLocation()) < 1.7) - { - onPickup(new PlayerPickupItemEvent(player, item, 0)); - } - } - - if (!item.isValid()) - { - itel.remove(); - } - } - } - } - - @EventHandler - public void updateMiddleText(UpdateEvent event) - { - if (event.getType() == UpdateType.TICK && IsLive()) - { - Iterator>> itel = _learnedSpellChests.entrySet().iterator(); - - while (itel.hasNext()) - { - - Entry> entry = itel.next(); - - Player p = Bukkit.getPlayerExact(entry.getKey()); - - if (p != null && IsAlive(p)) - { - // If 40 ticks has passed since last sent the middle text, send another. - - if ((!_timeSinceDisplayedMiddle.containsKey(entry.getKey()) || _timeSinceDisplayedMiddle.get(entry.getKey()) <= System - .currentTimeMillis()) && p.getOpenInventory().getTopInventory().getHolder() == p) - { - - UtilTextMiddle.display("", entry.getValue().remove(0), 5, 30, 5, p); - - if (entry.getValue().isEmpty()) - { - itel.remove(); - } - - else - { - - _timeSinceDisplayedMiddle.put(entry.getKey(), System.currentTimeMillis() + 3000L); - - } - - } - } - else - { - itel.remove(); - _timeSinceDisplayedMiddle.remove(entry.getKey()); - } - } - } - } - - private boolean onSpellLearn(Player p, SpellType spell) - { - Wizard wiz = getWizard(p); - - int spellLevel = wiz.getSpellLevel(spell); - - if (spellLevel < spell.getMaxLevel()) - { - wiz.learnSpell(spell); - } - else if (wiz.getMana() < wiz.getMaxMana()) - { - wiz.setMana(Math.min(wiz.getMaxMana(), wiz.getMana() + 50)); - addMiddleText(p, ChatColor.GOLD + "Converted spellbook into mana"); - } - - return true; - } - - @EventHandler - public void onSwapItem(PlayerItemHeldEvent event) - { - if (IsLive()) - { - Player p = event.getPlayer(); - - if (event.getNewSlot() >= 0 && event.getNewSlot() < 5) - { - drawUtilTextBottom(p); - } - else - { - - // Get rid of the old wand message - if (event.getPreviousSlot() >= 0 && event.getPreviousSlot() < 5) - { - UtilTextBottom.display(C.Bold, p); - } - } - } - } - - @EventHandler - public void updateMana(UpdateEvent event) - { - if ((event.getType() == UpdateType.TICK) && GetState() == GameState.Live) - { - Iterator> itel = _wizards.entrySet().iterator(); - - while (itel.hasNext()) - { - Entry entry = itel.next(); - Player player = Bukkit.getPlayerExact(entry.getKey()); - - Wizard wizard = getWizard(player); - float newMana = wizard.getMana(); - - if (newMana < wizard.getMaxMana()) - { - newMana = Math.min(newMana + wizard.getManaPerTick(), wizard.getMaxMana()); - wizard.setMana(newMana); - } - - float percentage = Math.min(1, wizard.getMana() / wizard.getMaxMana()); - - String text = (int) Math.floor(wizard.getMana()) + "/" + (int) wizard.getMaxMana() + " mana " - + UtilTime.convert((int) (wizard.getManaPerTick() * 20000), 1, TimeUnit.SECONDS) + "mps"; - - UtilTextTop.displayTextBar(player, percentage, text); - - drawUtilTextBottom(player); - } - } - } - - @EventHandler - public void onUnplaceablePlace(BlockPlaceEvent event) - { - if (event.getPlayer().getInventory().getHeldItemSlot() < 5) - { - event.setCancelled(true); - } - } - - @EventHandler - public void onWeaponCraft(PrepareItemCraftEvent event) - { - Recipe recipe = event.getRecipe(); - - ItemStack result = recipe != null ? recipe.getResult() : null; - - if (result != null && (result.getType().name().contains("_SWORD") || result.getType().name().contains("_AXE"))) - { - event.getInventory().setResult(new ItemStack(Material.AIR)); - UtilPlayer.message(event.getViewers().get(0), C.cRed + "You may not craft weaponsa"); - } - } - - @Override - public void ParseData() - { - CreateChestCraftEnchant(); - } - - private int _lastGamePace; - - @EventHandler - public void increaseGamePace(UpdateEvent event) - { - - if (event.getType() != UpdateType.SEC) - return; - - if (!IsLive()) - return; - - int timesShouldIncrease = (int) Math.floor((System.currentTimeMillis() - getGameLiveTime()) / 60000D); - - if (timesShouldIncrease < 10 && timesShouldIncrease != _lastGamePace - && (timesShouldIncrease % 2 == 0 || timesShouldIncrease == 9)) - { - _lastGamePace = timesShouldIncrease; - - Announce(C.cYellow + C.Bold + "Power surges through the battlefield!"); - Announce(C.cYellow + C.Bold + "Mana cost and spell cooldown has been lowered!", false); - - for (Player player : GetPlayers(true)) - { - Wizard wizard = getWizard(player); - - wizard.decreaseCooldown(); - - changeWandsTitles(player); - } - } - } - - @EventHandler - public void onMeteorHit(ProjectileHitEvent event) - { - Projectile projectile = event.getEntity(); - - if (projectile.hasMetadata("Meteor")) - { - projectile.remove(); - - CustomExplosion explosion = new CustomExplosion(getArcadeManager().GetDamage(), projectile.getLocation(), - _fireballSize, "Meteor"); - - explosion.setDropItems(false); - - explosion.setBlocksDamagedEqually(true); - - explosion.explode(); - } - } - - @EventHandler - public void summonMeteors(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC) - return; - - if (!IsLive()) - return; - - if (System.currentTimeMillis() > getGameLiveTime() + (20 * 60 * 1000)) - { - ArrayList players = new ArrayList(GetPlayers(true)); - - Collections.sort(players, new Comparator() - { - - @Override - public int compare(Player o1, Player o2) - { - // Compare them backwards so the lesser health people are last - // Just so the bigger camper loses more. - return new Double(o2.getHealth()).compareTo(o1.getHealth()); - } - }); - - Iterator itel = players.iterator(); - - while (itel.hasNext()) - { - Player player = itel.next(); - - // Don't kill them if they are the last person in this list. - if (itel.hasNext()) - { - this.getArcadeManager() - .GetDamage() - .NewDamageEvent(player, null, null, DamageCause.ENTITY_EXPLOSION, 9999, false, true, true, "Meteor", - "Meteor"); - } - } - } - - else if (System.currentTimeMillis() > getGameLiveTime() + (10 * 60 * 1000)) - { - sendMeteors(); - } - } - - private void sendMeteors() - { - if (_fireballCounter < 7) - { - if (_fireballCounter == 0) - { - Announce(C.cYellow + C.Bold + "Broken is the cage, the skies scream with rage!"); - } - else if (_fireballCounter == 2) - { - Announce(C.cYellow + C.Bold + "The ground trembles with fear, our doom is here!"); - } - else if (_fireballCounter == 4) - { - Announce(C.cYellow + C.Bold + "Where the wizards stand, meteors strike the land!"); - } - else if (_fireballCounter == 6) - { - Announce(C.cYellow + C.Bold + "Fight to the death! Fight with your dying breath!"); - _fireballsToSpawn = 1.1F; - } - - _fireballCounter++; - } - else - { - _fireballsToSpawn += _fireballAdd; - } - - for (int i = 0; i < _fireballsToSpawn; i++) - { - _fireballAdd += 0.01; - _fireballSize += 0.08; - _fireballsToSpawn -= 1; - - for (Player player : GetPlayers(true)) - { - summonMeteor(player); - } - } - } - - private void summonMeteor(Player player) - { - - Vector vector = new Vector(UtilMath.random.nextDouble() - 0.5D, 0.8, UtilMath.random.nextDouble() - 0.5D).normalize(); - - vector.multiply(40); - - Location loc = player.getLocation(); - - loc.add((UtilMath.random.nextDouble() - 0.5) * 7, 0, (UtilMath.random.nextDouble() - 0.5) * 7); - - loc.add(vector); - - final Fireball fireball = (Fireball) player.getWorld().spawnEntity(loc, EntityType.FIREBALL); - - fireball.setMetadata("Meteor", new FixedMetadataValue(getArcadeManager().getPlugin(), true)); - - new BukkitRunnable() - { - int i; - - public void run() - { - if (fireball.isValid() && IsLive()) - { - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, fireball.getLocation(), 0.3F, 0.3F, 0.3F, 0, 3); - - if (i++ % 6 == 0) - { - fireball.getWorld().playSound(fireball.getLocation(), Sound.CAT_HISS, 1.6F, 0F); - } - } - else - { - cancel(); - } - } - }.runTaskTimer(getArcadeManager().getPlugin(), 0, 0); - - vector.normalize().multiply(-(0.04 + ((_fireballAdd - 0.05) / 2))); - - // We can't call the bukkit methods because for some weird reason, it enforces a certain speed. - EntityFireball eFireball = ((CraftFireball) fireball).getHandle(); - eFireball.dirX = vector.getX(); - eFireball.dirY = vector.getY(); - eFireball.dirZ = vector.getZ(); - - fireball.setBounce(false); - fireball.setYield(0); - fireball.setIsIncendiary(true); - fireball.setFireTicks(9999); - } - - @EventHandler - public void removeDamageToLevel(CustomDamageEvent event) - { - event.SetDamageToLevel(false); - } - - @EventHandler - public void ScoreboardUpdate(UpdateEvent event) - { - GetScoreboard().Reset(); - - GetScoreboard().WriteBlank(); - - GetScoreboard().Write(C.cYellow + C.Bold + "Wizards"); - GetScoreboard().Write(C.cWhite + GetPlayers(true).size()); - - GetScoreboard().WriteBlank(); - - double time = UtilTime.convert(( + GetScoreboard().WriteBlank(); - (getGameLiveTime() == 0 ? System.currentTimeMillis() : getGameLiveTime()) + GetScoreboard().Write(C.cYellow + C.Bold + "Wizards"); + GetScoreboard().Write(C.cWhite + GetPlayers(true).size()); - + (10 * 60 * 1000)) - System.currentTimeMillis(), 1, TimeUnit.MINUTES); + GetScoreboard().WriteBlank(); - GetScoreboard().Write((time >= 0 ? C.cYellow : C.cRed) + C.Bold + (time >= 0 ? "Time Left" : "Overtime")); - GetScoreboard().Write(C.cWhite + Math.abs(time) + " Minute" + (Math.abs(time) != 1 ? "s" : "")); + double time = UtilTime.convert(( - GetScoreboard().Draw(); - } + (getGameLiveTime() == 0 ? System.currentTimeMillis() : getGameLiveTime()) + + + (10 * 60 * 1000)) - System.currentTimeMillis(), 1, TimeUnit.MINUTES); + + GetScoreboard().Write((time >= 0 ? C.cYellow : C.cRed) + C.Bold + (time >= 0 ? "Time Left" : "Overtime")); + GetScoreboard().Write(C.cWhite + Math.abs(time) + " Minute" + (Math.abs(time) != 1 ? "s" : "")); + + GetScoreboard().Draw(); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java index e5dda6b10..9eb342de1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java @@ -3,6 +3,8 @@ package nautilus.game.arcade.game.games.wizards.spells; import java.util.ArrayList; import java.util.Iterator; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.minecraft.game.core.explosion.CustomExplosion; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -20,109 +22,113 @@ import org.bukkit.metadata.FixedMetadataValue; public class SpellDroom extends Spell implements SpellClick { - private ArrayList _fallingBlocks = new ArrayList(); + private ArrayList _fallingBlocks = new ArrayList(); - @Override - public void castSpell(Player player) - { - ArrayList players = new ArrayList(); - players.add(player); - int radius = 4 + (getSpellLevel(player) * 2); + @Override + public void castSpell(Player player) + { + ArrayList players = new ArrayList(); + players.add(player); + int radius = 4 + (getSpellLevel(player) * 2); - for (Entity entity : player.getNearbyEntities(radius, radius * 3, radius)) - { - if (entity instanceof Player && Wizards.IsAlive(entity)) - { - players.add((Player) entity); - } - } + for (Entity entity : player.getNearbyEntities(radius, radius * 3, radius)) + { + if (entity instanceof Player && Wizards.IsAlive(entity)) + { + players.add((Player) entity); + } + } - ArrayList newFallingBlocks = new ArrayList(); + ArrayList newFallingBlocks = new ArrayList(); - for (Player p : players) - { - Location loc = p.getLocation().clone().add(0, 15 + (getSpellLevel(player) * 3), 0); - int lowered = 0; + for (Player p : players) + { + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, p.getLocation(), 0, 0, 0, 0, 1); + + Location loc = p.getLocation().clone().add(0, 15 + (getSpellLevel(player) * 3), 0); + int lowered = 0; - while (lowered < 5 && loc.getBlock().getType() != Material.AIR) - { - lowered++; - loc = loc.add(0, -1, 0); - } + while (lowered < 5 && loc.getBlock().getType() != Material.AIR) + { + lowered++; + loc = loc.add(0, -1, 0); + } - if (loc.getBlock().getType() == Material.AIR) - { + if (loc.getBlock().getType() == Material.AIR) + { - FallingBlock anvil = p.getWorld().spawnFallingBlock(loc.getBlock().getLocation().add(0.5, 0.5, 0.5), - Material.ANVIL, (byte) 0); + FallingBlock anvil = p.getWorld().spawnFallingBlock(loc.getBlock().getLocation().add(0.5, 0.5, 0.5), + Material.ANVIL, (byte) 0); - anvil.setMetadata("ExplosionSize", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), - 1 + (getSpellLevel(player) / 2F))); + anvil.setMetadata("ExplosionSize", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), + 1 + (getSpellLevel(player) / 2F))); - anvil.setMetadata("Wizard", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), player)); + anvil.setMetadata("Wizard", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), player)); - anvil.getWorld().playSound(anvil.getLocation(), Sound.ANVIL_USE, 1.9F, 0); + anvil.getWorld().playSound(anvil.getLocation(), Sound.ANVIL_USE, 1.9F, 0); - newFallingBlocks.add(anvil); + newFallingBlocks.add(anvil); - } + } - } + } - if (!newFallingBlocks.isEmpty()) - { - _fallingBlocks.addAll(newFallingBlocks); - charge(player); - } - } + if (!newFallingBlocks.isEmpty()) + { + _fallingBlocks.addAll(newFallingBlocks); + charge(player); + } + } - private void handleAnvil(Entity entity) - { - _fallingBlocks.remove(entity); + private void handleAnvil(Entity entity) + { + _fallingBlocks.remove(entity); - CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), entity.getLocation(), - (float) entity.getMetadata("ExplosionSize").get(0).asDouble(), "Droom"); + CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), Wizards.getArcadeManager() + .GetExplosion(), entity.getLocation(), (float) entity.getMetadata("ExplosionSize").get(0).asDouble(), "Droom"); - explosion.setPlayer((Player) entity.getMetadata("Wizard").get(0).value(), true); + explosion.setPlayer((Player) entity.getMetadata("Wizard").get(0).value(), true); - explosion.setDropItems(false); + explosion.setFallingBlockExplosion(true); - explosion.explode(); + explosion.setDropItems(false); - entity.remove(); - } + explosion.explode(); - @EventHandler - public void onDrop(ItemSpawnEvent event) - { - Iterator itel = _fallingBlocks.iterator(); - FallingBlock b = null; + entity.remove(); + } - while (itel.hasNext()) - { - FallingBlock block = itel.next(); + @EventHandler + public void onDrop(ItemSpawnEvent event) + { + Iterator itel = _fallingBlocks.iterator(); + FallingBlock b = null; - if (block.isDead()) - { - b = block; - break; - } - } + while (itel.hasNext()) + { + FallingBlock block = itel.next(); - if (b != null) - { - event.setCancelled(true); - handleAnvil(b); - } - } + if (block.isDead()) + { + b = block; + break; + } + } - @EventHandler - public void onPlace(EntityChangeBlockEvent event) - { - if (_fallingBlocks.contains(event.getEntity())) - { - handleAnvil(event.getEntity()); - event.setCancelled(true); - } - } + if (b != null) + { + event.setCancelled(true); + handleAnvil(b); + } + } + + @EventHandler + public void onPlace(EntityChangeBlockEvent event) + { + if (_fallingBlocks.contains(event.getEntity())) + { + handleAnvil(event.getEntity()); + event.setCancelled(true); + } + } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellExplosiveRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellExplosiveRune.java deleted file mode 100644 index 1bda5fc75..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellExplosiveRune.java +++ /dev/null @@ -1,79 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilBlock; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.wizards.Spell; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; -import nautilus.game.arcade.game.games.wizards.spells.subclasses.ExplosiveRune; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.util.Vector; - -public class SpellExplosiveRune extends Spell implements SpellClick -{ - private ArrayList _explosiveRunes = new ArrayList(); - - @Override - public void castSpell(Player p) - { - Vector vector = p.getEyeLocation().getDirection(); - vector.normalize().multiply(0.5); - - float trapSize = Math.max(1, 1 + getSpellLevel(p)); - - List list = p.getLastTwoTargetBlocks(UtilBlock.blockAirFoliageSet, (int) ((trapSize * 4) + 12)); - - if (list.size() > 1) - { - Location loc = list.get(0).getLocation().add(0.5, 0, 0.5); - - ExplosiveRune rune = new ExplosiveRune(Wizards.getArcadeManager().GetDamage(), loc, p, trapSize); - - if (!isValid(rune)) - { - p.sendMessage(C.cGreen + "Cannot draw rune on wall"); - return; - } - - _explosiveRunes.add(rune); - charge(p); - } - } - - @EventHandler - public void onTick(UpdateEvent event) - { - if (event.getType() == UpdateType.TICK) - { - Iterator itel = _explosiveRunes.iterator(); - - while (itel.hasNext()) - { - - ExplosiveRune rune = itel.next(); - - if (rune.onTick()) - { - itel.remove(); - } - - } - } - } - - private boolean isValid(ExplosiveRune rune) - { - return !UtilBlock.solid(rune.getLocation().getBlock()) - || UtilBlock.solid(rune.getLocation().getBlock().getRelative(BlockFace.DOWN)); - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java index fbc442780..7f8399d8d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java @@ -18,49 +18,52 @@ import org.bukkit.util.Vector; public class SpellFireball extends Spell implements SpellClick { - @EventHandler - public void onHit(ProjectileHitEvent event) - { - Projectile projectile = event.getEntity(); - if (projectile.hasMetadata("FireballSpell")) - { - projectile.remove(); + @EventHandler + public void onHit(ProjectileHitEvent event) + { + Projectile projectile = event.getEntity(); + if (projectile.hasMetadata("FireballSpell")) + { + projectile.remove(); - CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), projectile.getLocation(), - projectile.getMetadata("FireballYield").get(0).asFloat(), "Fireball"); + CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), Wizards.getArcadeManager() + .GetExplosion(), projectile.getLocation(), projectile.getMetadata("FireballYield").get(0).asFloat(), + "Fireball"); - explosion.setPlayer((Player) projectile.getMetadata("FireballSpell").get(0).value(), true); + explosion.setPlayer((Player) projectile.getMetadata("FireballSpell").get(0).value(), true); - explosion.setDropItems(false); + explosion.setFallingBlockExplosion(true); - explosion.explode(); + explosion.setDropItems(false); - } - } + explosion.explode(); - @Override - public void castSpell(Player p) - { - org.bukkit.entity.Fireball fireball = (org.bukkit.entity.Fireball) p.getWorld().spawnEntity(p.getEyeLocation(), - EntityType.FIREBALL); + } + } - Vector vector = p.getEyeLocation().getDirection().normalize().multiply(0.14); + @Override + public void castSpell(Player p) + { + org.bukkit.entity.Fireball fireball = (org.bukkit.entity.Fireball) p.getWorld().spawnEntity(p.getEyeLocation(), + EntityType.FIREBALL); - // We can't call the bukkit methods because for some weird reason, it enforces a certain speed. - EntityFireball eFireball = ((CraftFireball) fireball).getHandle(); - eFireball.dirX = vector.getX(); - eFireball.dirY = vector.getY(); - eFireball.dirZ = vector.getZ(); + Vector vector = p.getEyeLocation().getDirection().normalize().multiply(0.14); - fireball.setBounce(false); - fireball.setShooter(p); - fireball.setYield(0); - fireball.setMetadata("FireballSpell", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), p)); - fireball.setMetadata("FireballYield", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), - (getSpellLevel(p) * 0.25F) + 0.8F)); + // We can't call the bukkit methods because for some weird reason, it enforces a certain speed. + EntityFireball eFireball = ((CraftFireball) fireball).getHandle(); + eFireball.dirX = vector.getX(); + eFireball.dirY = vector.getY(); + eFireball.dirZ = vector.getZ(); - p.getWorld().playSound(p.getLocation(), Sound.BLAZE_BREATH, 0.5F, 5F); - charge(p); - } + fireball.setBounce(false); + fireball.setShooter(p); + fireball.setYield(0); + fireball.setMetadata("FireballSpell", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), p)); + fireball.setMetadata("FireballYield", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), + (getSpellLevel(p) * 0.25F) + 0.8F)); + + p.getWorld().playSound(p.getLocation(), Sound.BLAZE_BREATH, 0.5F, 5F); + charge(p); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java index c7b1407cd..8212998a5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java @@ -1,48 +1,69 @@ package nautilus.game.arcade.game.games.wizards.spells; -import java.util.List; - import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import org.bukkit.Effect; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; +import org.bukkit.util.Vector; public class SpellFlash extends Spell implements SpellClick { - @Override - public void castSpell(Player player) - { - int maxTeleportDistance = 20 + (10 * getSpellLevel(player)); - - List list = player.getLastTwoTargetBlocks(UtilBlock.blockAirFoliageSet, maxTeleportDistance); - - if (list.size() > 1 && list.get(1).getType() != Material.AIR) - { - Block b = list.get(0); - - if (b.getLocation().distance(player.getLocation()) > 2) - { - - Location loc = b.getLocation().clone().add(0.5, 0.5, 0.5); - - player.getWorld().playSound(player.getLocation(), Sound.ENDERMAN_TELEPORT, 1, 1.2F); - player.getWorld().playEffect(player.getLocation(), Effect.ENDER_SIGNAL, 9); - - player.setFallDistance(0); - player.teleport(loc); - - player.getWorld().playSound(player.getLocation(), Sound.ENDERMAN_TELEPORT, 1, 1.2F); - player.getWorld().playEffect(player.getLocation(), Effect.ENDER_SIGNAL, 9); - - charge(player); - - } - } - } + @Override + public void castSpell(Player player) + { + int maxRange = 20 + (10 * getSpellLevel(player)); + + double curRange = 0; + + while (curRange <= maxRange) + { + Location newTarget = player.getLocation().add(new Vector(0, 0.2, 0)) + .add(player.getLocation().getDirection().multiply(curRange)); + + if (!UtilBlock.airFoliage(newTarget.getBlock()) + || !UtilBlock.airFoliage(newTarget.getBlock().getRelative(BlockFace.UP))) + break; + + // Progress Forwards + curRange += 0.2; + + // Smoke Trail + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1); + } + + // Modify Range + curRange -= 0.4; + if (curRange < 0) + curRange = 0; + + // Destination + Location loc = player.getLocation() + .add(player.getLocation().getDirection().multiply(curRange).add(new Vector(0, 0.4, 0))); + + if (curRange > 0) + { + + player.getWorld().playSound(player.getLocation(), Sound.ENDERMAN_TELEPORT, 1, 1.2F); + player.getWorld().playEffect(player.getLocation(), Effect.ENDER_SIGNAL, 9); + + player.setFallDistance(0); + + player.eject(); + player.leaveVehicle(); + + player.teleport(loc); + + player.getWorld().playSound(player.getLocation(), Sound.ENDERMAN_TELEPORT, 1, 1.2F); + player.getWorld().playEffect(player.getLocation(), Effect.ENDER_SIGNAL, 9); + + charge(player); + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellStoneWall.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java similarity index 90% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellStoneWall.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java index 870808c19..b6b70b844 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellStoneWall.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java @@ -19,7 +19,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.scheduler.BukkitRunnable; -public class SpellStoneWall extends Spell implements SpellClickBlock +public class SpellFrostBarrier extends Spell implements SpellClickBlock { private HashMap _wallExpires = new HashMap(); @@ -36,7 +36,7 @@ public class SpellStoneWall extends Spell implements SpellClickBlock { itel.remove(); - if (entry.getKey().getType() == Material.STONE) + if (entry.getKey().getType() == Material.ICE) { entry.getKey().setType(Material.AIR); } @@ -67,7 +67,7 @@ public class SpellStoneWall extends Spell implements SpellClickBlock if (block.getType() == Material.AIR) { - block.setTypeIdAndData(Material.STONE.getId(), (byte) 0, false); + block.setTypeIdAndData(Material.ICE.getId(), (byte) 0, false); _wallExpires.put(block, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); } @@ -83,7 +83,7 @@ public class SpellStoneWall extends Spell implements SpellClickBlock if (!UtilBlock.airFoliage(b)) break; - b.setTypeIdAndData(Material.STONE.getId(), (byte) 0, false); + b.setTypeIdAndData(Material.ICE.getId(), (byte) 0, false); b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getTypeId()); _wallExpires.put(b, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java index ad4947087..84709233b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.wizards.spells; import java.util.HashMap; +import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilPlayer; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -16,7 +17,8 @@ public class SpellGust extends Spell implements SpellClick @Override public void castSpell(Player player) { - Vector vector = player.getLocation().getDirection().normalize().multiply(0.3); + Vector vector = player.getLocation().getDirection().setY(0).normalize().setY(0.3) + .multiply(0.8 + (getSpellLevel(player) * 0.3D)); HashMap effected = UtilPlayer.getPlayersInPyramid(player, 45, 10 * getSpellLevel(player)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellHealingRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellHealingRune.java deleted file mode 100644 index 7c755bf45..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellHealingRune.java +++ /dev/null @@ -1,70 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells; - -import java.util.ArrayList; -import java.util.Iterator; - -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.wizards.Spell; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; -import nautilus.game.arcade.game.games.wizards.spells.subclasses.HealingRune; - -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; - -public class SpellHealingRune extends Spell implements SpellClick -{ - private ArrayList _healingRunes = new ArrayList(); - - @EventHandler - public void onTick(UpdateEvent event) - { - if (event.getType() == UpdateType.TICK) - { - Iterator itel = _healingRunes.iterator(); - - while (itel.hasNext()) - { - HealingRune rune = itel.next(); - - if (rune.onTick()) - { - itel.remove(); - } - } - } - } - - @Override - public void castSpell(Player player) - { - Block b = player.getTargetBlock(null, 25 * getSpellLevel(player)); - - while (b.getType() != Material.AIR && b.getY() < 250) - { - b = b.getRelative(BlockFace.UP); - } - - if (b.getRelative(BlockFace.DOWN).getType() == Material.AIR) - { - player.sendMessage(ChatColor.RED + "Unable to place a rune!"); - return; - } - - Location firstTeleport = player.getLocation(); - - firstTeleport.setY(firstTeleport.getBlockY()); - - HealingRune healingRune = new HealingRune(Wizards, firstTeleport, getSpellLevel(player)); - - _healingRunes.add(healingRune); - - charge(player); - } - -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java new file mode 100644 index 000000000..366410050 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java @@ -0,0 +1,121 @@ +package nautilus.game.arcade.game.games.wizards.spells; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilMath; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.projectile.IThrown; +import mineplex.core.projectile.ProjectileUser; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.game.games.wizards.Spell; +import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; + +public class SpellIcePrison extends Spell implements SpellClick, IThrown +{ + + private HashMap _prisonExpires = new HashMap(); + + @Override + public void castSpell(final Player player) + { + shoot(player, getSpellLevel(player)); + + charge(player); + } + + @Override + public void Collide(LivingEntity target, Block block, ProjectileUser data) + { + if (target != data.GetThrower()) + { + IcePrison(data); + } + } + + @Override + public void Expire(ProjectileUser data) + { + IcePrison(data); + } + + public void IcePrison(ProjectileUser data) + { + Location loc = data.GetThrown().getLocation(); + data.GetThrown().remove(); + + HashMap blocks = UtilBlock.getInRadius(loc.getBlock(), + data.GetThrown().getMetadata("PrisonStrength").get(0).asDouble(), true); + + for (Block block : blocks.keySet()) + { + if (UtilBlock.airFoliage(block)) + { + block.setType(Material.ICE); + + _prisonExpires.put(block, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); + } + } + + loc.getWorld().playSound(loc, Sound.ANVIL_LAND, 1.7F, 0.8F); + } + + @Override + public void Idle(ProjectileUser data) + { + IcePrison(data); + } + + @EventHandler + public void onUpdate(UpdateEvent event) + { + Iterator> itel = _prisonExpires.entrySet().iterator(); + + while (itel.hasNext()) + { + Entry entry = itel.next(); + + if (entry.getValue() < System.currentTimeMillis()) + { + itel.remove(); + + if (entry.getKey().getType() == Material.ICE) + { + entry.getKey().setType(Material.AIR); + } + } + } + } + + private void shoot(Player player, int spellLevel) + { + + if (Wizards.IsAlive(player)) + { + org.bukkit.entity.Item ent = player.getWorld().dropItem( + player.getLocation().add(0, 0.5, 0), + ItemStackFactory.Instance.CreateStack(Material.PACKED_ICE, (byte) 0, 1, "Ice Prison" + player.getName() + " " + + System.currentTimeMillis())); + + ent.setMetadata("PrisonStrength", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), 3 + spellLevel)); + + UtilAction.velocity(ent, player.getLocation().getDirection(), 1.7, false, 0, 0.2, 10, false); + Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2d); + + player.getWorld().playSound(player.getLocation(), Sound.CREEPER_HISS, 1.2F, 0.8F); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java new file mode 100644 index 000000000..c2a080d75 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java @@ -0,0 +1,164 @@ +package nautilus.game.arcade.game.games.wizards.spells; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.projectile.IThrown; +import mineplex.core.projectile.ProjectileUser; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.game.games.wizards.Spell; +import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; + +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.util.Vector; + +public class SpellIceShards extends Spell implements SpellClick, IThrown +{ + private HashMap, Integer> _hitShards = new HashMap, Integer>(); + private HashMap _shardsExpire = new HashMap(); + + @Override + public void castSpell(final Player player) + { + final ArrayList firedShards = new ArrayList(); + _shardsExpire.put(firedShards, System.currentTimeMillis() + 60000); + + shoot(player, firedShards); + + for (int i = 1; i <= getSpellLevel(player); i++) + { + + Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable() + { + + @Override + public void run() + { + shoot(player, firedShards); + } + + }, i * 4); + } + + charge(player); + } + + @EventHandler + public void onSecond(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + { + return; + } + + if (!Wizards.IsLive()) + return; + + Iterator> itel = _shardsExpire.entrySet().iterator(); + + while (itel.hasNext()) + { + Entry entry = itel.next(); + + if (entry.getValue() < System.currentTimeMillis()) + { + itel.remove(); + _hitShards.remove(entry.getKey()); + } + } + } + + private void shoot(Player player, ArrayList firedShards) + { + + if (Wizards.IsAlive(player)) + { + // Boost + + org.bukkit.entity.Item ent = player.getWorld().dropItem( + player.getLocation().add(0, 0.5, 0), + ItemStackFactory.Instance.CreateStack(Material.GHAST_TEAR, (byte) 0, 1, "Ice Shard " + player.getName() + " " + + System.currentTimeMillis())); + + firedShards.add(ent); + + UtilAction.velocity(ent, player.getLocation().getDirection(), 2.3, false, 0, 0.2, 10, false); + Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2d); + + player.getWorld().playSound(player.getLocation(), Sound.CLICK, 1.2F, 0.8F); + + } + } + + @Override + public void Collide(LivingEntity target, Block block, ProjectileUser data) + { + if (target != null) + { + int timesHit = 0; + + for (ArrayList arrayList : _hitShards.keySet()) + { + if (arrayList.contains(data.GetThrown())) + { + timesHit = _hitShards.get(arrayList); + _hitShards.put(arrayList, timesHit + 1); + + break; + } + } + + // Damage Event + Wizards.getArcadeManager() + .GetDamage() + .NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 2 + (timesHit * 2), false, false, + false, UtilEnt.getName(data.GetThrower()), "Ice Shard"); + + if (timesHit > 0) + { + UtilPlayer.message(data.GetThrower(), "Ice Shards" + ": " + F.elem(timesHit + " Consecutive Hits") + C.cGray + + " (" + F.skill("+" + (2 + (timesHit * 2)) + " Damage") + C.cGray + ")"); + } + } + + handleShard(data); + } + + private void handleShard(ProjectileUser data) + { + data.GetThrown().remove(); + data.GetThrown().getWorld().playEffect(data.GetThrown().getLocation(), Effect.STEP_SOUND, Material.ICE); + } + + @Override + public void Idle(ProjectileUser data) + { + handleShard(data); + } + + @Override + public void Expire(ProjectileUser data) + { + handleShard(data); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java index 760f7ab89..0c59610cb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java @@ -1,85 +1,157 @@ package nautilus.game.arcade.game.games.wizards.spells; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; import java.util.List; +import java.util.Random; import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import org.bukkit.Bukkit; +import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.entity.FallingBlock; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryHolder; +import org.bukkit.scheduler.BukkitRunnable; public class SpellImplode extends Spell implements SpellClick { - @Override - public void castSpell(Player p) - { - List list = p.getLastTwoTargetBlocks(UtilBlock.blockAirFoliageSet, 50); + @Override + public void castSpell(final Player p) + { + List list = p.getLastTwoTargetBlocks(UtilBlock.blockAirFoliageSet, 50); - if (list.size() > 1) - { - BlockFace face = list.get(0).getFace(list.get(1)); + if (list.size() > 1) + { - Block centerBlock = list.get(0); + Block centerBlock = list.get(0); - int maxDist = (int) Math.floor(centerBlock.getLocation().distance(p.getLocation().getBlock().getLocation())) / 2; + final Location centerLocation = centerBlock.getLocation().clone().add(0.5, 0.5, 0.5); + final ArrayList effectedBlocks = new ArrayList(); + int size = (int) (1.5F + (getSpellLevel(p) * 0.7F)); - for (int i = 0; i < Math.min(maxDist, getSpellLevel(p) * 2); i++) - { - if (centerBlock.getRelative(face) != null) - { - centerBlock = centerBlock.getRelative(face); - } - } + for (int x = -size * 2; x <= size * 2; x++) + { + for (int y = -size * 2; y <= size * 2; y++) + { + for (int z = -size * 2; z <= size * 2; z++) + { + Block effectedBlock = centerBlock.getRelative(x, y, z); - Location centerLocation = centerBlock.getLocation().clone().add(0.5, 0.5, 0.5); - int size = (int) (1.5F + (getSpellLevel(p) * 0.7F)); + if (effectedBlock.getType() == Material.AIR || effectedBlock.getType() == Material.BEDROCK + || effectedBlocks.contains(effectedBlock)) + { + continue; + } - for (int x = -size * 2; x <= size * 2; x++) - { - for (int y = -size; y <= size; y++) - { - for (int z = -size * 2; z <= size * 2; z++) - { - Block effectedBlock = centerBlock.getRelative(x, y, z); + if ((centerLocation.distance(effectedBlock.getLocation().add(0.5, 0.5, 0.5)) + Math.abs(y / 4D)) - if (effectedBlock.getLocation().distance(centerBlock.getLocation()) <= size * 2 - && !(effectedBlock.getState() instanceof InventoryHolder)) - { + <= ((size * 2) + UtilMath.random.nextFloat()) - if (effectedBlock.getType() == Material.BEDROCK) - { - continue; - } + && !(effectedBlock.getState() instanceof InventoryHolder)) + { - FallingBlock block = effectedBlock.getWorld().spawnFallingBlock(effectedBlock.getLocation(), - effectedBlock.getType(), effectedBlock.getData()); + effectedBlocks.add(effectedBlock); + } + } + } + } - block.setVelocity(centerLocation.toVector() - .subtract(effectedBlock.getLocation().add(0.5, 0.5, 0.5).toVector()).normalize()); + Collections.shuffle(effectedBlocks); - block.setDropItem(false); + new BukkitRunnable() + { + int timesRan; + Iterator bItel; - effectedBlock.setType(Material.AIR); - } - } - } - } + public void run() + { + { + Block block = effectedBlocks.get(UtilMath.r(effectedBlocks.size())); + block.getWorld().playSound(block.getLocation(), + new Random().nextBoolean() ? Sound.DIG_GRAVEL : Sound.DIG_GRASS, 2, + UtilMath.random.nextFloat() / 4); + } - for (Player player : Bukkit.getOnlinePlayers()) - { - player.playSound(player == p ? p.getLocation() : centerBlock.getLocation(), Sound.ENDERDRAGON_GROWL, 1.5F, 1.5F); - } + if (timesRan % 3 == 0) + { + for (int a = 0; a < Math.ceil(effectedBlocks.size() / 3D); a++) + { + if (bItel == null || !bItel.hasNext()) + { + bItel = effectedBlocks.iterator(); + } - charge(p); - } - } + Block block = bItel.next(); + + for (int i = 0; i < 6; i++) + { + BlockFace face = BlockFace.values()[i]; + + Block b = block.getRelative(face); + + if (UtilBlock.airFoliage(b)) + { + UtilParticle.PlayParticle( + ParticleType.BLOCK_CRACK.getParticle(block.getType(), block.getData()), + + block.getLocation().add( + + 0.5 + (face.getModX() * 0.6D), + + 0.5 + (face.getModY() * 0.6D), + + 0.5 + (face.getModZ() * 0.6D)), + + face.getModX() / 2F, face.getModX() / 2F, face.getModX() / 2F, 0, 6); + } + } + } + } + + if (effectedBlocks.isEmpty()) + { + cancel(); + } + else if (timesRan++ >= 20) + { + Iterator itel = effectedBlocks.iterator(); + + while (itel.hasNext()) + { + Block block = itel.next(); + + if (block.getType() == Material.AIR || block.getState() instanceof InventoryHolder) + { + itel.remove(); + continue; + } + } + + Wizards.getArcadeManager().GetExplosion().BlockExplosion(effectedBlocks, centerLocation, false); + + for (Player player : Bukkit.getOnlinePlayers()) + { + player.playSound(player == p ? p.getLocation() : centerLocation, Sound.ENDERDRAGON_GROWL, 1.5F, 1.5F); + } + + cancel(); + } + } + }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 0, 0); + + charge(p); + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLance.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLance.java deleted file mode 100644 index 68928a930..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLance.java +++ /dev/null @@ -1,101 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; - -import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilShapes; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.minecraft.game.core.explosion.CustomExplosion; -import nautilus.game.arcade.game.games.wizards.Spell; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; - -public class SpellLance extends Spell implements SpellClick -{ - private ArrayList, Player>> _locations = new ArrayList, Player>>(); - - @Override - public void castSpell(Player player) - { - // Player p = UtilPlayer.getPlayerInSight(player, 10 * getSpellLevel(player), true); - Location l = null; - // if (p == null) - // { - List b = player.getLastTwoTargetBlocks(UtilBlock.blockPassSet, 6 * getSpellLevel(player)); - if (!b.isEmpty()) - l = b.get(0).getLocation().add(0.5, 0.5, 0.5).add(player.getEyeLocation().getDirection().normalize().multiply(2)); - /* } - else - { - l = p.getEyeLocation(); - }*/ - if (l != null) - { - ArrayList locs = UtilShapes.getLinesDistancedPoints(player.getLocation(), l, 1.5); - - Iterator itel = locs.iterator(); - while (itel.hasNext()) - { - Location loc = itel.next(); - - if (loc.distance(player.getLocation()) <= 1.5) - { - itel.remove(); - } - } - - if (!locs.isEmpty()) - { - charge(player); - - explode(locs.remove(0), player); - - if (!locs.isEmpty()) - { - _locations.add(new HashMap.SimpleEntry(locs, player)); - } - } - } - } - - @EventHandler - public void onTick(UpdateEvent event) - { - if (event.getType() == UpdateType.TICK) - { - Iterator, Player>> itel = _locations.iterator(); - while (itel.hasNext()) - { - Entry, Player> next = itel.next(); - explode(next.getKey().remove(0), next.getValue()); - - if (next.getKey().isEmpty()) - { - itel.remove(); - } - } - } - } - - private void explode(Location loc, Player player) - { - CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), loc, 1.2F, "Lance"); - - explosion.setPlayer(player, false); - - explosion.setDropItems(false); - - explosion.setIgnoreRate(false); - - explosion.explode(); - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunchRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunchRune.java deleted file mode 100644 index a08fd13c7..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunchRune.java +++ /dev/null @@ -1,100 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells; - -import java.util.ArrayList; -import java.util.Iterator; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilBlock; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.wizards.Spell; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; -import nautilus.game.arcade.game.games.wizards.spells.subclasses.LaunchRune; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.util.Vector; - -public class SpellLaunchRune extends Spell implements SpellClick -{ - private ArrayList _launchRunes = new ArrayList(); - - @Override - public void castSpell(Player p) - { - Vector vector = p.getEyeLocation().getDirection(); - vector.normalize().multiply(0.5); - - Vector v = p.getEyeLocation().toVector(); - int i = 0; - Location loc = null; - int spellLevel = getSpellLevel(p); - final float trapSize = Math.max(1, spellLevel * 0.8F); - - while (i++ < (trapSize * 4) + 12) - { - v.add(vector); - - Block b = v.toLocation(p.getWorld()).getBlock(); - - if (UtilBlock.solid(b)) - { - while (UtilBlock.solid(b)) - { - - double dist = Math.sqrt(Math.pow(v.getX() - v.getBlockX(), 2) + Math.pow(v.getY() - v.getBlockY(), 2) - + Math.pow(v.getZ() - v.getBlockZ(), 2)) + 0.01; - b = v.subtract(vector.normalize().multiply(dist)).toLocation(p.getWorld()).getBlock(); - } - - loc = v.toLocation(p.getWorld()); - loc.setY(loc.getBlockY()); - - } - } - - if (loc == null) - return; - - LaunchRune rune = new LaunchRune(Wizards, p, loc, trapSize, spellLevel); - - if (!isValid(rune)) - { - p.sendMessage(C.cGreen + "Cannot draw rune on wall"); - return; - } - - _launchRunes.add(rune); - charge(p); - } - - @EventHandler - public void onTick(UpdateEvent event) - { - if (event.getType() == UpdateType.TICK) - { - Iterator itel = _launchRunes.iterator(); - - while (itel.hasNext()) - { - - LaunchRune rune = itel.next(); - - if (rune.onTick()) - { - itel.remove(); - } - - } - } - } - - private boolean isValid(LaunchRune rune) - { - return !UtilBlock.solid(rune.getLocation().getBlock()) - || UtilBlock.solid(rune.getLocation().getBlock().getRelative(BlockFace.DOWN)); - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java index c2be02017..13fb827e1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java @@ -49,7 +49,7 @@ public class SpellLightningStrike extends Spell implements SpellClick lightning.setMetadata("Damager", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), p)); } - }, 20); + }, 8); charge(p); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java new file mode 100644 index 000000000..483694fda --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java @@ -0,0 +1,99 @@ +package nautilus.game.arcade.game.games.wizards.spells; + +import java.util.Random; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilMath; +import nautilus.game.arcade.game.games.wizards.Spell; +import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; + +public class SpellNapalm extends Spell implements SpellClick +{ + + @Override + public void castSpell(Player player) + { + final int length = 8 + (4 * getSpellLevel(player)); + final Vector vector = player.getLocation().getDirection().normalize().multiply(0.5); + final Location loc = player.getLocation().add(vector.clone().multiply(2)); + final Location playerLoc = player.getLocation(); + + new BukkitRunnable() + { + int blocksTravelled; + + public void run() + { + for (int i = 0; i < 4; i++) + { + loc.add(vector); + + if (!UtilBlock.airFoliage(loc.getBlock())) + { + cancel(); + break; + } + + for (int x = -1; x <= 1; x++) + { + for (int y = -1; y <= 1; y++) + { + for (int z = -1; z <= 1; z++) + { + if (loc.getBlockY() + y < 256 && loc.getBlockY() + y > 0) + { + Block block = loc.getBlock().getRelative(x, y, z); + + if (UtilMath.offset(playerLoc, block.getLocation()) < 2) + { + continue; + } + + if (!UtilAlg.HasSight(loc, block.getLocation().add(0.5, 0.5, 0.5))) + { + continue; + } + + if (block.getType() == Material.AIR) + { + for (int a = 0; a < 6; a++) + { + Block b = block.getRelative(BlockFace.values()[a]); + + if (b.getType().isFlammable()) + { + block.setType(Material.FIRE); + block.getWorld().playSound(block.getLocation(), Sound.FIRE_IGNITE, 1, + 1 + ((new Random().nextFloat() - 0.5F) / 3F)); + break; + } + } + } + } + } + } + } + } + + blocksTravelled += 2; + + if (blocksTravelled >= length) + { + cancel(); + } + } + }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 0, 1); + + charge(player); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java index a67f63a51..b46e85fcb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java @@ -17,47 +17,57 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; public class SpellRainbowBeam extends Spell implements SpellClick { - @Override - public void castSpell(Player p) - { - Entity entityTarget = UtilPlayer.getEntityInSight(p, 20 * getSpellLevel(p), true, true, true, 1.9F); + @Override + public void castSpell(Player p) + { + Entity entityTarget = UtilPlayer.getEntityInSight(p, 80, true, true, true, 1.9F); - if (!(entityTarget instanceof LivingEntity)) - { - entityTarget = null; - } + if (!(entityTarget instanceof LivingEntity)) + { + entityTarget = null; + } - Location loc; - if (entityTarget != null) - { + Location loc; + if (entityTarget != null) + { - loc = p.getEyeLocation().add( - p.getEyeLocation().getDirection().normalize() - .multiply(0.3 + p.getEyeLocation().distance(((LivingEntity) entityTarget).getEyeLocation()))); + loc = p.getEyeLocation().add( + p.getEyeLocation().getDirection().normalize() + .multiply(0.3 + p.getEyeLocation().distance(((LivingEntity) entityTarget).getEyeLocation()))); - // The above code makes the beam appear to hit them where you aimed. - Wizards.getArcadeManager() - .GetDamage() - .NewDamageEvent((LivingEntity) entityTarget, p, null, DamageCause.CUSTOM, (getSpellLevel(p) * 2) + 4F, true, - true, false, "Rainbow Beam", "Rainbow Beam"); + double damage = (getSpellLevel(p) * 2) + 4F; + double dist = loc.distance(p.getLocation()) - (80 * .2D); - p.playSound(entityTarget.getLocation(), Sound.LEVEL_UP, (getSpellLevel(p) * 2) + 6, 1); + // If target is more than 20% away + if (dist > 0) + { + damage -= damage * (dist / (80 * .8D)); - } - else - { - loc = p.getLastTwoTargetBlocks(UtilBlock.blockAirFoliageSet, 20 * getSpellLevel(p)).get(0).getLocation() - .add(0.5, 0.5, 0.5); - } + damage = Math.max(1, damage); + } - for (Location l : UtilShapes.getLinesDistancedPoints(p.getEyeLocation().subtract(0, 0.1, 0), loc, 1)) - { - l.getWorld().spigot().playEffect(l, Effect.POTION_SWIRL, 0, 0, 0, 0, 0, 500, 1, 30); - } + // The above code makes the beam appear to hit them where you aimed. + Wizards.getArcadeManager() + .GetDamage() + .NewDamageEvent((LivingEntity) entityTarget, p, null, DamageCause.CUSTOM, damage, true, true, false, + "Rainbow Beam", "Rainbow Beam"); - p.playSound(p.getLocation(), Sound.LEVEL_UP, 1.5F, 1); + p.playSound(entityTarget.getLocation(), Sound.LEVEL_UP, (getSpellLevel(p) * 2) + 6, 1); - charge(p); - } + } + else + { + loc = p.getLastTwoTargetBlocks(UtilBlock.blockAirFoliageSet, 80).get(0).getLocation().add(0.5, 0.5, 0.5); + } + + for (Location l : UtilShapes.getLinesDistancedPoints(p.getEyeLocation().subtract(0, 0.1, 0), loc, 0.3)) + { + l.getWorld().spigot().playEffect(l, Effect.POTION_SWIRL, 0, 0, 0, 0, 0, 500, 1, 30); + } + + p.playSound(p.getLocation(), Sound.LEVEL_UP, 1.5F, 1); + + charge(p); + } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java index b2f006c68..939a2d439 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java @@ -7,6 +7,7 @@ import java.util.Map.Entry; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilShapes; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -61,7 +62,7 @@ public class SpellRainbowPath extends Spell implements SpellClick, SpellClickBlo @Override public void castSpell(Player p) { - Vector vector = p.getEyeLocation().getDirection().setY(0).normalize(); + Vector vector = p.getEyeLocation().getDirection().normalize().setY(-1); vector.setX(Math.round(vector.getX())); vector.setZ(Math.round(vector.getZ())); @@ -72,11 +73,14 @@ public class SpellRainbowPath extends Spell implements SpellClick, SpellClickBlo @Override public void castSpell(Player p, final Block target) { - final Vector vector = p.getEyeLocation().getDirection().normalize().multiply(0.5); - vector.setY(Math.max(Math.min(vector.getY(), -0.5), 0.5)); - vector.normalize(); + final BlockFace face = radial[Math.round(p.getLocation().getYaw() / 45f) & 0x7]; - p.getWorld().playEffect(target.getLocation(), Effect.STEP_SOUND, Material.WOOL.getId(), _rainbow[UtilMath.r(_rainbow.length)]); + double yMod = Math.min(Math.max(p.getLocation().getPitch() / 30, -1), 1); + + final Vector vector = new Vector(face.getModX(), -yMod, face.getModZ()); + + p.getWorld().playEffect(target.getLocation(), Effect.STEP_SOUND, Material.WOOL.getId(), + _rainbow[UtilMath.r(_rainbow.length)]); p.getWorld().playSound(p.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1); final int maxDist = 10 * getSpellLevel(p); @@ -97,12 +101,14 @@ public class SpellRainbowPath extends Spell implements SpellClick, SpellClickBlo } loc.add(vector); + Block block = loc.getBlock(); + BlockFace[] faces = UtilShapes.getSideBlockFaces(block, face); + Block[] bs = new Block[] { - block, UtilAlg.getLeft(vector).toLocation(block.getWorld()).getBlock(), - UtilAlg.getRight(vector).toLocation(block.getWorld()).getBlock() + block, block.getRelative(faces[0]), block.getRelative(faces[1]) }; for (Block b : bs) @@ -119,7 +125,7 @@ public class SpellRainbowPath extends Spell implements SpellClick, SpellClickBlo _wallExpires.put(b, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); } - + block.getWorld().playSound(block.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java index 6830b93bd..f715383cb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java @@ -1,15 +1,26 @@ package nautilus.game.arcade.game.games.wizards.spells; import java.util.ArrayList; +import java.util.Collection; import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilShapes; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickBlock; +import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy; +import net.minecraft.server.v1_7_R4.PacketPlayOutSpawnEntity; +import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.AnimalTamer; @@ -17,164 +28,274 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; +import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.scheduler.BukkitRunnable; public class SpellRumble extends Spell implements SpellClickBlock, SpellClick { - final private BlockFace[] _radial = - { - BlockFace.SOUTH, BlockFace.SOUTH_WEST, BlockFace.WEST, BlockFace.NORTH_WEST, BlockFace.NORTH, - BlockFace.NORTH_EAST, BlockFace.EAST, BlockFace.SOUTH_EAST - }; + final private BlockFace[] _radial = + { + BlockFace.SOUTH, BlockFace.SOUTH_WEST, BlockFace.WEST, BlockFace.NORTH_WEST, BlockFace.NORTH, + BlockFace.NORTH_EAST, BlockFace.EAST, BlockFace.SOUTH_EAST + }; - public void castSpell(Player player) - { - Block block = player.getLocation().add(0, -1, 0).getBlock(); + public void castSpell(Player player) + { + Block block = player.getLocation().add(0, -1, 0).getBlock(); - if (!UtilBlock.solid(block)) - { - block = block.getRelative(BlockFace.DOWN); - } + if (!UtilBlock.solid(block)) + { + block = block.getRelative(BlockFace.DOWN); + } - castSpell(player, block); - } + castSpell(player, block); + } - @Override - public void castSpell(final Player player, final Block target) - { + @EventHandler + public void onDamage(CustomDamageEvent event) + { + if (event.GetReason() != null && event.GetReason().equals("Rumble")) + { + event.AddKnockback("Rumble", 1); + } + } - if (UtilBlock.solid(target)) - { + @Override + public void castSpell(final Player player, final Block target) + { - final BlockFace moveDirection = _radial[Math.round(player.getEyeLocation().getYaw() / 45f) & 0x7]; - final int spellLevel = getSpellLevel(player); - final int damage = 4 + (spellLevel * 2); - final int maxDist = 10 * spellLevel; + if (UtilBlock.solid(target)) + { - player.getWorld().playEffect(target.getLocation(), Effect.STEP_SOUND, target.getTypeId()); + final BlockFace moveDirection = _radial[Math.round(player.getEyeLocation().getYaw() / 45f) & 0x7]; + final int spellLevel = getSpellLevel(player); + final int damage = 4 + (spellLevel * 2); + final int maxDist = 10 * spellLevel; - new BukkitRunnable() - { - private Block _currentBlock = target; - private int _distTravelled = 0; - private ArrayList _effected = new ArrayList(); - private ArrayList _previousBlocks = new ArrayList(); + playBlockEffect(target); - @Override - public void run() - { - if (!player.isOnline() || !Wizards.IsAlive(player)) - { - cancel(); - return; - } + new BukkitRunnable() + { + private Block _currentBlock = target; + private int _distTravelled = 0; + private ArrayList _effected = new ArrayList(); + private ArrayList _previousBlocks = new ArrayList(); - _currentBlock = _currentBlock.getRelative(moveDirection); + private void endRun() + { + ArrayList bs = new ArrayList(); - if (UtilBlock.solid(_currentBlock.getRelative(BlockFace.UP))) - { + BlockFace[] faces = UtilShapes.getSideBlockFaces(_currentBlock, moveDirection); - _currentBlock = _currentBlock.getRelative(BlockFace.UP); + bs.add(_currentBlock); - if (UtilBlock.solid(_currentBlock.getRelative(BlockFace.UP))) - { - cancel(); - return; - } + for (int i = 1; i <= Math.min(4, Math.floor(_distTravelled / (8D - spellLevel))) + 1; i++) + { + for (int a = 0; a < faces.length; a++) + { + Block b = _currentBlock.getRelative(faces[a], i); - } - else if (!UtilBlock.solid(_currentBlock) && _currentBlock.getY() > 0) - { + if (UtilBlock.solid(b)) + { + bs.add(b); + } + } + } - _currentBlock = _currentBlock.getRelative(BlockFace.DOWN); + for (Block block : bs) + { - } + ArrayList toExplode = new ArrayList(); - if (!UtilBlock.solid(_currentBlock)) - { - cancel(); - return; - } + toExplode.add(block); - ArrayList bs = new ArrayList(); + for (BlockFace face : new BlockFace[] + { + BlockFace.EAST, BlockFace.WEST, BlockFace.SOUTH, BlockFace.NORTH, BlockFace.UP, + BlockFace.DOWN + }) + { + if (UtilMath.random.nextBoolean()) + { + Block b = block.getRelative(face); - BlockFace[] faces = UtilShapes.getSideBlockFaces(_currentBlock, moveDirection); + if (b.getType() != Material.AIR && b.getType() != Material.BEDROCK) + { + if (!toExplode.contains(b)) + { + toExplode.add(b); + } + } + } + } - bs.add(_currentBlock); + Wizards.getArcadeManager().GetExplosion() + .BlockExplosion(toExplode, block.getLocation().add(0.5, 0, 0.5), false); + } - for (int i = 1; i <= Math.min(4, Math.floor(_distTravelled / (8D - spellLevel))) + 1; i++) - { - for (int a = 0; a < faces.length; a++) - { - Block b = _currentBlock.getRelative(faces[a], i); + cancel(); + } - if (UtilBlock.solid(b)) - { - bs.add(b); - } - } - } + @Override + public void run() + { + if (!player.isOnline() || !Wizards.IsAlive(player)) + { + endRun(); + return; + } - _previousBlocks.addAll(bs); + _currentBlock = _currentBlock.getRelative(moveDirection); - for (Block b : _previousBlocks) - { - for (Entity entity : b.getChunk().getEntities()) - { - if (entity instanceof LivingEntity && player != entity && !_effected.contains(entity.getEntityId())) - { + if (UtilBlock.solid(_currentBlock.getRelative(BlockFace.UP))) + { - if (entity instanceof Tameable) - { - AnimalTamer tamer = ((Tameable) entity).getOwner(); + _currentBlock = _currentBlock.getRelative(BlockFace.UP); - if (tamer != null && tamer == player) - { - continue; - } - } + if (UtilBlock.solid(_currentBlock.getRelative(BlockFace.UP))) + { + endRun(); + return; + } - Location loc = entity.getLocation(); + } + else if (!UtilBlock.solid(_currentBlock) && _currentBlock.getY() > 0) + { - if (loc.getBlockX() == b.getX() && loc.getBlockZ() == b.getZ()) - { + _currentBlock = _currentBlock.getRelative(BlockFace.DOWN); - if (entity instanceof Player && !Wizards.IsAlive(entity)) - { - continue; - } + } - double height = loc.getY() - b.getY(); - if (height >= 0 && height <= 2) - { - Wizards.Manager.GetDamage().NewDamageEvent((LivingEntity) entity, player, null, - DamageCause.CUSTOM, damage, false, true, false, "Rumble", "Rumble"); - } + if (!UtilBlock.solid(_currentBlock)) + { + endRun(); + return; + } - _effected.add(entity.getEntityId()); - } - } - } - } + ArrayList effectedBlocks = new ArrayList(); - _previousBlocks = bs; + BlockFace[] faces = UtilShapes.getSideBlockFaces(_currentBlock, moveDirection); - for (Block b : bs) - { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getTypeId(), 19); // 19 being particle view - // distance - } + effectedBlocks.add(_currentBlock); - if (_distTravelled++ >= maxDist) - { - cancel(); - } - } - }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 5, 1); + playBlockEffect(_currentBlock); - charge(player); - } - } + for (int i = 1; i <= Math.min(4, Math.floor(_distTravelled / (8D - spellLevel))) + 1; i++) + { + for (int a = 0; a < faces.length; a++) + { + Block b = _currentBlock.getRelative(faces[a], i); + + if (UtilBlock.solid(b)) + { + effectedBlocks.add(b); + playBlockEffect(b); + } + } + } + + _previousBlocks.addAll(effectedBlocks); + + for (Block b : _previousBlocks) + { + for (Entity entity : b.getChunk().getEntities()) + { + if (entity instanceof LivingEntity && player != entity && !_effected.contains(entity.getEntityId())) + { + + if (entity instanceof Tameable) + { + AnimalTamer tamer = ((Tameable) entity).getOwner(); + + if (tamer != null && tamer == player) + { + continue; + } + } + + Location loc = entity.getLocation(); + + if (loc.getBlockX() == b.getX() && loc.getBlockZ() == b.getZ()) + { + + if (entity instanceof Player && !Wizards.IsAlive(entity)) + { + continue; + } + + double height = loc.getY() - b.getY(); + if (height >= 0 && height <= 2) + { + Wizards.Manager.GetDamage().NewDamageEvent((LivingEntity) entity, player, null, + DamageCause.CUSTOM, damage, true, true, false, "Rumble", "Rumble"); + + if (entity instanceof Player) + { + Wizards.getArcadeManager() + .GetCondition() + .Factory() + .Slow("Rumble", (LivingEntity) entity, player, 60, spellLevel, false, false, + false, false); + } + } + + _effected.add(entity.getEntityId()); + } + } + } + } + + _previousBlocks = effectedBlocks; + + if (_distTravelled++ >= maxDist) + { + endRun(); + } + } + }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 5, 1); + + charge(player); + } + } + + private void playBlockEffect(Block block) + { + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId());/* + + final int entityId = UtilEnt.getNewEntityId(); + + PacketPlayOutSpawnEntity fallingSpawn = new PacketPlayOutSpawnEntity(); + fallingSpawn.a = entityId; + fallingSpawn.b = (block.getX() * 32) + 16; + fallingSpawn.c = (block.getY() * 32) + 4; + fallingSpawn.d = (block.getZ() * 32) + 16; + fallingSpawn.i = 70; + fallingSpawn.k = block.getTypeId() | block.getData() << 16; + fallingSpawn.f = 10000; + + final Collection players = Bukkit.getOnlinePlayers(); + + for (Player player : players) + { + UtilPlayer.sendPacket(player, fallingSpawn); + } + + Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable() + { + public void run() + { + PacketPlayOutEntityDestroy destroyPacket = new PacketPlayOutEntityDestroy(new int[] + { + entityId + }); + + for (Player player : players) + { + UtilPlayer.sendPacket(player, destroyPacket); + } + } + }, 15);*/ + } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java new file mode 100644 index 000000000..aeaa2d751 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java @@ -0,0 +1,85 @@ +package nautilus.game.arcade.game.games.wizards.spells; + +import java.util.HashMap; +import java.util.Iterator; + +import org.bukkit.Location; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.metadata.FixedMetadataValue; + +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.game.games.wizards.Spell; +import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; + +public class SpellSpectralArrow extends Spell implements SpellClick +{ + private HashMap _spectralArrows = new HashMap(); + + @Override + public void castSpell(Player player) + { + Arrow arrow = player.shootArrow(); + arrow.setMetadata("SpellLevel", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), getSpellLevel(player))); + _spectralArrows.put(arrow, player.getLocation()); + + charge(player); + } + + @EventHandler + public void onTick(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + Iterator itel = _spectralArrows.keySet().iterator(); + + while (itel.hasNext()) + { + Arrow entity = itel.next(); + + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, entity.getLocation(), 0, 0, 0, 0, 1); + } + } + + @EventHandler + public void onSecond(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + { + return; + } + + Iterator itel = _spectralArrows.keySet().iterator(); + + while (itel.hasNext()) + { + Arrow entity = itel.next(); + + if (entity.isOnGround() || !entity.isValid()) + { + itel.remove(); + } + } + } + + @EventHandler + public void onDamage(CustomDamageEvent event) + { + Location loc = _spectralArrows.remove(event.GetDamagerEntity(true)); + + if (loc != null) + { + int spellLevel = event.GetDamagerEntity(true).getMetadata("SpellLevel").get(0).asInt(); + event.AddMod("Negate Damage", "Negate Damage", -event.GetDamage(), false); + event.AddMod("Spectral Arrow", "Spectral Arrow", loc.distance(event.GetDamageeEntity().getLocation()) / (7D - spellLevel), true); + } + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTeleportRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTeleportRune.java deleted file mode 100644 index e6f562a6b..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTeleportRune.java +++ /dev/null @@ -1,87 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells; - -import java.util.ArrayList; -import java.util.Iterator; - -import mineplex.core.common.util.UtilBlock; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.games.wizards.Spell; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; -import nautilus.game.arcade.game.games.wizards.spells.subclasses.TeleportRune; - -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; - -public class SpellTeleportRune extends Spell implements SpellClick -{ - private ArrayList _teleportRunes = new ArrayList(); - - @EventHandler - public void onTick(UpdateEvent event) - { - if (event.getType() == UpdateType.TICK) - { - Iterator itel = _teleportRunes.iterator(); - - while (itel.hasNext()) - { - TeleportRune rune = itel.next(); - - if (rune.tickRune()) - { - itel.remove(); - } - } - } - } - - @Override - public void castSpell(Player player) - { - Block b = player.getTargetBlock(null, 25 * getSpellLevel(player)); - - while (b.getType() != Material.AIR && b.getY() < 250) - { - b = b.getRelative(BlockFace.UP); - } - - if (b.getRelative(BlockFace.DOWN).getType() == Material.AIR) - { - player.sendMessage(ChatColor.RED + "Unable to place a rune!"); - return; - } - - Location firstTeleport = player.getLocation(); - - for (int i = 0; i < 3 && firstTeleport.getBlockY() > 1 - && !UtilBlock.solid(firstTeleport.getBlock().getRelative(BlockFace.DOWN)); i++) - { - firstTeleport.add(0, -1, 0); - } - - firstTeleport = firstTeleport.getBlock().getLocation().add(firstTeleport.getX() % 1, 0, firstTeleport.getZ() % 1); - - Location secondTeleport = b.getLocation().add(0.5, 0, 0.5); - - double runeSize = 1.5D * getSpellLevel(player); - - if (firstTeleport.distance(secondTeleport) > runeSize * 2) - { - TeleportRune teleportRune = new TeleportRune(firstTeleport, secondTeleport, runeSize); - - _teleportRunes.add(teleportRune); - - charge(player); - } - else - { - player.sendMessage(ChatColor.RED + "Target location too close"); - } - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java index 6ec3eb59f..b886d6cdb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java @@ -6,6 +6,8 @@ import java.util.List; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilShapes; import mineplex.core.updater.UpdateType; @@ -16,7 +18,6 @@ import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import nautilus.game.arcade.game.games.wizards.spells.subclasses.TrapRune; import org.bukkit.Effect; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.block.Block; @@ -26,179 +27,194 @@ import org.bukkit.event.EventHandler; public class SpellTrapRune extends Spell implements SpellClick { - private ArrayList _runes = new ArrayList(); + private ArrayList _runes = new ArrayList(); - @EventHandler - public void onTick(UpdateEvent event) - { - if (event.getType() == UpdateType.TICK) - { - Iterator itel = _runes.iterator(); - while (itel.hasNext()) - { - TrapRune rune = itel.next(); - if (!rune.RuneCaster.isOnline() || UtilPlayer.isSpectator(rune.RuneCaster)) - { - itel.remove(); - } - else if (rune.TicksLived++ > 2000) - { - itel.remove(); - } - else - { - if (rune.TicksLived <= 100) - { - if (rune.TicksLived % 15 == 0) - initialParticles(rune.RuneLocation, rune.RuneSize); - } - else - { - if (!isValid(rune)) - { - trapCard(rune); - itel.remove(); - } - else - { - for (Player player : Wizards.GetPlayers(true)) - { - if (isInTrap(rune.RuneLocation, player.getLocation(), rune.RuneSize)) - { - trapCard(rune); - itel.remove(); - break; - } - } - } - } - } - } - } - } + @EventHandler + public void onTick(UpdateEvent event) + { + if (event.getType() == UpdateType.TICK) + { + Iterator itel = _runes.iterator(); + while (itel.hasNext()) + { + TrapRune rune = itel.next(); - public void initialParticles(Location trapLocation, double trapSize) - { - for (Location loc : getBox(trapLocation, trapSize, 0.3)) - { - for (double y = 0; y < 1; y += 0.2) - { - trapLocation.getWorld().spigot().playEffect(loc, Effect.FLAME, 0, 0, 0, 0, 0, 0, 1, 30); - } - } - } + if (!rune.RuneCaster.isOnline() || UtilPlayer.isSpectator(rune.RuneCaster)) + { + itel.remove(); + } + else if (rune.TicksLived++ > 2000) + { + itel.remove(); + } + else + { + if (rune.TicksLived <= 100) + { + if (rune.TicksLived % 15 == 0) + { + initialParticles(rune.RuneLocation, rune.RuneSize); + } - private ArrayList getBox(Location trapLocation, double trapSize, double spacing) - { - ArrayList boxLocs = getBoxCorners(trapLocation, trapSize); - ArrayList returns = new ArrayList(); + if (rune.TicksLived == 100) + { + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, rune.RuneLocation, 0, rune.RuneSize / 4, 0, + rune.RuneSize / 4, (int) (rune.RuneSize * 10)); + } + } + else + { + if (!isValid(rune)) + { + trapCard(rune); + itel.remove(); + } + else + { + for (Player player : Wizards.GetPlayers(true)) + { + if (isInTrap(rune.RuneLocation, player.getLocation(), rune.RuneSize)) + { + trapCard(rune); - for (int i = 0; i < boxLocs.size(); i++) - { + itel.remove(); + break; + } + } + } + } + } + } + } + } - int a = i + 1 >= boxLocs.size() ? 0 : i + 1; - returns.addAll(UtilShapes.getLinesDistancedPoints(boxLocs.get(i), boxLocs.get(a), spacing)); - returns.add(boxLocs.get(i)); + public void initialParticles(Location trapLocation, double trapSize) + { + for (Location loc : getBox(trapLocation, trapSize, 0.3)) + { + for (double y = 0; y < 1; y += 0.2) + { + trapLocation.getWorld().spigot().playEffect(loc, Effect.SMOKE, 0, 0, 0, 0, 0, 0, 1, 30); + } + } + } - } - return returns; - } + private ArrayList getBox(Location trapLocation, double trapSize, double spacing) + { + ArrayList boxLocs = getBoxCorners(trapLocation, trapSize); + ArrayList returns = new ArrayList(); - private ArrayList getBoxCorners(Location center, double boxSize) - { - ArrayList boxPoints = new ArrayList(); + for (int i = 0; i < boxLocs.size(); i++) + { - boxPoints.add(center.clone().add(-boxSize, 0, -boxSize)); - boxPoints.add(center.clone().add(boxSize, 0, -boxSize)); - boxPoints.add(center.clone().add(boxSize, 0, boxSize)); - boxPoints.add(center.clone().add(-boxSize, 0, boxSize)); + int a = i + 1 >= boxLocs.size() ? 0 : i + 1; + returns.addAll(UtilShapes.getLinesDistancedPoints(boxLocs.get(i), boxLocs.get(a), spacing)); + returns.add(boxLocs.get(i)); - return boxPoints; - } + } + return returns; + } - private boolean isInTrap(Location trapLocation, Location loc, double trapSize) - { - if (loc.getX() >= trapLocation.getX() - trapSize && loc.getX() <= trapLocation.getX() + trapSize) - { - if (loc.getZ() >= trapLocation.getZ() - trapSize && loc.getZ() <= trapLocation.getZ() + trapSize) - { - if (loc.getY() >= trapLocation.getY() - 0.1 && loc.getY() <= trapLocation.getY() + 0.9) - { - return true; - } - } - } - return false; - } + private ArrayList getBoxCorners(Location center, double boxSize) + { + ArrayList boxPoints = new ArrayList(); - private boolean isValid(TrapRune rune) - { - return !UtilBlock.solid(rune.RuneLocation.getBlock()) - || UtilBlock.solid(rune.RuneLocation.getBlock().getRelative(BlockFace.DOWN)); - /* - for (double x = -rune.RuneSize; x <= rune.RuneSize; x++) - { - for (double z = -rune.RuneSize; z <= rune.RuneSize; z++) - { + boxPoints.add(center.clone().add(-boxSize, 0, -boxSize)); + boxPoints.add(center.clone().add(boxSize, 0, -boxSize)); + boxPoints.add(center.clone().add(boxSize, 0, boxSize)); + boxPoints.add(center.clone().add(-boxSize, 0, boxSize)); - Block b = rune.RuneLocation.clone().add(x, 0, z).getBlock(); - if (UtilBlock.solid(b) || !UtilBlock.solid(b.getRelative(BlockFace.DOWN))) - { - return false; - } + return boxPoints; + } - } - }*/ - } + private boolean isInTrap(Location trapLocation, Location loc, double trapSize) + { + if (loc.getX() >= trapLocation.getX() - trapSize && loc.getX() <= trapLocation.getX() + trapSize) + { + if (loc.getZ() >= trapLocation.getZ() - trapSize && loc.getZ() <= trapLocation.getZ() + trapSize) + { + if (loc.getY() >= trapLocation.getY() - 0.1 && loc.getY() <= trapLocation.getY() + 0.9) + { + return true; + } + } + } + return false; + } - public void trapCard(TrapRune rune) - { - rune.RuneLocation.getWorld().playSound(rune.RuneLocation, Sound.WITHER_SHOOT, 5, (float) rune.RuneSize * 2); + private boolean isValid(TrapRune rune) + { + return !UtilBlock.solid(rune.RuneLocation.getBlock()) + || UtilBlock.solid(rune.RuneLocation.getBlock().getRelative(BlockFace.DOWN)); + /* + for (double x = -rune.RuneSize; x <= rune.RuneSize; x++) + { + for (double z = -rune.RuneSize; z <= rune.RuneSize; z++) + { - CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), rune.RuneLocation.clone().add(0, - 0.3, 0), (float) rune.RuneSize * 1.2F, "Trap Rune"); + Block b = rune.RuneLocation.clone().add(x, 0, z).getBlock(); + if (UtilBlock.solid(b) || !UtilBlock.solid(b.getRelative(BlockFace.DOWN))) + { + return false; + } - explosion.setPlayer(rune.RuneCaster, true); + } + }*/ + } - explosion.setDropItems(false); + public void trapCard(TrapRune rune) + { + rune.RuneLocation.getWorld().playSound(rune.RuneLocation, Sound.WITHER_SHOOT, 5, (float) rune.RuneSize * 2); - explosion.explode(); + CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), Wizards.getArcadeManager() + .GetExplosion(), rune.RuneLocation.clone().add(0, 0.3, 0), (float) rune.RuneSize * 1.2F, "Trap Rune"); - for (Location loc : getBox(rune.RuneLocation, rune.RuneSize, 0.3)) - { - for (double y = 0; y < 1; y += 0.2) - { - rune.RuneLocation.getWorld().spigot().playEffect(loc, Effect.FLAME, 0, 0, 0, 0, 0, 0, 1, 30); - } - } - } + explosion.setPlayer(rune.RuneCaster, true); - @Override - public void castSpell(Player p) - { - List list = p.getLastTwoTargetBlocks(UtilBlock.blockAirFoliageSet, (getSpellLevel(p) * 4) + 4); + explosion.setBlockExplosionSize((float) rune.RuneSize * 2F); - if (list.size() > 1) - { - Location loc = list.get(0).getLocation().add(0.5, 0, 0.5); + explosion.setFallingBlockExplosion(true); - float trapSize = Math.max(1, getSpellLevel(p) * 0.8F); + explosion.setDropItems(false); - TrapRune rune = new TrapRune(); - rune.RuneCaster = p; - rune.RuneSize = trapSize; - rune.RuneLocation = loc; + explosion.explode(); - if (!isValid(rune)) - { - p.sendMessage(C.cGreen + "Cannot draw rune on wall"); - return; - } + for (Location loc : getBox(rune.RuneLocation, rune.RuneSize, 0.3)) + { + for (double y = 0; y < 1; y += 0.2) + { + rune.RuneLocation.getWorld().spigot().playEffect(loc, Effect.SMOKE, 0, 0, 0, 0, 0, 0, 1, 30); + } + } + } - initialParticles(loc, trapSize); - _runes.add(rune); - charge(p); - } - } + @Override + public void castSpell(Player p) + { + List list = p.getLastTwoTargetBlocks(UtilBlock.blockAirFoliageSet, (getSpellLevel(p) * 4) + 4); + + if (list.size() > 1) + { + Location loc = list.get(0).getLocation().add(0.5, 0, 0.5); + + float trapSize = Math.max(1, getSpellLevel(p) * 0.8F); + + TrapRune rune = new TrapRune(); + rune.RuneCaster = p; + rune.RuneSize = trapSize; + rune.RuneLocation = loc; + + if (!isValid(rune)) + { + p.sendMessage(C.cGreen + "Cannot draw rune on wall"); + return; + } + + initialParticles(loc, trapSize); + + _runes.add(rune); + charge(p); + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java index ccee25e0a..d5f8fda14 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java @@ -12,6 +12,7 @@ import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -50,37 +51,37 @@ public class SpellWebShot extends Spell implements SpellClick, IThrown if (Wizards.IsAlive(player)) { // Boost - UtilAction.velocity(player, 1.2, 0.2, 1.2, true); org.bukkit.entity.Item ent = player.getWorld().dropItem( player.getLocation().add(0, 0.5, 0), ItemStackFactory.Instance.CreateStack(Material.WEB, (byte) 0, 1, "Web " + player.getName() + " " + System.currentTimeMillis())); - Vector random = new Vector(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5); - random.normalize(); - random.multiply(0.2); - - UtilAction.velocity(ent, player.getLocation().getDirection().multiply(-1).add(random), 1 + Math.random() * 0.4, - false, 0, 0.2, 10, false); + UtilAction.velocity(ent, player.getLocation().getDirection(), 1.5, false, 0, 0.2, 10, false); Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2d); + player.getWorld().playSound(player.getLocation(), Sound.CLICK, 1.2F, 0.8F); } } @Override public void Collide(LivingEntity target, Block block, ProjectileUser data) { - if (target != null) + if (target != data.GetThrower()) { - data.GetThrown().remove(); + if (target != null) + { + data.GetThrown().remove(); - // Damage Event - Wizards.getArcadeManager().GetDamage().NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 2, false, false, false, - UtilEnt.getName(data.GetThrower()), "Web Shot"); + // Damage Event + Wizards.getArcadeManager() + .GetDamage() + .NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 2, false, false, false, + UtilEnt.getName(data.GetThrower()), "Web Shot"); + } + + Web(data); } - - Web(data); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java index af4fa7c1d..99576e8b6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java @@ -1,62 +1,111 @@ package nautilus.game.arcade.game.games.wizards.spells; +import java.util.ArrayList; + import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilShapes; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.hologram.Hologram; +import mineplex.core.hologram.Hologram.HologramTarget; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; -import org.bukkit.Effect; import org.bukkit.Location; +import org.bukkit.Sound; import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; public class SpellWizardsCompass extends Spell implements SpellClick { - @Override - public void castSpell(Player p) - { - double dist = 9999; - Player closestPlayer = null; + @Override + public void castSpell(Player p) + { + Location loc = p.getEyeLocation().subtract(0, 1, 0); + ArrayList players = Wizards.GetPlayers(true); - for (Player player : Wizards.GetPlayers(true)) - { - double newDist = player.getLocation().distance(p.getLocation()); + int counter = 0; - if (newDist > 10 && (closestPlayer == null || newDist < dist)) - { + final int[][] ints = new int[27][]; - closestPlayer = player; - dist = newDist; + int c = 0; - } - } + for (int x = -1; x <= 1; x++) + { - if (closestPlayer != null) - { - int particlesPlayed = 0; + for (int y = -1; y <= 1; y++) + { - for (Location loc : UtilShapes.getLinesDistancedPoints( - p.getEyeLocation().subtract(p.getEyeLocation().getDirection().normalize().multiply(-0.3)).subtract(0, .5, 0), - closestPlayer.getEyeLocation(), 0.3)) - { + for (int z = -1; z <= 1; z++) + { + ints[c++] = new int[] + { + x, y, z + }; + } + } + } - if (particlesPlayed++ > 13) - { - break; - } + boolean foundSomeone = false; - loc.getWorld().spigot().playEffect(loc, Effect.HAPPY_VILLAGER, 0, 0, 0.1F, 0.1F, 0.1F, 0, 4, 25); + for (Player enemy : players) + { + if (UtilMath.offset(p, enemy) <= 10) + { + continue; + } - } + foundSomeone = true; - charge(p); - } - else - { + final int count = counter++; - p.sendMessage(C.cRed + "All players are less than 10 blocks from you!"); + final Vector traj = UtilAlg.getTrajectory(p.getLocation(), enemy.getEyeLocation()).multiply(0.1); - } + final Hologram hologram = new Hologram(Wizards.getArcadeManager().getHologramManager(), loc.clone().add(0, 0.3, 0) + .add(traj.clone().normalize().multiply(7)), enemy.getName()); - } + hologram.setHologramTarget(HologramTarget.WHITELIST); + hologram.addPlayer(p); + + hologram.start(); + + final Location location = loc.clone(); + + new BukkitRunnable() + { + int i = 0; + + public void run() + { + for (int a = 0; a < 2; a++) + { + // Colored redstone dust + UtilParticle.PlayParticle(ParticleType.RED_DUST, location.add(traj), ints[count][0], ints[count][1], + ints[count][2], 1, 0); + i++; + } + + if (i > (7 * 10)) + { + hologram.stop(); + cancel(); + } + } + }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 0, 0); + } + + if (!foundSomeone) + { + p.sendMessage(C.cRed + "All players are less than 10 blocks from you!"); + } + else + { + p.playSound(p.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1); + + charge(p); + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/ExplosiveRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/ExplosiveRune.java deleted file mode 100644 index d103843df..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/ExplosiveRune.java +++ /dev/null @@ -1,62 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells.subclasses; - -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilShapes; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.minecraft.game.core.damage.DamageManager; -import mineplex.minecraft.game.core.explosion.CustomExplosion; - -import org.bukkit.Location; -import org.bukkit.entity.Player; - -public class ExplosiveRune -{ - private Location _explosiveLocation; - private Player _explosiveOwner; - private float _explosiveSize; - private int _ticksTillExplode = 60; - private DamageManager _damageManager; - - public boolean onTick() - { - _ticksTillExplode--; - - if (_ticksTillExplode <= 0) - { - CustomExplosion explosion = new CustomExplosion(_damageManager, _explosiveLocation, _explosiveSize, "Explosive Rune"); - - explosion.setPlayer(_explosiveOwner, true); - - explosion.setDropItems(false); - - explosion.explode(); - - drawBoxParticles(); - return true; - - } - return false; - } - - public ExplosiveRune(DamageManager damageManager, Location loc, Player player, float size) - { - _explosiveLocation = loc; - _explosiveOwner = player; - _explosiveSize = size; - _damageManager = damageManager; - drawBoxParticles(); - } - - public Location getLocation() - { - return _explosiveLocation; - } - - private void drawBoxParticles() - { - for (Location loc : UtilShapes.getDistancedCircle(_explosiveLocation, 0.3, _explosiveSize * 1.3D)) - { - UtilParticle.PlayParticle(ParticleType.FLAME, loc, 0, 0, 0, 0, 1); - } - } -} From 05319511ff1a05a8191b051e31e5c37aaa34ea98 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 3 Apr 2015 19:34:24 +1300 Subject: [PATCH 005/104] UtilBlock: Modified getInRadius() to allow option of a hollow sphere --- .../src/mineplex/core/common/util/UtilBlock.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java index a2a9272d5..a1d040f18 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java @@ -304,7 +304,13 @@ public class UtilBlock return blockList; } + public static HashMap getInRadius(Block block, double dR) + { + return getInRadius(block, dR, false); + } + + public static HashMap getInRadius(Block block, double dR, boolean hollow) { HashMap blockList = new HashMap(); int iR = (int)dR + 1; @@ -317,8 +323,10 @@ public class UtilBlock double offset = UtilMath.offset(block.getLocation(), curBlock.getLocation()); - if (offset <= dR) - blockList.put(curBlock, 1 - (offset/dR)); + if (offset <= dR && !(hollow && offset < dR - 1)) + { + blockList.put(curBlock, 1 - (offset / dR)); + } } return blockList; From d5137d9ec65fbd0692aff671828d1de83349ce2e Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 3 Apr 2015 19:35:57 +1300 Subject: [PATCH 006/104] UtilParticle: Added option to send own particle strings, added two particles --- .../core/common/util/UtilParticle.java | 291 ++++++++++++------ 1 file changed, 190 insertions(+), 101 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index 1c42b669e..fc3044f87 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -1,127 +1,216 @@ package mineplex.core.common.util; - + import java.lang.reflect.Field; import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.Material; import org.bukkit.entity.Player; - + public class UtilParticle { public enum ParticleType { - HUGE_EXPLOSION("hugeexplosion"), - LARGE_EXPLODE("largeexplode"), - FIREWORKS_SPARK("fireworksSpark"), - BUBBLE("bubble"), - SUSPEND("suspended"), - DEPTH_SUSPEND("depthSuspend"), - TOWN_AURA("townaura"), - CRIT("crit"), - MAGIC_CRIT("magicCrit"), - MOB_SPELL("mobSpell"), - MOB_SPELL_AMBIENT("mobSpellAmbient"), - SPELL("spell"), - INSTANT_SPELL("instantSpell"), - WITCH_MAGIC("witchMagic"), - NOTE("note"), - PORTAL("portal"), - ENCHANTMENT_TABLE("enchantmenttable"), - EXPLODE("explode"), - FLAME("flame"), - LAVA("lava"), - FOOTSTEP("footstep"), - SPLASH("splash"), - LARGE_SMOKE("largesmoke"), - CLOUD("cloud"), - RED_DUST("reddust"), - SNOWBALL_POOF("snowballpoof"), - DRIP_WATER("dripWater"), - DRIP_LAVA("dripLava"), - DROPLET("droplet"), - SNOW_SHOVEL("snowshovel"), - SLIME("slime"), - HEART("heart"), - ANGRY_VILLAGER("angryVillager"), - HAPPY_VILLAGER("happyVillager"); + ANGRY_VILLAGER("angryVillager"), - public String particleName; - - ParticleType(String particleName) - { - this.particleName = particleName; - } + BLOCK_CRACK("blockcrack_1_0") + { + @Override + public String getParticle(Material type, int data) + { + return "blockcrack_" + type.getId() + "_" + data; + } + }, + + BLOCK_DUST("blockdust_1_0") + { + @Override + public String getParticle(Material type, int data) + { + return "blockdust_" + type.getId() + "_" + data; + } + }, + + BUBBLE("bubble"), + + CLOUD("cloud"), + + CRIT("crit"), + + DEPTH_SUSPEND("depthSuspend"), + + DRIP_LAVA("dripLava"), + + DRIP_WATER("dripWater"), + + DROPLET("droplet"), + + ENCHANTMENT_TABLE("enchantmenttable"), + + EXPLODE("explode"), + + FIREWORKS_SPARK("fireworksSpark"), + + FLAME("flame"), + + FOOTSTEP("footstep"), + + HAPPY_VILLAGER("happyVillager"), + + HEART("heart"), + + HUGE_EXPLOSION("hugeexplosion"), + + ICON_CRACK("iconcrack_1_0") + { + @Override + public String getParticle(Material type, int data) + { + return "iconcrack_" + type.getId() + "_" + data; + } + }, + + INSTANT_SPELL("instantSpell"), + + LARGE_EXPLODE("largeexplode"), + + LARGE_SMOKE("largesmoke"), + + LAVA("lava"), + + MAGIC_CRIT("magicCrit"), + + MOB_SPELL("mobSpell"), + + MOB_SPELL_AMBIENT("mobSpellAmbient"), + + NOTE("note"), + + PORTAL("portal"), + + RED_DUST("reddust"), + + SLIME("slime"), + + SNOW_SHOVEL("snowshovel"), + + SNOWBALL_POOF("snowballpoof"), + + SPELL("spell"), + + SPLASH("splash"), + + SUSPEND("suspended"), + + TOWN_AURA("townaura"), + + WITCH_MAGIC("witchMagic"); + + public String particleName; + + ParticleType(String particleName) + { + this.particleName = particleName; + } + + public String getParticle(Material type, int data) + { + return particleName; + } } - - public static void PlayParticle(Player player, ParticleType type, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count) - { - PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(); - - for (Field field : packet.getClass().getDeclaredFields()) - { - try - { - field.setAccessible(true); - String fieldName = field.getName(); - switch (fieldName) - { - case "a": - field.set(packet, type.particleName); //Particle name - break; - case "b": - field.setFloat(packet, (float)location.getX()); //Block X - break; - case "c": - field.setFloat(packet, (float)location.getY()); //Block Y - break; - case "d": - field.setFloat(packet, (float)location.getZ()); //Block Z - break; - case "e": - field.setFloat(packet, offsetX); //Random X Offset - break; - case "f": - field.setFloat(packet, offsetY); //Random Y Offset - break; - case "g": - field.setFloat(packet, offsetZ); //Random Z Offset - break; - case "h": - field.setFloat(packet, speed); //Speed/data of particles - break; - case "i": - field.setInt(packet, count); //Amount of particles - break; - } - } - catch (Exception e) - { - System.out.println(e.getMessage()); - return; - } - } - ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); - } - - public static void PlayParticle(ParticleType type, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count) + private static PacketPlayOutWorldParticles getPacket(String particleName, Location location, float offsetX, float offsetY, + float offsetZ, float speed, int count) { + + PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(); + + for (Field field : packet.getClass().getDeclaredFields()) + { + try + { + field.setAccessible(true); + String fieldName = field.getName(); + switch (fieldName) + { + case "a": + field.set(packet, particleName); // Particle name + break; + case "b": + field.setFloat(packet, (float) location.getX()); // Block X + break; + case "c": + field.setFloat(packet, (float) location.getY()); // Block Y + break; + case "d": + field.setFloat(packet, (float) location.getZ()); // Block Z + break; + case "e": + field.setFloat(packet, offsetX); // Random X Offset + break; + case "f": + field.setFloat(packet, offsetY); // Random Y Offset + break; + case "g": + field.setFloat(packet, offsetZ); // Random Z Offset + break; + case "h": + field.setFloat(packet, speed); // Speed/data of particles + break; + case "i": + field.setInt(packet, count); // Amount of particles + break; + } + } + catch (Exception e) + { + System.out.println(e.getMessage()); + } + } + + return packet; + } + + public static void PlayParticle(ParticleType type, Location location, float offsetX, float offsetY, float offsetZ, + float speed, int count) + { + PlayParticle(type.particleName, location, offsetX, offsetY, offsetZ, speed, count); + } + + public static void PlayParticle(Player player, ParticleType type, Location location, float offsetX, float offsetY, + float offsetZ, float speed, int count) + { + PlayParticle(player, type.particleName, location, offsetX, offsetY, offsetZ, speed, count); + } + + public static void PlayParticle(Player player, String particleName, Location location, float offsetX, float offsetY, + float offsetZ, float speed, int count) + { + PacketPlayOutWorldParticles packet = getPacket(particleName, location, offsetX, offsetY, offsetZ, speed, count); + + UtilPlayer.sendPacket(player, packet); + } + + public static void PlayParticle(String particleName, Location location, float offsetX, float offsetY, float offsetZ, + float speed, int count) + { + PacketPlayOutWorldParticles packet = getPacket(particleName, location, offsetX, offsetY, offsetZ, speed, count); + for (Player player : UtilServer.getPlayers()) { - //Dont send to players who cannot see it! - if (type != ParticleType.FIREWORKS_SPARK && - type != ParticleType.LARGE_EXPLODE && - type != ParticleType.HUGE_EXPLOSION) + // Dont send to players who cannot see it! + if (!particleName.equals(ParticleType.FIREWORKS_SPARK.particleName) + && !particleName.equals(ParticleType.LARGE_EXPLODE.particleName) + && !particleName.equals(ParticleType.HUGE_EXPLOSION.particleName)) { if (UtilMath.offset(player.getLocation(), location) > 24) { continue; } } - - PlayParticle(player, type, location, offsetX, offsetY, offsetZ, speed, count); + + UtilPlayer.sendPacket(player, packet); } } } \ No newline at end of file From 290767c58d51f8048d160358fc6ffbbd02d4d560 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 3 Apr 2015 19:36:47 +1300 Subject: [PATCH 007/104] CustomExplosion: Added method to change to customdamage, added method to change the block damage differently from the entity damage --- .../game/core/explosion/CustomExplosion.java | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java index 3465a1b65..51fa6ef20 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java @@ -47,8 +47,11 @@ public class CustomExplosion extends Explosion private float _blockExplosionSize; private boolean _fallingBlockExplosion; private mineplex.core.explosion.Explosion _explosion; + private float _damage; + private boolean _useCustomDamage; - public CustomExplosion(DamageManager manager, mineplex.core.explosion.Explosion explosion, Location loc, float explosionSize, String deathCause) + public CustomExplosion(DamageManager manager, mineplex.core.explosion.Explosion explosion, Location loc, float explosionSize, + String deathCause) { super(((CraftWorld) loc.getWorld()).getHandle(), null, loc.getX(), loc.getY(), loc.getZ(), explosionSize); @@ -59,6 +62,17 @@ public class CustomExplosion extends Explosion _explosion = explosion; } + /** + * Center of explosion does this much damage + */ + public CustomExplosion setExplosionDamage(float damage) + { + _damage = damage; + _useCustomDamage = true; + + return this; + } + public CustomExplosion setBlockExplosionSize(float explosionSize) { _blockExplosionSize = explosionSize; @@ -214,9 +228,20 @@ public class CustomExplosion extends Explosion d0 /= d8; d1 /= d8; d2 /= d8; + + // Performs a raytrace that determines the percentage of solid blocks between the two double d9 = this._world.a(vec3d, entity.boundingBox); double d10 = (1.0D - d7) * d9; - int damage = (int) ((d10 * d10 + d10) / 2.0D * 8.0D * this.size + 1.0D); + int damage; + + if (_useCustomDamage) + { + damage = Math.max(0, (int) ((_damage * d9) * (d8 / size))); + } + else + { + damage = (int) ((d10 * d10 + d10) / 2.0D * 8.0D * this.size + 1.0D); + } if (entity.getBukkitEntity() instanceof LivingEntity) { @@ -296,7 +321,7 @@ public class CustomExplosion extends Explosion { _explosion.BlockExplosion(event.GetBlocks(), new Location(_world.getWorld(), posX, posY, posZ), false, false); } - + Iterator iterator = this.blocks.iterator(); while (iterator.hasNext()) From 23abf927223b6e220f5015553e5f903536259bd8 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 3 Apr 2015 19:37:27 +1300 Subject: [PATCH 008/104] IcePathData: Compare Material instead of integers --- .../src/nautilus/game/arcade/kit/perks/data/IcePathData.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/IcePathData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/IcePathData.java index b308da2e1..9375879d6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/IcePathData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/IcePathData.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import mineplex.core.common.util.UtilMath; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.util.Vector; @@ -76,10 +77,10 @@ public class IcePathData loc.add(dir.clone().multiply(0.2)); - if (loc.getBlock().getTypeId() == 79) + if (loc.getBlock().getType() == Material.ICE) continue; - if (loc.getBlock().getTypeId() == 0 || loc.getBlock().getTypeId() == 78) + if (loc.getBlock().getType() == Material.AIR || loc.getBlock().getType() == Material.SNOW) { if (!_blocks.contains(loc.getBlock())) { From fc7c6e5831be0298853086c4620b39967019748a Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 11 Apr 2015 12:11:50 +1200 Subject: [PATCH 009/104] Wizards changes --- .../arcade/game/games/wizards/SpellType.java | 62 +- .../arcade/game/games/wizards/Wizard.java | 172 +-- .../arcade/game/games/wizards/Wizards.java | 1044 ++++++++++------- .../game/games/wizards/spells/SpellDrain.java | 35 - .../games/wizards/spells/SpellFireball.java | 4 +- .../wizards/spells/SpellFrostBarrier.java | 149 ++- .../game/games/wizards/spells/SpellGust.java | 5 +- .../games/wizards/spells/SpellIcePrison.java | 52 +- .../games/wizards/spells/SpellIceShards.java | 41 +- .../games/wizards/spells/SpellImplode.java | 8 +- .../wizards/spells/SpellLightningStrike.java | 31 +- .../wizards/spells/SpellMagicMissile.java | 236 ++-- .../games/wizards/spells/SpellNapalm.java | 212 +++- .../wizards/spells/SpellRainbowBeam.java | 4 +- ...RainbowPath.java => SpellRainbowRoad.java} | 101 +- .../games/wizards/spells/SpellRumble.java | 129 +- .../wizards/spells/SpellSpectralArrow.java | 46 +- .../games/wizards/spells/SpellSpeedBoost.java | 3 +- .../games/wizards/spells/SpellTrapRune.java | 161 +-- .../games/wizards/spells/SpellWebShot.java | 5 +- .../wizards/spells/SpellWizardsCompass.java | 60 +- .../spells/subclasses/HealingRune.java | 84 -- .../wizards/spells/subclasses/LaunchRune.java | 112 -- .../spells/subclasses/TeleportRune.java | 118 -- .../wizards/spells/subclasses/TrapRune.java | 179 ++- 25 files changed, 1616 insertions(+), 1437 deletions(-) delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDrain.java rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/{SpellRainbowPath.java => SpellRainbowRoad.java} (57%) delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/HealingRune.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TeleportRune.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java index 89dac68eb..9ff40d86b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java @@ -21,11 +21,13 @@ public enum SpellType // ❤ -4, // Cooldown change per level 10, // Item amount in loot - C.cGold + C.Bold + "Explosion Size: " + C.Bold + C.cWhite + "(Spell Level / 2) + 1", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level x 4) + 5.5", "", - "Summons exploding anvils over everyone near you!"), + "Summons exploding anvils over everyone near you!", + + "This also includes the caster!"), Fireball(SpellElement.ATTACK, // Spell element "Fireball", // Spell name @@ -38,7 +40,7 @@ public enum SpellType // ❤ -2, // Cooldown change per level 10, // Item amount in loot - C.cGold + C.Bold + "Explosion Size: " + C.Bold + C.cWhite + "(Spell Level x 0.25) + 0.8", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level x 2) + 2.5", "", @@ -139,7 +141,7 @@ public enum SpellType // ❤ "You gain a third of the absorbed mana!"),*/ - IcePrison(SpellElement.ATTACK, // Spell element + IcePrison(SpellElement.MISC, // Spell element "Ice Prison", // Spell name new ItemStack(Material.ICE), // Spell icon SpellIcePrison.class, // Spell class @@ -169,6 +171,8 @@ public enum SpellType // ❤ -5, // Cooldown change per level 3, // Item amount in loot + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "1 heart", + C.cGold + C.Bold + "Shards: " + C.Bold + C.cWhite + "Spell Level + 1", "", @@ -177,7 +181,7 @@ public enum SpellType // ❤ "Each shard from the same spell will deal", - "more damage for every shard that hit!"), + "an extra heart for every shard that hit!"), Implode(SpellElement.MISC, // Spell element "Implode", // Spell name @@ -213,11 +217,15 @@ public enum SpellType // ❤ 0, // Cooldown change per level 10, // Item amount in loot + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "3", + "", "Summon a mighty lightning strike", - "to hit the target you point out!"), + "to hit the target you point out!", + + "The lightning also contains fire!"), MagicMissile(SpellElement.ATTACK, // Spell element "Magic Missile", // Spell name @@ -230,9 +238,9 @@ public enum SpellType // ❤ 0, // Cooldown change per level 15, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level / 2) + 2", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 3", - C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "Spell Level x 15", + C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "(Spell Level x 10) + 20", "", @@ -244,22 +252,22 @@ public enum SpellType // ❤ "Napalm", // Spell name new ItemStack(Material.FIREBALL), // Spell icon SpellNapalm.class, // Spell class - 3, // Spell max level + 5, // Spell max level 60, // Mana cost 60, // Spell cooldown 5, // Mana cost change per level -10, // Cooldown change per level 3, // Item amount in loot - C.cGold + C.Bold + "Length: " + C.Bold + C.cWhite + "(Spell Level x 4) + 8", + C.cGold + C.Bold + "Length: " + C.Bold + C.cWhite + "(Spell Level x 10) + 4", "", - "Create fire into being where your", + "Creates a ball of fire that grows", - "vision falls, a wall of fire!", + "the longer it lives. At a large size", - "* Fire resistance not included."), + "it even even burn away nearby blocks!"), RainbowBeam(SpellElement.ATTACK, // Spell element "Rainbow Beam", // Spell name @@ -272,7 +280,7 @@ public enum SpellType // ❤ 1, // Cooldown change per level 10, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 2*", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 2.5 *", C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "80", @@ -282,12 +290,12 @@ public enum SpellType // ❤ "magical girl of love and hope!", - "Damage lowers after 30 blocks!"), + "* Damage lowers after 30 blocks!"), - RainbowPath(SpellElement.MISC, // Spell element - "Rainbow Path", // Spell name + RainbowRoad(SpellElement.MISC, // Spell element + "Rainbow Road", // Spell name new ItemStack(Material.STAINED_GLASS, 1, (short) 4), // Spell icon - SpellRainbowPath.class, // Spell class + SpellRainbowRoad.class, // Spell class 3, // Spell max level 50, // Mana cost 20, // Spell cooldown @@ -299,7 +307,7 @@ public enum SpellType // ❤ "", - "Summon into being a mighty path", + "Summon into being a mighty road", "of rainbows for thee to walk on!"), @@ -311,11 +319,15 @@ public enum SpellType // ❤ 30, // Mana cost 5, // Spell cooldown 0, // Mana cost change per level - 0, // Cooldown change per level + -1, // Cooldown change per level 10, // Item amount in loot C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 2", + C.cGold + C.Bold + "Explosion Damage:", + + C.Bold + C.cWhite + "((Spell Level / 4) + 1) x (1 - (Distance / 2))", + C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "Spell Level x 10", C.cGold + C.Bold + "Slowness Level: " + C.Bold + C.cWhite + "Spell Level", @@ -324,9 +336,9 @@ public enum SpellType // ❤ "Creates an targeted earthquake", - "in the direction you point", + "in the direction you face!", - "from the block you left click!", + "Explodes with damage at the end!", "Effected players lose their footing!"), @@ -347,7 +359,9 @@ public enum SpellType // ❤ "Shoot an arrow that penetrates!", - "Further the distance, higher the damage!"), + "Further the distance, higher the damage!", + + "Garanteed at least 2 hearts damage!"), SpeedBoost(SpellElement.SUPPORT, // Spell element "Speed Boost", // Spell name @@ -421,6 +435,8 @@ public enum SpellType // ❤ -5, // Cooldown change per level 3, // Item amount in loot + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "1 heart", + C.cGold + C.Bold + "Webs: " + C.Bold + C.cWhite + "Spell Level x 2", "", diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizard.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizard.java index 3cae1c5c6..19659f8d7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizard.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizard.java @@ -1,106 +1,114 @@ package nautilus.game.arcade.game.games.wizards; +import java.util.Set; + import mineplex.core.common.util.NautHashMap; public class Wizard { - private NautHashMap _cooldowns = new NautHashMap(); - private NautHashMap _knownSpells = new NautHashMap(); - private SpellType[] _assignedWands = new SpellType[5]; - private float _mana; - private float _manaPerTick = 2.5F / 20F; - private float _maxMana; - private int _soulStars; - private float _cooldownModifier = 1; + private NautHashMap _cooldowns = new NautHashMap(); + private NautHashMap _knownSpells = new NautHashMap(); + private SpellType[] _assignedWands = new SpellType[5]; + private float _mana = 150; + private float _manaPerTick = 2.5F / 20F; + private float _maxMana; + private int _soulStars; + private float _cooldownModifier = 1; - public float getCooldownModifier() - { - return _cooldownModifier; - } + public float getCooldownModifier() + { + return _cooldownModifier; + } - public void decreaseCooldown() - { - _cooldownModifier -= 0.1; - } + public void decreaseCooldown() + { + _cooldownModifier -= 0.1; + } - public void addSoulStar() - { - _soulStars++; - } + public void addSoulStar() + { + _soulStars++; + } - public Wizard(float maxMana) - { - learnSpell(SpellType.MagicMissile); - learnSpell(SpellType.WizardsCompass); - _maxMana = maxMana; - } + public Wizard(float maxMana) + { + learnSpell(SpellType.MagicMissile); + learnSpell(SpellType.WizardsCompass); - public SpellType getSpell(int slot) - { - return _assignedWands[slot]; - } + _maxMana = maxMana; + } - public void setSpell(int slot, SpellType spell) - { - _assignedWands[slot] = spell; - } + public SpellType getSpell(int slot) + { + return _assignedWands[slot]; + } - public long getCooldown(SpellType type) - { - if (_cooldowns.containsKey(type) && _cooldowns.get(type) >= System.currentTimeMillis()) - { - return _cooldowns.get(type); - } + public void setSpell(int slot, SpellType spell) + { + _assignedWands[slot] = spell; + } - return 0; - } + public long getCooldown(SpellType type) + { + if (_cooldowns.containsKey(type) && _cooldowns.get(type) >= System.currentTimeMillis()) + { + return _cooldowns.get(type); + } - public float getMana() - { - return _mana; - } + return 0; + } - public float getManaPerTick() - { - return _manaPerTick + ((_soulStars * 0.1F) / 20); - } + public float getMana() + { + return _mana; + } - public float getMaxMana() - { - return _maxMana; - } + public float getManaPerTick() + { + return _manaPerTick + ((_soulStars * 0.2F) / 20); + } - public int getSpellLevel(SpellType type) - { - if (_knownSpells.containsKey(type)) - { - return _knownSpells.get(type); - } - return 0; - } + public float getMaxMana() + { + return _maxMana; + } - public void learnSpell(SpellType type) - { - _knownSpells.put(type, getSpellLevel(type) + 1); - } + public int getSpellLevel(SpellType type) + { + if (_knownSpells.containsKey(type)) + { + return _knownSpells.get(type); + } + return 0; + } - public void setMana(float newMana) - { - _mana = newMana; - } + public void learnSpell(SpellType type) + { + _knownSpells.put(type, getSpellLevel(type) + 1); + } - public void setUsedSpell(SpellType spell) - { - int cooldown = spell.getSpellCooldown(this); - if (cooldown > 0) - { - _cooldowns.put(spell, System.currentTimeMillis() + (1000L * cooldown)); - } - } + public void setMana(float newMana) + { + _mana = newMana; + } - public void setManaPerTick(float manaPerTick) - { - _manaPerTick = manaPerTick; - } + public void setUsedSpell(SpellType spell) + { + int cooldown = spell.getSpellCooldown(this); + if (cooldown > 0) + { + _cooldowns.put(spell, System.currentTimeMillis() + (1000L * cooldown)); + } + } + + public void setManaPerTick(float manaPerTick) + { + _manaPerTick = manaPerTick; + } + + public Set getKnownSpells() + { + return _knownSpells.keySet(); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 4906d3182..aa05305d5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -8,11 +8,12 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Map.Entry; import java.util.Random; - import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; @@ -20,7 +21,6 @@ import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextBottom; -import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTextTop; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; @@ -96,23 +96,26 @@ import org.bukkit.util.Vector; public class Wizards extends SoloGame { - private NautHashMap> _learnedSpellChests = new NautHashMap>(); + private ArrayList _droppedWandsBooks = new ArrayList(); + private int _endgameMessageCounter; + private double _accuracy = 0; + private float _endgameSize = 1.5F; + private float _fireballSpeed = 0.05F; + private long _lastEndgameStrike; + private int _lastGamePace; + /** + * @0 for meteors + * @1 for lightning + */ + private int _endGameEvent; + private int _nextEndgameStrike = 6000; /** * The entry is so I can randomize the amounts of the items found */ private ArrayList> _randomItems = new ArrayList>(); private NautHashMap _spells = new NautHashMap(); - private NautHashMap _timeSinceDisplayedMiddle = new NautHashMap(); private WizardSpellMenu _wizard; - private ArrayList _droppedWandsBooks = new ArrayList(); private NautHashMap _wizards = new NautHashMap(); - private float _fireballSize = 1.5F; - private int _fireballCounter; - private ArrayList _fireballQueue = new ArrayList(); - private Iterator _fireballItel; - private float _fireballSpeed = 0.05F; - private long _lastFireball; - private long _nextFireball = 400; public Wizards(ArcadeManager manager) { @@ -158,52 +161,7 @@ public class Wizards extends SoloGame Manager.GetDamage().GetCombatManager().setUseWeaponName(AttackReason.DefaultWeaponName); createLoot(); - } - @EventHandler - public void joinMessage(PlayerJoinEvent event) - { - if (!UtilPlayer.is1_8(event.getPlayer())) - returnToHub(event.getPlayer()); - } - - public void returnToHub(Player player) - { - UtilPlayer.message(player, " "); - UtilPlayer.message(player, C.cGold + C.Bold + "Wizards requires you to be using Minecraft 1.8!"); - UtilPlayer.message(player, " "); - - player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - Manager.GetPortal().sendPlayerToServer(player, "Lobby"); - } - - @EventHandler - public void outdatedVersion(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC) - return; - - for (Player player : UtilServer.getPlayers()) - { - if (!UtilPlayer.is1_8(player)) - returnToHub(player); - } - } - - private void addMiddleText(Player p, String message) - { - ArrayList arraylist = new ArrayList(); - - if (_learnedSpellChests.containsKey(p.getName())) - { - arraylist = _learnedSpellChests.get(p.getName()); - } - else - { - _learnedSpellChests.put(p.getName(), arraylist); - } - - arraylist.add(message); } private void addRandomItem(int amount, Material itemType, int newDurability, int minAmount, int maxAmount) @@ -217,6 +175,67 @@ public class Wizards extends SoloGame } } + @EventHandler + public void onDamage(CustomDamageEvent event) + { + System.out.print(event.GetDamage()); + event.setCancelled(true); + if (!event.IgnoreArmor()) + { + double percentProtected = 0; + + for (ItemStack item : event.GetDamageePlayer().getInventory().getArmorContents()) + { + if (item != null) + { + double percent = 0; + String name = item.getType().name(); + + if (name.contains("LEATHER")) + { + percent = 6; + } + else if (name.contains("GOLDEN") || name.contains("CHAINMAIL")) + { + percent = 9; + } + else if (name.contains("IRON")) + { + percent = 12; + } + else if (name.contains("DIAMOND")) + { + percent = 15; + } + + if (name.contains("BOOTS")) + { + percent /= 3; + } + else if (name.contains("LEGGINGS")) + { + percent /= 1.5; + } + else if (name.contains("CHESTPLATE")) + { + } + else if (name.contains("HELMET")) + { + percent /= 2; + } + + percentProtected += (percent / 100); + } + } + + if (percentProtected > 0) + { + event.SetIgnoreArmor(true); + event.AddMult("Armor Rebalancing", "Armor Rebalancing", 1 - percentProtected, false); + } + } + } + public String buildTime() { String s = ""; @@ -229,6 +248,54 @@ public class Wizards extends SoloGame return s; } + public void castSpell(Player player, Wizard wizard, SpellType spell, Object interacted) + { + + int spellLevel = wizard.getSpellLevel(spell); + if (spellLevel > 0) + { + + if (wizard.getCooldown(spell) == 0) + { + + if (wizard.getMana() >= spell.getManaCost(wizard)) + { + + Spell sp = _spells.get(spell); + + if (interacted instanceof Block && sp instanceof SpellClickBlock) + { + ((SpellClickBlock) sp).castSpell(player, (Block) interacted); + } + + if (wizard.getCooldown(spell) == 0 && interacted instanceof Entity && sp instanceof SpellClickEntity) + { + ((SpellClickEntity) sp).castSpell(player, (Entity) interacted); + } + + if (wizard.getCooldown(spell) == 0 && sp instanceof SpellClick) + { + ((SpellClick) sp).castSpell(player); + } + } + else + { + player.playSound(player.getLocation(), Sound.FIZZ, 300, 1); + player.sendMessage(ChatColor.BLUE + "The spell sputters and dies."); + player.sendMessage(ChatColor.BLUE + "You do not have enough mana!"); + } + } + else + { + + player.playSound(player.getLocation(), Sound.FIZZ, 300, 1); + player.sendMessage(ChatColor.BLUE + "The spell hasn't recharged yet!"); + + } + + } + } + public void changeWandsTitles(Player player) { PlayerInventory inv = player.getInventory(); @@ -268,6 +335,35 @@ public class Wizards extends SoloGame } } + @EventHandler + public void checkPickupBooks(UpdateEvent event) + { + if (event.getType() == UpdateType.TICK && IsLive()) + { + Iterator itel = _droppedWandsBooks.iterator(); + + while (itel.hasNext()) + { + Item item = itel.next(); + + if (item.isValid()) + { + Player player = UtilPlayer.getClosest(item.getLocation(), (Entity) null); + + if (player != null && player.getLocation().distance(item.getLocation()) < 1.7) + { + onPickup(new PlayerPickupItemEvent(player, item, 0)); + } + } + + if (!item.isValid()) + { + itel.remove(); + } + } + } + } + private void CreateChestCraftEnchant() { ArrayList chests = WorldData.GetCustomLocs("54"); @@ -390,6 +486,41 @@ public class Wizards extends SoloGame } } + private void displayProgress(String progressColor, String prefix, double amount, String suffix, Player... players) + { + // Generate Bar + int bars = 52; + String progressBar = C.cGreen + ""; + boolean colorChange = false; + for (int i = 0; i < bars; i++) + { + if (!colorChange && (float) i / (float) bars >= amount) + { + progressBar += progressColor;// C.cRed; + colorChange = true; + } + + progressBar += "|"; + } + + // Send to Player + for (Player player : players) + { + // 1.7 - Add Color + if (!UtilPlayer.is1_8(player)) + { + UtilTextTop.displayProgress((prefix == null ? "" : C.cYellow + C.Bold + prefix) + + (suffix == null ? "" : ChatColor.RESET + C.Bold + " - " + C.cGreen + C.Bold + suffix), amount, player); + } + // 1.8 + else + { + UtilTextBottom.display((prefix == null ? "" : prefix + ChatColor.RESET + " ") + progressBar + + (suffix == null ? "" : ChatColor.RESET + " " + suffix), players); + } + } + } + public void drawUtilTextBottom(Player player) { int heldSlot = player.getInventory().getHeldItemSlot(); @@ -457,41 +588,6 @@ public class Wizards extends SoloGame } } - private void displayProgress(String progressColor, String prefix, double amount, String suffix, Player... players) - { - // Generate Bar - int bars = 52; - String progressBar = C.cGreen + ""; - boolean colorChange = false; - for (int i = 0; i < bars; i++) - { - if (!colorChange && (float) i / (float) bars >= amount) - { - progressBar += progressColor;// C.cRed; - colorChange = true; - } - - progressBar += "|"; - } - - // Send to Player - for (Player player : players) - { - // 1.7 - Add Color - if (!UtilPlayer.is1_8(player)) - { - UtilTextTop.displayProgress((prefix == null ? "" : C.cYellow + C.Bold + prefix) - + (suffix == null ? "" : ChatColor.RESET + C.Bold + " - " + C.cGreen + C.Bold + suffix), amount, player); - } - // 1.8 - else - { - UtilTextBottom.display((prefix == null ? "" : prefix + ChatColor.RESET + " ") + progressBar - + (suffix == null ? "" : ChatColor.RESET + " " + suffix), players); - } - } - } - private void dropSpells(Player player) { HashSet spells = new HashSet(); @@ -511,6 +607,14 @@ public class Wizards extends SoloGame } } + for (SpellType spell : wizard.getKnownSpells()) + { + if (spell != SpellType.MagicMissile && UtilMath.random.nextInt(5) == 0) + { + spells.add(spell); + } + } + Iterator itel = normalItemsToDrop.iterator(); while (itel.hasNext()) @@ -618,6 +722,44 @@ public class Wizards extends SoloGame return _wizards.get(player.getName()); } + @EventHandler + public void increaseGamePace(UpdateEvent event) + { + + if (event.getType() != UpdateType.SEC) + return; + + if (!IsLive()) + return; + + int timesShouldIncrease = (int) Math.floor((System.currentTimeMillis() - getGameLiveTime()) / 60000D); + + if (timesShouldIncrease < 10 && timesShouldIncrease != _lastGamePace + && (timesShouldIncrease % 2 == 0 || timesShouldIncrease == 9)) + { + _lastGamePace = timesShouldIncrease; + + Announce(C.cYellow + C.Bold + "Power surges through the battlefield!"); + Announce(C.cYellow + C.Bold + "Mana cost and spell cooldown has been lowered!", false); + + for (Player player : GetPlayers(true)) + { + Wizard wizard = getWizard(player); + + wizard.decreaseCooldown(); + + changeWandsTitles(player); + } + } + } + + @EventHandler + public void joinMessage(PlayerJoinEvent event) + { + if (!UtilPlayer.is1_8(event.getPlayer())) + returnToHub(event.getPlayer()); + } + public ItemStack makeUnusedWand() { ItemBuilder builder = new ItemBuilder(Material.BLAZE_ROD); @@ -650,58 +792,10 @@ public class Wizards extends SoloGame } } - public void castSpell(Player player, Wizard wizard, SpellType spell, Object interacted) - { - - int spellLevel = wizard.getSpellLevel(spell); - if (spellLevel > 0) - { - - if (wizard.getCooldown(spell) == 0) - { - - if (wizard.getMana() >= spell.getManaCost(wizard)) - { - - Spell sp = _spells.get(spell); - - if (interacted instanceof Block && sp instanceof SpellClickBlock) - { - ((SpellClickBlock) sp).castSpell(player, (Block) interacted); - } - - if (wizard.getCooldown(spell) == 0 && interacted instanceof Entity && sp instanceof SpellClickEntity) - { - ((SpellClickEntity) sp).castSpell(player, (Entity) interacted); - } - - if (wizard.getCooldown(spell) == 0 && sp instanceof SpellClick) - { - ((SpellClick) sp).castSpell(player); - } - } - else - { - player.playSound(player.getLocation(), Sound.FIZZ, 300, 1); - player.sendMessage(ChatColor.BLUE + "The spell sputters and dies."); - player.sendMessage(ChatColor.BLUE + "You do not have enough mana!"); - } - } - else - { - - player.playSound(player.getLocation(), Sound.FIZZ, 300, 1); - player.sendMessage(ChatColor.BLUE + "The spell hasn't recharged yet!"); - - } - - } - } - @EventHandler public void onChat(PlayerChatEvent event) { - if (Manager.GetClients().Get(event.getPlayer()).GetRank().Has(Rank.DEVELOPER)) + if (Manager.GetClients().Get(event.getPlayer()).GetRank().Has(Rank.ADMIN)) { if (event.getMessage().equalsIgnoreCase("spells")) { @@ -715,22 +809,25 @@ public class Wizards extends SoloGame } event.setCancelled(true); - event.getPlayer().sendMessage("All spells leveled up once"); + event.getPlayer().sendMessage(F.main("Wizards", "All spells leveled up by one")); } if (event.getMessage().equalsIgnoreCase("overtime")) { - setGameLiveTime(System.currentTimeMillis() - (10 * 60 * 1000)); + setGameLiveTime(System.currentTimeMillis() - (int) (9.95 * 60 * 1000)); + event.setCancelled(true); } if (event.getMessage().equalsIgnoreCase("hit me")) { - summonMeteor(event.getPlayer().getLocation(), _fireballSize); + summonMeteor(event.getPlayer().getLocation(), _endgameSize); + event.setCancelled(true); } if (event.getMessage().startsWith("setyield")) { - _fireballSize = Float.parseFloat(event.getMessage().split(" ")[1]); + _endgameSize = Float.parseFloat(event.getMessage().split(" ")[1]); + event.setCancelled(true); } } } @@ -754,13 +851,9 @@ public class Wizards extends SoloGame if (spell != null) { - if (onSpellLearn(p, spell)) - { - event.setCurrentItem(new ItemStack(Material.AIR)); + onSpellLearn(p, spell); - addMiddleText(p, spell.getElement().getColor() + spell.getSpellName() + " leveled to " - + spell.getElement().getColor() + getWizard(p).getSpellLevel(spell)); - } + event.setCurrentItem(new ItemStack(Material.AIR)); } } } @@ -782,6 +875,11 @@ public class Wizards extends SoloGame @EventHandler public void onDamage(EntityDamageByEntityEvent event) { + if (!IsLive()) + { + return; + } + if (IsAlive(event.getDamager())) { onCastSpell((Player) event.getDamager(), event.getEntity()); @@ -801,9 +899,11 @@ public class Wizards extends SoloGame @EventHandler public void onDeath(PlayerDeathEvent event) { - if (IsAlive(event.getEntity())) + Player p = event.getEntity(); + + if (IsAlive(p)) { - dropSpells(event.getEntity()); + dropSpells(p); Iterator itel = event.getDrops().iterator(); @@ -818,7 +918,7 @@ public class Wizards extends SoloGame } } - _wizards.remove(event.getEntity().getName()); + _wizards.remove(p.getName()); } @EventHandler @@ -937,6 +1037,14 @@ public class Wizards extends SoloGame } } + private void onGainSoulStar(Player p) + { + Wizard wizard = getWizard(p); + p.sendMessage(C.cGold + "Wizards" + C.cDGray + "> " + C.cGray + "Wizard Soul absorbed, mana regeneration increased"); + wizard.addSoulStar(); + drawUtilTextBottom(p); + } + private boolean onGainWand(Player p) { int slot = p.getInventory().first(Material.STAINED_GLASS_PANE); @@ -948,7 +1056,7 @@ public class Wizards extends SoloGame p.updateInventory(); - addMiddleText(p, C.cGold + "Gained a wand"); + p.sendMessage(C.cGold + "Wizards" + C.cDGray + "> " + C.cGray + "Extra wand gained"); } else { @@ -957,21 +1065,13 @@ public class Wizards extends SoloGame if (wizard.getMana() < wizard.getMaxMana()) { wizard.setMana(wizard.getMaxMana()); - addMiddleText(p, ChatColor.GOLD + "Converted wand into mana"); + p.sendMessage(C.cGold + "Wizards" + C.cDGray + "> " + C.cGray + "Wand converted into mana"); } } return true; } - private void onGainSoulStar(Player p) - { - Wizard wizard = getWizard(p); - addMiddleText(p, ChatColor.GOLD + "Absorbed Wizard Soul"); - wizard.addSoulStar(); - drawUtilTextBottom(p); - } - @EventHandler public void onGameEnd(GameStateChangeEvent event) { @@ -1034,13 +1134,9 @@ public class Wizards extends SoloGame { SpellType spell = SpellType.values()[UtilMath.r(SpellType.values().length)]; - if (wizard.getSpellLevel(spell) < spell.getMaxLevel()) + if (wizard.getSpellLevel(spell) == 0) { onSpellLearn(player, spell); - - addMiddleText(player, spell.getElement().getColor() + spell.getSpellName() + " leveled to " - + spell.getElement().getColor() + wizard.getSpellLevel(spell)); - break; } } @@ -1056,9 +1152,41 @@ public class Wizards extends SoloGame } } + @EventHandler + public void onMeteorHit(ProjectileHitEvent event) + { + Projectile projectile = event.getEntity(); + + if (projectile.hasMetadata("Meteor")) + { + projectile.remove(); + + CustomExplosion explosion = new CustomExplosion(getArcadeManager().GetDamage(), getArcadeManager().GetExplosion(), + projectile.getLocation(), _endgameSize, "Meteor"); + + explosion.setBlockExplosionSize(explosion.size * 1.4F); + + explosion.setFallingBlockExplosionAmount(20); + + explosion.setFallingBlockExplosion(true); + + explosion.setDropItems(false); + + explosion.setBlocksDamagedEqually(true); + + explosion.explode(); + } + } + @EventHandler public void onPickup(PlayerPickupItemEvent event) { + if (!IsLive()) + { + event.setCancelled(true); + return; + } + ItemStack item = event.getItem().getItemStack(); Player p = event.getPlayer(); @@ -1082,17 +1210,10 @@ public class Wizards extends SoloGame if (spell != null) { + onSpellLearn(p, spell); - if (onSpellLearn(p, spell)) - { - Wizard wizard = getWizard(p); - - addMiddleText(p, spell.getElement().getColor() + spell.getSpellName() + " leveled to " - + spell.getElement().getColor() + wizard.getSpellLevel(spell)); - - event.setCancelled(true); - event.getItem().remove(); - } + event.setCancelled(true); + event.getItem().remove(); } } @@ -1103,6 +1224,12 @@ public class Wizards extends SoloGame event.setCancelled(true); event.getItem().remove(); } + else + { + return; + } + + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 0.7F, 0); } } @@ -1111,92 +1238,15 @@ public class Wizards extends SoloGame { Player p = event.getPlayer(); - if (IsAlive(p)) + if (_wizards.containsKey(p.getName())) { dropSpells(p); } _wizards.remove(p.getName()); - _learnedSpellChests.remove(p.getName()); } - @EventHandler - public void checkPickupBooks(UpdateEvent event) - { - if (event.getType() == UpdateType.TICK && IsLive()) - { - Iterator itel = _droppedWandsBooks.iterator(); - - while (itel.hasNext()) - { - Item item = itel.next(); - - if (item.isValid()) - { - Player player = UtilPlayer.getClosest(item.getLocation(), (Entity) null); - - if (player != null && player.getLocation().distance(item.getLocation()) < 1.7) - { - onPickup(new PlayerPickupItemEvent(player, item, 0)); - } - } - - if (!item.isValid()) - { - itel.remove(); - } - } - } - } - - @EventHandler - public void updateMiddleText(UpdateEvent event) - { - if (event.getType() == UpdateType.TICK && IsLive()) - { - Iterator>> itel = _learnedSpellChests.entrySet().iterator(); - - while (itel.hasNext()) - { - - Entry> entry = itel.next(); - - Player p = Bukkit.getPlayerExact(entry.getKey()); - - if (p != null && IsAlive(p)) - { - // If 40 ticks has passed since last sent the middle text, send another. - - if ((!_timeSinceDisplayedMiddle.containsKey(entry.getKey()) || _timeSinceDisplayedMiddle.get(entry.getKey()) <= System - .currentTimeMillis()) && p.getOpenInventory().getTopInventory().getHolder() == p) - { - - UtilTextMiddle.display("", entry.getValue().remove(0), 5, 30, 5, p); - - if (entry.getValue().isEmpty()) - { - itel.remove(); - } - - else - { - - _timeSinceDisplayedMiddle.put(entry.getKey(), System.currentTimeMillis() + 3000L); - - } - - } - } - else - { - itel.remove(); - _timeSinceDisplayedMiddle.remove(entry.getKey()); - } - } - } - } - - private boolean onSpellLearn(Player p, SpellType spell) + private void onSpellLearn(Player p, SpellType spell) { Wizard wiz = getWizard(p); @@ -1205,14 +1255,15 @@ public class Wizards extends SoloGame if (spellLevel < spell.getMaxLevel()) { wiz.learnSpell(spell); + + p.sendMessage(spell.getElement().getColor() + spell.getSpellName() + C.cDGray + "> " + C.cGray + "Leveled up to " + + getWizard(p).getSpellLevel(spell)); } else if (wiz.getMana() < wiz.getMaxMana()) { wiz.setMana(Math.min(wiz.getMaxMana(), wiz.getMana() + 50)); - addMiddleText(p, ChatColor.GOLD + "Converted spellbook into mana"); + p.sendMessage(C.cGold + "Wizards" + C.cDGray + "> " + C.cGray + "Converted spellbook into mana"); } - - return true; } @EventHandler @@ -1238,39 +1289,6 @@ public class Wizards extends SoloGame } } - @EventHandler - public void updateMana(UpdateEvent event) - { - if ((event.getType() == UpdateType.TICK) && GetState() == GameState.Live) - { - Iterator> itel = _wizards.entrySet().iterator(); - - while (itel.hasNext()) - { - Entry entry = itel.next(); - Player player = Bukkit.getPlayerExact(entry.getKey()); - - Wizard wizard = getWizard(player); - float newMana = wizard.getMana(); - - if (newMana < wizard.getMaxMana()) - { - newMana = Math.min(newMana + wizard.getManaPerTick(), wizard.getMaxMana()); - wizard.setMana(newMana); - } - - float percentage = Math.min(1, wizard.getMana() / wizard.getMaxMana()); - - String text = (int) Math.floor(wizard.getMana()) + "/" + (int) wizard.getMaxMana() + " mana " - + UtilTime.convert((int) (wizard.getManaPerTick() * 20000), 1, TimeUnit.SECONDS) + "mps"; - - UtilTextTop.displayTextBar(player, percentage, text); - - drawUtilTextBottom(player); - } - } - } - @EventHandler public void onUnplaceablePlace(BlockPlaceEvent event) { @@ -1294,188 +1312,278 @@ public class Wizards extends SoloGame } } + @EventHandler + public void outdatedVersion(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + return; + + for (Player player : UtilServer.getPlayers()) + { + if (!UtilPlayer.is1_8(player)) + returnToHub(player); + } + } + @Override public void ParseData() { CreateChestCraftEnchant(); + _endGameEvent = UtilMath.r(2); + + System.out.print("Endgame event: " + (_endGameEvent == 0 ? "Meteors" : "Lightning")); } - private int _lastGamePace; - @EventHandler - public void increaseGamePace(UpdateEvent event) + public void removeDamageToLevel(CustomDamageEvent event) { - - if (event.getType() != UpdateType.SEC) - return; - - if (!IsLive()) - return; - - int timesShouldIncrease = (int) Math.floor((System.currentTimeMillis() - getGameLiveTime()) / 60000D); - - if (timesShouldIncrease < 10 && timesShouldIncrease != _lastGamePace - && (timesShouldIncrease % 2 == 0 || timesShouldIncrease == 9)) - { - _lastGamePace = timesShouldIncrease; - - Announce(C.cYellow + C.Bold + "Power surges through the battlefield!"); - Announce(C.cYellow + C.Bold + "Mana cost and spell cooldown has been lowered!", false); - - for (Player player : GetPlayers(true)) - { - Wizard wizard = getWizard(player); - - wizard.decreaseCooldown(); - - changeWandsTitles(player); - } - } + event.SetDamageToLevel(false); } - @EventHandler - public void onMeteorHit(ProjectileHitEvent event) + public void returnToHub(Player player) { - Projectile projectile = event.getEntity(); + UtilPlayer.message(player, " "); + UtilPlayer.message(player, C.cGold + C.Bold + "Wizards requires you to be using Minecraft 1.8!"); + UtilPlayer.message(player, " "); - if (projectile.hasMetadata("Meteor")) - { - projectile.remove(); - - CustomExplosion explosion = new CustomExplosion(getArcadeManager().GetDamage(), getArcadeManager().GetExplosion(), - projectile.getLocation(), _fireballSize, "Meteor"); - - explosion.setBlockExplosionSize(explosion.size * 2F); - - explosion.setFallingBlockExplosion(true); - - explosion.setDropItems(false); - - explosion.setBlocksDamagedEqually(true); - - explosion.explode(); - } + player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); + Manager.GetPortal().sendPlayerToServer(player, "Lobby"); } @EventHandler - public void summonMeteors(UpdateEvent event) + public void ScoreboardUpdate(UpdateEvent event) { - if (event.getType() != UpdateType.SEC) - return; + GetScoreboard().Reset(); - if (!IsLive()) - return; + GetScoreboard().WriteBlank(); - if (System.currentTimeMillis() > getGameLiveTime() + (20 * 60 * 1000)) - { - ArrayList players = new ArrayList(GetPlayers(true)); + GetScoreboard().Write(C.cYellow + C.Bold + "Wizards"); + GetScoreboard().Write(C.cWhite + GetPlayers(true).size()); - Collections.sort(players, new Comparator() - { + GetScoreboard().WriteBlank(); - @Override - public int compare(Player o1, Player o2) - { - // Compare them backwards so the lesser health people are last - // Just so the bigger camper loses more. - return new Double(o2.getHealth()).compareTo(o1.getHealth()); - } - }); + double time = UtilTime.convert(( - Iterator itel = players.iterator(); + (getGameLiveTime() == 0 ? System.currentTimeMillis() : getGameLiveTime()) - while (itel.hasNext()) - { - Player player = itel.next(); + + (10 * 60 * 1000)) - System.currentTimeMillis(), 1, TimeUnit.MINUTES); - // Don't kill them if they are the last person in this list. - if (itel.hasNext()) - { - this.getArcadeManager() - .GetDamage() - .NewDamageEvent(player, null, null, DamageCause.ENTITY_EXPLOSION, 9999, false, true, true, "Meteor", - "Meteor"); - } - } - } + GetScoreboard().Write((time >= 0 ? C.cYellow : C.cRed) + C.Bold + (time >= 0 ? "Time Left" : "Overtime")); + GetScoreboard().Write(C.cWhite + Math.abs(time) + " Minute" + (Math.abs(time) != 1 ? "s" : "")); + + GetScoreboard().Draw(); } @EventHandler - public void sendMeteors(UpdateEvent event) + public void endGameEvent(UpdateEvent event) { if (!IsLive()) { return; } - if (event.getType() != UpdateType.TICK) - { - return; - } - if (System.currentTimeMillis() <= getGameLiveTime() + (10 * 60 * 1000)) { return; } - if (_fireballCounter < 7) + if (_endgameMessageCounter <= 6) { - if (_fireballCounter == 0) + + if (event.getType() != UpdateType.SEC) { - Announce(C.cYellow + C.Bold + "Broken is the cage, the skies scream with rage!"); - } - else if (_fireballCounter == 2) - { - Announce(C.cYellow + C.Bold + "The ground trembles with fear, your doom is here!"); - } - else if (_fireballCounter == 4) - { - Announce(C.cYellow + C.Bold + "Where the wizards stand, meteors strike the land!"); - } - else if (_fireballCounter == 6) - { - Announce(C.cYellow + C.Bold + "Fight to the death! Fight with your dying breath!"); + return; } - _fireballCounter++; + if (_endGameEvent == 0) + { + if (_endgameMessageCounter == 0) + { + Announce(C.cYellow + C.Bold + "Broken is the cage, the skies scream with rage!"); + } + else if (_endgameMessageCounter == 2) + { + Announce(C.cYellow + C.Bold + "The ground trembles with fear, your doom is here!"); + } + else if (_endgameMessageCounter == 4) + { + Announce(C.cYellow + C.Bold + "Where the wizards stand, meteors strike the land!"); + } + else if (_endgameMessageCounter == 6) + { + Announce(C.cYellow + C.Bold + "Fight to the death! Fight with your dying breath!"); + } + } + else if (_endGameEvent == 1) + { + if (_endgameMessageCounter == 0) + { + Announce(C.cYellow + C.Bold + "Storm rumbles through the sky, birds fly high!"); + } + else if (_endgameMessageCounter == 2) + { + Announce(C.cYellow + C.Bold + "Lightning strikes the earth, terror given birth!"); + } + else if (_endgameMessageCounter == 4) + { + Announce(C.cYellow + C.Bold + "Lightning flickering through the air, doom is here!"); + } + else if (_endgameMessageCounter == 6) + { + Announce(C.cYellow + C.Bold + "Fight to the death! Fight with your dying breath!"); + } + } + + _endgameMessageCounter++; + } + else + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + if (UtilTime.elapsed(_lastEndgameStrike, _nextEndgameStrike)) + { + _nextEndgameStrike -= 10; + _lastEndgameStrike = System.currentTimeMillis(); + + if (_endGameEvent == 0) + { + makeMeteor(); + } + else if (_endGameEvent == 1) + { + makeLightning(); + } + } + } + } + + private Location getEndgameLocation() + { + int chance = UtilMath.r(40) + 3; + int accuracy = Math.max((int) (chance - (_accuracy * chance)), 1); + _accuracy += 0.01; + + ArrayList players = GetPlayers(true); + + for (int a = 0; a < 50; a++) + { + Player player = players.get(UtilMath.r(players.size())); + + Location location = player.getLocation().add(UtilMath.r(accuracy * 2) - accuracy, 0, + UtilMath.r(accuracy * 2) - accuracy); + + location = WorldData.World.getHighestBlockAt(location).getLocation().add(0.5, 0, 0.5); + + if (location.getBlockY() > 0 && location.getBlock().getRelative(BlockFace.DOWN).getType() != Material.AIR) + { + return location; + } } - if (_fireballCounter >= 6 && UtilTime.elapsed(_lastFireball, _nextFireball)) + return null; + } + + private void makeLightning() + { + + Location loc = getEndgameLocation(); + + if (loc == null) { - _fireballSpeed += 0.01; - _fireballSize += 0.08; - - _nextFireball--; - _lastFireball = System.currentTimeMillis(); - - Location loc; - - if (UtilMath.r(3) != 0) - { - loc = new Location(WorldData.World, WorldData.MinX + UtilMath.r(WorldData.MaxX - WorldData.MinX), 0, - WorldData.MinZ + UtilMath.r(WorldData.MaxZ - WorldData.MinZ)); - - loc = loc.getWorld().getHighestBlockAt(loc).getLocation(); - } - else - { - if (_fireballQueue.isEmpty()) - { - _fireballQueue = GetPlayers(true); - } - - if (_fireballItel == null || !_fireballItel.hasNext()) - { - _fireballItel = _fireballQueue.iterator(); - } - - loc = _fireballItel.next().getLocation(); - - } - - summonMeteor(loc, _fireballSize); - + return; } + + /*else + { + if (_fireballQueue.isEmpty()) + { + _fireballQueue = GetPlayers(true); + } + + if (_fireballItel == null || !_fireballItel.hasNext()) + { + _fireballItel = _fireballQueue.iterator(); + } + + loc = _fireballItel.next().getLocation(); + + loc.add(UtilMath.r(10) - 5, 0, UtilMath.r(10) - 5); + }*/ + + loc.getWorld().spigot().strikeLightningEffect(loc, true); + loc.getWorld().playSound(loc, Sound.AMBIENCE_THUNDER, 5F, 0.8F + UtilMath.random.nextFloat()); + loc.getWorld().playSound(loc, Sound.EXPLODE, 2F, 0.9F + (UtilMath.random.nextFloat() / 3)); + + UtilBlock.getExplosionBlocks(loc, 4 * _endgameSize, false, true); + + // Blocks + ArrayList blocks = new ArrayList(UtilBlock.getInRadius(loc, 4 * _endgameSize).keySet()); + Collections.shuffle(blocks); + + while (blocks.size() > 20) + { + blocks.remove(0).setType(Material.AIR); + } + + Manager.GetExplosion().BlockExplosion(blocks, loc, false); + + HashMap inRadius = UtilEnt.getInRadius(loc, 4D); + + // The damage done at ground zero + double baseDamage = 6 * _endgameSize; + + for (LivingEntity entity : inRadius.keySet()) + { + double damage = baseDamage - (baseDamage * (inRadius.get(entity) / 4)); + + if (damage > 0) + { + getArcadeManager().GetDamage().NewDamageEvent(entity, null, null, DamageCause.LIGHTNING, damage, true, false, + true, "Lightning", null); + } + } + } + + private void makeMeteor() + { + _fireballSpeed += 0.01; + _endgameSize += 0.08; + + Location loc = getEndgameLocation(); + + if (loc == null) + { + return; + } + + /*if (UtilMath.r(3) != 0) + { + loc = new Location(WorldData.World, WorldData.MinX + UtilMath.r(WorldData.MaxX - WorldData.MinX), 0, WorldData.MinZ + + UtilMath.r(WorldData.MaxZ - WorldData.MinZ)); + + loc = loc.getWorld().getHighestBlockAt(loc).getLocation(); + } + else + { + if (_fireballQueue.isEmpty()) + { + _fireballQueue = GetPlayers(true); + } + + if (_fireballItel == null || !_fireballItel.hasNext()) + { + _fireballItel = _fireballQueue.iterator(); + } + + loc = _fireballItel.next().getLocation(); + + }*/ + + summonMeteor(loc, 1.5F * _endgameSize); + } private void summonMeteor(Location loc, float fireballSize) @@ -1529,32 +1637,76 @@ public class Wizards extends SoloGame } @EventHandler - public void removeDamageToLevel(CustomDamageEvent event) + public void summonMeteors(UpdateEvent event) { - event.SetDamageToLevel(false); + if (event.getType() != UpdateType.SEC) + return; + + if (!IsLive()) + return; + + if (System.currentTimeMillis() > getGameLiveTime() + (20 * 60 * 1000)) + { + ArrayList players = new ArrayList(GetPlayers(true)); + + Collections.sort(players, new Comparator() + { + + @Override + public int compare(Player o1, Player o2) + { + // Compare them backwards so the lesser health people are last + // Just so the bigger camper loses more. + return new Double(o2.getHealth()).compareTo(o1.getHealth()); + } + }); + + Iterator itel = players.iterator(); + + while (itel.hasNext()) + { + Player player = itel.next(); + + // Don't kill them if they are the last person in this list. + if (itel.hasNext()) + { + getArcadeManager().GetDamage().NewDamageEvent(player, null, null, DamageCause.ENTITY_EXPLOSION, 9999, false, + true, true, "Meteor", null); + } + } + } } @EventHandler - public void ScoreboardUpdate(UpdateEvent event) + public void updateMana(UpdateEvent event) { - GetScoreboard().Reset(); + if ((event.getType() == UpdateType.TICK) && GetState() == GameState.Live) + { + Iterator> itel = _wizards.entrySet().iterator(); - GetScoreboard().WriteBlank(); + while (itel.hasNext()) + { + Entry entry = itel.next(); + Player player = Bukkit.getPlayerExact(entry.getKey()); - GetScoreboard().Write(C.cYellow + C.Bold + "Wizards"); - GetScoreboard().Write(C.cWhite + GetPlayers(true).size()); + Wizard wizard = getWizard(player); + float newMana = wizard.getMana(); - GetScoreboard().WriteBlank(); + if (newMana < wizard.getMaxMana()) + { + newMana = Math.min(newMana + wizard.getManaPerTick(), wizard.getMaxMana()); + wizard.setMana(newMana); + } - double time = UtilTime.convert(( + float percentage = Math.min(1, wizard.getMana() / wizard.getMaxMana()); - (getGameLiveTime() == 0 ? System.currentTimeMillis() : getGameLiveTime()) + String text = (int) Math.floor(wizard.getMana()) + "/" + (int) wizard.getMaxMana() + " mana " + + UtilTime.convert((int) (wizard.getManaPerTick() * 20000), 1, TimeUnit.SECONDS) + "mps"; - + (10 * 60 * 1000)) - System.currentTimeMillis(), 1, TimeUnit.MINUTES); + UtilTextTop.displayTextBar(player, percentage, text); - GetScoreboard().Write((time >= 0 ? C.cYellow : C.cRed) + C.Bold + (time >= 0 ? "Time Left" : "Overtime")); - GetScoreboard().Write(C.cWhite + Math.abs(time) + " Minute" + (Math.abs(time) != 1 ? "s" : "")); - - GetScoreboard().Draw(); + drawUtilTextBottom(player); + } + } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDrain.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDrain.java deleted file mode 100644 index 9acf218ee..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDrain.java +++ /dev/null @@ -1,35 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells; - -import nautilus.game.arcade.game.games.wizards.Spell; -import nautilus.game.arcade.game.games.wizards.Wizard; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickEntity; - -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; - -public class SpellDrain extends Spell implements SpellClickEntity -{ - - @Override - public void castSpell(Player player, Entity entity) - { - if (entity instanceof Player) - { - if (Wizards.IsAlive(entity)) - { - - Wizard wiz = Wizards.getWizard((Player) entity); - - if (wiz.getMana() > 10) - { - wiz.setMana(0); - - player.getWorld().playSound(player.getLocation(), Sound.WITHER_SPAWN, 1, 0); - - charge(player); - } - } - } - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java index 7f8399d8d..12e756540 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java @@ -22,6 +22,7 @@ public class SpellFireball extends Spell implements SpellClick public void onHit(ProjectileHitEvent event) { Projectile projectile = event.getEntity(); + if (projectile.hasMetadata("FireballSpell")) { projectile.remove(); @@ -37,7 +38,6 @@ public class SpellFireball extends Spell implements SpellClick explosion.setDropItems(false); explosion.explode(); - } } @@ -60,7 +60,7 @@ public class SpellFireball extends Spell implements SpellClick fireball.setYield(0); fireball.setMetadata("FireballSpell", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), p)); fireball.setMetadata("FireballYield", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), - (getSpellLevel(p) * 0.25F) + 0.8F)); + (getSpellLevel(p) * 0.3F) + 1F)); p.getWorld().playSound(p.getLocation(), Sound.BLAZE_BREATH, 0.5F, 5F); charge(p); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java index b6b70b844..d79097a31 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java @@ -17,87 +17,114 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.scheduler.BukkitRunnable; public class SpellFrostBarrier extends Spell implements SpellClickBlock { - private HashMap _wallExpires = new HashMap(); + private HashMap _wallExpires = new HashMap(); - @EventHandler - public void onUpdate(UpdateEvent event) - { - Iterator> itel = _wallExpires.entrySet().iterator(); + @EventHandler + public void onBlockBreak(BlockBreakEvent event) + { + Block block = event.getBlock(); - while (itel.hasNext()) - { - Entry entry = itel.next(); + if (_wallExpires.containsKey(block)) + { + event.setCancelled(true); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); + block.setType(Material.AIR); + } + } - if (entry.getValue() < System.currentTimeMillis()) - { - itel.remove(); + @EventHandler + public void onBlockMelt(BlockFadeEvent event) + { + Block block = event.getBlock(); - if (entry.getKey().getType() == Material.ICE) - { - entry.getKey().setType(Material.AIR); - } - } - } - } + if (_wallExpires.containsKey(block)) + { + event.setCancelled(true); + block.setType(Material.AIR); + } + } - @Override - public void castSpell(Player player, Block obj) - { - final Block starter = obj.getRelative(BlockFace.UP); - final int wallWidth = getSpellLevel(player) * 5; - final BlockFace facing = UtilShapes.getFacing(player.getEyeLocation().getYaw()); - final int wallHeight = 1 + getSpellLevel(player); + @EventHandler + public void onUpdate(UpdateEvent event) + { + Iterator> itel = _wallExpires.entrySet().iterator(); - new BukkitRunnable() - { - Block block = starter; - int currentRun; + while (itel.hasNext()) + { + Entry entry = itel.next(); - @Override - public void run() - { + if (entry.getValue() < System.currentTimeMillis()) + { + itel.remove(); - currentRun++; + if (entry.getKey().getType() == Material.ICE) + { + entry.getKey().setType(Material.AIR); + } + } + } + } - BlockFace[] faces = UtilShapes.getCornerBlockFaces(block, facing); + @Override + public void castSpell(Player player, Block obj) + { + final Block starter = obj.getRelative(BlockFace.UP); + final int wallWidth = getSpellLevel(player) * 5; + final BlockFace facing = UtilShapes.getFacing(player.getEyeLocation().getYaw()); + final int wallHeight = 1 + getSpellLevel(player); - if (block.getType() == Material.AIR) - { - block.setTypeIdAndData(Material.ICE.getId(), (byte) 0, false); - _wallExpires.put(block, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); - } + new BukkitRunnable() + { + Block block = starter; + int currentRun; - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); + @Override + public void run() + { - for (BlockFace face : faces) - { - for (int i = 1; i < wallWidth; i++) - { + currentRun++; - Block b = block.getRelative(face.getModX() * i, 0, face.getModZ() * i); + BlockFace[] faces = UtilShapes.getCornerBlockFaces(block, facing); - if (!UtilBlock.airFoliage(b)) - break; + if (block.getType() == Material.AIR) + { + block.setTypeIdAndData(Material.ICE.getId(), (byte) 0, false); + _wallExpires.put(block, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); + } - b.setTypeIdAndData(Material.ICE.getId(), (byte) 0, false); - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getTypeId()); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); - _wallExpires.put(b, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); - } - } + for (BlockFace face : faces) + { + for (int i = 1; i < wallWidth; i++) + { - block = block.getRelative(BlockFace.UP); - if (currentRun >= wallHeight) - { - cancel(); - } - } - }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 0, 5); + Block b = block.getRelative(face.getModX() * i, 0, face.getModZ() * i); - charge(player); - } + if (!UtilBlock.airFoliage(b)) + break; + + b.setTypeIdAndData(Material.ICE.getId(), (byte) 0, false); + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getTypeId()); + + _wallExpires.put(b, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); + } + } + + block = block.getRelative(BlockFace.UP); + if (currentRun >= wallHeight) + { + cancel(); + } + } + }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 0, 5); + + charge(player); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java index 84709233b..0aec4647e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java @@ -2,7 +2,6 @@ package nautilus.game.arcade.game.games.wizards.spells; import java.util.HashMap; -import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilPlayer; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -17,8 +16,8 @@ public class SpellGust extends Spell implements SpellClick @Override public void castSpell(Player player) { - Vector vector = player.getLocation().getDirection().setY(0).normalize().setY(0.3) - .multiply(0.8 + (getSpellLevel(player) * 0.3D)); + Vector vector = player.getLocation().getDirection().setY(0).normalize().multiply(1.5).setY(0.3) + .multiply(1.3 + (getSpellLevel(player) * 0.4D)); HashMap effected = UtilPlayer.getPlayersInPyramid(player, 45, 10 * getSpellLevel(player)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java index 366410050..d138b2f7c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java @@ -4,16 +4,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.util.Vector; - import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; @@ -24,11 +14,48 @@ import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockFadeEvent; +import org.bukkit.metadata.FixedMetadataValue; + public class SpellIcePrison extends Spell implements SpellClick, IThrown { private HashMap _prisonExpires = new HashMap(); + @EventHandler + public void onBlockBreak(BlockBreakEvent event) + { + Block block = event.getBlock(); + + if (_prisonExpires.containsKey(block)) + { + event.setCancelled(true); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); + block.setType(Material.AIR); + } + } + + @EventHandler + public void onBlockMelt(BlockFadeEvent event) + { + Block block = event.getBlock(); + + if (_prisonExpires.containsKey(block)) + { + event.setCancelled(true); + block.setType(Material.AIR); + } + } + @Override public void castSpell(final Player player) { @@ -70,7 +97,8 @@ public class SpellIcePrison extends Spell implements SpellClick, IThrown } } - loc.getWorld().playSound(loc, Sound.ANVIL_LAND, 1.7F, 0.8F); + // Effect + loc.getWorld().playSound(loc, Sound.SILVERFISH_HIT, 2f, 1f); } @Override @@ -106,7 +134,7 @@ public class SpellIcePrison extends Spell implements SpellClick, IThrown if (Wizards.IsAlive(player)) { org.bukkit.entity.Item ent = player.getWorld().dropItem( - player.getLocation().add(0, 0.5, 0), + player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.PACKED_ICE, (byte) 0, 1, "Ice Prison" + player.getName() + " " + System.currentTimeMillis())); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java index c2a080d75..54618daf7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java @@ -9,8 +9,9 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilTime; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; @@ -20,7 +21,7 @@ import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import org.bukkit.Bukkit; -import org.bukkit.Effect; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; @@ -29,18 +30,18 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.util.Vector; public class SpellIceShards extends Spell implements SpellClick, IThrown { - private HashMap, Integer> _hitShards = new HashMap, Integer>(); private HashMap _shardsExpire = new HashMap(); + private HashMap, HashMap> _hitShards = new HashMap, HashMap>(); @Override public void castSpell(final Player player) { final ArrayList firedShards = new ArrayList(); _shardsExpire.put(firedShards, System.currentTimeMillis() + 60000); + _hitShards.put(firedShards, new HashMap()); shoot(player, firedShards); @@ -56,7 +57,7 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown shoot(player, firedShards); } - }, i * 4); + }, i * 5); } charge(player); @@ -95,7 +96,7 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown // Boost org.bukkit.entity.Item ent = player.getWorld().dropItem( - player.getLocation().add(0, 0.5, 0), + player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.GHAST_TEAR, (byte) 0, 1, "Ice Shard " + player.getName() + " " + System.currentTimeMillis())); @@ -112,16 +113,23 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown @Override public void Collide(LivingEntity target, Block block, ProjectileUser data) { - if (target != null) + if (target != null && target instanceof Player) { + String name = ((Player) target).getName(); int timesHit = 0; - for (ArrayList arrayList : _hitShards.keySet()) + for (Entry, HashMap> entry : _hitShards.entrySet()) { - if (arrayList.contains(data.GetThrown())) + if (entry.getKey().contains(data.GetThrown())) { - timesHit = _hitShards.get(arrayList); - _hitShards.put(arrayList, timesHit + 1); + HashMap map = entry.getValue(); + + if (map.containsKey(name)) + { + timesHit = map.get(name); + } + + map.put(name, timesHit + 1); break; } @@ -130,13 +138,13 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown // Damage Event Wizards.getArcadeManager() .GetDamage() - .NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 2 + (timesHit * 2), false, false, - false, UtilEnt.getName(data.GetThrower()), "Ice Shard"); + .NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 4 + (timesHit * 2), true, true, + false, "Ice Shard", null); if (timesHit > 0) { UtilPlayer.message(data.GetThrower(), "Ice Shards" + ": " + F.elem(timesHit + " Consecutive Hits") + C.cGray - + " (" + F.skill("+" + (2 + (timesHit * 2)) + " Damage") + C.cGray + ")"); + + " (" + F.skill("+" + timesHit + " Damage") + C.cGray + ")"); } } @@ -146,7 +154,10 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown private void handleShard(ProjectileUser data) { data.GetThrown().remove(); - data.GetThrown().getWorld().playEffect(data.GetThrown().getLocation(), Effect.STEP_SOUND, Material.ICE); + Location loc = data.GetThrown().getLocation(); + + UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.PACKED_ICE, 0), loc, 0.3F, 0.3F, 0.3F, 0, 12); + loc.getWorld().playSound(loc, Sound.GLASS, 1.2F, 1); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java index 0c59610cb..4ea9000da 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java @@ -14,7 +14,6 @@ import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import org.bukkit.Bukkit; -import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -95,6 +94,11 @@ public class SpellImplode extends Spell implements SpellClick Block block = bItel.next(); + if (block.getType() == Material.AIR) + { + continue; + } + for (int i = 0; i < 6; i++) { BlockFace face = BlockFace.values()[i]; @@ -124,7 +128,7 @@ public class SpellImplode extends Spell implements SpellClick { cancel(); } - else if (timesRan++ >= 20) + else if (timesRan++ >= 28) { Iterator itel = effectedBlocks.iterator(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java index 13fb827e1..41f4bd8e7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java @@ -1,5 +1,6 @@ package nautilus.game.arcade.game.games.wizards.spells; +import java.util.ArrayList; import java.util.List; import mineplex.core.common.util.UtilBlock; @@ -10,6 +11,7 @@ import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.LightningStrike; @@ -47,6 +49,28 @@ public class SpellLightningStrike extends Spell implements SpellClick LightningStrike lightning = p.getWorld().strikeLightning(loc); lightning.setMetadata("Damager", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), p)); + + Block b = loc.getWorld().getHighestBlockAt(loc); + + b = b.getRelative(BlockFace.DOWN); + + ArrayList toExplode = new ArrayList(); + + for (int i = 0; i < 6; i++) + { + Block block = b.getRelative(BlockFace.values()[i]); + + if (block.getType() != Material.AIR && block.getType() != Material.BEDROCK) + { + toExplode.add(block); + } + else if (block.getType() == Material.AIR) + { + block.setType(Material.FIRE); + } + } + + Wizards.getArcadeManager().GetExplosion().BlockExplosion(toExplode, b.getLocation(), false); } }, 8); @@ -61,6 +85,7 @@ public class SpellLightningStrike extends Spell implements SpellClick if (event.getDamager() instanceof LightningStrike && event.getEntity() instanceof LivingEntity) { LightningStrike lightning = (LightningStrike) event.getDamager(); + if (lightning.hasMetadata("Damager")) { event.setCancelled(true); @@ -69,11 +94,13 @@ public class SpellLightningStrike extends Spell implements SpellClick { lightning.setMetadata("IgnoreDamage", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), null)); + event.getEntity().setFireTicks(80); + Wizards.getArcadeManager() .GetDamage() .NewDamageEvent((LivingEntity) event.getEntity(), - (Player) lightning.getMetadata("Damager").get(0).value(), null, DamageCause.LIGHTNING, - event.getDamage(), false, true, false, "Lightning Strike", "Lightning Strike"); + (Player) lightning.getMetadata("Damager").get(0).value(), null, DamageCause.LIGHTNING, 6, + false, true, false, "Lightning Strike", null); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java index 8135e800f..a3cded7a2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java @@ -7,7 +7,6 @@ import mineplex.core.common.util.UtilPlayer; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.entity.Entity; @@ -20,147 +19,146 @@ import org.bukkit.util.Vector; public class SpellMagicMissile extends Spell implements SpellClick { - public void castSpell(final Player player) - { - final Location missileLocation = player.getEyeLocation(); - final Location shotFrom = missileLocation.clone(); - final Vector direction = missileLocation.getDirection().normalize().multiply(0.3); - final int maxRange = 15 * getSpellLevel(player); - final int maxDings = maxRange * 3; - final int damage = 4 + getSpellLevel(player); + public void castSpell(final Player player) + { + final Location missileLocation = player.getEyeLocation(); + final Location shotFrom = missileLocation.clone(); + final Vector direction = missileLocation.getDirection().normalize().multiply(0.3); + final int maxRange = 15 * getSpellLevel(player); + final int maxDings = maxRange * 3; + final int damage = 4 + (getSpellLevel(player) * 2); - new BukkitRunnable() - { - private int dingsDone; + new BukkitRunnable() + { + private int dingsDone; - private void burst() - { - for (Entity cur : missileLocation.getWorld().getEntities()) - { + private void burst() + { + for (Entity cur : missileLocation.getWorld().getEntities()) + { - if (cur == player || !(cur instanceof LivingEntity) - || (cur instanceof Player && UtilPlayer.isSpectator(cur))) - continue; + if (cur == player || !(cur instanceof LivingEntity) || (cur instanceof Player && UtilPlayer.isSpectator(cur))) + continue; - LivingEntity entity = (LivingEntity) cur; + LivingEntity entity = (LivingEntity) cur; - Location eLoc = entity.getLocation(); + Location eLoc = entity.getLocation(); - // If they are less than 0.5 blocks away - if (eLoc.clone().add(0, missileLocation.getY() - eLoc.getY(), 0).distance(missileLocation) <= 0.7) - { - // If it is in their body height - if (Math.abs((eLoc.getY() + (entity.getEyeHeight() / 1.5)) - missileLocation.getY()) <= entity - .getEyeHeight() / 2) - { + // If they are less than 0.5 blocks away + if (eLoc.clone().add(0, missileLocation.getY() - eLoc.getY(), 0).distance(missileLocation) <= 0.7) + { + // If it is in their body height + if (Math.abs((eLoc.getY() + (entity.getEyeHeight() / 1.5)) - missileLocation.getY()) <= entity + .getEyeHeight() / 2) + { - if (entity != player && (!(entity instanceof Player) || Wizards.IsAlive(entity))) - { - Wizards.Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.CUSTOM, damage, - true, true, false, "Magic Missile", "Magic Missile"); - } - } - } - } + if (entity != player && (!(entity instanceof Player) || Wizards.IsAlive(entity))) + { + Wizards.Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.CUSTOM, damage, + true, true, false, "Magic Missile", null); + } + } + } + } - UtilParticle.PlayParticle(ParticleType.MAGIC_CRIT, missileLocation, 0.5F, 0.5F, 0.5F, 0, 40); - missileLocation.getWorld().playSound(missileLocation, Sound.BAT_TAKEOFF, 1.2F, 1); - cancel(); - } + UtilParticle.PlayParticle(ParticleType.MAGIC_CRIT, missileLocation, 0.5F, 0.5F, 0.5F, 0, 40); + missileLocation.getWorld().playSound(missileLocation, Sound.BAT_TAKEOFF, 1.2F, 1); + cancel(); + } - public void run() - { - if (dingsDone >= maxDings || !player.isOnline() || !Wizards.Manager.IsAlive(player)) - { - burst(); - } - else - { - for (int i = 0; i < 2; i++) - { - Player closestPlayer = null; - double dist = 0; + public void run() + { + if (dingsDone >= maxDings || !player.isOnline() || !Wizards.Manager.IsAlive(player)) + { + burst(); + } + else + { + for (int i = 0; i < 2; i++) + { + Player closestPlayer = null; + double dist = 0; - // This lot of code makes the magic missile change direction towards the closest player in its path - // Not entirely accurate, it doesn't go only for the people it can hit. - // This makes magic missile pretty cool in my opinion - for (Player closest : Wizards.GetPlayers(true)) - { + // This lot of code makes the magic missile change direction towards the closest player in its path + // Not entirely accurate, it doesn't go only for the people it can hit. + // This makes magic missile pretty cool in my opinion + for (Player closest : Wizards.GetPlayers(true)) + { - Location loc = closest.getLocation(); + Location loc = closest.getLocation(); - if (closest != player) - { - double dist1 = loc.distance(shotFrom); - // If the player is a valid target - if (dist1 < maxRange + 10) - { - double dist2 = missileLocation.distance(loc); - // If the player is closer to the magic missile than the other dist - if (closestPlayer == null || dist2 < dist) - { - double dist3 = missileLocation.clone().add(direction).distance(loc); + if (closest != player) + { + double dist1 = loc.distance(shotFrom); + // If the player is a valid target + if (dist1 < maxRange + 10) + { + double dist2 = missileLocation.distance(loc); + // If the player is closer to the magic missile than the other dist + if (closestPlayer == null || dist2 < dist) + { + double dist3 = missileLocation.clone().add(direction).distance(loc); - if (dist3 < dist2) - { - // If the magic missile grows closer when it moves - closestPlayer = closest; - dist = dist2; - } - } - } - } - } + if (dist3 < dist2) + { + // If the magic missile grows closer when it moves + closestPlayer = closest; + dist = dist2; + } + } + } + } + } - if (closestPlayer != null) - { - Vector newDirection = closestPlayer.getLocation().add(0, 1, 0).toVector() - .subtract(missileLocation.toVector()); + if (closestPlayer != null) + { + Vector newDirection = closestPlayer.getLocation().add(0, 1, 0).toVector() + .subtract(missileLocation.toVector()); - direction.add(newDirection.normalize().multiply(0.01)).normalize().multiply(0.3); - } + direction.add(newDirection.normalize().multiply(0.01)).normalize().multiply(0.3); + } - missileLocation.add(direction); + missileLocation.add(direction); - for (Entity cur : missileLocation.getWorld().getEntities()) - { + for (Entity cur : missileLocation.getWorld().getEntities()) + { - if (cur == player || !(cur instanceof LivingEntity) - || (cur instanceof Player && UtilPlayer.isSpectator(cur))) - continue; + if (cur == player || !(cur instanceof LivingEntity) + || (cur instanceof Player && UtilPlayer.isSpectator(cur))) + continue; - LivingEntity ent = (LivingEntity) cur; + LivingEntity ent = (LivingEntity) cur; - Location eLoc = ent.getLocation(); + Location eLoc = ent.getLocation(); - // If they are less than 0.5 blocks away - if (eLoc.clone().add(0, missileLocation.getY() - eLoc.getY(), 0).distance(missileLocation) <= 0.7) - { - // If it is in their body height - if (Math.abs((eLoc.getY() + (ent.getEyeHeight() / 1.5)) - missileLocation.getY()) <= ent - .getEyeHeight() / 2) - { - burst(); - return; - } - } - } + // If they are less than 0.5 blocks away + if (eLoc.clone().add(0, missileLocation.getY() - eLoc.getY(), 0).distance(missileLocation) <= 0.7) + { + // If it is in their body height + if (Math.abs((eLoc.getY() + (ent.getEyeHeight() / 1.5)) - missileLocation.getY()) <= ent + .getEyeHeight() / 2) + { + burst(); + return; + } + } + } - if (UtilBlock.solid(missileLocation.getBlock())) - { - burst(); - return; - } + if (UtilBlock.solid(missileLocation.getBlock())) + { + burst(); + return; + } - dingsDone++; - } + dingsDone++; + } - UtilParticle.PlayParticle(ParticleType.MAGIC_CRIT, missileLocation, 0, 0, 0, 0, 1); - missileLocation.getWorld().playSound(missileLocation, Sound.ORB_PICKUP, 0.7F, 0); - } - } - }.runTaskTimer(Wizards.Manager.getPlugin(), 0, 0); + UtilParticle.PlayParticle(ParticleType.MAGIC_CRIT, missileLocation, 0, 0, 0, 0, 1); + missileLocation.getWorld().playSound(missileLocation, Sound.ORB_PICKUP, 0.7F, 0); + } + } + }.runTaskTimer(Wizards.Manager.getPlugin(), 0, 0); - charge(player); - } + charge(player); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java index 483694fda..6223a68db 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java @@ -1,67 +1,200 @@ package nautilus.game.arcade.game.games.wizards.spells; +import java.util.ArrayList; +import java.util.HashMap; import java.util.Random; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilPlayer; +import nautilus.game.arcade.game.games.wizards.Spell; +import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; + import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilMath; -import nautilus.game.arcade.game.games.wizards.Spell; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; - public class SpellNapalm extends Spell implements SpellClick { + private HashMap _glazedBlocks = new HashMap(); + + public SpellNapalm() + { + _glazedBlocks.put(Material.STONE, Material.COBBLESTONE); + _glazedBlocks.put(Material.GRASS, Material.DIRT); + _glazedBlocks.put(Material.FENCE, Material.NETHER_FENCE); + _glazedBlocks.put(Material.WOOD_STAIRS, Material.NETHER_BRICK_STAIRS); + _glazedBlocks.put(Material.SAND, Material.GLASS); + } @Override - public void castSpell(Player player) + public void castSpell(final Player player) { - final int length = 8 + (4 * getSpellLevel(player)); - final Vector vector = player.getLocation().getDirection().normalize().multiply(0.5); - final Location loc = player.getLocation().add(vector.clone().multiply(2)); - final Location playerLoc = player.getLocation(); + final int length = 4 + (10 * getSpellLevel(player)); + + final Vector vector = player.getLocation().getDirection().normalize().multiply(0.3); + + final Location playerLoc = player.getLocation().add(0, 2, 0); + final Location napalmLoc = playerLoc.clone().add(playerLoc.getDirection().normalize().multiply(2)); new BukkitRunnable() { - int blocksTravelled; + + ArrayList litOnFire = new ArrayList(); + double blocksTravelled; + double size = 1; + double lastTick; public void run() { - for (int i = 0; i < 4; i++) - { - loc.add(vector); + Random r = new Random(); - if (!UtilBlock.airFoliage(loc.getBlock())) + napalmLoc.add(vector); + + if (!UtilBlock.airFoliage(napalmLoc.getBlock())) + { + cancel(); + return; + } + + for (int b = 0; b < size * 20; b++) + { + + float x = r.nextFloat(); + float y = r.nextFloat(); + float z = r.nextFloat(); + + while (Math.sqrt((x * x) + (y * y) + (z * z)) >= 1) { - cancel(); - break; + x = r.nextFloat(); + y = r.nextFloat(); + z = r.nextFloat(); } - for (int x = -1; x <= 1; x++) - { - for (int y = -1; y <= 1; y++) - { - for (int z = -1; z <= 1; z++) - { - if (loc.getBlockY() + y < 256 && loc.getBlockY() + y > 0) - { - Block block = loc.getBlock().getRelative(x, y, z); + UtilParticle.PlayParticle(ParticleType.RED_DUST, - if (UtilMath.offset(playerLoc, block.getLocation()) < 2) + napalmLoc.clone().add( + + (size * (x - 0.5)) / 5, + + (size * (y - 0.5)) / 5, + + (size * (z - 0.5)) / 5), + + -0.3F, + + 0.35F + (r.nextFloat() / 8), + + 0.1F, 1, 0); + } + + for (Entity entity : napalmLoc.getWorld().getEntities()) + { + if (!UtilPlayer.isSpectator(entity)) + { + double heat = (size * 1.1) - entity.getLocation().distance(napalmLoc); + + if (heat > 0) + { + if (heat > 1) + { + if (entity instanceof LivingEntity) + { + Wizards.getArcadeManager() + .GetDamage() + .NewDamageEvent((LivingEntity) entity, player, null, DamageCause.CUSTOM, heat / 2, + false, true, true, "Napalm", null); + } + else + { + entity.remove(); + continue; + } + } + + if (entity instanceof LivingEntity && !UtilPlayer.isSpectator(entity) + && entity.getFireTicks() < heat * 40) + { + entity.setFireTicks((int) (heat * 40)); + } + } + } + } + + int bSize = (int) Math.ceil(size * 0.75); + + for (int y = -bSize; y <= bSize; y++) + { + if (napalmLoc.getBlockY() + y < 256 && napalmLoc.getBlockY() + y > 0) + { + for (int x = -bSize; x <= bSize; x++) + { + for (int z = -bSize; z <= bSize; z++) + { + Block block = napalmLoc.clone().add(x, y, z).getBlock(); + + if (litOnFire.contains(block)) + { + continue; + } + + if (UtilMath.offset(block.getLocation().add(0.5, 0.5, 0.5), playerLoc) < 2.5) + { + continue; + } + + double heat = bSize - UtilMath.offset(block.getLocation().add(0.5, 0.5, 0.5), napalmLoc); + + if (heat > 0) + { + if (block.getType() != Material.AIR) { - continue; + float strength = net.minecraft.server.v1_7_R4.Block.getById(block.getTypeId()).a( + (net.minecraft.server.v1_7_R4.Entity) null) * 0.7F; + + if (strength * 2 > size) + { + litOnFire.add(block); + continue; + } + + if (strength <= heat) + { + block.setType(Material.AIR); + + block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, + 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); + } + else if (strength / 6 <= heat) + { + if (_glazedBlocks.containsKey(block.getType())) + { + block.setType(_glazedBlocks.get(block.getType())); + + block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, + 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); + } + } } - if (!UtilAlg.HasSight(loc, block.getLocation().add(0.5, 0.5, 0.5))) + if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER) { - continue; + if (heat > 1) + { + block.setType(Material.AIR); + + block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, 0); + } } if (block.getType() == Material.AIR) @@ -70,14 +203,17 @@ public class SpellNapalm extends Spell implements SpellClick { Block b = block.getRelative(BlockFace.values()[a]); - if (b.getType().isFlammable()) + if (b.getType() != Material.AIR) { block.setType(Material.FIRE); - block.getWorld().playSound(block.getLocation(), Sound.FIRE_IGNITE, 1, - 1 + ((new Random().nextFloat() - 0.5F) / 3F)); + block.getWorld().playSound(block.getLocation(), Sound.DIG_WOOL, 1.3F, + 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); + break; } } + + litOnFire.add(block); } } } @@ -85,7 +221,13 @@ public class SpellNapalm extends Spell implements SpellClick } } - blocksTravelled += 2; + blocksTravelled += 0.3; + size = Math.min(8, size + 0.06); + + if (lastTick++ % 6 == 0) + { + napalmLoc.getWorld().playSound(napalmLoc, Sound.CAT_HISS, (float) Math.min(2.2, size * 0.5), 0F); + } if (blocksTravelled >= length) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java index b46e85fcb..7203e30d3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java @@ -35,7 +35,7 @@ public class SpellRainbowBeam extends Spell implements SpellClick p.getEyeLocation().getDirection().normalize() .multiply(0.3 + p.getEyeLocation().distance(((LivingEntity) entityTarget).getEyeLocation()))); - double damage = (getSpellLevel(p) * 2) + 4F; + double damage = (getSpellLevel(p) * 2) + 5; double dist = loc.distance(p.getLocation()) - (80 * .2D); // If target is more than 20% away @@ -50,7 +50,7 @@ public class SpellRainbowBeam extends Spell implements SpellClick Wizards.getArcadeManager() .GetDamage() .NewDamageEvent((LivingEntity) entityTarget, p, null, DamageCause.CUSTOM, damage, true, true, false, - "Rainbow Beam", "Rainbow Beam"); + "Rainbow Beam", null); p.playSound(entityTarget.getLocation(), Sound.LEVEL_UP, (getSpellLevel(p) * 2) + 6, 1); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java similarity index 57% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java index 939a2d439..dcaf7c0a7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowPath.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java @@ -1,17 +1,16 @@ package nautilus.game.arcade.game.games.wizards.spells; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; -import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilShapes; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickBlock; import org.bukkit.Effect; import org.bukkit.Location; @@ -24,7 +23,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -public class SpellRainbowPath extends Spell implements SpellClick, SpellClickBlock +public class SpellRainbowRoad extends Spell implements SpellClick { final BlockFace[] radial = { @@ -61,17 +60,6 @@ public class SpellRainbowPath extends Spell implements SpellClick, SpellClickBlo @Override public void castSpell(Player p) - { - Vector vector = p.getEyeLocation().getDirection().normalize().setY(-1); - - vector.setX(Math.round(vector.getX())); - vector.setZ(Math.round(vector.getZ())); - - castSpell(p, p.getLocation().add(vector).getBlock()); - } - - @Override - public void castSpell(Player p, final Block target) { final BlockFace face = radial[Math.round(p.getLocation().getYaw() / 45f) & 0x7]; @@ -79,15 +67,14 @@ public class SpellRainbowPath extends Spell implements SpellClick, SpellClickBlo final Vector vector = new Vector(face.getModX(), -yMod, face.getModZ()); - p.getWorld().playEffect(target.getLocation(), Effect.STEP_SOUND, Material.WOOL.getId(), - _rainbow[UtilMath.r(_rainbow.length)]); - p.getWorld().playSound(p.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1); + final Location loc = p.getLocation().getBlock().getLocation().add(0.5, -0.5, 0.5); - final int maxDist = 10 * getSpellLevel(p); + final int maxDist = 3 + (10 * getSpellLevel(p)); + + makeRoad(loc, face, 0); new BukkitRunnable() { - Location loc = target.getLocation().add(0.5, 0.5, 0.5); int blocks; int colorProgress; @@ -100,37 +87,57 @@ public class SpellRainbowPath extends Spell implements SpellClick, SpellClickBlo return; } + colorProgress = makeRoad(loc, face, colorProgress); + loc.add(vector); - - Block block = loc.getBlock(); - - BlockFace[] faces = UtilShapes.getSideBlockFaces(block, face); - - Block[] bs = new Block[] - { - block, block.getRelative(faces[0]), block.getRelative(faces[1]) - }; - - for (Block b : bs) - { - if (UtilBlock.solid(b)) - { - continue; - } - - b.setType(Material.STAINED_GLASS); - b.setData((byte) _rainbow[colorProgress++ % _rainbow.length]); - - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WOOL, b.getData()); - - _wallExpires.put(b, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); - } - - block.getWorld().playSound(block.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1); - } - }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 5, 1); + }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 5, 5); charge(p); } + + private int makeRoad(Location loc, BlockFace face, int colorProgress) + { + + Block block = loc.getBlock(); + + BlockFace[] faces = UtilShapes.getSideBlockFaces(face); + + ArrayList bs = new ArrayList(); + + bs.add(block); + + for (int i = 0; i < 2; i++) + { + bs.add(block.getRelative(faces[i])); + } + + bs.addAll(UtilShapes.getDiagonalBlocks(block, face, 1)); + + boolean playSound = false; + + for (Block b : bs) + { + if (UtilBlock.solid(b)) + { + continue; + } + + b.setType(Material.STAINED_GLASS); + b.setData((byte) _rainbow[colorProgress++ % _rainbow.length]); + + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WOOL, b.getData()); + + _wallExpires.put(b, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); + + playSound = true; + } + + if (playSound) + { + block.getWorld().playSound(block.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1); + } + + return colorProgress; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java index f715383cb..c62991e6e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java @@ -1,23 +1,16 @@ package nautilus.game.arcade.game.games.wizards.spells; import java.util.ArrayList; -import java.util.Collection; import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilShapes; -import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickBlock; -import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy; -import net.minecraft.server.v1_7_R4.PacketPlayOutSpawnEntity; -import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; @@ -87,7 +80,7 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick { ArrayList bs = new ArrayList(); - BlockFace[] faces = UtilShapes.getSideBlockFaces(_currentBlock, moveDirection); + BlockFace[] faces = UtilShapes.getSideBlockFaces(moveDirection); bs.add(_currentBlock); @@ -126,6 +119,7 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick if (!toExplode.contains(b)) { toExplode.add(b); + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getTypeId()); } } } @@ -133,6 +127,43 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick Wizards.getArcadeManager().GetExplosion() .BlockExplosion(toExplode, block.getLocation().add(0.5, 0, 0.5), false); + + for (LivingEntity entity : block.getWorld().getEntitiesByClass(LivingEntity.class)) + { + if (!UtilPlayer.isSpectator(entity)) + { + if (entity instanceof Tameable) + { + AnimalTamer tamer = ((Tameable) entity).getOwner(); + + if (tamer != null && tamer == player) + { + continue; + } + } + + double dist = 999; + + for (Block b : toExplode) + { + double currentDist = b.getLocation().add(0.5, 0.5, 0.5).distance(entity.getLocation()); + + if (dist > currentDist) + { + dist = currentDist; + } + } + + if (dist < 2) + { + Wizards.getArcadeManager() + .GetDamage() + .NewDamageEvent(entity, player, null, DamageCause.CUSTOM, + (1 + (spellLevel / 5D)) * (2 - dist), true, true, false, "Rumble Explosion", + null); + } + } + } } cancel(); @@ -147,28 +178,30 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick return; } - _currentBlock = _currentBlock.getRelative(moveDirection); + boolean found = false; - if (UtilBlock.solid(_currentBlock.getRelative(BlockFace.UP))) - { - - _currentBlock = _currentBlock.getRelative(BlockFace.UP); - - if (UtilBlock.solid(_currentBlock.getRelative(BlockFace.UP))) + for (int y : new int[] { - endRun(); - return; + 0, 1, -1, -2 + }) + { + if (_currentBlock.getY() + y <= 0) + { + continue; } - } - else if (!UtilBlock.solid(_currentBlock) && _currentBlock.getY() > 0) - { + Block b = _currentBlock.getRelative(moveDirection).getRelative(0, y, 0); - _currentBlock = _currentBlock.getRelative(BlockFace.DOWN); + if (UtilBlock.solid(b) && !UtilBlock.solid(b.getRelative(0, 1, 0))) + { + found = true; + _currentBlock = b; + break; + } } - if (!UtilBlock.solid(_currentBlock)) + if (!found) { endRun(); return; @@ -176,13 +209,15 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick ArrayList effectedBlocks = new ArrayList(); - BlockFace[] faces = UtilShapes.getSideBlockFaces(_currentBlock, moveDirection); + BlockFace[] faces = UtilShapes.getSideBlockFaces(moveDirection); effectedBlocks.add(_currentBlock); playBlockEffect(_currentBlock); - for (int i = 1; i <= Math.min(4, Math.floor(_distTravelled / (8D - spellLevel))) + 1; i++) + int size = (int) (Math.min(4, Math.floor(_distTravelled / (8D - spellLevel))) + 1); + + for (int i = 1; i <= size; i++) { for (int a = 0; a < faces.length; a++) { @@ -196,6 +231,15 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick } } + for (Block b : UtilShapes.getDiagonalBlocks(_currentBlock, moveDirection, size - 2)) + { + if (UtilBlock.solid(b)) + { + effectedBlocks.add(b); + playBlockEffect(b); + } + } + _previousBlocks.addAll(effectedBlocks); for (Block b : _previousBlocks) @@ -229,14 +273,14 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick if (height >= 0 && height <= 2) { Wizards.Manager.GetDamage().NewDamageEvent((LivingEntity) entity, player, null, - DamageCause.CUSTOM, damage, true, true, false, "Rumble", "Rumble"); + DamageCause.CUSTOM, damage, true, true, false, "Rumble", null); if (entity instanceof Player) { Wizards.getArcadeManager() .GetCondition() .Factory() - .Slow("Rumble", (LivingEntity) entity, player, 60, spellLevel, false, false, + .Slow("Rumble", (LivingEntity) entity, player, 3, spellLevel, false, false, false, false); } } @@ -262,7 +306,14 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick private void playBlockEffect(Block block) { - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId());/* + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); + Block b = block.getRelative(BlockFace.UP); + + if (UtilBlock.airFoliage(b)) + { + b.breakNaturally(); + } + /* final int entityId = UtilEnt.getNewEntityId(); @@ -279,23 +330,23 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick for (Player player : players) { - UtilPlayer.sendPacket(player, fallingSpawn); + UtilPlayer.sendPacket(player, fallingSpawn); } Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable() { - public void run() - { - PacketPlayOutEntityDestroy destroyPacket = new PacketPlayOutEntityDestroy(new int[] - { - entityId - }); + public void run() + { + PacketPlayOutEntityDestroy destroyPacket = new PacketPlayOutEntityDestroy(new int[] + { + entityId + }); - for (Player player : players) - { - UtilPlayer.sendPacket(player, destroyPacket); - } - } + for (Player player : players) + { + UtilPlayer.sendPacket(player, destroyPacket); + } + } }, 15);*/ } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java index aeaa2d751..02ec271f6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java @@ -2,31 +2,40 @@ package nautilus.game.arcade.game.games.wizards.spells; import java.util.HashMap; import java.util.Iterator; - -import org.bukkit.Location; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.metadata.FixedMetadataValue; +import java.util.Map.Entry; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilShapes; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftArrow; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.metadata.FixedMetadataValue; + public class SpellSpectralArrow extends Spell implements SpellClick { - private HashMap _spectralArrows = new HashMap(); + private HashMap _spectralArrows = new HashMap(); @Override public void castSpell(Player player) { - Arrow arrow = player.shootArrow(); + Arrow arrow = player.launchProjectile(Arrow.class); + arrow.setVelocity(arrow.getVelocity().multiply(2.5)); arrow.setMetadata("SpellLevel", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), getSpellLevel(player))); - _spectralArrows.put(arrow, player.getLocation()); + ((CraftArrow) arrow).getHandle().fromPlayer = 0; + + _spectralArrows.put(arrow, new Location[] + { + player.getLocation(), player.getLocation() + }); charge(player); } @@ -38,13 +47,18 @@ public class SpellSpectralArrow extends Spell implements SpellClick { return; } - Iterator itel = _spectralArrows.keySet().iterator(); + Iterator> itel = _spectralArrows.entrySet().iterator(); while (itel.hasNext()) { - Arrow entity = itel.next(); + Entry entry = itel.next(); - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, entity.getLocation(), 0, 0, 0, 0, 1); + for (Location loc : UtilShapes.getLinesDistancedPoints(entry.getValue()[1], entry.getKey().getLocation(), 0.7D)) + { + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc, 0, 0, 0, 0, 1); + } + + entry.getValue()[1] = entry.getKey().getLocation(); } } @@ -72,13 +86,15 @@ public class SpellSpectralArrow extends Spell implements SpellClick @EventHandler public void onDamage(CustomDamageEvent event) { - Location loc = _spectralArrows.remove(event.GetDamagerEntity(true)); + Location[] loc = _spectralArrows.remove(event.GetProjectile()); if (loc != null) { - int spellLevel = event.GetDamagerEntity(true).getMetadata("SpellLevel").get(0).asInt(); + int spellLevel = event.GetProjectile().getMetadata("SpellLevel").get(0).asInt(); + event.AddMod("Negate Damage", "Negate Damage", -event.GetDamage(), false); - event.AddMod("Spectral Arrow", "Spectral Arrow", loc.distance(event.GetDamageeEntity().getLocation()) / (7D - spellLevel), true); + event.AddMod("Spectral Arrow", "Spectral Arrow", + Math.max(4, loc[0].distance(event.GetDamageeEntity().getLocation()) / (7D - spellLevel)), true); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpeedBoost.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpeedBoost.java index af04c4a06..9589d0078 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpeedBoost.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpeedBoost.java @@ -10,10 +10,9 @@ public class SpellSpeedBoost extends Spell implements SpellClick @Override public void castSpell(Player p) { - int ticks = 20 * 20; int potionLevel = getSpellLevel(p); - Wizards.getArcadeManager().GetCondition().Factory().Speed("Speed Boost", p, p, ticks, potionLevel, false, false, false); + Wizards.getArcadeManager().GetCondition().Factory().Speed("Speed Boost", p, p, 20, potionLevel, false, false, false); charge(p); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java index b886d6cdb..0e5607392 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java @@ -6,22 +6,14 @@ import java.util.List; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilShapes; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import mineplex.minecraft.game.core.explosion.CustomExplosion; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import nautilus.game.arcade.game.games.wizards.spells.subclasses.TrapRune; -import org.bukkit.Effect; import org.bukkit.Location; -import org.bukkit.Sound; import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -39,151 +31,10 @@ public class SpellTrapRune extends Spell implements SpellClick { TrapRune rune = itel.next(); - if (!rune.RuneCaster.isOnline() || UtilPlayer.isSpectator(rune.RuneCaster)) + if (rune.onRuneTick()) { itel.remove(); } - else if (rune.TicksLived++ > 2000) - { - itel.remove(); - } - else - { - if (rune.TicksLived <= 100) - { - if (rune.TicksLived % 15 == 0) - { - initialParticles(rune.RuneLocation, rune.RuneSize); - } - - if (rune.TicksLived == 100) - { - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, rune.RuneLocation, 0, rune.RuneSize / 4, 0, - rune.RuneSize / 4, (int) (rune.RuneSize * 10)); - } - } - else - { - if (!isValid(rune)) - { - trapCard(rune); - itel.remove(); - } - else - { - for (Player player : Wizards.GetPlayers(true)) - { - if (isInTrap(rune.RuneLocation, player.getLocation(), rune.RuneSize)) - { - trapCard(rune); - - itel.remove(); - break; - } - } - } - } - } - } - } - } - - public void initialParticles(Location trapLocation, double trapSize) - { - for (Location loc : getBox(trapLocation, trapSize, 0.3)) - { - for (double y = 0; y < 1; y += 0.2) - { - trapLocation.getWorld().spigot().playEffect(loc, Effect.SMOKE, 0, 0, 0, 0, 0, 0, 1, 30); - } - } - } - - private ArrayList getBox(Location trapLocation, double trapSize, double spacing) - { - ArrayList boxLocs = getBoxCorners(trapLocation, trapSize); - ArrayList returns = new ArrayList(); - - for (int i = 0; i < boxLocs.size(); i++) - { - - int a = i + 1 >= boxLocs.size() ? 0 : i + 1; - returns.addAll(UtilShapes.getLinesDistancedPoints(boxLocs.get(i), boxLocs.get(a), spacing)); - returns.add(boxLocs.get(i)); - - } - return returns; - } - - private ArrayList getBoxCorners(Location center, double boxSize) - { - ArrayList boxPoints = new ArrayList(); - - boxPoints.add(center.clone().add(-boxSize, 0, -boxSize)); - boxPoints.add(center.clone().add(boxSize, 0, -boxSize)); - boxPoints.add(center.clone().add(boxSize, 0, boxSize)); - boxPoints.add(center.clone().add(-boxSize, 0, boxSize)); - - return boxPoints; - } - - private boolean isInTrap(Location trapLocation, Location loc, double trapSize) - { - if (loc.getX() >= trapLocation.getX() - trapSize && loc.getX() <= trapLocation.getX() + trapSize) - { - if (loc.getZ() >= trapLocation.getZ() - trapSize && loc.getZ() <= trapLocation.getZ() + trapSize) - { - if (loc.getY() >= trapLocation.getY() - 0.1 && loc.getY() <= trapLocation.getY() + 0.9) - { - return true; - } - } - } - return false; - } - - private boolean isValid(TrapRune rune) - { - return !UtilBlock.solid(rune.RuneLocation.getBlock()) - || UtilBlock.solid(rune.RuneLocation.getBlock().getRelative(BlockFace.DOWN)); - /* - for (double x = -rune.RuneSize; x <= rune.RuneSize; x++) - { - for (double z = -rune.RuneSize; z <= rune.RuneSize; z++) - { - - Block b = rune.RuneLocation.clone().add(x, 0, z).getBlock(); - if (UtilBlock.solid(b) || !UtilBlock.solid(b.getRelative(BlockFace.DOWN))) - { - return false; - } - - } - }*/ - } - - public void trapCard(TrapRune rune) - { - rune.RuneLocation.getWorld().playSound(rune.RuneLocation, Sound.WITHER_SHOOT, 5, (float) rune.RuneSize * 2); - - CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), Wizards.getArcadeManager() - .GetExplosion(), rune.RuneLocation.clone().add(0, 0.3, 0), (float) rune.RuneSize * 1.2F, "Trap Rune"); - - explosion.setPlayer(rune.RuneCaster, true); - - explosion.setBlockExplosionSize((float) rune.RuneSize * 2F); - - explosion.setFallingBlockExplosion(true); - - explosion.setDropItems(false); - - explosion.explode(); - - for (Location loc : getBox(rune.RuneLocation, rune.RuneSize, 0.3)) - { - for (double y = 0; y < 1; y += 0.2) - { - rune.RuneLocation.getWorld().spigot().playEffect(loc, Effect.SMOKE, 0, 0, 0, 0, 0, 0, 1, 30); } } } @@ -199,18 +50,14 @@ public class SpellTrapRune extends Spell implements SpellClick float trapSize = Math.max(1, getSpellLevel(p) * 0.8F); - TrapRune rune = new TrapRune(); - rune.RuneCaster = p; - rune.RuneSize = trapSize; - rune.RuneLocation = loc; - - if (!isValid(rune)) + TrapRune rune = new TrapRune(Wizards, p, loc, trapSize); + if (!rune.isValid()) { p.sendMessage(C.cGreen + "Cannot draw rune on wall"); return; } - initialParticles(loc, trapSize); + rune.initialParticles(); _runes.add(rune); charge(p); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java index d5f8fda14..b6237accc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java @@ -17,7 +17,6 @@ import org.bukkit.block.Block; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.util.Vector; public class SpellWebShot extends Spell implements SpellClick, IThrown { @@ -53,7 +52,7 @@ public class SpellWebShot extends Spell implements SpellClick, IThrown // Boost org.bukkit.entity.Item ent = player.getWorld().dropItem( - player.getLocation().add(0, 0.5, 0), + player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.WEB, (byte) 0, 1, "Web " + player.getName() + " " + System.currentTimeMillis())); @@ -77,7 +76,7 @@ public class SpellWebShot extends Spell implements SpellClick, IThrown Wizards.getArcadeManager() .GetDamage() .NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 2, false, false, false, - UtilEnt.getName(data.GetThrower()), "Web Shot"); + "Web Shot", null); } Web(data); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java index 99576e8b6..c61df7e0c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java @@ -1,6 +1,10 @@ package nautilus.game.arcade.game.games.wizards.spells; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilAlg; @@ -27,11 +31,7 @@ public class SpellWizardsCompass extends Spell implements SpellClick Location loc = p.getEyeLocation().subtract(0, 1, 0); ArrayList players = Wizards.GetPlayers(true); - int counter = 0; - - final int[][] ints = new int[27][]; - - int c = 0; + final ArrayList colors = new ArrayList(); for (int x = -1; x <= 1; x++) { @@ -41,14 +41,16 @@ public class SpellWizardsCompass extends Spell implements SpellClick for (int z = -1; z <= 1; z++) { - ints[c++] = new int[] + colors.add(new Integer[] { x, y, z - }; + }); } } } + Collections.shuffle(colors); + boolean foundSomeone = false; for (Player enemy : players) @@ -60,8 +62,6 @@ public class SpellWizardsCompass extends Spell implements SpellClick foundSomeone = true; - final int count = counter++; - final Vector traj = UtilAlg.getTrajectory(p.getLocation(), enemy.getEyeLocation()).multiply(0.1); final Hologram hologram = new Hologram(Wizards.getArcadeManager().getHologramManager(), loc.clone().add(0, 0.3, 0) @@ -73,22 +73,50 @@ public class SpellWizardsCompass extends Spell implements SpellClick hologram.start(); final Location location = loc.clone(); + final Integer[] ints = colors.remove(0); new BukkitRunnable() { - int i = 0; + int dist; + int tick; + HashMap locations = new HashMap(); public void run() { - for (int a = 0; a < 2; a++) + tick++; + + Iterator> itel = locations.entrySet().iterator(); + + while (itel.hasNext()) { - // Colored redstone dust - UtilParticle.PlayParticle(ParticleType.RED_DUST, location.add(traj), ints[count][0], ints[count][1], - ints[count][2], 1, 0); - i++; + Entry entry = itel.next(); + + if ((entry.getValue() + tick) % 3 == 0) + { + // Colored redstone dust + UtilParticle.PlayParticle(ParticleType.RED_DUST, entry.getKey(), ints[0], ints[1], ints[2], 1, 0); + } + + if (entry.getValue() < tick) + { + itel.remove(); + } } - if (i > (7 * 10)) + if (dist <= 7 * 10) + { + for (int a = 0; a < 2; a++) + { + // Colored redstone dust + UtilParticle.PlayParticle(ParticleType.RED_DUST, location, ints[0], ints[1], ints[2], 1, 0); + + locations.put(location.clone(), tick + 50); + + location.add(traj); + dist++; + } + } + else if (locations.isEmpty()) { hologram.stop(); cancel(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/HealingRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/HealingRune.java deleted file mode 100644 index b685e3885..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/HealingRune.java +++ /dev/null @@ -1,84 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells.subclasses; - -import java.util.ArrayList; - -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilShapes; -import nautilus.game.arcade.game.games.wizards.Wizards; - -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -public class HealingRune -{ - private Location _location; - private int _ticksToLive; - private double _runeSize; - private Wizards _wizards; - - public HealingRune(Wizards wizards, Location location, int spellLevel) - { - _location = location; - _ticksToLive = 100 + (spellLevel * 60); - _runeSize = 2 + (spellLevel * .5D); - _wizards = wizards; - } - - public boolean onTick() - { - for (Player player : Bukkit.getOnlinePlayers()) - { - if (player.getGameMode() == GameMode.CREATIVE) - { - continue; - } - - Location loc = player.getLocation().clone(); - - if (loc.getY() >= _location.getY() && loc.getY() <= _location.getY() + 2) - { - loc.setY(_location.getY()); - - if (loc.distance(_location) <= _runeSize) - { - _wizards.getArcadeManager().GetCondition().Factory().Regen("Healing Rune", player, null, 50, 0, false, false, true); - } - } - } - - double currentY = 0; - ArrayList locs = UtilShapes.getDistancedCircle(_location, 0.2D, _runeSize); - double addY = 1.5D / locs.size(); - - int a = UtilMath.r(locs.size()); - for (int b = 0; b < 2; b++) - { - for (int i = 0; i < locs.size(); i++) - { - a++; - - if (i % 30 == _ticksToLive % 30) - { - Location loc = locs.get(a % locs.size()); - - UtilParticle.PlayParticle(ParticleType.HEART, loc.clone().add(0, currentY, 0), 0, 0, 0, 0, 1); - } - - currentY += addY; - } - } - - if (_ticksToLive-- <= 0) - { - return true; - } - - return false; - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java deleted file mode 100644 index bf936f7ad..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java +++ /dev/null @@ -1,112 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells.subclasses; - -import java.util.HashMap; -import java.util.UUID; - -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilShapes; -import mineplex.core.common.util.UtilParticle.ParticleType; -import nautilus.game.arcade.game.games.wizards.Wizards; - -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Sound; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - -public class LaunchRune -{ - private Player _caster; - private Wizards _wizards; - private Location _runeLocation; - private float _runeSize; - private int _ticksTillActive = 60; - private int _spellLevel; - private HashMap _launchedEntities = new HashMap(); - - public boolean onTick() - { - _ticksTillActive--; - boolean launched = false; - - if (_ticksTillActive <= 0) - { - for (LivingEntity entity : _runeLocation.getWorld().getEntitiesByClass(LivingEntity.class)) - { - - if (!(entity instanceof Player) || !UtilPlayer.isSpectator(entity)) - { - - UUID uuid = entity.getUniqueId(); - - if (!_launchedEntities.containsKey(uuid) || _launchedEntities.get(uuid) < System.currentTimeMillis()) - { - - Location loc = entity.getLocation(); - - if (loc.getY() >= _runeLocation.getY() - 0.1 && loc.getY() <= _runeLocation.getY() + 1.3) - { - - loc.setY(_runeLocation.getY()); - - if (loc.distance(_runeLocation) <= _runeSize) - { - _wizards.getArcadeManager().GetCondition().Factory() - .Falling("Launch Rune", entity, _caster, 10, false, false); - - Vector vector = entity.getLocation().getDirection().normalize().multiply(0.1); - vector.setY(1F + (_spellLevel * 0.15F)); - entity.setVelocity(vector); - entity.setFallDistance(-_spellLevel * 1.5F); - - launched = true; - - _launchedEntities.put(uuid, System.currentTimeMillis() + (long) (_runeSize * 2500L)); - } - } - } - } - } - } - - if (launched) - { - _runeLocation.getWorld().playSound(_runeLocation, Sound.BAT_TAKEOFF, 1.2F, 1F); - displayCircle(5); - } - else if (_ticksTillActive % (_ticksTillActive >= 0 ? 20 : 7) == 0) - { - displayCircle(1); - } - - return _ticksTillActive < -60 * 20; - } - - private void displayCircle(int loops) - { - for (double y = 0; y < loops * 0.2D; y += 0.2D) - { - for (Location loc : UtilShapes.getDistancedCircle(_runeLocation, 0.3D, _runeSize)) - { - UtilParticle.PlayParticle(ParticleType.CLOUD, loc, 0, 0, 0, 0, 1); - } - } - } - - public LaunchRune(Wizards wizards, Player caster, Location loc, float size, int spellLevel) - { - _wizards = wizards; - _caster = caster; - _runeLocation = loc; - _runeSize = size; - _spellLevel = spellLevel; - displayCircle(1); - } - - public Location getLocation() - { - return _runeLocation; - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TeleportRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TeleportRune.java deleted file mode 100644 index 407206350..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TeleportRune.java +++ /dev/null @@ -1,118 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.spells.subclasses; - -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilShapes; - -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Sound; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; - -public class TeleportRune -{ - private Location _firstLoc, _secondLoc; - private int _ticksLived = -60; - private double _runeSize; - - public TeleportRune(Location firstLocation, Location secondLocation, double runeSize) - { - _firstLoc = firstLocation; - _secondLoc = secondLocation; - _runeSize = runeSize; - } - - /** - * Returns true on remove - */ - public boolean tickRune() - { - if (_ticksLived >= 150) - { - return true; - } - - if (_ticksLived % 5 == 0) - { - resendRunes(); - } - - if (_ticksLived >= 0) - { - if (_ticksLived % 40 == 0) - { - _firstLoc.getWorld().playSound(_firstLoc, Sound.PORTAL, 1.5F, 0F); - _firstLoc.getWorld().playSound(_secondLoc, Sound.PORTAL, 1.5F, 0F); - } - - for (LivingEntity entity : _firstLoc.getWorld().getEntitiesByClass(LivingEntity.class)) - { - if (entity instanceof Player && UtilPlayer.isSpectator(entity)) - { - continue; - } - - Location loc = entity.getLocation(); - - if (loc.distance(_firstLoc) <= _runeSize && loc.getBlockY() >= _firstLoc.getBlockY() - && loc.getBlockY() <= _firstLoc.getBlockY() + 2) - { - - for (double y = 0; y < 2; y += 0.5) - { - UtilParticle.PlayParticle(ParticleType.PORTAL, _secondLoc.clone().add(0, y, 0), 1.5F, 1.5F, 1.5F, 0F, 40); - } - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, _secondLoc.clone().add(0, 1, 0), 0, 0, 0, 0, 5); - - _secondLoc.getWorld().playSound(_secondLoc, Sound.ENDERMAN_TELEPORT, 3, 0); - - Location newLoc = _secondLoc.clone(); - newLoc.setDirection(entity.getEyeLocation().getDirection()); - entity.setFallDistance(0F); - - entity.teleport(newLoc); - } - } - } - - _ticksLived++; - return false; - } - - private void makeCircle(Location loc, double distance) - { - for (Location l : UtilShapes.getPointsInCircle(loc, (int) Math.ceil(Math.PI * distance * 2), distance)) - { - UtilParticle.PlayParticle(_ticksLived >= 0 ? ParticleType.FIREWORKS_SPARK : ParticleType.RED_DUST, l, 0, 0, 0, 0, 1); - } - } - - private void redrawRunes(Location runeLoc) - { - runeLoc = runeLoc.clone(); - if (_ticksLived >= 0) - { - for (double y = 0; y < 1; y += 0.4) - { - runeLoc.add(0, y, 0); - makeCircle(runeLoc, _runeSize); - makeCircle(runeLoc, (_runeSize / 3) * 2); - } - } - else - { - makeCircle(runeLoc, _runeSize); - } - } - - /** - * Resending runes resends the particles. - */ - public void resendRunes() - { - redrawRunes(_firstLoc); - redrawRunes(_secondLoc); - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java index b4b558c79..a07cd34c7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java @@ -1,15 +1,184 @@ package nautilus.game.arcade.game.games.wizards.spells.subclasses; +import java.util.ArrayList; + +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilShapes; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.minecraft.game.core.explosion.CustomExplosion; +import nautilus.game.arcade.game.games.wizards.Wizards; + +import org.bukkit.Effect; import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; public class TrapRune { - // TODO Methods and potentially move code into here - public Location RuneLocation; - public float RuneSize; - public Player RuneCaster; - public int TicksLived; + private Location _runeLocation; + private float _runeSize; + private Player _runeCaster; + private int _ticksLived; + private Wizards _wizards; + public boolean onRuneTick() + { + + if (!_runeCaster.isOnline() || UtilPlayer.isSpectator(_runeCaster)) + { + return true; + } + else if (_ticksLived++ > 2000) + { + return true; + } + else + { + if (_ticksLived <= 100) + { + if (_ticksLived % 15 == 0) + { + initialParticles(); + } + + if (_ticksLived == 100) + { + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, _runeLocation, 0, _runeSize / 4, 0, _runeSize / 4, + (int) (_runeSize * 10)); + } + } + else + { + if (!isValid()) + { + trapCard(); + return true; + } + else + { + for (Player player : _wizards.GetPlayers(true)) + { + if (isInTrap(player.getLocation())) + { + trapCard(); + return true; + } + } + } + } + } + return false; + } + + public TrapRune(Wizards wizards, Player player, Location location, float runeSize) + { + _wizards = wizards; + _runeCaster = player; + _runeLocation = location; + _runeSize = runeSize; + } + + public void initialParticles() + { + for (Location loc : getBox(0.3)) + { + for (double y = 0; y < 1; y += 0.2) + { + _runeLocation.getWorld().spigot().playEffect(loc, Effect.SMALL_SMOKE, 0, 0, 0, 0, 0, 0, 1, 30); + } + } + } + + public ArrayList getBox(double spacing) + { + ArrayList boxLocs = getBoxCorners(); + ArrayList returns = new ArrayList(); + + for (int i = 0; i < boxLocs.size(); i++) + { + + int a = i + 1 >= boxLocs.size() ? 0 : i + 1; + returns.addAll(UtilShapes.getLinesDistancedPoints(boxLocs.get(i), boxLocs.get(a), spacing)); + returns.add(boxLocs.get(i)); + + } + return returns; + } + + public ArrayList getBoxCorners() + { + ArrayList boxPoints = new ArrayList(); + + boxPoints.add(_runeLocation.clone().add(-_runeSize, 0, -_runeSize)); + boxPoints.add(_runeLocation.clone().add(_runeSize, 0, -_runeSize)); + boxPoints.add(_runeLocation.clone().add(_runeSize, 0, _runeSize)); + boxPoints.add(_runeLocation.clone().add(-_runeSize, 0, _runeSize)); + + return boxPoints; + } + + public boolean isInTrap(Location loc) + { + if (loc.getX() >= _runeLocation.getX() - _runeSize && loc.getX() <= _runeLocation.getX() + _runeSize) + { + if (loc.getZ() >= _runeLocation.getZ() - _runeSize && loc.getZ() <= _runeLocation.getZ() + _runeSize) + { + if (loc.getY() >= _runeLocation.getY() - 0.1 && loc.getY() <= _runeLocation.getY() + 0.9) + { + return true; + } + } + } + return false; + } + + public boolean isValid() + { + return !UtilBlock.solid(_runeLocation.getBlock()) + || UtilBlock.solid(_runeLocation.getBlock().getRelative(BlockFace.DOWN)); + /* + for (double x = -RuneSize; x <= RuneSize; x++) + { + for (double z = -RuneSize; z <= RuneSize; z++) + { + + Block b = RuneLocation.clone().add(x, 0, z).getBlock(); + if (UtilBlock.solid(b) || !UtilBlock.solid(b.getRelative(BlockFace.DOWN))) + { + return false; + } + + } + }*/ + } + + public void trapCard() + { + _runeLocation.getWorld().playSound(_runeLocation, Sound.WITHER_SHOOT, 5, (float) _runeSize * 2); + + CustomExplosion explosion = new CustomExplosion(_wizards.getArcadeManager().GetDamage(), _wizards.getArcadeManager() + .GetExplosion(), _runeLocation.clone().add(0, 0.3, 0), (float) _runeSize * 1.2F, "Trap Rune"); + + explosion.setPlayer(_runeCaster, true); + + explosion.setBlockExplosionSize((float) _runeSize * 2F); + + explosion.setFallingBlockExplosion(true); + + explosion.setDropItems(false); + + explosion.explode(); + + for (Location loc : getBox(0.3)) + { + for (double y = 0; y < 1; y += 0.2) + { + _runeLocation.getWorld().spigot().playEffect(loc, Effect.SMOKE, 0, 0, 0, 0, 0, 0, 1, 30); + } + } + } } From 2d59bb401044f2df228e4b52c93a8e9c17c5766a Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 11 Apr 2015 12:12:47 +1200 Subject: [PATCH 010/104] CustomExplosion: Added option to limit falling blocks that spawn, removed 'Reason' to prevent CustomDamageEvent from using a mod instead of initialDamage (wtf?) --- .../game/core/explosion/CustomExplosion.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java index 51fa6ef20..fb70dbd68 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java @@ -1,6 +1,8 @@ package mineplex.minecraft.game.core.explosion; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -49,6 +51,7 @@ public class CustomExplosion extends Explosion private mineplex.core.explosion.Explosion _explosion; private float _damage; private boolean _useCustomDamage; + private int _maxFallingBlocks = -1; public CustomExplosion(DamageManager manager, mineplex.core.explosion.Explosion explosion, Location loc, float explosionSize, String deathCause) @@ -94,6 +97,13 @@ public class CustomExplosion extends Explosion return this; } + public CustomExplosion setFallingBlockExplosionAmount(int maxFallingBlocks) + { + _maxFallingBlocks = maxFallingBlocks; + + return this; + } + public CustomExplosion setDamageBlocks(boolean damageBlocks) { b = damageBlocks; @@ -246,7 +256,7 @@ public class CustomExplosion extends Explosion if (entity.getBukkitEntity() instanceof LivingEntity) { _manager.NewDamageEvent((LivingEntity) entity.getBukkitEntity(), _owner, null, - DamageCause.ENTITY_EXPLOSION, damage, true, _ignoreRate, false, _damageReason, _damageReason); + DamageCause.ENTITY_EXPLOSION, damage, true, _ignoreRate, false, _damageReason, null); } else { @@ -319,7 +329,21 @@ public class CustomExplosion extends Explosion if (_fallingBlockExplosion) { - _explosion.BlockExplosion(event.GetBlocks(), new Location(_world.getWorld(), posX, posY, posZ), false, false); + Collection blocks = event.GetBlocks(); + + if (_maxFallingBlocks != -1) + { + blocks = new ArrayList(blocks); + + Collections.shuffle((ArrayList) blocks); + + while (blocks.size() > Math.max(0, _maxFallingBlocks)) + { + blocks.remove(0); + } + } + + _explosion.BlockExplosion(blocks, new Location(_world.getWorld(), posX, posY, posZ), false, false); } Iterator iterator = this.blocks.iterator(); From 28d0e286078fbc4a76f20908e6f1048d41291193 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 11 Apr 2015 12:13:37 +1200 Subject: [PATCH 011/104] UtilShapes: Fixed getting BlockFace's being bugged and weird sometimes, added another method to get diagonal faces between two diagonals --- .../mineplex/core/common/util/UtilShapes.java | 370 ++++++++++-------- 1 file changed, 213 insertions(+), 157 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilShapes.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilShapes.java index b632af579..c5443b0d1 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilShapes.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilShapes.java @@ -9,181 +9,237 @@ import org.bukkit.util.Vector; public class UtilShapes { - private final static BlockFace[] diagonalFaces = - { - BlockFace.SOUTH_WEST, BlockFace.NORTH_WEST, BlockFace.NORTH_EAST, BlockFace.SOUTH_EAST - }; + private final static BlockFace[] diagonalFaces = + { + BlockFace.SOUTH_WEST, BlockFace.NORTH_WEST, BlockFace.NORTH_EAST, BlockFace.SOUTH_EAST + }; - private final static BlockFace[] radial = - { - BlockFace.SOUTH, BlockFace.SOUTH_WEST, BlockFace.WEST, BlockFace.NORTH_WEST, BlockFace.NORTH, - BlockFace.NORTH_EAST, BlockFace.EAST, BlockFace.SOUTH_EAST - }; + private final static BlockFace[] radial = + { + BlockFace.SOUTH, BlockFace.SOUTH_WEST, BlockFace.WEST, BlockFace.NORTH_WEST, BlockFace.NORTH, + BlockFace.NORTH_EAST, BlockFace.EAST, BlockFace.SOUTH_EAST + }; - private final static BlockFace[] squareFaces = - { - BlockFace.SOUTH, BlockFace.WEST, BlockFace.NORTH, BlockFace.EAST - }; + private final static BlockFace[] squareFaces = + { + BlockFace.SOUTH, BlockFace.WEST, BlockFace.NORTH, BlockFace.EAST + }; - public static ArrayList getCircle(Location loc, double radius, boolean hollow) - { - return getCircleBlocks(loc, radius, 0, hollow, false); - } + public static ArrayList getCircle(Location loc, double radius, boolean hollow) + { + return getCircleBlocks(loc, radius, 0, hollow, false); + } - public static ArrayList getSphereBlocks(Location loc, double radius, double height, boolean hollow) - { - return getCircleBlocks(loc, radius, height, hollow, true); - } + public static ArrayList getSphereBlocks(Location loc, double radius, double height, boolean hollow) + { + return getCircleBlocks(loc, radius, height, hollow, true); + } - private static ArrayList getCircleBlocks(Location loc, double radius, double height, boolean hollow, boolean sphere) - { - ArrayList circleblocks = new ArrayList(); - double cx = loc.getBlockX(); - double cy = loc.getBlockY(); - double cz = loc.getBlockZ(); + private static ArrayList getCircleBlocks(Location loc, double radius, double height, boolean hollow, boolean sphere) + { + ArrayList circleblocks = new ArrayList(); + double cx = loc.getBlockX(); + double cy = loc.getBlockY(); + double cz = loc.getBlockZ(); - for (double y = (sphere ? cy - radius : cy); y < (sphere ? cy + radius : cy + height + 1); y++) - { - for (double x = cx - radius; x <= cx + radius; x++) - { - for (double z = cz - radius; z <= cz + radius; z++) - { - double dist = (cx - x) * (cx - x) + (cz - z) * (cz - z) + (sphere ? (cy - y) * (cy - y) : 0); + for (double y = (sphere ? cy - radius : cy); y < (sphere ? cy + radius : cy + height + 1); y++) + { + for (double x = cx - radius; x <= cx + radius; x++) + { + for (double z = cz - radius; z <= cz + radius; z++) + { + double dist = (cx - x) * (cx - x) + (cz - z) * (cz - z) + (sphere ? (cy - y) * (cy - y) : 0); - if (dist < radius * radius && !(hollow && dist < (radius - 1) * (radius - 1))) - { - Location l = new Location(loc.getWorld(), x, y, z); - circleblocks.add(l); - } - } - } - } + if (dist < radius * radius && !(hollow && dist < (radius - 1) * (radius - 1))) + { + Location l = new Location(loc.getWorld(), x, y, z); + circleblocks.add(l); + } + } + } + } - return circleblocks; - } + return circleblocks; + } - /** - * Gets the block at the exact corners, will return a diagonal. - * - * @Yeah ik this code sucks. - */ - public static BlockFace[] getCornerBlockFaces(Block b, BlockFace facing) - { - BlockFace left = null; - BlockFace right = null; - for (int i = 0; i < radial.length; i++) - { - if (radial[i] == facing) - { - int high = i + 2; - if (high >= radial.length) - high = high - radial.length; - int low = i - 2; - if (low < 0) - low = radial.length + low; - left = radial[low]; - right = radial[high]; - return new BlockFace[] - { - left, right - }; - } - } - return null; - } + /** + * Gets the block at the exact corners, will return a diagonal. + * + * @Yeah ik this code sucks. + */ + public static BlockFace[] getCornerBlockFaces(Block b, BlockFace facing) + { + BlockFace left = null; + BlockFace right = null; + for (int i = 0; i < radial.length; i++) + { + if (radial[i] == facing) + { + int high = i + 2; + if (high >= radial.length) + high = high - radial.length; + int low = i - 2; + if (low < 0) + low = radial.length + low; + left = radial[low]; + right = radial[high]; + return new BlockFace[] + { + left, right + }; + } + } + return null; + } - public static Block[] getCornerBlocks(Block b, BlockFace facing) - { - BlockFace[] faces = getSideBlockFaces(b, facing); - return new Block[] - { - b.getRelative(faces[0]), b.getRelative(faces[1]) - }; - } + public static Block[] getCornerBlocks(Block b, BlockFace facing) + { + BlockFace[] faces = getSideBlockFaces(facing); + return new Block[] + { + b.getRelative(faces[0]), b.getRelative(faces[1]) + }; + } - public static BlockFace getFacing(float yaw) - { - return radial[Math.round(yaw / 45f) & 0x7]; - } + public static BlockFace getFacing(float yaw) + { + return radial[Math.round(yaw / 45f) & 0x7]; + } - public static ArrayList getLinesDistancedPoints(Location startingPoint, Location endingPoint, - double distanceBetweenParticles) - { - return getLinesLimitedPoints(startingPoint, endingPoint, - (int) Math.ceil(startingPoint.distance(endingPoint) / distanceBetweenParticles)); - } + public static ArrayList getLinesDistancedPoints(Location startingPoint, Location endingPoint, + double distanceBetweenParticles) + { + return getLinesLimitedPoints(startingPoint, endingPoint, + (int) Math.ceil(startingPoint.distance(endingPoint) / distanceBetweenParticles)); + } - public static ArrayList getLinesLimitedPoints(Location startingPoint, Location endingPoint, int amountOfPoints) - { - startingPoint = startingPoint.clone(); - Vector vector = endingPoint.toVector().subtract(startingPoint.toVector()); - vector.normalize(); - vector.multiply(startingPoint.distance(endingPoint) / (amountOfPoints + 1D)); + public static ArrayList getLinesLimitedPoints(Location startingPoint, Location endingPoint, int amountOfPoints) + { + startingPoint = startingPoint.clone(); + Vector vector = endingPoint.toVector().subtract(startingPoint.toVector()); + vector.normalize(); + vector.multiply(startingPoint.distance(endingPoint) / (amountOfPoints + 1D)); - ArrayList locs = new ArrayList(); - for (int i = 0; i < amountOfPoints; i++) - { - locs.add(startingPoint.add(vector).clone()); - } - return locs; - } + ArrayList locs = new ArrayList(); + for (int i = 0; i < amountOfPoints; i++) + { + locs.add(startingPoint.add(vector).clone()); + } + return locs; + } - public static ArrayList getPointsInCircle(Location center, int pointsAmount, double circleRadius) - { - ArrayList locs = new ArrayList(); + public static ArrayList getPointsInCircle(Location center, int pointsAmount, double circleRadius) + { + ArrayList locs = new ArrayList(); - for (int i = 0; i < pointsAmount; i++) - { - double angle = ((2 * Math.PI) / pointsAmount) * i; - double x = circleRadius * Math.cos(angle); - double z = circleRadius * Math.sin(angle); - Location loc = center.clone().add(x, 0, z); - locs.add(loc); - } - return locs; - } + for (int i = 0; i < pointsAmount; i++) + { + double angle = ((2 * Math.PI) / pointsAmount) * i; + double x = circleRadius * Math.cos(angle); + double z = circleRadius * Math.sin(angle); + Location loc = center.clone().add(x, 0, z); + locs.add(loc); + } + return locs; + } - public static ArrayList getDistancedCircle(Location center, double pointsDistance, double circleRadius) - { - return getPointsInCircle(center, (int) ((circleRadius * Math.PI * 2) / pointsDistance), circleRadius); - } + public static ArrayList getDistancedCircle(Location center, double pointsDistance, double circleRadius) + { + return getPointsInCircle(center, (int) ((circleRadius * Math.PI * 2) / pointsDistance), circleRadius); + } - /** - * Returns a north/west/east/south block, never a diagonal. - */ - public static BlockFace[] getSideBlockFaces(Block b, BlockFace facing) - { - BlockFace left = null; - BlockFace right = null; - for (int i = 0; i < 4; i++) - { - int modifierUp = (diagonalFaces[i] == facing ? 2 : squareFaces[i] == facing ? 1 : 0); - if (modifierUp != 0) - { - int high = i + modifierUp; - if (high >= squareFaces.length) - high = high - squareFaces.length; - int low = i - 1; - if (low < 0) - low = squareFaces.length + low; - left = squareFaces[low]; - right = squareFaces[high]; - return new BlockFace[] - { - left, right - }; - } - } - return null; - } + /** + * Returns a north/west/east/south block, never a diagonal. + */ + public static BlockFace[] getSideBlockFaces(BlockFace facing) + { + return getSideBlockFaces(facing, true); + } - public static Block[] getSideBlocks(Block b, BlockFace facing) - { - BlockFace[] faces = getSideBlockFaces(b, facing); - return new Block[] - { - b.getRelative(faces[0]), b.getRelative(faces[1]) - }; - } + public static BlockFace[] getSideBlockFaces(BlockFace facing, boolean allowDiagonal) + { + + int[][] facesXZ; + allowDiagonal = !allowDiagonal && (facing.getModX() != 0 && facing.getModZ() != 0); + + facesXZ = new int[][] + { + + new int[] + { + allowDiagonal ? facing.getModX() : facing.getModZ(), allowDiagonal ? 0 : -facing.getModX() + }, + + new int[] + { + allowDiagonal ? 0 : -facing.getModZ(), allowDiagonal ? facing.getModZ() : facing.getModX() + } + }; + + BlockFace[] faces = new BlockFace[2]; + + for (int i = 0; i < 2; i++) + { + int[] f = facesXZ[i]; + + for (BlockFace face : BlockFace.values()) + { + if (face.getModY() == 0) + { + if (f[0] == face.getModX() && f[1] == face.getModZ()) + { + faces[i] = face; + break; + } + } + } + } + + if (allowDiagonal && (facing == BlockFace.NORTH_EAST || facing == BlockFace.SOUTH_WEST)) + { + faces = new BlockFace[] + { + faces[1], faces[0] + }; + } + + return faces; + } + + public static ArrayList getDiagonalBlocks(Block block, BlockFace facing, int blockWidth) + { + ArrayList blocks = new ArrayList(); + + if (facing.getModX() == 0 || facing.getModZ() == 0) + { + return blocks; + } + + BlockFace[] faces = getSideBlockFaces(facing); + + for (BlockFace face : faces) + { + Location loc = block.getLocation().add(0.5 + (facing.getModX() / 2D), 0, 0.5 + (facing.getModZ() / 2D)); + + blocks.add(loc.add(face.getModX() / 2D, 0, face.getModZ() / 2D).getBlock()); + + for (int i = 1; i < blockWidth; i++) + { + blocks.add(loc.add(face.getModX(), 0, face.getModZ()).getBlock()); + } + } + + return blocks; + } + + public static Block[] getSideBlocks(Block b, BlockFace facing) + { + BlockFace[] faces = getSideBlockFaces(facing); + + return new Block[] + { + b.getRelative(faces[0]), b.getRelative(faces[1]) + }; + } } From 43163cd7d718dc336710a90036cc56fe9cf9f5e9 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 11 Apr 2015 12:14:12 +1200 Subject: [PATCH 012/104] UtilParticle: Added lore for future reference on colored particles. --- .../src/mineplex/core/common/util/UtilParticle.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index fc3044f87..ce29258a9 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -81,14 +81,23 @@ public class UtilParticle MAGIC_CRIT("magicCrit"), + /** + * Can be colored if count is 0, color is RGB and depends on the offset of xyz + */ MOB_SPELL("mobSpell"), + /** + * Can be colored if count is 0, color is RGB and depends on the offset of xyz + */ MOB_SPELL_AMBIENT("mobSpellAmbient"), NOTE("note"), PORTAL("portal"), + /** + * Can be colored if count is 0, color is RGB and depends on the offset of xyz + */ RED_DUST("reddust"), SLIME("slime"), From 03fb8c203e1a84f94f2d407143c3198ebb06b592 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 12 Apr 2015 23:20:15 +1200 Subject: [PATCH 013/104] Wizards: Balancing --- .../arcade/game/games/wizards/SpellType.java | 64 +++--- .../arcade/game/games/wizards/Wizard.java | 12 +- .../arcade/game/games/wizards/Wizards.java | 81 ++++--- .../game/games/wizards/spells/SpellDroom.java | 10 +- .../games/wizards/spells/SpellFireball.java | 13 +- .../game/games/wizards/spells/SpellFlash.java | 2 +- .../wizards/spells/SpellFrostBarrier.java | 104 +++++---- .../game/games/wizards/spells/SpellGust.java | 6 +- .../games/wizards/spells/SpellIcePrison.java | 4 +- .../games/wizards/spells/SpellIceShards.java | 55 ++--- .../wizards/spells/SpellLightningStrike.java | 49 +++- .../wizards/spells/SpellMagicMissile.java | 6 +- .../games/wizards/spells/SpellNapalm.java | 196 ++++++++-------- .../wizards/spells/SpellRainbowBeam.java | 4 +- .../wizards/spells/SpellRainbowRoad.java | 2 +- .../games/wizards/spells/SpellRumble.java | 8 +- .../wizards/spells/SpellSpectralArrow.java | 7 +- .../wizards/spells/SpellSummonWolves.java | 214 +++++++++--------- .../games/wizards/spells/SpellTrapRune.java | 9 +- .../games/wizards/spells/SpellWebShot.java | 90 ++++++-- .../wizards/spells/subclasses/TrapRune.java | 8 +- 21 files changed, 548 insertions(+), 396 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java index 9ff40d86b..30a458ac4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java @@ -21,12 +21,12 @@ public enum SpellType // ❤ -4, // Cooldown change per level 10, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level x 4) + 5.5", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level x 2) + 3", "", "Summons exploding anvils over everyone near you!", - + "This also includes the caster!"), Fireball(SpellElement.ATTACK, // Spell element @@ -40,7 +40,7 @@ public enum SpellType // ❤ -2, // Cooldown change per level 10, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level x 2) + 2.5", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 3", "", @@ -78,7 +78,7 @@ public enum SpellType // ❤ C.cGold + C.Bold + "Height: " + C.Bold + C.cWhite + "Spell Level + 1", - C.cGold + C.Bold + "Width: " + C.Bold + C.cWhite + "Spell Level x 5", + C.cGold + C.Bold + "Width: " + C.Bold + C.cWhite + "(Spell Level x 2) + 4", "", @@ -148,8 +148,8 @@ public enum SpellType // ❤ 3, // Spell max level 50, // Mana cost 20, // Spell cooldown - 0, // Mana cost change per level - -5, // Cooldown change per level + 2, // Mana cost change per level + 0, // Cooldown change per level 3, // Item amount in loot C.cGold + C.Bold + "Size: " + C.Bold + C.cWhite + "Spell Level + 3", @@ -164,24 +164,26 @@ public enum SpellType // ❤ "Ice Shards", // Spell name new ItemStack(Material.GHAST_TEAR), // Spell icon SpellIceShards.class, // Spell class - 3, // Spell max level + 5, // Spell max level 30, // Mana cost 20, // Spell cooldown 0, // Mana cost change per level - -5, // Cooldown change per level + -2, // Cooldown change per level 3, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "1 heart", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "2", C.cGold + C.Bold + "Shards: " + C.Bold + C.cWhite + "Spell Level + 1", "", - "Stack the damage and hit them consecutively!", - - "Each shard from the same spell will deal", - - "an extra heart for every shard that hit!"), + "Overwhelm your opponent with shards!", + + "Each shard is fired half a second after", + + "the last allowing you to pummel your", + + "enemies senseless!"), Implode(SpellElement.MISC, // Spell element "Implode", // Spell name @@ -217,14 +219,14 @@ public enum SpellType // ❤ 0, // Cooldown change per level 10, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "3", - + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level x 2) + 2", + "", "Summon a mighty lightning strike", "to hit the target you point out!", - + "The lightning also contains fire!"), MagicMissile(SpellElement.ATTACK, // Spell element @@ -253,13 +255,13 @@ public enum SpellType // ❤ new ItemStack(Material.FIREBALL), // Spell icon SpellNapalm.class, // Spell class 5, // Spell max level - 60, // Mana cost + 70, // Mana cost 60, // Spell cooldown 5, // Mana cost change per level -10, // Cooldown change per level - 3, // Item amount in loot + 1, // Item amount in loot - C.cGold + C.Bold + "Length: " + C.Bold + C.cWhite + "(Spell Level x 10) + 4", + C.cGold + C.Bold + "Length: " + C.Bold + C.cWhite + "(Spell Level x 10) + 5", "", @@ -280,7 +282,7 @@ public enum SpellType // ❤ 1, // Cooldown change per level 10, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 2.5 *", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 2.5", C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "80", @@ -298,9 +300,9 @@ public enum SpellType // ❤ SpellRainbowRoad.class, // Spell class 3, // Spell max level 50, // Mana cost - 20, // Spell cooldown + 40, // Spell cooldown 0, // Mana cost change per level - -5, // Cooldown change per level + 0, // Cooldown change per level 3, // Item amount in loot C.cGold + C.Bold + "Length: " + C.Bold + C.cWhite + "Spell Level x 10", @@ -319,7 +321,7 @@ public enum SpellType // ❤ 30, // Mana cost 5, // Spell cooldown 0, // Mana cost change per level - -1, // Cooldown change per level + 0, // Cooldown change per level 10, // Item amount in loot C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 2", @@ -350,18 +352,16 @@ public enum SpellType // ❤ 40, // Mana cost 15, // Spell cooldown -5, // Mana cost change per level - 0, // Cooldown change per level + -2, // Cooldown change per level 3, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Distance / (8 - Spell Level)", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Blocks / (7 - Spell Level)) + 3", "", "Shoot an arrow that penetrates!", - "Further the distance, higher the damage!", - - "Garanteed at least 2 hearts damage!"), + "Further the distance, higher the damage!"), SpeedBoost(SpellElement.SUPPORT, // Spell element "Speed Boost", // Spell name @@ -412,12 +412,12 @@ public enum SpellType // ❤ -5, // Cooldown change per level 3, // Item amount in loot + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level x 2) + 3", + C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "(Spell Level x 4) + 12", C.cGold + C.Bold + "Rune Size: " + C.Bold + C.cWhite + "Spell Level", - C.cGold + C.Bold + "Explosion Size: " + C.Bold + C.cWhite + "Spell Level", - "", "Draws an explosion rune on the ground!", @@ -432,7 +432,7 @@ public enum SpellType // ❤ 40, // Mana cost 20, // Spell cooldown -5, // Mana cost change per level - -5, // Cooldown change per level + 0, // Cooldown change per level 3, // Item amount in loot C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "1 heart", diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizard.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizard.java index 19659f8d7..e3d16df23 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizard.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizard.java @@ -10,7 +10,7 @@ public class Wizard private NautHashMap _cooldowns = new NautHashMap(); private NautHashMap _knownSpells = new NautHashMap(); private SpellType[] _assignedWands = new SpellType[5]; - private float _mana = 150; + private float _mana; private float _manaPerTick = 2.5F / 20F; private float _maxMana; private int _soulStars; @@ -88,6 +88,16 @@ public class Wizard _knownSpells.put(type, getSpellLevel(type) + 1); } + public void addMana(float newMana) + { + _mana += newMana; + + if (_mana > _maxMana) + { + _mana = _maxMana; + } + } + public void setMana(float newMana) { _mana = newMana; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index aa05305d5..249c333af 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -8,6 +8,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Map.Entry; import java.util.Random; + import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.F; @@ -178,12 +179,17 @@ public class Wizards extends SoloGame @EventHandler public void onDamage(CustomDamageEvent event) { - System.out.print(event.GetDamage()); - event.setCancelled(true); + event.SetDamageToLevel(false); + if (!event.IgnoreArmor()) { double percentProtected = 0; + if (event.GetDamageePlayer() == null) + { + return; + } + for (ItemStack item : event.GetDamageePlayer().getInventory().getArmorContents()) { if (item != null) @@ -418,7 +424,6 @@ public class Wizards extends SoloGame addRandomItem(5, Material.POTATO_ITEM, 0, 1, 2); addRandomItem(5, Material.CARROT_ITEM, 0, 1, 2); addRandomItem(5, Material.WHEAT, 0, 1, 2); - addRandomItem(1, Material.TNT, 0, 1, 1); addRandomItem(5, Material.ROTTEN_FLESH, 0, 1, 2); addRandomItem(5, Material.STICK, 0, 1, 2); addRandomItem(5, Material.WOOD, 0, 1, 10); @@ -448,7 +453,7 @@ public class Wizards extends SoloGame addRandomItem(5, Material.PUMPKIN_PIE, 0, 1, 2); addRandomItem(5, Material.APPLE, 0, 1, 2); addRandomItem(5, Material.IRON_INGOT, 0, 1, 2); - addRandomItem(2, Material.DIAMOND, 0, 1, 1); + addRandomItem(3, Material.DIAMOND, 0, 1, 1); addRandomItem(5, Material.EXP_BOTTLE, 0, 1, 2); addRandomItem(1, Material.IRON_BOOTS, 0, 1, 1); addRandomItem(1, Material.IRON_CHESTPLATE, 0, 1, 1); @@ -812,6 +817,25 @@ public class Wizards extends SoloGame event.getPlayer().sendMessage(F.main("Wizards", "All spells leveled up by one")); } + if (event.getMessage().equalsIgnoreCase("allspells")) + { + for (Player player : GetPlayers(true)) + { + Wizard wizard = getWizard(player); + for (SpellType type : SpellType.values()) + { + if (wizard.getSpellLevel(type) < type.getMaxLevel()) + { + wizard.learnSpell(type); + } + } + + player.sendMessage(F.main("Wizards", "All spells leveled up by one")); + } + + event.setCancelled(true); + } + if (event.getMessage().equalsIgnoreCase("overtime")) { setGameLiveTime(System.currentTimeMillis() - (int) (9.95 * 60 * 1000)); @@ -853,7 +877,10 @@ public class Wizards extends SoloGame { onSpellLearn(p, spell); + event.setCancelled(true); event.setCurrentItem(new ItemStack(Material.AIR)); + + p.playSound(p.getLocation(), Sound.NOTE_STICKS, 0.7F, 0); } } } @@ -866,6 +893,8 @@ public class Wizards extends SoloGame { event.setCancelled(true); event.setCurrentItem(new ItemStack(Material.AIR)); + + p.playSound(p.getLocation(), Sound.NOTE_STICKS, 0.7F, 0); } } @@ -887,7 +916,8 @@ public class Wizards extends SoloGame if (event.getDamage() > 0.5) { event.setDamage(0.5); - if (event.getEntity() instanceof LivingEntity) + + if (event.getEntity() instanceof Player) { UtilParticle.PlayParticle((Player) event.getDamager(), ParticleType.HEART, ((LivingEntity) event.getEntity()).getEyeLocation(), 0, 0, 0, 0, 1); @@ -1062,11 +1092,8 @@ public class Wizards extends SoloGame { Wizard wizard = getWizard(p); - if (wizard.getMana() < wizard.getMaxMana()) - { - wizard.setMana(wizard.getMaxMana()); - p.sendMessage(C.cGold + "Wizards" + C.cDGray + "> " + C.cGray + "Wand converted into mana"); - } + wizard.addMana(100); + p.sendMessage(C.cGold + "Wizards" + C.cDGray + "> " + C.cGray + "Wand converted into mana"); } return true; @@ -1134,7 +1161,7 @@ public class Wizards extends SoloGame { SpellType spell = SpellType.values()[UtilMath.r(SpellType.values().length)]; - if (wizard.getSpellLevel(spell) == 0) + if (wizard.getSpellLevel(spell) == 0 && UtilMath.r(10) < spell.getItemAmount()) { onSpellLearn(player, spell); break; @@ -1229,7 +1256,7 @@ public class Wizards extends SoloGame return; } - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 0.7F, 0); + p.playSound(p.getLocation(), Sound.NOTE_STICKS, 0.7F, 0); } } @@ -1259,10 +1286,10 @@ public class Wizards extends SoloGame p.sendMessage(spell.getElement().getColor() + spell.getSpellName() + C.cDGray + "> " + C.cGray + "Leveled up to " + getWizard(p).getSpellLevel(spell)); } - else if (wiz.getMana() < wiz.getMaxMana()) + else { - wiz.setMana(Math.min(wiz.getMaxMana(), wiz.getMana() + 50)); - p.sendMessage(C.cGold + "Wizards" + C.cDGray + "> " + C.cGray + "Converted spellbook into mana"); + wiz.addMana(50); + p.sendMessage(C.cGold + "Wizards" + C.cDGray + "> " + C.cGray + "Spellbook converted into mana"); } } @@ -1334,12 +1361,6 @@ public class Wizards extends SoloGame System.out.print("Endgame event: " + (_endGameEvent == 0 ? "Meteors" : "Lightning")); } - @EventHandler - public void removeDamageToLevel(CustomDamageEvent event) - { - event.SetDamageToLevel(false); - } - public void returnToHub(Player player) { UtilPlayer.message(player, " "); @@ -1445,7 +1466,7 @@ public class Wizards extends SoloGame if (UtilTime.elapsed(_lastEndgameStrike, _nextEndgameStrike)) { - _nextEndgameStrike -= 10; + _nextEndgameStrike -= 20; _lastEndgameStrike = System.currentTimeMillis(); if (_endGameEvent == 0) @@ -1462,9 +1483,9 @@ public class Wizards extends SoloGame private Location getEndgameLocation() { - int chance = UtilMath.r(40) + 3; + int chance = UtilMath.r(50) + 3; int accuracy = Math.max((int) (chance - (_accuracy * chance)), 1); - _accuracy += 0.01; + _accuracy += 0.003; ArrayList players = GetPlayers(true); @@ -1517,10 +1538,10 @@ public class Wizards extends SoloGame loc.getWorld().playSound(loc, Sound.AMBIENCE_THUNDER, 5F, 0.8F + UtilMath.random.nextFloat()); loc.getWorld().playSound(loc, Sound.EXPLODE, 2F, 0.9F + (UtilMath.random.nextFloat() / 3)); - UtilBlock.getExplosionBlocks(loc, 4 * _endgameSize, false, true); + UtilBlock.getExplosionBlocks(loc, 3 * _endgameSize, false); // Blocks - ArrayList blocks = new ArrayList(UtilBlock.getInRadius(loc, 4 * _endgameSize).keySet()); + ArrayList blocks = new ArrayList(UtilBlock.getInRadius(loc, 3 * _endgameSize).keySet()); Collections.shuffle(blocks); while (blocks.size() > 20) @@ -1530,19 +1551,19 @@ public class Wizards extends SoloGame Manager.GetExplosion().BlockExplosion(blocks, loc, false); - HashMap inRadius = UtilEnt.getInRadius(loc, 4D); + HashMap inRadius = UtilEnt.getInRadius(loc, 4D * _endgameSize); // The damage done at ground zero double baseDamage = 6 * _endgameSize; for (LivingEntity entity : inRadius.keySet()) { - double damage = baseDamage - (baseDamage * (inRadius.get(entity) / 4)); + double damage = baseDamage * inRadius.get(entity); if (damage > 0) { getArcadeManager().GetDamage().NewDamageEvent(entity, null, null, DamageCause.LIGHTNING, damage, true, false, - true, "Lightning", null); + true, "Lightning", "Lightning"); } } } @@ -1671,7 +1692,7 @@ public class Wizards extends SoloGame if (itel.hasNext()) { getArcadeManager().GetDamage().NewDamageEvent(player, null, null, DamageCause.ENTITY_EXPLOSION, 9999, false, - true, true, "Meteor", null); + true, true, "Meteor", "Meteor"); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java index 9eb342de1..baf2a332e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java @@ -60,8 +60,8 @@ public class SpellDroom extends Spell implements SpellClick FallingBlock anvil = p.getWorld().spawnFallingBlock(loc.getBlock().getLocation().add(0.5, 0.5, 0.5), Material.ANVIL, (byte) 0); - anvil.setMetadata("ExplosionSize", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), - 1 + (getSpellLevel(player) / 2F))); + anvil.setMetadata("SpellLevel", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), + getSpellLevel(player))); anvil.setMetadata("Wizard", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), player)); @@ -83,15 +83,19 @@ public class SpellDroom extends Spell implements SpellClick private void handleAnvil(Entity entity) { _fallingBlocks.remove(entity); + + int spellLevel = entity.getMetadata("SpellLevel").get(0).asInt(); CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), Wizards.getArcadeManager() - .GetExplosion(), entity.getLocation(), (float) entity.getMetadata("ExplosionSize").get(0).asDouble(), "Droom"); + .GetExplosion(), entity.getLocation(), 1 + (spellLevel / 2F), "Droom"); explosion.setPlayer((Player) entity.getMetadata("Wizard").get(0).value(), true); explosion.setFallingBlockExplosion(true); explosion.setDropItems(false); + + explosion.setMaxDamage(6 + (spellLevel * 4)); explosion.explode(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java index 12e756540..cd83001b1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java @@ -22,14 +22,15 @@ public class SpellFireball extends Spell implements SpellClick public void onHit(ProjectileHitEvent event) { Projectile projectile = event.getEntity(); - + if (projectile.hasMetadata("FireballSpell")) { projectile.remove(); + int spellLevel = projectile.getMetadata("SpellLevel").get(0).asInt(); + CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), Wizards.getArcadeManager() - .GetExplosion(), projectile.getLocation(), projectile.getMetadata("FireballYield").get(0).asFloat(), - "Fireball"); + .GetExplosion(), projectile.getLocation(), (spellLevel * 0.3F) + 1F, "Fireball"); explosion.setPlayer((Player) projectile.getMetadata("FireballSpell").get(0).value(), true); @@ -37,6 +38,8 @@ public class SpellFireball extends Spell implements SpellClick explosion.setDropItems(false); + explosion.setMaxDamage((spellLevel * 2) + 6); + explosion.explode(); } } @@ -59,11 +62,9 @@ public class SpellFireball extends Spell implements SpellClick fireball.setShooter(p); fireball.setYield(0); fireball.setMetadata("FireballSpell", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), p)); - fireball.setMetadata("FireballYield", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), - (getSpellLevel(p) * 0.3F) + 1F)); + fireball.setMetadata("SpellLevel", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), getSpellLevel(p))); p.getWorld().playSound(p.getLocation(), Sound.BLAZE_BREATH, 0.5F, 5F); charge(p); } - } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java index 8212998a5..725d447bd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java @@ -24,7 +24,7 @@ public class SpellFlash extends Spell implements SpellClick while (curRange <= maxRange) { - Location newTarget = player.getLocation().add(new Vector(0, 0.2, 0)) + Location newTarget = player.getEyeLocation().add(new Vector(0, 0.2, 0)) .add(player.getLocation().getDirection().multiply(curRange)); if (!UtilBlock.airFoliage(newTarget.getBlock()) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java index d79097a31..c6c2c84db 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java @@ -9,9 +9,11 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilShapes; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.game.games.wizards.Spell; +import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickBlock; import org.bukkit.Effect; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -21,61 +23,23 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.scheduler.BukkitRunnable; -public class SpellFrostBarrier extends Spell implements SpellClickBlock +public class SpellFrostBarrier extends Spell implements SpellClick, SpellClickBlock { private HashMap _wallExpires = new HashMap(); - @EventHandler - public void onBlockBreak(BlockBreakEvent event) + @Override + public void castSpell(Player player) { - Block block = event.getBlock(); - - if (_wallExpires.containsKey(block)) - { - event.setCancelled(true); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); - block.setType(Material.AIR); - } - } - - @EventHandler - public void onBlockMelt(BlockFadeEvent event) - { - Block block = event.getBlock(); - - if (_wallExpires.containsKey(block)) - { - event.setCancelled(true); - block.setType(Material.AIR); - } - } - - @EventHandler - public void onUpdate(UpdateEvent event) - { - Iterator> itel = _wallExpires.entrySet().iterator(); - - while (itel.hasNext()) - { - Entry entry = itel.next(); - - if (entry.getValue() < System.currentTimeMillis()) - { - itel.remove(); - - if (entry.getKey().getType() == Material.ICE) - { - entry.getKey().setType(Material.AIR); - } - } - } + Location loc = player.getLocation().add(player.getLocation().getDirection().normalize().multiply(1.5)); + + castSpell(player, loc.getBlock().getRelative(BlockFace.DOWN)); } @Override - public void castSpell(Player player, Block obj) + public void castSpell(Player player, Block block) { - final Block starter = obj.getRelative(BlockFace.UP); - final int wallWidth = getSpellLevel(player) * 5; + final Block starter = block.getRelative(BlockFace.UP); + final int wallWidth = 4 + (getSpellLevel(player) * 2); final BlockFace facing = UtilShapes.getFacing(player.getEyeLocation().getYaw()); final int wallHeight = 1 + getSpellLevel(player); @@ -127,4 +91,50 @@ public class SpellFrostBarrier extends Spell implements SpellClickBlock charge(player); } + + @EventHandler + public void onBlockBreak(BlockBreakEvent event) + { + Block block = event.getBlock(); + + if (_wallExpires.containsKey(block)) + { + event.setCancelled(true); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); + block.setType(Material.AIR); + } + } + + @EventHandler + public void onBlockMelt(BlockFadeEvent event) + { + Block block = event.getBlock(); + + if (_wallExpires.containsKey(block)) + { + event.setCancelled(true); + block.setType(Material.AIR); + } + } + + @EventHandler + public void onUpdate(UpdateEvent event) + { + Iterator> itel = _wallExpires.entrySet().iterator(); + + while (itel.hasNext()) + { + Entry entry = itel.next(); + + if (entry.getValue() < System.currentTimeMillis()) + { + itel.remove(); + + if (entry.getKey().getType() == Material.ICE) + { + entry.getKey().setType(Material.AIR); + } + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java index 0aec4647e..5090cab29 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java @@ -17,19 +17,23 @@ public class SpellGust extends Spell implements SpellClick public void castSpell(Player player) { Vector vector = player.getLocation().getDirection().setY(0).normalize().multiply(1.5).setY(0.3) - .multiply(1.3 + (getSpellLevel(player) * 0.4D)); + .multiply(1.2 + (getSpellLevel(player) * 0.4D)); HashMap effected = UtilPlayer.getPlayersInPyramid(player, 45, 10 * getSpellLevel(player)); for (Player target : effected.keySet()) { + Wizards.getArcadeManager().GetCondition().Factory().Falling("Gust", target, player, 10, false, true); + target.setVelocity(vector); + target.getWorld().playSound(target.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F); } if (!effected.isEmpty()) { player.playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F); + charge(player); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java index d138b2f7c..baabb5ae0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIcePrison.java @@ -89,7 +89,7 @@ public class SpellIcePrison extends Spell implements SpellClick, IThrown for (Block block : blocks.keySet()) { - if (UtilBlock.airFoliage(block)) + if (_prisonExpires.containsKey(block) || UtilBlock.airFoliage(block)) { block.setType(Material.ICE); @@ -141,7 +141,7 @@ public class SpellIcePrison extends Spell implements SpellClick, IThrown ent.setMetadata("PrisonStrength", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), 3 + spellLevel)); UtilAction.velocity(ent, player.getLocation().getDirection(), 1.7, false, 0, 0.2, 10, false); - Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2d); + Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2f); player.getWorld().playSound(player.getLocation(), Sound.CREEPER_HISS, 1.2F, 0.8F); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java index 54618daf7..7fc3e4259 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java @@ -1,22 +1,11 @@ package nautilus.game.arcade.game.games.wizards.spells; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map.Entry; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilPlayer; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -25,25 +14,24 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; -import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; public class SpellIceShards extends Spell implements SpellClick, IThrown { - private HashMap _shardsExpire = new HashMap(); - private HashMap, HashMap> _hitShards = new HashMap, HashMap>(); + // private HashMap _shardsExpire = new HashMap(); + // private HashMap, HashMap> _hitShards = new HashMap, HashMap>(); @Override public void castSpell(final Player player) { - final ArrayList firedShards = new ArrayList(); - _shardsExpire.put(firedShards, System.currentTimeMillis() + 60000); - _hitShards.put(firedShards, new HashMap()); + // final ArrayList firedShards = new ArrayList(); + // _shardsExpire.put(firedShards, System.currentTimeMillis() + 60000); + // _hitShards.put(firedShards, new HashMap()); - shoot(player, firedShards); + shoot(player); for (int i = 1; i <= getSpellLevel(player); i++) { @@ -54,7 +42,7 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown @Override public void run() { - shoot(player, firedShards); + shoot(player); } }, i * 5); @@ -63,7 +51,7 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown charge(player); } - @EventHandler + /*@EventHandler public void onSecond(UpdateEvent event) { if (event.getType() != UpdateType.SEC) @@ -86,9 +74,9 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown _hitShards.remove(entry.getKey()); } } - } + }*/ - private void shoot(Player player, ArrayList firedShards) + private void shoot(Player player) { if (Wizards.IsAlive(player)) @@ -100,10 +88,10 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown ItemStackFactory.Instance.CreateStack(Material.GHAST_TEAR, (byte) 0, 1, "Ice Shard " + player.getName() + " " + System.currentTimeMillis())); - firedShards.add(ent); + // firedShards.add(ent); UtilAction.velocity(ent, player.getLocation().getDirection(), 2.3, false, 0, 0.2, 10, false); - Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2d); + Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2f); player.getWorld().playSound(player.getLocation(), Sound.CLICK, 1.2F, 0.8F); @@ -115,7 +103,7 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown { if (target != null && target instanceof Player) { - String name = ((Player) target).getName(); + /*String name = ((Player) target).getName(); int timesHit = 0; for (Entry, HashMap> entry : _hitShards.entrySet()) @@ -133,19 +121,19 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown break; } - } + }*/ // Damage Event Wizards.getArcadeManager() .GetDamage() - .NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 4 + (timesHit * 2), true, true, - false, "Ice Shard", null); + .NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 4 /*+ (timesHit * 2)*/, true, true, + false, "Ice Shard", "Ice Shard"); - if (timesHit > 0) + /*if (timesHit > 0) { UtilPlayer.message(data.GetThrower(), "Ice Shards" + ": " + F.elem(timesHit + " Consecutive Hits") + C.cGray + " (" + F.skill("+" + timesHit + " Damage") + C.cGray + ")"); - } + }*/ } handleShard(data); @@ -158,6 +146,11 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.PACKED_ICE, 0), loc, 0.3F, 0.3F, 0.3F, 0, 12); loc.getWorld().playSound(loc, Sound.GLASS, 1.2F, 1); + + if (loc.getBlock().getType() == Material.FIRE) + { + loc.getBlock().setType(Material.AIR); + } } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java index 41f4bd8e7..b185600fc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; import nautilus.game.arcade.game.games.wizards.Spell; @@ -55,22 +56,45 @@ public class SpellLightningStrike extends Spell implements SpellClick b = b.getRelative(BlockFace.DOWN); ArrayList toExplode = new ArrayList(); + ArrayList toFire = new ArrayList(); - for (int i = 0; i < 6; i++) + for (int x = -1; x <= 1; x++) { - Block block = b.getRelative(BlockFace.values()[i]); + for (int y = -1; y <= 1; y++) + { + for (int z = -1; z <= 1; z++) + { + if (x == 0 || (Math.abs(x) != Math.abs(z) || UtilMath.r(3) == 0)) + { + Block block = b.getRelative(x, y, z); - if (block.getType() != Material.AIR && block.getType() != Material.BEDROCK) - { - toExplode.add(block); - } - else if (block.getType() == Material.AIR) - { - block.setType(Material.FIRE); + if ((y == 0 || (x == 0 && z == 0)) && block.getType() != Material.AIR + && block.getType() != Material.BEDROCK) + { + if (y == 0 || UtilMath.random.nextBoolean()) + { + toExplode.add(block); + toFire.add(block); + } + } + else if (block.getType() == Material.AIR) + { + toFire.add(block); + } + } + } } } Wizards.getArcadeManager().GetExplosion().BlockExplosion(toExplode, b.getLocation(), false); + + for (Block block : toFire) + { + if (UtilMath.random.nextBoolean()) + { + block.setType(Material.FIRE); + } + } } }, 8); @@ -96,11 +120,12 @@ public class SpellLightningStrike extends Spell implements SpellClick event.getEntity().setFireTicks(80); + Player player = (Player) lightning.getMetadata("Damager").get(0).value(); + Wizards.getArcadeManager() .GetDamage() - .NewDamageEvent((LivingEntity) event.getEntity(), - (Player) lightning.getMetadata("Damager").get(0).value(), null, DamageCause.LIGHTNING, 6, - false, true, false, "Lightning Strike", null); + .NewDamageEvent((LivingEntity) event.getEntity(), player, null, DamageCause.LIGHTNING, + 4 + (4 * getSpellLevel(player)), false, true, false, "Lightning Strike", "Lightning Strike"); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java index a3cded7a2..e45de2f8e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java @@ -24,7 +24,7 @@ public class SpellMagicMissile extends Spell implements SpellClick final Location missileLocation = player.getEyeLocation(); final Location shotFrom = missileLocation.clone(); final Vector direction = missileLocation.getDirection().normalize().multiply(0.3); - final int maxRange = 15 * getSpellLevel(player); + final int maxRange = 20 + (10 * getSpellLevel(player)); final int maxDings = maxRange * 3; final int damage = 4 + (getSpellLevel(player) * 2); @@ -54,8 +54,8 @@ public class SpellMagicMissile extends Spell implements SpellClick if (entity != player && (!(entity instanceof Player) || Wizards.IsAlive(entity))) { - Wizards.Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.CUSTOM, damage, - true, true, false, "Magic Missile", null); + Wizards.Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.MAGIC, damage, + true, true, false, "Magic Missile", "Magic Missile"); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java index 6223a68db..22f30e55b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java @@ -34,15 +34,19 @@ public class SpellNapalm extends Spell implements SpellClick _glazedBlocks.put(Material.GRASS, Material.DIRT); _glazedBlocks.put(Material.FENCE, Material.NETHER_FENCE); _glazedBlocks.put(Material.WOOD_STAIRS, Material.NETHER_BRICK_STAIRS); + _glazedBlocks.put(Material.SMOOTH_STAIRS, Material.NETHER_BRICK_STAIRS); _glazedBlocks.put(Material.SAND, Material.GLASS); + _glazedBlocks.put(Material.SMOOTH_BRICK, Material.NETHER_BRICK); + _glazedBlocks.put(Material.LOG, Material.NETHERRACK); + _glazedBlocks.put(Material.LOG_2, Material.NETHERRACK); } @Override public void castSpell(final Player player) { - final int length = 4 + (10 * getSpellLevel(player)); + final int length = 5 + (10 * getSpellLevel(player)); - final Vector vector = player.getLocation().getDirection().normalize().multiply(0.3); + final Vector vector = player.getLocation().getDirection().normalize().multiply(0.12); final Location playerLoc = player.getLocation().add(0, 2, 0); final Location napalmLoc = playerLoc.clone().add(playerLoc.getDirection().normalize().multiply(2)); @@ -58,7 +62,6 @@ public class SpellNapalm extends Spell implements SpellClick public void run() { Random r = new Random(); - napalmLoc.add(vector); if (!UtilBlock.airFoliage(napalmLoc.getBlock())) @@ -98,135 +101,142 @@ public class SpellNapalm extends Spell implements SpellClick 0.1F, 1, 0); } - for (Entity entity : napalmLoc.getWorld().getEntities()) + if (lastTick % 3 == 0) { - if (!UtilPlayer.isSpectator(entity)) + for (Entity entity : napalmLoc.getWorld().getEntities()) { - double heat = (size * 1.1) - entity.getLocation().distance(napalmLoc); - - if (heat > 0) + if (!UtilPlayer.isSpectator(entity)) { - if (heat > 1) - { - if (entity instanceof LivingEntity) - { - Wizards.getArcadeManager() - .GetDamage() - .NewDamageEvent((LivingEntity) entity, player, null, DamageCause.CUSTOM, heat / 2, - false, true, true, "Napalm", null); - } - else - { - entity.remove(); - continue; - } - } + double heat = (size * 1.1) - entity.getLocation().distance(napalmLoc); - if (entity instanceof LivingEntity && !UtilPlayer.isSpectator(entity) - && entity.getFireTicks() < heat * 40) + if (heat > 0) { - entity.setFireTicks((int) (heat * 40)); + if (lastTick % 10 == 0 && heat > 1) + { + if (entity instanceof LivingEntity) + { + Wizards.getArcadeManager() + .GetDamage() + .NewDamageEvent((LivingEntity) entity, player, null, DamageCause.FIRE, heat / 2, + false, true, true, "Napalm", "Napalm"); + } + else + { + entity.remove(); + continue; + } + } + + if (entity instanceof LivingEntity && !UtilPlayer.isSpectator(entity) + && entity.getFireTicks() < heat * 40) + { + entity.setFireTicks((int) (heat * 40)); + } } } } - } - int bSize = (int) Math.ceil(size * 0.75); + int bSize = (int) Math.ceil(size * 0.75); - for (int y = -bSize; y <= bSize; y++) - { - if (napalmLoc.getBlockY() + y < 256 && napalmLoc.getBlockY() + y > 0) + for (int y = -bSize; y <= bSize; y++) { - for (int x = -bSize; x <= bSize; x++) + if (napalmLoc.getBlockY() + y < 256 && napalmLoc.getBlockY() + y > 0) { - for (int z = -bSize; z <= bSize; z++) + for (int x = -bSize; x <= bSize; x++) { - Block block = napalmLoc.clone().add(x, y, z).getBlock(); - - if (litOnFire.contains(block)) + for (int z = -bSize; z <= bSize; z++) { - continue; - } + Block block = napalmLoc.clone().add(x, y, z).getBlock(); - if (UtilMath.offset(block.getLocation().add(0.5, 0.5, 0.5), playerLoc) < 2.5) - { - continue; - } - - double heat = bSize - UtilMath.offset(block.getLocation().add(0.5, 0.5, 0.5), napalmLoc); - - if (heat > 0) - { - if (block.getType() != Material.AIR) + if (litOnFire.contains(block)) { - float strength = net.minecraft.server.v1_7_R4.Block.getById(block.getTypeId()).a( - (net.minecraft.server.v1_7_R4.Entity) null) * 0.7F; + continue; + } - if (strength * 2 > size) - { - litOnFire.add(block); - continue; - } + if (UtilMath.offset(block.getLocation().add(0.5, 0.5, 0.5), playerLoc) < 2.5) + { + continue; + } - if (strength <= heat) - { - block.setType(Material.AIR); + double heat = bSize - UtilMath.offset(block.getLocation().add(0.5, 0.5, 0.5), napalmLoc); - block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, - 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); - } - else if (strength / 6 <= heat) + if (heat > 0) + { + if (block.getType() != Material.AIR) { - if (_glazedBlocks.containsKey(block.getType())) + float strength = net.minecraft.server.v1_7_R4.Block.getById(block.getTypeId()).a( + (net.minecraft.server.v1_7_R4.Entity) null) * 0.7F; + + if (strength * 2 > size) { - block.setType(_glazedBlocks.get(block.getType())); + litOnFire.add(block); + continue; + } + + if (strength <= heat) + { + block.setType(Material.AIR); block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); } - } - } - - if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER) - { - if (heat > 1) - { - block.setType(Material.AIR); - - block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, 0); - } - } - - if (block.getType() == Material.AIR) - { - for (int a = 0; a < 6; a++) - { - Block b = block.getRelative(BlockFace.values()[a]); - - if (b.getType() != Material.AIR) + else if (strength / 6 <= heat) { - block.setType(Material.FIRE); - block.getWorld().playSound(block.getLocation(), Sound.DIG_WOOL, 1.3F, - 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); + if (_glazedBlocks.containsKey(block.getType())) + { + block.setType(_glazedBlocks.get(block.getType())); - break; + block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, + 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); + } } } - litOnFire.add(block); + if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER) + { + if (heat > 1) + { + block.setType(Material.AIR); + + block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, 0); + } + } + + if (block.getType() == Material.AIR) + { + if (UtilMath.random.nextBoolean()) + { + for (int a = 0; a < 6; a++) + { + Block b = block.getRelative(BlockFace.values()[a]); + + if (b.getType() != Material.AIR) + { + block.setType(Material.FIRE); + block.getWorld().playSound(block.getLocation(), Sound.DIG_WOOL, 1.3F, + 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); + + break; + } + } + } + + litOnFire.add(block); + } } } } } } + + size = Math.min(8, size + 0.06); } - blocksTravelled += 0.3; - size = Math.min(8, size + 0.06); + blocksTravelled += 0.12; - if (lastTick++ % 6 == 0) + if (lastTick++ % 8 == 0) { - napalmLoc.getWorld().playSound(napalmLoc, Sound.CAT_HISS, (float) Math.min(2.2, size * 0.5), 0F); + napalmLoc.getWorld().playSound(napalmLoc, Sound.CAT_HISS, (float) Math.min(2.2, size * 0.4), 0F); } if (blocksTravelled >= length) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java index 7203e30d3..a8683dd02 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java @@ -49,8 +49,8 @@ public class SpellRainbowBeam extends Spell implements SpellClick // The above code makes the beam appear to hit them where you aimed. Wizards.getArcadeManager() .GetDamage() - .NewDamageEvent((LivingEntity) entityTarget, p, null, DamageCause.CUSTOM, damage, true, true, false, - "Rainbow Beam", null); + .NewDamageEvent((LivingEntity) entityTarget, p, null, DamageCause.MAGIC, damage, true, true, false, + "Rainbow Beam", "Rainbow Beam"); p.playSound(entityTarget.getLocation(), Sound.LEVEL_UP, (getSpellLevel(p) * 2) + 6, 1); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java index dcaf7c0a7..d9aa685a2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java @@ -118,7 +118,7 @@ public class SpellRainbowRoad extends Spell implements SpellClick for (Block b : bs) { - if (UtilBlock.solid(b)) + if (!_wallExpires.containsKey(block) && UtilBlock.solid(b)) { continue; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java index c62991e6e..59d85e116 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java @@ -158,9 +158,9 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick { Wizards.getArcadeManager() .GetDamage() - .NewDamageEvent(entity, player, null, DamageCause.CUSTOM, + .NewDamageEvent(entity, player, null, DamageCause.ENTITY_EXPLOSION, (1 + (spellLevel / 5D)) * (2 - dist), true, true, false, "Rumble Explosion", - null); + "Rumble Explosion"); } } } @@ -270,10 +270,10 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick } double height = loc.getY() - b.getY(); - if (height >= 0 && height <= 2) + if (height >= 0 && height <= 3) { Wizards.Manager.GetDamage().NewDamageEvent((LivingEntity) entity, player, null, - DamageCause.CUSTOM, damage, true, true, false, "Rumble", null); + DamageCause.CONTACT, damage, true, true, false, "Rumble", "Rumble"); if (entity instanceof Player) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java index 02ec271f6..1e9f86dba 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java @@ -28,7 +28,7 @@ public class SpellSpectralArrow extends Spell implements SpellClick public void castSpell(Player player) { Arrow arrow = player.launchProjectile(Arrow.class); - arrow.setVelocity(arrow.getVelocity().multiply(2.5)); + arrow.setVelocity(arrow.getVelocity().multiply(3)); arrow.setMetadata("SpellLevel", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), getSpellLevel(player))); ((CraftArrow) arrow).getHandle().fromPlayer = 0; @@ -93,9 +93,8 @@ public class SpellSpectralArrow extends Spell implements SpellClick int spellLevel = event.GetProjectile().getMetadata("SpellLevel").get(0).asInt(); event.AddMod("Negate Damage", "Negate Damage", -event.GetDamage(), false); - event.AddMod("Spectral Arrow", "Spectral Arrow", - Math.max(4, loc[0].distance(event.GetDamageeEntity().getLocation()) / (7D - spellLevel)), true); + event.AddMod("Spectral Arrow", "Spectral Arrow", 6 + loc[0].distance(event.GetDamageeEntity().getLocation()) + / (7D - spellLevel), true); } } - } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSummonWolves.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSummonWolves.java index 0e6a12300..d1805417a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSummonWolves.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSummonWolves.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.wizards.spells; import java.util.HashMap; import java.util.Iterator; +import java.util.Random; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; @@ -29,136 +30,137 @@ import org.bukkit.event.EventHandler; public class SpellSummonWolves extends Spell implements SpellClick, SpellClickBlock { - private HashMap _summonedWolves = new HashMap(); + private HashMap _summonedWolves = new HashMap(); - @Override - public void castSpell(Player player, Block block) - { - block = block.getRelative(BlockFace.UP); + @Override + public void castSpell(Player player, Block block) + { + block = block.getRelative(BlockFace.UP); - if (!UtilBlock.airFoliage(block)) - { - block = player.getLocation().getBlock(); - } + if (!UtilBlock.airFoliage(block)) + { + block = player.getLocation().getBlock(); + } - Location loc = block.getLocation().add(0.5, 0, 0.5); + Location loc = block.getLocation().add(0.5, 0, 0.5); - for (int i = 0; i < getSpellLevel(player); i++) - { - Wizards.CreatureAllowOverride = true; + for (int i = 0; i < getSpellLevel(player); i++) + { + Wizards.CreatureAllowOverride = true; - Wolf wolf = (Wolf) player.getWorld().spawnEntity(loc, EntityType.WOLF); + Wolf wolf = (Wolf) player.getWorld().spawnEntity( + loc.clone().add(new Random().nextFloat() - 0.5F, 0, new Random().nextFloat() - 0.5F), EntityType.WOLF); - Wizards.CreatureAllowOverride = false; + Wizards.CreatureAllowOverride = false; - wolf.setCollarColor(DyeColor.YELLOW); - wolf.setTamed(true); - wolf.setOwner(player); - wolf.setBreed(false); - wolf.setCustomName(player.getDisplayName() + "'s Wolf"); - wolf.setRemoveWhenFarAway(false); - wolf.setMaxHealth(0.5); - wolf.setHealth(0.5); + wolf.setCollarColor(DyeColor.YELLOW); + wolf.setTamed(true); + wolf.setOwner(player); + wolf.setBreed(false); + wolf.setCustomName(player.getDisplayName() + "'s Wolf"); + wolf.setRemoveWhenFarAway(false); + wolf.setMaxHealth(0.5); + wolf.setHealth(0.5); - _summonedWolves.put(wolf, System.currentTimeMillis() + (30L * 1000L)); - } + _summonedWolves.put(wolf, System.currentTimeMillis() + (30L * 1000L)); + } - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc, 0.8F, 0, 0.8F, 0, 4); - player.getWorld().playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1.2F, 1); - charge(player); - } + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc, 0.8F, 0, 0.8F, 0, 4); + player.getWorld().playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1.2F, 1); + charge(player); + } - @EventHandler - public void onDamage(CustomDamageEvent event) - { - if (event.GetDamagerEntity(false) instanceof Wolf) - { - Wolf wolf = (Wolf) event.GetDamagerEntity(false); - event.AddMult("Summoned Wolf", "Summoned Wolf", 0.3, true); - - AnimalTamer tamer = wolf.getOwner(); - if (tamer instanceof Player) - { - event.SetDamager((Player) tamer); - event.setKnockbackOrigin(wolf.getLocation()); - } - } - } + @EventHandler + public void onDamage(CustomDamageEvent event) + { + if (event.GetDamagerEntity(false) instanceof Wolf) + { + Wolf wolf = (Wolf) event.GetDamagerEntity(false); + event.AddMult("Summoned Wolf", "Summoned Wolf", 0.3, true); - @EventHandler - public void onSecond(UpdateEvent event) - { - if (event.getType() == UpdateType.SEC) - { + AnimalTamer tamer = wolf.getOwner(); + if (tamer instanceof Player) + { + event.SetDamager((Player) tamer); + event.setKnockbackOrigin(wolf.getLocation()); + } + } + } - Iterator itel = _summonedWolves.keySet().iterator(); + @EventHandler + public void onSecond(UpdateEvent event) + { + if (event.getType() == UpdateType.SEC) + { - while (itel.hasNext()) - { - Wolf wolf = itel.next(); - AnimalTamer wolfOwner = wolf.getOwner(); + Iterator itel = _summonedWolves.keySet().iterator(); - if (!wolf.isValid() || _summonedWolves.get(wolf) < System.currentTimeMillis() || !(wolfOwner instanceof Player) - || !Wizards.IsAlive((Entity) wolfOwner)) - { - if (wolf.isValid()) - { - wolf.getWorld().playEffect(wolf.getLocation(), Effect.EXPLOSION_HUGE, 0); - } + while (itel.hasNext()) + { + Wolf wolf = itel.next(); + AnimalTamer wolfOwner = wolf.getOwner(); - wolf.remove(); - itel.remove(); - } - else - { + if (!wolf.isValid() || _summonedWolves.get(wolf) < System.currentTimeMillis() || !(wolfOwner instanceof Player) + || !Wizards.IsAlive((Entity) wolfOwner)) + { + if (wolf.isValid()) + { + wolf.getWorld().playEffect(wolf.getLocation(), Effect.EXPLOSION_HUGE, 0); + } - if (wolf.getTarget() == null || !wolf.getTarget().isValid() || !Wizards.IsAlive(wolf.getTarget()) - || wolf.getTarget().getLocation().distance(wolf.getLocation()) > 16) - { + wolf.remove(); + itel.remove(); + } + else + { - double dist = 0; - Player target = null; + if (wolf.getTarget() == null || !wolf.getTarget().isValid() || !Wizards.IsAlive(wolf.getTarget()) + || wolf.getTarget().getLocation().distance(wolf.getLocation()) > 16) + { - for (Player player : Wizards.GetPlayers(true)) - { + double dist = 0; + Player target = null; - if (!player.equals(wolfOwner)) - { + for (Player player : Wizards.GetPlayers(true)) + { - double newDist = player.getLocation().distance(wolf.getLocation()); + if (!player.equals(wolfOwner)) + { - if (newDist < 16 && (target == null || dist > newDist)) - { - dist = newDist; - target = player; - } - } - } + double newDist = player.getLocation().distance(wolf.getLocation()); - if (target != null) - { - wolf.setTarget(target); - } - else - { - Location loc = ((Player) wolfOwner).getLocation(); + if (newDist < 16 && (target == null || dist > newDist)) + { + dist = newDist; + target = player; + } + } + } - if (loc.distance(wolf.getLocation()) > 16) - { - wolf.teleport(loc); - } - } + if (target != null) + { + wolf.setTarget(target); + } + else + { + Location loc = ((Player) wolfOwner).getLocation(); - } - } - } + if (loc.distance(wolf.getLocation()) > 16) + { + wolf.teleport(loc); + } + } - } - } + } + } + } - @Override - public void castSpell(Player player) - { - castSpell(player, player.getLocation().getBlock().getRelative(BlockFace.DOWN)); - } + } + } + + @Override + public void castSpell(Player player) + { + castSpell(player, player.getLocation().getBlock().getRelative(BlockFace.DOWN)); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java index 0e5607392..fc1b29dfe 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java @@ -13,7 +13,9 @@ import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import nautilus.game.arcade.game.games.wizards.spells.subclasses.TrapRune; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -48,9 +50,12 @@ public class SpellTrapRune extends Spell implements SpellClick { Location loc = list.get(0).getLocation().add(0.5, 0, 0.5); - float trapSize = Math.max(1, getSpellLevel(p) * 0.8F); + if (loc.getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) + { + return; + } - TrapRune rune = new TrapRune(Wizards, p, loc, trapSize); + TrapRune rune = new TrapRune(Wizards, p, loc, getSpellLevel(p)); if (!rune.isValid()) { p.sendMessage(C.cGreen + "Cannot draw rune on wall"); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java index b6237accc..c3763e50b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWebShot.java @@ -1,8 +1,11 @@ package nautilus.game.arcade.game.games.wizards.spells; +import java.util.HashMap; +import java.util.Map.Entry; + import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; @@ -49,15 +52,13 @@ public class SpellWebShot extends Spell implements SpellClick, IThrown if (Wizards.IsAlive(player)) { - // Boost - org.bukkit.entity.Item ent = player.getWorld().dropItem( player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.WEB, (byte) 0, 1, "Web " + player.getName() + " " + System.currentTimeMillis())); UtilAction.velocity(ent, player.getLocation().getDirection(), 1.5, false, 0, 0.2, 10, false); - Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2d); + Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2f); player.getWorld().playSound(player.getLocation(), Sound.CLICK, 1.2F, 0.8F); } @@ -68,39 +69,102 @@ public class SpellWebShot extends Spell implements SpellClick, IThrown { if (target != data.GetThrower()) { + Location loc = data.GetThrown().getLocation(); + if (target != null) { - data.GetThrown().remove(); + Location l = target.getLocation(); + + l.setY(loc.getY()); + + if (!UtilBlock.airFoliage(getValidLocation(l))) + { + l = target.getLocation().add(0, UtilMath.random.nextFloat(), 0); + + if (UtilBlock.airFoliage(getValidLocation(l))) + { + loc = l; + } + } + else + { + loc = l; + } // Damage Event Wizards.getArcadeManager() .GetDamage() .NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 2, false, false, false, - "Web Shot", null); + "Web Shot", "Web Shot"); } - Web(data); + Web(data, loc); } } + private Block getValidLocation(Location loc) + { + double[] doubles = new double[] + { + 0, -0.5, 0.5 + }; + + HashMap commonBlocks = new HashMap(); + int most = 0; + + for (double x : doubles) + { + for (double y : doubles) + { + for (double z : doubles) + { + Block b = loc.clone().add(x, y, z).getBlock(); + + if (UtilBlock.airFoliage(b)) + { + int amount = (commonBlocks.containsKey(b) ? commonBlocks.get(b) : 0) + 1; + + commonBlocks.put(b, amount); + + if (amount > most) + { + most = amount; + } + } + } + } + } + + for (Entry entry : commonBlocks.entrySet()) + { + if (entry.getValue() == most) + { + return entry.getKey(); + } + } + + return loc.getBlock(); + } + @Override public void Idle(ProjectileUser data) { - Web(data); + Web(data, data.GetThrown().getLocation()); } @Override public void Expire(ProjectileUser data) { - Web(data); + Web(data, data.GetThrown().getLocation()); } - public void Web(ProjectileUser data) + public void Web(ProjectileUser data, Location loc) { - Location loc = data.GetThrown().getLocation(); data.GetThrown().remove(); - if (data.GetThrown().getTicksLived() > 3 && UtilBlock.airFoliage(loc.getBlock())) - loc.getBlock().setType(Material.WEB); + Block block = getValidLocation(loc); + + if (UtilBlock.airFoliage(block)) + block.setType(Material.WEB); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java index a07cd34c7..73abced3d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java @@ -24,6 +24,7 @@ public class TrapRune private Player _runeCaster; private int _ticksLived; private Wizards _wizards; + private int _spellLevel; public boolean onRuneTick() { @@ -74,12 +75,13 @@ public class TrapRune return false; } - public TrapRune(Wizards wizards, Player player, Location location, float runeSize) + public TrapRune(Wizards wizards, Player player, Location location, int spellLevel) { _wizards = wizards; _runeCaster = player; _runeLocation = location; - _runeSize = runeSize; + _spellLevel = spellLevel; + _runeSize = Math.max(1, spellLevel * 0.8F); } public void initialParticles() @@ -170,6 +172,8 @@ public class TrapRune explosion.setFallingBlockExplosion(true); explosion.setDropItems(false); + + explosion.setMaxDamage((_spellLevel * 4) + 6); explosion.explode(); From be21968805c5c34b4e7b4c6882fa00ead26d00dc Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 12 Apr 2015 23:20:52 +1200 Subject: [PATCH 014/104] UtilBlock: Added a method that may or may not tell you the blocks destroyed in an explosion --- .../mineplex/core/common/util/UtilBlock.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java index a1d040f18..fec6f0710 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java @@ -4,11 +4,16 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import net.minecraft.server.v1_7_R4.Blocks; +import net.minecraft.server.v1_7_R4.MathHelper; +import net.minecraft.server.v1_7_R4.WorldServer; + import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; import org.bukkit.inventory.ItemStack; public class UtilBlock @@ -377,6 +382,74 @@ public class UtilBlock return block.getRelative(BlockFace.UP); } + + /** + * + * @param location of explosion + * @param strength of explosion + * @param damageBlocksEqually - Treat all blocks as durability of dirt + * @param ensureDestruction - Ensure that the closest blocks are destroyed at least + * @return + */ + public static ArrayList getExplosionBlocks(Location location, float strength, boolean damageBlocksEqually) + { + ArrayList toExplode = new ArrayList(); + WorldServer world = ((CraftWorld) location.getWorld()).getHandle(); + + for (int i = 0; i < 16; i++) + { + for (int j = 0; j < 16; j++) + { + for (int k = 0; k < 16; k++) + { + if ((i == 0) || (i == 16 - 1) || (j == 0) || (j == 16 - 1) || (k == 0) || (k == 16 - 1)) + { + double d3 = i / (16 - 1.0F) * 2.0F - 1.0F; + double d4 = j / (16 - 1.0F) * 2.0F - 1.0F; + double d5 = k / (16 - 1.0F) * 2.0F - 1.0F; + double d6 = Math.sqrt(d3 * d3 + d4 * d4 + d5 * d5); + + d3 /= d6; + d4 /= d6; + d5 /= d6; + float f1 = strength * (0.7F + UtilMath.random.nextFloat() * 0.6F); + + double d0 = location.getX(); + double d1 = location.getY(); + double d2 = location.getZ(); + + for (float f2 = 0.3F; f1 > 0.0F; f1 -= f2 * 0.75F) + { + int l = MathHelper.floor(d0); + int i1 = MathHelper.floor(d1); + int j1 = MathHelper.floor(d2); + Block block = location.getWorld().getBlockAt(l, i1, j1); + + if (block.getType() != Material.AIR) + { + float f3 = (damageBlocksEqually ? Blocks.DIRT : world.getType(block.getX(), block.getY(), + block.getZ())).a((net.minecraft.server.v1_7_R4.Entity) null); + + f1 -= (f3 + 0.3F) * f2; + } + + if ((f1 > 0.0F) && (i1 < 256) && (i1 >= 0)) + { + toExplode.add(block); + } + + d0 += d3 * f2; + d1 += d4 * f2; + d2 += d5 * f2; + } + } + } + } + } + + return toExplode; + } + public static ArrayList getSurrounding(Block block, boolean diagonals) { ArrayList blocks = new ArrayList(); From 12b3a582b20303f9d81c08bf4423ddae1d4ed4b0 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 12 Apr 2015 23:21:19 +1200 Subject: [PATCH 015/104] CustomExplosion: Fixed loop, added max damage --- .../game/core/explosion/CustomExplosion.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java index fb70dbd68..4cdf04c68 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java @@ -52,6 +52,7 @@ public class CustomExplosion extends Explosion private float _damage; private boolean _useCustomDamage; private int _maxFallingBlocks = -1; + private float _maxDamage = 1000; public CustomExplosion(DamageManager manager, mineplex.core.explosion.Explosion explosion, Location loc, float explosionSize, String deathCause) @@ -76,6 +77,13 @@ public class CustomExplosion extends Explosion return this; } + public CustomExplosion setMaxDamage(float maxDamage) + { + _maxDamage = maxDamage; + + return this; + } + public CustomExplosion setBlockExplosionSize(float explosionSize) { _blockExplosionSize = explosionSize; @@ -242,7 +250,7 @@ public class CustomExplosion extends Explosion // Performs a raytrace that determines the percentage of solid blocks between the two double d9 = this._world.a(vec3d, entity.boundingBox); double d10 = (1.0D - d7) * d9; - int damage; + float damage; if (_useCustomDamage) { @@ -251,12 +259,13 @@ public class CustomExplosion extends Explosion else { damage = (int) ((d10 * d10 + d10) / 2.0D * 8.0D * this.size + 1.0D); + damage = Math.min(damage, _maxDamage); } if (entity.getBukkitEntity() instanceof LivingEntity) { _manager.NewDamageEvent((LivingEntity) entity.getBukkitEntity(), _owner, null, - DamageCause.ENTITY_EXPLOSION, damage, true, _ignoreRate, false, _damageReason, null); + DamageCause.ENTITY_EXPLOSION, damage, true, _ignoreRate, false, _damageReason, _damageReason); } else { @@ -331,13 +340,15 @@ public class CustomExplosion extends Explosion { Collection blocks = event.GetBlocks(); - if (_maxFallingBlocks != -1) + if (blocks.size() > _maxFallingBlocks) { blocks = new ArrayList(blocks); Collections.shuffle((ArrayList) blocks); - while (blocks.size() > Math.max(0, _maxFallingBlocks)) + int toRemove = blocks.size() - _maxFallingBlocks; + + for (int i = 0; i < toRemove; i++) { blocks.remove(0); } From 073c7d16c2230297ee727537d28c651614e99a72 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Mon, 13 Apr 2015 15:06:52 +1200 Subject: [PATCH 016/104] Wizards Napalm: Make glazed blocks more common, raise damage --- .../arcade/game/games/wizards/spells/SpellNapalm.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java index 22f30e55b..4e29e469d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java @@ -111,14 +111,14 @@ public class SpellNapalm extends Spell implements SpellClick if (heat > 0) { - if (lastTick % 10 == 0 && heat > 1) + if (lastTick % 10 == 0 && heat > 0.2) { if (entity instanceof LivingEntity) { Wizards.getArcadeManager() .GetDamage() - .NewDamageEvent((LivingEntity) entity, player, null, DamageCause.FIRE, heat / 2, - false, true, true, "Napalm", "Napalm"); + .NewDamageEvent((LivingEntity) entity, player, null, DamageCause.FIRE, + heat / 1.5, false, true, true, "Napalm", "Napalm"); } else { @@ -180,7 +180,7 @@ public class SpellNapalm extends Spell implements SpellClick block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); } - else if (strength / 6 <= heat) + else if (strength / 10 <= heat) { if (_glazedBlocks.containsKey(block.getType())) { From 8803941bd821498cf9d9c4dcd011251dc55f5d7a Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 16 Apr 2015 05:51:08 +1200 Subject: [PATCH 017/104] Wizards: More changes as per demand. --- .../core/common/util/UtilParticle.java | 2 +- .../game/games/wizards/SpellButton.java | 1 + .../game/games/wizards/SpellMenuPage.java | 163 +++++++++--------- .../arcade/game/games/wizards/SpellType.java | 56 +++--- .../arcade/game/games/wizards/Wizards.java | 79 ++++----- .../game/games/wizards/spells/SpellGust.java | 40 +++-- .../games/wizards/spells/SpellIceShards.java | 91 ++++------ .../games/wizards/spells/SpellImplode.java | 2 +- .../wizards/spells/SpellLightningStrike.java | 2 +- .../wizards/spells/SpellMagicMissile.java | 57 +++++- .../games/wizards/spells/SpellNapalm.java | 4 +- .../wizards/spells/SpellSpectralArrow.java | 5 +- .../wizards/spells/SpellWizardsCompass.java | 24 +-- 13 files changed, 274 insertions(+), 252 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index ce29258a9..0cd02d837 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -96,7 +96,7 @@ public class UtilParticle PORTAL("portal"), /** - * Can be colored if count is 0, color is RGB and depends on the offset of xyz + * Can be colored if count is 0, color is RGB and depends on the offset of xyz. Offset y if 0 will default to 1, counter by making it 0.0001 */ RED_DUST("reddust"), diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java index c6aaeaab4..3d3134bc8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java @@ -41,6 +41,7 @@ public class SpellButton implements IButton _spellPage.getWizards().drawUtilTextBottom(player); _spellPage.getWizards().changeWandsTitles(player); + player.closeInventory(); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java index a623eb102..71b0faa30 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java @@ -15,94 +15,103 @@ import org.bukkit.entity.Player; public class SpellMenuPage extends ShopPageBase { - private Wizards _wizard; + private Wizards _wizard; - public SpellMenuPage(WizardSpellMenu plugin, WizardSpellMenuShop shop, CoreClientManager clientManager, - DonationManager donationManager, Player player, Wizards wizard) - { - super(plugin, shop, clientManager, donationManager, "Spell Menu", player); - _wizard = wizard; - buildPage(); - } + public SpellMenuPage(WizardSpellMenu plugin, WizardSpellMenuShop shop, CoreClientManager clientManager, + DonationManager donationManager, Player player, Wizards wizard) + { + super(plugin, shop, clientManager, donationManager, "Spell Menu", player); + _wizard = wizard; + buildPage(); + } - @Override - protected void buildPage() - { - Wizard wizard = getWizards().getWizard(getPlayer()); + @Override + protected void buildPage() + { + Wizard wizard = getWizards().getWizard(getPlayer()); - ArrayList usedNumbers = new ArrayList(); + ArrayList usedNumbers = new ArrayList(); - for (SpellElement ele : SpellElement.values()) - { - addItem(ele.getSlot(), new ShopItem(ele.getIcon(), ele.name(), ele.name(), 1, true, true)); + for (SpellElement ele : SpellElement.values()) + { + addItem(ele.getSlot(), new ShopItem(ele.getIcon(), ele.name(), ele.name(), 1, true, true)); - for (int i = ele.getFirstSlot(); i <= ele.getSecondSlot(); i++) - { - usedNumbers.add(i); - } - } + for (int i = ele.getFirstSlot(); i <= ele.getSecondSlot(); i++) + { + usedNumbers.add(i); + } + } - for (int i = 0; i < 54; i++) - { - SpellType spell = null; - for (SpellType spells : SpellType.values()) - { - if (spells.getSlot() == i) - { - spell = spells; - break; - } - } + for (int i = 0; i < 54; i++) + { + SpellType spell = null; + for (SpellType spells : SpellType.values()) + { + if (spells.getSlot() == i) + { + spell = spells; + break; + } + } - if (usedNumbers.contains(i % 9) && spell != null) - { + if (usedNumbers.contains(i % 9) && spell != null) + { - int spellLevel = wizard == null ? 1 : wizard.getSpellLevel(spell); + int spellLevel = wizard == null ? 1 : wizard.getSpellLevel(spell); - if (spellLevel > 0) - { - ItemBuilder builder = new ItemBuilder(spell.getSpellItem()); - builder.setTitle(spell.getElement().getColor() + spell.getSpellName()); - builder.addLore(""); - builder.addLore(C.cBlue + C.Bold + "Spell Level: " + C.cWhite + spellLevel); - builder.addLore(C.cBlue + C.Bold + "Mana Cost: " + C.cWhite - + (wizard == null ? spell.getBaseManaCost() : spell.getManaCost(wizard))); - builder.addLore(C.cBlue + C.Bold + "Cooldown: " + C.cWhite - + (wizard == null ? spell.getBaseCooldown() : spell.getSpellCooldown(wizard)) + " seconds"); - builder.addLore(""); + if (spellLevel > 0) + { + ItemBuilder builder = new ItemBuilder(spell.getSpellItem()); - for (String lore : spell.getDesc()) - { - builder.addLore(C.cGray + lore, 35); - } + builder.setTitle(spell.getElement().getColor() + spell.getSpellName()); - if (wizard == null) - { - addItem(i, new ShopItem(builder.build(), spell.name(), spell.name(), 1, true, true)); - } - else - { - addButton(i, new ShopItem(builder.build(), spell.name(), spell.name(), 1, true, true), new SpellButton( - this, spell)); - } - } - else - { - addItem(i, new ShopItem(new ItemBuilder(Material.INK_SACK, 1, (byte) 8).setTitle(C.cRed + C.Bold + "Unknown") - .build(), "Unknown", "Unknown", 1, true, true)); - } - } - else if (!usedNumbers.contains(i % 9)) - { - addItem(i, new ShopItem(new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (byte) 15).setTitle(C.cRed + "").build(), - "No Item", "No Item", 1, true, true)); - } - } - } + builder.addLore(""); + builder.addLore(C.cBlue + C.Bold + "Spell Level: " + C.cWhite + spellLevel); + builder.addLore(C.cBlue + C.Bold + "Mana Cost: " + C.cWhite + + (wizard == null ? spell.getBaseManaCost() : spell.getManaCost(wizard))); + builder.addLore(C.cBlue + C.Bold + "Cooldown: " + C.cWhite + + (wizard == null ? spell.getBaseCooldown() : spell.getSpellCooldown(wizard)) + " seconds"); + builder.addLore(""); - public Wizards getWizards() - { - return _wizard; - } + for (String lore : spell.getDesc()) + { + builder.addLore(C.cGray + lore, 40); + } + + if (wizard == null) + { + addItem(i, new ShopItem(builder.build(), spell.name(), spell.name(), 1, true, true)); + } + else + { + + builder.addLore(""); + + builder.addLore(C.cPurple + C.Bold + "LEFT CLICK" + C.cDGreen + " Bind to Wand"); + + builder.addLore(C.cGreen + C.Bold + "RIGHT CLICK" + C.cBlue + " Quickcast Spell"); + + addButton(i, new ShopItem(builder.build(), spell.name(), spell.name(), 1, true, true), new SpellButton( + this, spell)); + } + } + else + { + addItem(i, new ShopItem(new ItemBuilder(Material.INK_SACK, 1, (byte) 8).setTitle(C.cRed + C.Bold + "Unknown") + .build(), "Unknown", "Unknown", 1, true, true)); + } + } + else if (!usedNumbers.contains(i % 9)) + { + addItem(i, new ShopItem(new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (byte) 15).setTitle(C.cRed + "").build(), + "No Item", "No Item", 1, true, true)); + } + } + } + + public Wizards getWizards() + { + return _wizard; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java index 30a458ac4..482019008 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java @@ -122,25 +122,6 @@ public enum SpellType // ❤ "Use this! Heal yourself up!"), - /*Drain(SpellElement.MISC, // Spell element - "Drain", // Spell name - new ItemStack(Material.BUCKET), // Spell icon - SpellDrain.class, // Spell class - 3, // Spell max level - 30, // Mana cost - 20, // Spell cooldown - -3, // Mana cost change per level - -4, // Cooldown change per level - 3, // Item amount in loot - - "", - - "Right click other players with this spell", - - "to empty their mana reserves!", TODO Make this area based and drain completely of mana or a rune and drain passively. - - "You gain a third of the absorbed mana!"),*/ - IcePrison(SpellElement.MISC, // Spell element "Ice Prison", // Spell name new ItemStack(Material.ICE), // Spell icon @@ -178,11 +159,11 @@ public enum SpellType // ❤ "", "Overwhelm your opponent with shards!", - + "Each shard is fired half a second after", - + "the last allowing you to pummel your", - + "enemies senseless!"), Implode(SpellElement.MISC, // Spell element @@ -246,9 +227,8 @@ public enum SpellType // ❤ "", - "The basic spell all beginner mages are taught.", - - "This creates a magic missile that is commonly attributed to the magic profession."), + "Basic spell all beginner mages are taught," + " this creates a magic missile commonly attributed towards " + + "the magic profession and homes in towards the closest target!"), Napalm(SpellElement.ATTACK, // Spell element "Napalm", // Spell name @@ -288,11 +268,15 @@ public enum SpellType // ❤ "", - "Finally you too can be a", + "Firing rainbow beams of love and hope!", - "magical girl of love and hope!", + "This spell damages the target instantly!", - "* Damage lowers after 30 blocks!"), + "The thing is, to make this fit in with our", + + "budget the damage will decrease after", + + "30 blocks by 0.2 damage per block!"), RainbowRoad(SpellElement.MISC, // Spell element "Rainbow Road", // Spell name @@ -319,16 +303,14 @@ public enum SpellType // ❤ SpellRumble.class, // Spell class 5, // Spell max level 30, // Mana cost - 5, // Spell cooldown + 15, // Spell cooldown 0, // Mana cost change per level - 0, // Cooldown change per level + -1, // Cooldown change per level 10, // Item amount in loot C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 2", - C.cGold + C.Bold + "Explosion Damage:", - - C.Bold + C.cWhite + "((Spell Level / 4) + 1) x (1 - (Distance / 2))", + C.cGold + C.Bold + "Explosion Damage: " + C.Bold + C.cWhite + "Spell Level / 4", C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "Spell Level x 10", @@ -645,7 +627,11 @@ public enum SpellType // ❤ public ItemStack getSpellBook(Wizards wizards) { - return makeSpell(wizards, new ItemBuilder(Material.ENCHANTED_BOOK).addLore(C.cAqua + "Click to level up this spell") + return makeSpell(wizards, + + new ItemBuilder(_item) + + .addLore(C.cAqua + "Click to level up this spell") .build()); } @@ -681,7 +667,9 @@ public enum SpellType // ❤ public ItemStack makeSpell(Wizards wizards, ItemStack item) { ItemBuilder builder = new ItemBuilder(item); + builder.setTitle(C.cDBlue + C.Bold + "Spell: " + _type._chatColor + getSpellName() + wizards.buildTime()); + return builder.build(); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 249c333af..b1905ce8e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -314,7 +314,6 @@ public class Wizards extends SoloGame if (item != null && item.getType() == Material.BLAZE_ROD) { - ItemMeta meta = item.getItemMeta(); String display; if (type != null) @@ -332,6 +331,8 @@ public class Wizards extends SoloGame display = C.cWhite + "Right click to set a spell"; } + ItemMeta meta = item.getItemMeta(); + if (!meta.hasDisplayName() || !meta.getDisplayName().equals(display)) { meta.setDisplayName(display); @@ -686,15 +687,17 @@ public class Wizards extends SoloGame Entry entry = _randomItems.get(UtilMath.r(_randomItems.size())); ItemStack item = entry.getKey().clone(); + SpellType spellType = getSpell(item); + // Every chest has a spell. - if (i > 5 && item.getType() != Material.ENCHANTED_BOOK) + if (i > 5 && spellType == null) { continue; } if (!containsSpell) { - containsSpell = item.getType() == Material.ENCHANTED_BOOK; + containsSpell = spellType != null; } item.setAmount(item.getAmount() + UtilMath.r(entry.getValue() + 1)); @@ -710,12 +713,16 @@ public class Wizards extends SoloGame if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { String title = item.getItemMeta().getDisplayName(); - title = ChatColor.stripColor(title.substring(title.split(" ")[0].length() + 1)); - for (SpellType spell : SpellType.values()) + if (title.contains(" ")) { - if (spell.getSpellName().equals(title)) - return spell; + title = ChatColor.stripColor(title.substring(title.split(" ")[0].length() + 1)); + + for (SpellType spell : SpellType.values()) + { + if (spell.getSpellName().equals(title)) + return spell; + } } } @@ -768,6 +775,7 @@ public class Wizards extends SoloGame public ItemStack makeUnusedWand() { ItemBuilder builder = new ItemBuilder(Material.BLAZE_ROD); + builder.setTitle(ChatColor.WHITE + "Spell Wand" + buildTime()); builder.addLore( @@ -868,21 +876,18 @@ public class Wizards extends SoloGame if (event.getInventory().getHolder() instanceof Chest || event.getInventory().getHolder() instanceof DoubleChest) { - if (item != null && item.getType() == Material.ENCHANTED_BOOK) + SpellType spell = getSpell(item); + + if (spell != null) { + onSpellLearn(p, spell); - SpellType spell = getSpell(item); + event.setCancelled(true); + event.setCurrentItem(new ItemStack(Material.AIR)); - if (spell != null) - { - onSpellLearn(p, spell); - - event.setCancelled(true); - event.setCurrentItem(new ItemStack(Material.AIR)); - - p.playSound(p.getLocation(), Sound.NOTE_STICKS, 0.7F, 0); - } + p.playSound(p.getLocation(), Sound.NOTE_STICKS, 0.7F, 0); } + } if (item.getType() == Material.BLAZE_ROD @@ -956,31 +961,26 @@ public class Wizards extends SoloGame { ItemStack item = event.getEntity().getItemStack(); - if (item.getType() == Material.ENCHANTED_BOOK) + SpellType spell = getSpell(item); + + if (spell != null) { + Hologram holo = new Hologram(getArcadeManager().getHologramManager(), - SpellType spell = getSpell(item); + event.getEntity().getLocation().add(0, 1, 0), - if (spell != null) - { + C.cDPurple + C.Bold + "Spellbook", - Hologram holo = new Hologram(getArcadeManager().getHologramManager(), + spell.getElement().getColor() + spell.getSpellName()); - event.getEntity().getLocation().add(0, 1, 0), + holo.setFollowEntity(event.getEntity()); - C.cDPurple + C.Bold + "Spellbook", + holo.setRemoveOnEntityDeath(); - spell.getElement().getColor() + spell.getSpellName()); + holo.start(); - holo.setFollowEntity(event.getEntity()); + _droppedWandsBooks.add(event.getEntity()); - holo.setRemoveOnEntityDeath(); - - holo.start(); - - _droppedWandsBooks.add(event.getEntity()); - - } } else if (item.getType() == Material.BLAZE_ROD) { @@ -1230,18 +1230,15 @@ public class Wizards extends SoloGame } } - else if (item.getType() == Material.ENCHANTED_BOOK) + else if (getSpell(item) != null) { SpellType spell = getSpell(item); - if (spell != null) - { - onSpellLearn(p, spell); + onSpellLearn(p, spell); - event.setCancelled(true); - event.getItem().remove(); - } + event.setCancelled(true); + event.getItem().remove(); } else if (item.getType() == Material.NETHER_STAR) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java index 5090cab29..da0c492d1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellGust.java @@ -6,6 +6,7 @@ import mineplex.core.common.util.UtilPlayer; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; +import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.util.Vector; @@ -14,27 +15,38 @@ public class SpellGust extends Spell implements SpellClick { @Override - public void castSpell(Player player) + public void castSpell(final Player player) { - Vector vector = player.getLocation().getDirection().setY(0).normalize().multiply(1.5).setY(0.3) + final Vector vector = player.getLocation().getDirection().setY(0).normalize().multiply(1.5).setY(0.3) .multiply(1.2 + (getSpellLevel(player) * 0.4D)); - HashMap effected = UtilPlayer.getPlayersInPyramid(player, 45, 10 * getSpellLevel(player)); - - for (Player target : effected.keySet()) - { - Wizards.getArcadeManager().GetCondition().Factory().Falling("Gust", target, player, 10, false, true); - - target.setVelocity(vector); - - target.getWorld().playSound(target.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F); - } + final HashMap effected = UtilPlayer.getPlayersInPyramid(player, 45, 10 * getSpellLevel(player)); if (!effected.isEmpty()) { - player.playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F); - charge(player); + + Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable() + { + public void run() + { + for (Player target : effected.keySet()) + { + if (!Wizards.IsAlive(target)) + { + continue; + } + + Wizards.getArcadeManager().GetCondition().Factory().Falling("Gust", target, player, 10, false, true); + + target.setVelocity(vector); + + target.getWorld().playSound(target.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F); + } + + player.playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F); + } + }); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java index 7fc3e4259..b4c5c2151 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java @@ -1,11 +1,16 @@ package nautilus.game.arcade.game.games.wizards.spells; +import java.util.HashMap; + import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilShapes; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -14,23 +19,19 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; +import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; public class SpellIceShards extends Spell implements SpellClick, IThrown { - // private HashMap _shardsExpire = new HashMap(); - // private HashMap, HashMap> _hitShards = new HashMap, HashMap>(); + private HashMap _lastParticles = new HashMap(); @Override public void castSpell(final Player player) { - // final ArrayList firedShards = new ArrayList(); - // _shardsExpire.put(firedShards, System.currentTimeMillis() + 60000); - // _hitShards.put(firedShards, new HashMap()); - shoot(player); for (int i = 1; i <= getSpellLevel(player); i++) @@ -51,31 +52,6 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown charge(player); } - /*@EventHandler - public void onSecond(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC) - { - return; - } - - if (!Wizards.IsLive()) - return; - - Iterator> itel = _shardsExpire.entrySet().iterator(); - - while (itel.hasNext()) - { - Entry entry = itel.next(); - - if (entry.getValue() < System.currentTimeMillis()) - { - itel.remove(); - _hitShards.remove(entry.getKey()); - } - } - }*/ - private void shoot(Player player) { @@ -88,13 +64,13 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown ItemStackFactory.Instance.CreateStack(Material.GHAST_TEAR, (byte) 0, 1, "Ice Shard " + player.getName() + " " + System.currentTimeMillis())); - // firedShards.add(ent); - - UtilAction.velocity(ent, player.getLocation().getDirection(), 2.3, false, 0, 0.2, 10, false); + UtilAction.velocity(ent, player.getLocation().getDirection(), 2, false, 0, 0.2, 10, false); Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2f); player.getWorld().playSound(player.getLocation(), Sound.CLICK, 1.2F, 0.8F); + _lastParticles.put(ent, ent.getLocation()); + } } @@ -103,25 +79,6 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown { if (target != null && target instanceof Player) { - /*String name = ((Player) target).getName(); - int timesHit = 0; - - for (Entry, HashMap> entry : _hitShards.entrySet()) - { - if (entry.getKey().contains(data.GetThrown())) - { - HashMap map = entry.getValue(); - - if (map.containsKey(name)) - { - timesHit = map.get(name); - } - - map.put(name, timesHit + 1); - - break; - } - }*/ // Damage Event Wizards.getArcadeManager() @@ -129,11 +86,6 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown .NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 4 /*+ (timesHit * 2)*/, true, true, false, "Ice Shard", "Ice Shard"); - /*if (timesHit > 0) - { - UtilPlayer.message(data.GetThrower(), "Ice Shards" + ": " + F.elem(timesHit + " Consecutive Hits") + C.cGray - + " (" + F.skill("+" + timesHit + " Damage") + C.cGray + ")"); - }*/ } handleShard(data); @@ -151,6 +103,27 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown { loc.getBlock().setType(Material.AIR); } + + _lastParticles.remove(data.GetThrown()); + } + + @EventHandler + public void onTick(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + for (Entity entity : _lastParticles.keySet()) + { + for (Location loc : UtilShapes.getLinesDistancedPoints(_lastParticles.get(entity), entity.getLocation(), 0.3)) + { + UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.SNOW_BLOCK, 0), loc, 0, 0, 0, 0, 1); + } + + _lastParticles.put(entity, entity.getLocation()); + } } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java index 4ea9000da..592e55b16 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java @@ -128,7 +128,7 @@ public class SpellImplode extends Spell implements SpellClick { cancel(); } - else if (timesRan++ >= 28) + else if (timesRan++ >= 20) { Iterator itel = effectedBlocks.iterator(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java index b185600fc..8c69f696b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java @@ -97,7 +97,7 @@ public class SpellLightningStrike extends Spell implements SpellClick } } - }, 8); + }, 20); charge(p); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java index e45de2f8e..b1b2f414b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java @@ -1,9 +1,13 @@ package nautilus.game.arcade.game.games.wizards.spells; +import java.util.ArrayList; +import java.util.Random; + import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilShapes; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -31,6 +35,7 @@ public class SpellMagicMissile extends Spell implements SpellClick new BukkitRunnable() { private int dingsDone; + private Location previousLocation = missileLocation; private void burst() { @@ -54,14 +59,33 @@ public class SpellMagicMissile extends Spell implements SpellClick if (entity != player && (!(entity instanceof Player) || Wizards.IsAlive(entity))) { - Wizards.Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.MAGIC, damage, - true, true, false, "Magic Missile", "Magic Missile"); + Wizards.Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.MAGIC, damage, true, + true, false, "Magic Missile", "Magic Missile"); } } } } - UtilParticle.PlayParticle(ParticleType.MAGIC_CRIT, missileLocation, 0.5F, 0.5F, 0.5F, 0, 40); + playParticle(missileLocation, previousLocation); + + for (int i = 0; i < 120; i++) + { + Vector vector = new Vector(new Random().nextFloat() - 0.5F, new Random().nextFloat() - 0.5F, + new Random().nextFloat() - 0.5F); + + if (vector.length() >= 1) + { + i--; + continue; + } + + Location loc = missileLocation.clone(); + + loc.add(vector.multiply(2)); + + UtilParticle.PlayParticle(ParticleType.RED_DUST, loc, -1, 1, 1, 1, 0); + } + missileLocation.getWorld().playSound(missileLocation, Sound.BAT_TAKEOFF, 1.2F, 1); cancel(); } @@ -150,10 +174,12 @@ public class SpellMagicMissile extends Spell implements SpellClick return; } + playParticle(missileLocation, previousLocation); + previousLocation = missileLocation.clone(); + dingsDone++; } - UtilParticle.PlayParticle(ParticleType.MAGIC_CRIT, missileLocation, 0, 0, 0, 0, 1); missileLocation.getWorld().playSound(missileLocation, Sound.ORB_PICKUP, 0.7F, 0); } } @@ -161,4 +187,27 @@ public class SpellMagicMissile extends Spell implements SpellClick charge(player); } + + private void playParticle(Location start, Location end) + { + final ArrayList locations = UtilShapes.getLinesDistancedPoints(start, end, 0.1); + + new BukkitRunnable() + { + int timesRan; + + public void run() + { + for (Location loc : locations) + { + UtilParticle.PlayParticle(ParticleType.RED_DUST, loc, -1, 1, 1, 1, 0); + } + + if (timesRan++ > 1) + { + cancel(); + } + } + }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 0, 0); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java index 4e29e469d..41eb6c030 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java @@ -46,7 +46,7 @@ public class SpellNapalm extends Spell implements SpellClick { final int length = 5 + (10 * getSpellLevel(player)); - final Vector vector = player.getLocation().getDirection().normalize().multiply(0.12); + final Vector vector = player.getLocation().getDirection().normalize().multiply(0.15); final Location playerLoc = player.getLocation().add(0, 2, 0); final Location napalmLoc = playerLoc.clone().add(playerLoc.getDirection().normalize().multiply(2)); @@ -232,7 +232,7 @@ public class SpellNapalm extends Spell implements SpellClick size = Math.min(8, size + 0.06); } - blocksTravelled += 0.12; + blocksTravelled += 0.15; if (lastTick++ % 8 == 0) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java index 1e9f86dba..7636ab883 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java @@ -28,8 +28,11 @@ public class SpellSpectralArrow extends Spell implements SpellClick public void castSpell(Player player) { Arrow arrow = player.launchProjectile(Arrow.class); - arrow.setVelocity(arrow.getVelocity().multiply(3)); + + arrow.setVelocity(arrow.getVelocity().multiply(2.3)); + arrow.setMetadata("SpellLevel", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), getSpellLevel(player))); + ((CraftArrow) arrow).getHandle().fromPlayer = 0; _spectralArrows.put(arrow, new Location[] diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java index c61df7e0c..fbff132c6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java @@ -29,7 +29,6 @@ public class SpellWizardsCompass extends Spell implements SpellClick public void castSpell(Player p) { Location loc = p.getEyeLocation().subtract(0, 1, 0); - ArrayList players = Wizards.GetPlayers(true); final ArrayList colors = new ArrayList(); @@ -51,21 +50,19 @@ public class SpellWizardsCompass extends Spell implements SpellClick Collections.shuffle(colors); - boolean foundSomeone = false; - - for (Player enemy : players) + for (Player enemy : Wizards.GetPlayers(true)) { - if (UtilMath.offset(p, enemy) <= 10) + if (enemy == p) { continue; } - foundSomeone = true; + final double playerDist = Math.min(7, UtilMath.offset(enemy, p)); final Vector traj = UtilAlg.getTrajectory(p.getLocation(), enemy.getEyeLocation()).multiply(0.1); final Hologram hologram = new Hologram(Wizards.getArcadeManager().getHologramManager(), loc.clone().add(0, 0.3, 0) - .add(traj.clone().normalize().multiply(7)), enemy.getName()); + .add(traj.clone().normalize().multiply(playerDist)), enemy.getName()); hologram.setHologramTarget(HologramTarget.WHITELIST); hologram.addPlayer(p); @@ -103,7 +100,7 @@ public class SpellWizardsCompass extends Spell implements SpellClick } } - if (dist <= 7 * 10) + if (dist <= playerDist * 10) { for (int a = 0; a < 2; a++) { @@ -125,15 +122,8 @@ public class SpellWizardsCompass extends Spell implements SpellClick }.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 0, 0); } - if (!foundSomeone) - { - p.sendMessage(C.cRed + "All players are less than 10 blocks from you!"); - } - else - { - p.playSound(p.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1); + p.playSound(p.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1); - charge(p); - } + charge(p); } } From 25dfeacb09a279895f0981311a013022e35dcd5b Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 16 Apr 2015 16:20:01 +1200 Subject: [PATCH 018/104] Wizards: Spell levels are now viewable on items in chest as item amount --- .../arcade/game/games/wizards/Wizards.java | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index b1905ce8e..2c261b31d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -1,11 +1,13 @@ package nautilus.game.arcade.game.games.wizards; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Map.Entry; import java.util.Random; @@ -28,6 +30,8 @@ import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.common.util.UtilWorld; import mineplex.core.hologram.Hologram; import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.packethandler.IPacketHandler; +import mineplex.core.packethandler.PacketInfo; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.CombatManager.AttackReason; @@ -46,6 +50,8 @@ import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickBlock; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickEntity; import nautilus.game.arcade.kit.Kit; import net.minecraft.server.v1_7_R4.EntityFireball; +import net.minecraft.server.v1_7_R4.PacketPlayOutSetSlot; +import net.minecraft.server.v1_7_R4.PacketPlayOutWindowItems; import org.apache.commons.lang.IllegalClassException; import org.bukkit.Bukkit; @@ -59,6 +65,7 @@ import org.bukkit.block.BlockState; import org.bukkit.block.Chest; import org.bukkit.block.DoubleChest; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftFireball; +import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Fireball; @@ -117,6 +124,8 @@ public class Wizards extends SoloGame private NautHashMap _spells = new NautHashMap(); private WizardSpellMenu _wizard; private NautHashMap _wizards = new NautHashMap(); + private Field _itemField; + private IPacketHandler _wizardSpellLevelHandler; public Wizards(ArcadeManager manager) { @@ -158,11 +167,135 @@ public class Wizards extends SoloGame SoupEnabled = false; DamageTeamSelf = true; + try + { + _itemField = PacketPlayOutSetSlot.class.getDeclaredField("c"); + _itemField.setAccessible(true); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + Manager.getCosmeticManager().setHideParticles(true); Manager.GetDamage().GetCombatManager().setUseWeaponName(AttackReason.DefaultWeaponName); createLoot(); + _wizardSpellLevelHandler = new IPacketHandler() + { + @Override + public void handle(PacketInfo packetInfo) + { + if (packetInfo.getPacket() instanceof PacketPlayOutWindowItems + || packetInfo.getPacket() instanceof PacketPlayOutSetSlot) + { + Inventory inv = packetInfo.getPlayer().getOpenInventory().getTopInventory(); + + if (inv.getType() == InventoryType.CHEST) + { + if (packetInfo.getPacket() instanceof PacketPlayOutWindowItems) + { + Wizard wizard = getWizard(packetInfo.getPlayer()); + + if (wizard != null) + { + PacketPlayOutWindowItems packet = (PacketPlayOutWindowItems) packetInfo.getPacket(); + boolean ownPacket = false; + + ItemStack[] items = new ItemStack[packet.b.length]; + + for (int i = 0; i < items.length; i++) + { + items[i] = CraftItemStack.asBukkitCopy(packet.b[i]); + + ItemStack item = items[i]; + + if (item != null && item.getType() != Material.AIR) + { + SpellType spellType = getSpell(item); + + if (spellType != null) + { + if (wizard.getSpellLevel(spellType) < spellType.getMaxLevel()) + { + item.setAmount(wizard.getSpellLevel(spellType) + 1); + } + else + { + item.setAmount(0); + } + + ownPacket = true; + } + } + } + + if (ownPacket) + { + List list = new ArrayList(); + + for (ItemStack item : items) + { + list.add(CraftItemStack.asNMSCopy(item)); + } + + packetInfo.setCancelled(true); + + packet = new PacketPlayOutWindowItems(packet.a, list); + + packetInfo.getVerifier().bypassProcess(packet); + } + } + } + else + { + PacketPlayOutSetSlot packet = (PacketPlayOutSetSlot) packetInfo.getPacket(); + + ItemStack item = null; + + try + { + item = CraftItemStack.asBukkitCopy((net.minecraft.server.v1_7_R4.ItemStack) _itemField + .get(packet)); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + + if (item != null && item.getType() != Material.AIR) + { + SpellType spellType = getSpell(item); + + if (spellType != null) + { + Wizard wizard = getWizard(packetInfo.getPlayer()); + + if (wizard != null) + { + if (wizard.getSpellLevel(spellType) < spellType.getMaxLevel()) + { + item.setAmount(wizard.getSpellLevel(spellType) + 1); + } + else + { + item.setAmount(0); + } + + packetInfo.setCancelled(true); + + packet = new PacketPlayOutSetSlot(packet.a, packet.b, CraftItemStack.asNMSCopy(item)); + + packetInfo.getVerifier().bypassProcess(packet); + } + } + } + } + } + } + } + }; } private void addRandomItem(int amount, Material itemType, int newDurability, int minAmount, int maxAmount) @@ -404,6 +537,19 @@ public class Wizards extends SoloGame } } + @EventHandler + public void handleEntityPacket(GameStateChangeEvent event) + { + if (event.GetState() == GameState.Live) + { + getArcadeManager().getPacketHandler().addPacketHandler(_wizardSpellLevelHandler); + } + else if (event.GetState() == GameState.Dead) + { + getArcadeManager().getPacketHandler().removePacketHandler(_wizardSpellLevelHandler); + } + } + private void createLoot() { for (SpellType spellType : SpellType.values()) From 9db8aff37a355fec8fb071f5301e9300f3595504 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 18 Apr 2015 06:10:23 +1200 Subject: [PATCH 019/104] Wizards: Changed spell icons for resource pack --- .../arcade/game/games/wizards/SpellType.java | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java index 482019008..23d0c38f2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java @@ -5,14 +5,13 @@ import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.game.games.wizards.spells.*; import org.bukkit.Material; -import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; public enum SpellType // ❤ { Droom(SpellElement.ATTACK, // Spell element "Droom", // Spell name - new ItemStack(Material.ANVIL), // Spell icon + new ItemStack(Material.NETHER_BRICK_ITEM), // Spell icon SpellDroom.class, // Spell class 3, // Spell max level 40, // Mana cost @@ -31,7 +30,7 @@ public enum SpellType // ❤ Fireball(SpellElement.ATTACK, // Spell element "Fireball", // Spell name - new ItemStack(Material.FIREBALL), // Spell icon + new ItemStack(Material.FIREWORK_CHARGE), // Spell icon SpellFireball.class, // Spell class 3, // Spell max level 30, // Mana cost @@ -50,7 +49,7 @@ public enum SpellType // ❤ Flash(SpellElement.SUPPORT, // Spell element "Flash", // Spell name - new ItemStack(Material.REDSTONE_TORCH_ON), // Spell icon + new ItemStack(Material.GOLD_NUGGET), // Spell icon SpellFlash.class, // Spell class 3, // Spell max level 50, // Mana cost @@ -67,7 +66,7 @@ public enum SpellType // ❤ FrostBarrier(SpellElement.MISC, // Spell element "Frost Barrier", // Spell name - new ItemStack(Material.ICE), // Spell icon + new ItemStack(Material.MONSTER_EGG), // Spell icon SpellFrostBarrier.class, // Spell class 3, // Spell max level 60, // Mana cost @@ -86,7 +85,7 @@ public enum SpellType // ❤ Gust(SpellElement.MISC, // Spell element "Gust", // Spell name - new ItemStack(Material.FEATHER), // Spell icon + new ItemStack(Material.SULPHUR), // Spell icon SpellGust.class, // Spell class 3, // Spell max level 60, // Mana cost @@ -105,7 +104,7 @@ public enum SpellType // ❤ Heal(SpellElement.SUPPORT, // Spell element "Heal", // Spell name - new ItemStack(Material.POTION, 1, (short) 8261), // Spell icon + new ItemStack(Material.QUARTZ), // Spell icon SpellHeal.class, // Spell class 5, // Spell max level 50, // Mana cost @@ -124,7 +123,7 @@ public enum SpellType // ❤ IcePrison(SpellElement.MISC, // Spell element "Ice Prison", // Spell name - new ItemStack(Material.ICE), // Spell icon + new ItemStack(Material.BOOK_AND_QUILL), // Spell icon SpellIcePrison.class, // Spell class 3, // Spell max level 50, // Mana cost @@ -143,7 +142,7 @@ public enum SpellType // ❤ IceShards(SpellElement.ATTACK, // Spell element "Ice Shards", // Spell name - new ItemStack(Material.GHAST_TEAR), // Spell icon + new ItemStack(Material.GOLDEN_CARROT), // Spell icon SpellIceShards.class, // Spell class 5, // Spell max level 30, // Mana cost @@ -168,7 +167,7 @@ public enum SpellType // ❤ Implode(SpellElement.MISC, // Spell element "Implode", // Spell name - new ItemStack(Material.TNT), // Spell icon + new ItemStack(Material.GLOWSTONE_DUST), // Spell icon SpellImplode.class, // Spell class 3, // Spell max level 50, // Mana cost @@ -191,7 +190,7 @@ public enum SpellType // ❤ LightningStrike(SpellElement.ATTACK, // Spell element "Lightning Strike", // Spell name - new ItemStack(Material.WOOD_AXE), // Spell icon + new ItemStack(Material.SLIME_BALL), // Spell icon SpellLightningStrike.class, // Spell class 3, // Spell max level 50, // Mana cost @@ -212,7 +211,7 @@ public enum SpellType // ❤ MagicMissile(SpellElement.ATTACK, // Spell element "Magic Missile", // Spell name - new ItemStack(Material.STICK), // Spell icon + new ItemStack(Material.MELON_SEEDS), // Spell icon SpellMagicMissile.class, // Spell class 3, // Spell max level 15, // Mana cost @@ -232,7 +231,7 @@ public enum SpellType // ❤ Napalm(SpellElement.ATTACK, // Spell element "Napalm", // Spell name - new ItemStack(Material.FIREBALL), // Spell icon + new ItemStack(Material.CARROT_STICK), // Spell icon SpellNapalm.class, // Spell class 5, // Spell max level 70, // Mana cost @@ -280,7 +279,7 @@ public enum SpellType // ❤ RainbowRoad(SpellElement.MISC, // Spell element "Rainbow Road", // Spell name - new ItemStack(Material.STAINED_GLASS, 1, (short) 4), // Spell icon + new ItemStack(Material.SADDLE), // Spell icon SpellRainbowRoad.class, // Spell class 3, // Spell max level 50, // Mana cost @@ -299,7 +298,7 @@ public enum SpellType // ❤ Rumble(SpellElement.ATTACK, // Spell element "Rumble", // Spell name - new ItemStack(Material.DIRT), // Spell icon + new ItemStack(Material.PUMPKIN_SEEDS), // Spell icon SpellRumble.class, // Spell class 5, // Spell max level 30, // Mana cost @@ -328,7 +327,7 @@ public enum SpellType // ❤ SpectralArrow(SpellElement.ATTACK, // Spell element "Spectral Arrow", // Spell name - new ItemStack(Material.ARROW), // Spell icon + new ItemStack(Material.ENCHANTED_BOOK), // Spell icon SpellSpectralArrow.class, // Spell class 3, // Spell max level 40, // Mana cost @@ -347,7 +346,7 @@ public enum SpellType // ❤ SpeedBoost(SpellElement.SUPPORT, // Spell element "Speed Boost", // Spell name - new ItemStack(Material.FEATHER), // Spell icon + new ItemStack(Material.BOOK), // Spell icon SpellSpeedBoost.class, // Spell class 2, // Spell max level 20, // Mana cost @@ -366,7 +365,7 @@ public enum SpellType // ❤ SummonWolves(SpellElement.ATTACK, // Spell element "Summon Wolves", // Spell name - new ItemStack(Material.MONSTER_EGG, 1, EntityType.WOLF.getTypeId()), // Spell icon + new ItemStack(Material.MILK_BUCKET), // Spell icon SpellSummonWolves.class, // Spell class 3, // Spell max level 80, // Mana cost @@ -385,7 +384,7 @@ public enum SpellType // ❤ TrapRune(SpellElement.MISC, // Spell element "Trap Rune", // Spell name - new ItemStack(Material.TRAP_DOOR), // Spell icon + new ItemStack(Material.BREWING_STAND_ITEM), // Spell icon SpellTrapRune.class, // Spell class 3, // Spell max level 50, // Mana cost @@ -408,7 +407,7 @@ public enum SpellType // ❤ WebShot(SpellElement.ATTACK, // Spell element "Web Shot", // Spell name - new ItemStack(Material.WEB), // Spell icon + new ItemStack(Material.SPIDER_EYE), // Spell icon SpellWebShot.class, // Spell class 3, // Spell max level 40, // Mana cost @@ -427,7 +426,7 @@ public enum SpellType // ❤ WizardsCompass(SpellElement.MISC, // Spell element "Wizard's Compass", // Spell name - new ItemStack(Material.COMPASS), // Spell icon + new ItemStack(Material.SUGAR), // Spell icon SpellWizardsCompass.class, // Spell class 1, // Spell max level 5, // Mana cost From cd47da179a561bcd5ade54239fb08ddf8a73228a Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 18 Apr 2015 06:12:34 +1200 Subject: [PATCH 020/104] Wizards: Added new food Cheese, removed other foods and raised spawn chance of remaining --- .../arcade/game/games/wizards/Wizards.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 2c261b31d..b094dfe34 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -309,6 +309,18 @@ public class Wizards extends SoloGame } } + private void addRandomItem(int amount, ItemStack item, int minAmount, int maxAmount) + { + item.setAmount(minAmount); + HashMap.SimpleEntry entry = new HashMap.SimpleEntry(item, maxAmount + - minAmount); + + for (int i = 0; i < amount; i++) + { + _randomItems.add(entry); + } + } + @EventHandler public void onDamage(CustomDamageEvent event) { @@ -565,13 +577,11 @@ public class Wizards extends SoloGame _randomItems.add(new HashMap.SimpleEntry(makeUnusedWand(), 0)); } - addRandomItem(5, Material.RAW_FISH, 0, 1, 2); - addRandomItem(5, Material.RAW_BEEF, 0, 1, 2); - addRandomItem(5, Material.RAW_CHICKEN, 0, 1, 2); - addRandomItem(5, Material.POTATO_ITEM, 0, 1, 2); - addRandomItem(5, Material.CARROT_ITEM, 0, 1, 2); + addRandomItem(15, Material.CARROT_ITEM, 0, 1, 2); + addRandomItem(15, Material.COOKED_BEEF, 0, 1, 2); + addRandomItem(15, Material.BREAD, 0, 1, 2); + addRandomItem(15, new ItemBuilder(Material.COOKED_CHICKEN).setTitle(C.cWhite + "Cheese").build(), 1, 2); addRandomItem(5, Material.WHEAT, 0, 1, 2); - addRandomItem(5, Material.ROTTEN_FLESH, 0, 1, 2); addRandomItem(5, Material.STICK, 0, 1, 2); addRandomItem(5, Material.WOOD, 0, 1, 10); addRandomItem(5, Material.BOAT, 0, 1, 2); @@ -589,16 +599,6 @@ public class Wizards extends SoloGame addRandomItem(3, Material.FISHING_ROD, 0, 1, 1); // addRandomItem(5, Material.BOW, 0, 1, 1); // addRandomItem(5, Material.ARROW, 0, 1, 5); - addRandomItem(5, Material.PORK, 0, 1, 2); - addRandomItem(5, Material.BAKED_POTATO, 0, 1, 2); - addRandomItem(5, Material.CAKE, 0, 1, 1); - addRandomItem(5, Material.COOKED_BEEF, 0, 1, 2); - addRandomItem(5, Material.COOKED_CHICKEN, 0, 1, 2); - addRandomItem(5, Material.COOKED_FISH, 0, 1, 2); - addRandomItem(5, Material.GRILLED_PORK, 0, 1, 2); - addRandomItem(5, Material.COOKIE, 0, 1, 2); - addRandomItem(5, Material.PUMPKIN_PIE, 0, 1, 2); - addRandomItem(5, Material.APPLE, 0, 1, 2); addRandomItem(5, Material.IRON_INGOT, 0, 1, 2); addRandomItem(3, Material.DIAMOND, 0, 1, 1); addRandomItem(5, Material.EXP_BOTTLE, 0, 1, 2); From 0196a5c35972679a9a15b6c50ff3bdce0da13c50 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Tue, 21 Apr 2015 13:54:19 +1200 Subject: [PATCH 021/104] Wizards: Latest changes by Chiss --- .../game/games/wizards/SpellButton.java | 1 + .../game/games/wizards/SpellMenuPage.java | 12 +- .../arcade/game/games/wizards/SpellType.java | 140 +++++++++++----- .../game/games/wizards/WizardSpellMenu.java | 148 ++++++++--------- .../arcade/game/games/wizards/Wizards.java | 155 +++++++++++------- .../game/games/wizards/kit/KitMystic.java | 2 +- .../game/games/wizards/kit/KitSorcerer.java | 2 +- .../games/wizards/kit/KitWitchDoctor.java | 2 +- 8 files changed, 278 insertions(+), 184 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java index 3d3134bc8..0287e0eb4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java @@ -41,6 +41,7 @@ public class SpellButton implements IButton _spellPage.getWizards().drawUtilTextBottom(player); _spellPage.getWizards().changeWandsTitles(player); + _spellPage.getWizards().changeWandsType(player, -1, player.getInventory().getHeldItemSlot()); player.closeInventory(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java index 71b0faa30..bc9e963dc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java @@ -63,13 +63,13 @@ public class SpellMenuPage extends ShopPageBase spell, int maxLevel, - int spellCost, int spellCooldown, int manaChangePerLevel, int cooldownChangePerLevel, int itemAmount, String... desc) + private SpellType(SpellElement type, WandElement wandElement, String spellName, ItemStack spellItem, + Class spell, int maxLevel, int spellCost, int spellCooldown, int manaChangePerLevel, + int cooldownChangePerLevel, int itemAmount, String... desc) { + _wandElement = wandElement; _maxLevel = maxLevel; _item = spellItem; _desc = desc; @@ -663,6 +716,11 @@ public enum SpellType // ❤ return _spellName; } + public WandElement getWandType() + { + return _wandElement; + } + public ItemStack makeSpell(Wizards wizards, ItemStack item) { ItemBuilder builder = new ItemBuilder(item); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java index 9ba3d42ec..8c7901c85 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java @@ -20,93 +20,93 @@ import org.bukkit.plugin.java.JavaPlugin; public class WizardSpellMenu extends MiniPlugin { - private Wizards _wizards; - private WizardSpellMenuShop _wizardShop; - private ItemStack _wizardSpells = new ItemBuilder(Material.ENCHANTED_BOOK).setTitle(C.cGold + "Wizard Spells") - .addLore(C.cGray + "Right click with this to view the spells").build(); + private Wizards _wizards; + private WizardSpellMenuShop _wizardShop; + private ItemStack _wizardSpells = new ItemBuilder(Material.ENCHANTED_BOOK).setTitle(C.cGold + "Wizard Spells") + .addLore(C.cGray + "Right click with this to view the spells").build(); - public WizardSpellMenu(String moduleName, JavaPlugin plugin, Wizards wizards) - { - super("Wizard Spell Menu", plugin); - _wizardShop = new WizardSpellMenuShop(this, wizards.getArcadeManager().GetClients(), wizards.getArcadeManager() - .GetDonation(), wizards); - _wizards = wizards; - } + public WizardSpellMenu(String moduleName, JavaPlugin plugin, Wizards wizards) + { + super("Wizard Spell Menu", plugin); + _wizardShop = new WizardSpellMenuShop(this, wizards.getArcadeManager().GetClients(), wizards.getArcadeManager() + .GetDonation(), wizards); + _wizards = wizards; + } - @EventHandler - public void onJoin(PlayerJoinEvent event) - { + @EventHandler + public void onJoin(PlayerJoinEvent event) + { - if (_wizards.GetState() == GameState.Recruit || _wizards.GetState() == GameState.Live) - { - event.getPlayer().getInventory().addItem(_wizardSpells); - } - } + if (_wizards.GetState() == GameState.Recruit || _wizards.GetState() == GameState.Live) + { + event.getPlayer().getInventory().addItem(_wizardSpells); + } + } - @EventHandler - public void onDeath(final PlayerDeathEvent event) - { - Bukkit.getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable() - { - public void run() - { - if (_wizards.IsLive()) - { - event.getEntity().getInventory().addItem(_wizardSpells); - } - } - }); - } + @EventHandler + public void onDeath(final PlayerDeathEvent event) + { + Bukkit.getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable() + { + public void run() + { + if (_wizards.IsLive()) + { + event.getEntity().getInventory().addItem(_wizardSpells); + } + } + }); + } - @EventHandler - public void onJoin(GameStateChangeEvent event) - { + @EventHandler + public void onJoin(GameStateChangeEvent event) + { - if (event.GetState() == GameState.Recruit) - { - for (Player player : Bukkit.getOnlinePlayers()) - { - player.getInventory().addItem(_wizardSpells); - } - } - } + if (event.GetState() == GameState.Recruit) + { + for (Player player : Bukkit.getOnlinePlayers()) + { + player.getInventory().addItem(_wizardSpells); + } + } + } - @EventHandler - public void onInteract(PlayerInteractEvent event) - { - if (event.getAction() != Action.PHYSICAL && (!_wizards.IsLive() || !_wizards.IsAlive(event.getPlayer()))) - { + @EventHandler + public void onInteract(PlayerInteractEvent event) + { + if (event.getAction() != Action.PHYSICAL && (!_wizards.IsLive() || !_wizards.IsAlive(event.getPlayer()))) + { - ItemStack item = event.getItem(); + ItemStack item = event.getItem(); - if (item != null && item.isSimilar(_wizardSpells)) - { + if (item != null && item.isSimilar(_wizardSpells)) + { - _wizardShop.attemptShopOpen(event.getPlayer()); - } - } + _wizardShop.attemptShopOpen(event.getPlayer()); + } + } - if (_wizards.IsLive() && _wizards.IsAlive(event.getPlayer())) - { + if (_wizards.IsLive() && _wizards.IsAlive(event.getPlayer())) + { - ItemStack item = event.getItem(); - if (item != null && item.getType() == Material.BLAZE_ROD) - { + ItemStack item = event.getItem(); - Player p = event.getPlayer(); + if (item != null && item.getType() != Material.STAINED_GLASS_PANE) + { + Player p = event.getPlayer(); - if (event.getAction().name().contains("RIGHT")) - { - if (p.getInventory().getHeldItemSlot() < 5) - { - if (event.getClickedBlock() == null || !(event.getClickedBlock().getState() instanceof InventoryHolder)) - { - _wizardShop.attemptShopOpen(p); - } - } - } - } - } - } + if (event.getAction().name().contains("RIGHT")) + { + if (p.getInventory().getHeldItemSlot() < 5) + { + if (event.getClickedBlock() == null || !(event.getClickedBlock().getState() instanceof InventoryHolder)) + { + _wizardShop.attemptShopOpen(p); + } + } + } + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index b094dfe34..bbf980127 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -312,8 +312,7 @@ public class Wizards extends SoloGame private void addRandomItem(int amount, ItemStack item, int minAmount, int maxAmount) { item.setAmount(minAmount); - HashMap.SimpleEntry entry = new HashMap.SimpleEntry(item, maxAmount - - minAmount); + HashMap.SimpleEntry entry = new HashMap.SimpleEntry(item, maxAmount - minAmount); for (int i = 0; i < amount; i++) { @@ -447,6 +446,37 @@ public class Wizards extends SoloGame } } + public void changeWandsType(Player player, int oldSlot, int newSlot) + { + PlayerInventory inv = player.getInventory(); + + if (oldSlot >= 0 && oldSlot < 5) + { + SpellType spell = getWizard(player).getSpell(oldSlot); + + if (spell != null) + { + ItemStack item = inv.getItem(oldSlot); + item.setType(spell.getSpellItem().getType()); + inv.setItem(oldSlot, item); + } + } + + if (newSlot >= 0 && newSlot < 5) + { + SpellType spell = getWizard(player).getSpell(newSlot); + + if (spell != null) + { + ItemStack item = inv.getItem(newSlot); + + item.setType(spell.getWandType().getMaterial()); + + inv.setItem(newSlot, item); + } + } + } + public void changeWandsTitles(Player player) { PlayerInventory inv = player.getInventory(); @@ -457,7 +487,7 @@ public class Wizards extends SoloGame ItemStack item = inv.getItem(slot); SpellType type = wizard.getSpell(slot); - if (item != null && item.getType() == Material.BLAZE_ROD) + if (item != null && item.getType() != Material.STAINED_GLASS_PANE) { String display; @@ -744,7 +774,6 @@ public class Wizards extends SoloGame { HashSet spells = new HashSet(); ArrayList itemsToDrop = new ArrayList(); - ArrayList normalItemsToDrop = UtilInv.getItems(player); Wizard wizard = getWizard(player); int wandsHeld = 0; @@ -767,23 +796,24 @@ public class Wizards extends SoloGame } } - Iterator itel = normalItemsToDrop.iterator(); - - while (itel.hasNext()) + for (ItemStack item : UtilInv.getItems(player)) { - ItemStack item = itel.next(); - if (item.getType() == Material.BLAZE_ROD) + switch (item.getType()) { + case WOOD_HOE: + case STONE_HOE: + case GOLD_HOE: + case IRON_HOE: + case DIAMOND_HOE: + case BLAZE_ROD: + case STICK: wandsHeld++; - itel.remove(); - } - else if (item.getType() == Material.STAINED_GLASS_PANE) - { - itel.remove(); - } - else - { + break; + case STAINED_GLASS_PANE: + break; + default: player.getWorld().dropItemNaturally(player.getLocation(), item); + break; } } @@ -937,11 +967,10 @@ public class Wizards extends SoloGame { ItemStack item = player.getItemInHand(); - if (IsLive() && IsAlive(player) && item != null && item.getType() == Material.BLAZE_ROD - && player.getInventory().getHeldItemSlot() < 5) + if (IsLive() && IsAlive(player) && item != null && player.getInventory().getHeldItemSlot() < 5) { - Wizard wizard = getWizard(player); + SpellType spell = wizard.getSpell(player.getInventory().getHeldItemSlot()); if (spell != null) @@ -1085,18 +1114,17 @@ public class Wizards extends SoloGame if (IsAlive(p)) { dropSpells(p); + /*Iterator itel = event.getDrops().iterator(); - Iterator itel = event.getDrops().iterator(); + while (itel.hasNext()) + { + ItemStack item = itel.next(); - while (itel.hasNext()) - { - ItemStack item = itel.next(); - - if (item.getType() == Material.BLAZE_ROD || item.getType() == Material.STAINED_GLASS_PANE) - { - itel.remove(); - } - } + if (item.getType() == Material.BLAZE_ROD || item.getType() == Material.STAINED_GLASS_PANE) + { + itel.remove(); + } + }*/ } _wizards.remove(p.getName()); @@ -1161,7 +1189,7 @@ public class Wizards extends SoloGame _droppedWandsBooks.add(event.getEntity()); } - else if (item.getType() == Material.BOOK) + else if (item.getType() == Material.BOOK || item.getType() == Material.STICK) { event.getEntity().remove(); } @@ -1257,20 +1285,9 @@ public class Wizards extends SoloGame @EventHandler public void onInteract(PlayerInteractEvent event) { - ItemStack item = event.getItem(); - if (item != null) + if (event.getAction().name().contains("LEFT")) { - - Player p = event.getPlayer(); - if (event.getAction().name().contains("LEFT")) - { - - if (item.getType() == Material.BLAZE_ROD) - { - - onCastSpell(p, event.getClickedBlock()); - } - } + onCastSpell(event.getPlayer(), event.getClickedBlock()); } } @@ -1439,22 +1456,29 @@ public class Wizards extends SoloGame @EventHandler public void onSwapItem(PlayerItemHeldEvent event) { - if (IsLive()) + if (!IsLive()) { - Player p = event.getPlayer(); + return; + } + Player p = event.getPlayer(); - if (event.getNewSlot() >= 0 && event.getNewSlot() < 5) - { - drawUtilTextBottom(p); - } - else - { + if (!_wizards.containsKey(p.getName())) + { + return; + } - // Get rid of the old wand message - if (event.getPreviousSlot() >= 0 && event.getPreviousSlot() < 5) - { - UtilTextBottom.display(C.Bold, p); - } + changeWandsType(p, event.getPreviousSlot(), event.getNewSlot()); + + if (event.getNewSlot() >= 0 && event.getNewSlot() < 5) + { + drawUtilTextBottom(p); + } + else + { + // Get rid of the old wand message + if (event.getPreviousSlot() >= 0 && event.getPreviousSlot() < 5) + { + UtilTextBottom.display(C.Bold, p); } } } @@ -1475,10 +1499,21 @@ public class Wizards extends SoloGame ItemStack result = recipe != null ? recipe.getResult() : null; - if (result != null && (result.getType().name().contains("_SWORD") || result.getType().name().contains("_AXE"))) + if (result != null) { - event.getInventory().setResult(new ItemStack(Material.AIR)); - UtilPlayer.message(event.getViewers().get(0), C.cRed + "You may not craft weaponsa"); + if (result.getType().name().contains("_SWORD") || result.getType().name().contains("_AXE")) + { + event.getInventory().setResult(new ItemStack(Material.AIR)); + + UtilPlayer.message(event.getViewers().get(0), C.cRed + "You may not craft weapons"); + } + else if (result.getType() == Material.STICK || result.getType() == Material.FERMENTED_SPIDER_EYE + || result.getType().name().contains("_HOE")) + { + event.getInventory().setResult(new ItemStack(Material.AIR)); + + UtilPlayer.message(event.getViewers().get(0), C.cRed + "You may not craft this item"); + } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java index 7b5320365..32a755eab 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java @@ -20,7 +20,7 @@ public class KitMystic extends Kit super(manager, "Mystic", KitAvailability.Free, new String[] { "Mana regeneration increased by 10%" - }, new Perk[0], EntityType.WITCH, new ItemStack(Material.BLAZE_ROD)); + }, new Perk[0], EntityType.WITCH, new ItemStack(Material.WOOD_HOE)); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java index 0ed52b42d..b0dda7740 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java @@ -20,7 +20,7 @@ public class KitSorcerer extends Kit super(manager, "Sorcerer", KitAvailability.Free, new String[] { "Start out with an extra wand" - }, new Perk[0], EntityType.WITCH, new ItemStack(Material.BLAZE_ROD)); + }, new Perk[0], EntityType.WITCH, new ItemStack(Material.STONE_HOE)); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java index 5ae610300..74b9cc154 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java @@ -21,7 +21,7 @@ public class KitWitchDoctor extends Kit super(manager, "Witch Doctor", KitAvailability.Free, new String[] { "Max mana increased to 150" - }, new Perk[0], EntityType.WITCH, new ItemStack(Material.BLAZE_ROD)); + }, new Perk[0], EntityType.WITCH, new ItemStack(Material.IRON_HOE)); this.setAchievementRequirements(new Achievement[] { From 2aaa93e58f33c83076fbb682ac16221a8e08da45 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Wed, 22 Apr 2015 05:38:32 +1200 Subject: [PATCH 022/104] ResourcePack: Add constructors to GameType for resource pack urls, sorted the enum's by name --- .../src/nautilus/game/arcade/GameType.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 51b184488..c7870ef28 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -9,9 +9,9 @@ public enum GameType Barbarians("A Barbarians Life", Material.WOOD_AXE, (byte)0, GameCategory.ARCADE, 2), Bridge("The Bridges", Material.IRON_PICKAXE, (byte)0, GameCategory.SURVIVAL, 3), CastleSiege("Castle Siege", Material.DIAMOND_CHESTPLATE, (byte)0, GameCategory.CLASSICS, 4), - ChampionsTDM("Champions TDM", "Champions", Material.GOLD_SWORD, (byte)0, GameCategory.CHAMPIONS, 5), ChampionsDominate("Champions Domination", "Champions", Material.BEACON, (byte)0, GameCategory.CHAMPIONS, 6), ChampionsMOBA("Champions MOBA", "Champions", Material.SKULL_ITEM, (byte)0, GameCategory.CHAMPIONS, 7), + ChampionsTDM("Champions TDM", "Champions", Material.GOLD_SWORD, (byte)0, GameCategory.CHAMPIONS, 5), Christmas("Christmas Chaos", Material.SNOW_BALL, (byte)0, GameCategory.CLASSICS, 8), DeathTag("Death Tag", Material.SKULL_ITEM, (byte)0, GameCategory.ARCADE, 9), DragonEscape("Dragon Escape", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE, 10), @@ -26,12 +26,10 @@ public enum GameType Halloween("Halloween Horror", Material.PUMPKIN, (byte)0, GameCategory.CLASSICS, 19), HideSeek("Block Hunt", Material.GRASS, (byte)0, GameCategory.CLASSICS, 20), Horse("Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE, 21), - SurvivalGames("Survival Games", Material.IRON_SWORD, (byte)0, GameCategory.SURVIVAL, 22), - SurvivalGamesTeams("Survival Games Teams", Material.IRON_SWORD, (byte)0, GameCategory.SURVIVAL, 23), Micro("Micro Battle", Material.LAVA_BUCKET, (byte)0, GameCategory.ARCADE, 24), + MilkCow("Milk the Cow", Material.MILK_BUCKET, (byte)0, GameCategory.ARCADE, 27), MineStrike("MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS, 25), MineWare("MineWare", Material.PAPER, (byte)0, GameCategory.ARCADE, 26), - MilkCow("Milk the Cow", Material.MILK_BUCKET, (byte)0, GameCategory.ARCADE, 27), Paintball("Super Paintball", Material.ENDER_PEARL, (byte)0, GameCategory.ARCADE, 28), Quiver("One in the Quiver", Material.ARROW, (byte)0, GameCategory.ARCADE, 29), QuiverTeams("One in the Quiver Teams", Material.ARROW, (byte)0, GameCategory.ARCADE, 30), @@ -39,22 +37,24 @@ public enum GameType SearchAndDestroy("Search and Destroy", Material.TNT, (byte)0, GameCategory.SURVIVAL, 32), Sheep("Sheep Quest", Material.WOOL, (byte)4, GameCategory.ARCADE, 33), Smash("Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS, 34), - SmashTeams("Super Smash Mobs Teams", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS, 35), SmashDomination("Super Smash Mobs Domination", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS, 36), + SmashTeams("Super Smash Mobs Teams", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS, 35), Snake("Snake", Material.WOOL, (byte)0, GameCategory.ARCADE, 37), SneakyAssassins("Sneaky Assassins", Material.INK_SACK, (byte)0, GameCategory.ARCADE, 38), SnowFight("Snow Fight", Material.SNOW_BALL, (byte)0, GameCategory.ARCADE, 39), Spleef("Super Spleef", Material.IRON_SPADE, (byte)0, GameCategory.ARCADE, 40), SpleefTeams("Super Spleef Teams", Material.IRON_SPADE, (byte)0, GameCategory.ARCADE, 41), - Stacker("Super Stacker", Material.BOWL, (byte)0, GameCategory.ARCADE, 42), SquidShooter("Squid Shooter", Material.FIREWORK_CHARGE, (byte)0, GameCategory.ARCADE, 43), + Stacker("Super Stacker", Material.BOWL, (byte)0, GameCategory.ARCADE, 42), + SurvivalGames("Survival Games", Material.IRON_SWORD, (byte)0, GameCategory.SURVIVAL, 22), + SurvivalGamesTeams("Survival Games Teams", Material.IRON_SWORD, (byte)0, GameCategory.SURVIVAL, 23), Tug("Tug of Wool", Material.WHEAT, (byte)0, GameCategory.ARCADE, 44), TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE, 45), UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46), WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE, 47), Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48), ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49), - + Event("Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999); String _name; @@ -72,8 +72,18 @@ public enum GameType { this(name, name, mat, data, gameCategory, gameId); } - + + GameType(String name, Material mat, byte data, GameCategory gameCategory, int gameId, String resourcePackUrl, boolean enforceResourcePack) + { + this(name, name, mat, data, gameCategory, gameId, resourcePackUrl, enforceResourcePack); + } + GameType(String name, String lobbyName, Material mat, byte data, GameCategory gameCategory, int gameId) + { + this(name, lobbyName, mat, data, gameCategory, gameId, null, false); + } + + GameType(String name, String lobbyName, Material mat, byte data, GameCategory gameCategory, int gameId, String resourcePackUrl, boolean enforceResourcePack) { _name = name; _lobbyName = lobbyName; @@ -81,6 +91,8 @@ public enum GameType _data = data; _gameCategory = gameCategory; _gameId = gameId; + _resourcePack = resourcePackUrl; + _enforceResourcePack = enforceResourcePack; } public boolean isEnforceResourcePack() From c2b7001fcc13aed16c11a27b2ef4eb5b3b124ec3 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 30 Apr 2015 01:32:22 +1200 Subject: [PATCH 023/104] Wizards: Current progress --- .../src/mineplex/core/loot/ChestLoot.java | 45 +- .../src/mineplex/core/loot/RandomItem.java | 18 +- .../games/survivalgames/SurvivalGames.java | 178 ++--- .../game/games/wizards/SpellButton.java | 5 + .../game/games/wizards/SpellMenuPage.java | 25 +- .../arcade/game/games/wizards/SpellType.java | 72 ++- .../arcade/game/games/wizards/Wizard.java | 19 +- .../game/games/wizards/WizardSpellMenu.java | 18 +- .../arcade/game/games/wizards/Wizards.java | 609 +++++++++++------- .../game/games/wizards/kit/KitMage.java | 44 +- .../game/games/wizards/kit/KitMystic.java | 44 +- .../game/games/wizards/kit/KitSorcerer.java | 44 +- .../games/wizards/kit/KitWitchDoctor.java | 52 +- .../{SpellDroom.java => SpellAnvilDrop.java} | 10 +- .../games/wizards/spells/SpellFireball.java | 2 +- .../game/games/wizards/spells/SpellFlash.java | 4 +- .../wizards/spells/SpellFrostBarrier.java | 2 +- .../game/games/wizards/spells/SpellHeal.java | 43 +- .../games/wizards/spells/SpellIceShards.java | 17 +- .../wizards/spells/SpellLightningStrike.java | 121 ++-- ...llMagicMissile.java => SpellManaBolt.java} | 4 +- .../games/wizards/spells/SpellNapalm.java | 37 +- .../wizards/spells/SpellRainbowBeam.java | 2 +- .../wizards/spells/SpellRainbowRoad.java | 6 +- .../games/wizards/spells/SpellSpeedBoost.java | 4 +- .../wizards/spells/SpellWizardsCompass.java | 1 - 26 files changed, 780 insertions(+), 646 deletions(-) rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/{SpellDroom.java => SpellAnvilDrop.java} (97%) rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/{SpellMagicMissile.java => SpellManaBolt.java} (97%) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/loot/ChestLoot.java b/Plugins/Mineplex.Core/src/mineplex/core/loot/ChestLoot.java index 069c67cb1..4dcf4eab3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/loot/ChestLoot.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/loot/ChestLoot.java @@ -4,37 +4,32 @@ import java.util.ArrayList; import mineplex.core.common.util.UtilMath; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; public class ChestLoot { - private int _totalLoot; private ArrayList _randomItems = new ArrayList(); + private int _totalLoot; private boolean _unbreakableLoot; - public ChestLoot(boolean unbreakableLoot) - { - _unbreakableLoot = unbreakableLoot; - } - public ChestLoot() { this(false); } + public ChestLoot(boolean unbreakableLoot) + { + _unbreakableLoot = unbreakableLoot; + } + public void cloneLoot(ChestLoot loot) { _totalLoot += loot._totalLoot; _randomItems.addAll(loot._randomItems); } - public void registerLoot(RandomItem item) - { - _totalLoot += item.getAmount(); - _randomItems.add(item); - } - public ItemStack getLoot() { int no = UtilMath.r(_totalLoot); @@ -60,4 +55,30 @@ public class ChestLoot return null; } + + public void addLoot(ItemStack item, int amount) + { + addLoot(item, amount, item.getAmount(), item.getAmount()); + } + + public void addLoot(ItemStack item, int amount, int minStackSize, int maxStackSize) + { + addLoot(new RandomItem(item, amount, minStackSize, maxStackSize)); + } + + public void addLoot(Material material, int amount) + { + addLoot(material, amount, 1, 1); + } + + public void addLoot(Material material, int amount, int minStackSize, int maxStackSize) + { + addLoot(new ItemStack(material), amount, minStackSize, maxStackSize); + } + + public void addLoot(RandomItem item) + { + _totalLoot += item.getAmount(); + _randomItems.add(item); + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/loot/RandomItem.java b/Plugins/Mineplex.Core/src/mineplex/core/loot/RandomItem.java index ebcce4fc4..c903c6fa3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/loot/RandomItem.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/loot/RandomItem.java @@ -11,6 +11,11 @@ public class RandomItem private ItemStack _item; private int _min, _max; + public RandomItem(ItemStack item, int amount) + { + this(item, amount, item.getAmount(), item.getAmount()); + } + public RandomItem(ItemStack item, int amount, int minStackSize, int maxStackSize) { _amount = amount; @@ -19,9 +24,9 @@ public class RandomItem _max = maxStackSize; } - public RandomItem(ItemStack item, int amount) + public RandomItem(Material material, int amount) { - this(item, amount, item.getAmount(), item.getAmount()); + this(material, amount, 1, 1); } public RandomItem(Material material, int amount, int minStackSize, int maxStackSize) @@ -32,9 +37,9 @@ public class RandomItem _max = maxStackSize; } - public RandomItem(Material material, int amount) + public int getAmount() { - this(material, amount, 1, 1); + return _amount; } public ItemStack getItemStack() @@ -43,9 +48,4 @@ public class RandomItem return _item; } - - public int getAmount() - { - return _amount; - } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java index d1c49d258..dfc4a6ab2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java @@ -1844,129 +1844,129 @@ public class SurvivalGames extends SoloGame private void setupLoot() { // Food - _baseLoot.registerLoot(new RandomItem(Material.BAKED_POTATO, 30, 1, 3)); - _baseLoot.registerLoot(new RandomItem(Material.COOKED_BEEF, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.COOKED_CHICKEN, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.CARROT_ITEM, 30, 1, 3)); - _baseLoot.registerLoot(new RandomItem(Material.MUSHROOM_SOUP, 15, 1, 1)); - _baseLoot.registerLoot(new RandomItem(Material.WHEAT, 30, 1, 6)); - _baseLoot.registerLoot(new RandomItem(Material.APPLE, 30, 1, 4)); - _baseLoot.registerLoot(new RandomItem(Material.PORK, 30, 1, 4)); - _baseLoot.registerLoot(new RandomItem(Material.ROTTEN_FLESH, 40, 1, 6)); + _baseLoot.addLoot(new RandomItem(Material.BAKED_POTATO, 30, 1, 3)); + _baseLoot.addLoot(new RandomItem(Material.COOKED_BEEF, 30, 1, 2)); + _baseLoot.addLoot(new RandomItem(Material.COOKED_CHICKEN, 30, 1, 2)); + _baseLoot.addLoot(new RandomItem(Material.CARROT_ITEM, 30, 1, 3)); + _baseLoot.addLoot(new RandomItem(Material.MUSHROOM_SOUP, 15, 1, 1)); + _baseLoot.addLoot(new RandomItem(Material.WHEAT, 30, 1, 6)); + _baseLoot.addLoot(new RandomItem(Material.APPLE, 30, 1, 4)); + _baseLoot.addLoot(new RandomItem(Material.PORK, 30, 1, 4)); + _baseLoot.addLoot(new RandomItem(Material.ROTTEN_FLESH, 40, 1, 6)); // Weapons - _baseLoot.registerLoot(new RandomItem(Material.WOOD_AXE, 80)); - _baseLoot.registerLoot(new RandomItem(Material.WOOD_SWORD, 70)); - _baseLoot.registerLoot(new RandomItem(Material.STONE_AXE, 60)); - _baseLoot.registerLoot(new RandomItem(Material.STONE_SWORD, 30)); + _baseLoot.addLoot(new RandomItem(Material.WOOD_AXE, 80)); + _baseLoot.addLoot(new RandomItem(Material.WOOD_SWORD, 70)); + _baseLoot.addLoot(new RandomItem(Material.STONE_AXE, 60)); + _baseLoot.addLoot(new RandomItem(Material.STONE_SWORD, 30)); // Leather armor - _baseLoot.registerLoot(new RandomItem(Material.LEATHER_BOOTS, 30)); - _baseLoot.registerLoot(new RandomItem(Material.LEATHER_CHESTPLATE, 30)); - _baseLoot.registerLoot(new RandomItem(Material.LEATHER_HELMET, 30)); - _baseLoot.registerLoot(new RandomItem(Material.LEATHER_LEGGINGS, 30)); + _baseLoot.addLoot(new RandomItem(Material.LEATHER_BOOTS, 30)); + _baseLoot.addLoot(new RandomItem(Material.LEATHER_CHESTPLATE, 30)); + _baseLoot.addLoot(new RandomItem(Material.LEATHER_HELMET, 30)); + _baseLoot.addLoot(new RandomItem(Material.LEATHER_LEGGINGS, 30)); // Gold armor - _baseLoot.registerLoot(new RandomItem(Material.GOLD_BOOTS, 25)); - _baseLoot.registerLoot(new RandomItem(Material.GOLD_CHESTPLATE, 25)); - _baseLoot.registerLoot(new RandomItem(Material.GOLD_HELMET, 25)); - _baseLoot.registerLoot(new RandomItem(Material.GOLD_LEGGINGS, 25)); + _baseLoot.addLoot(new RandomItem(Material.GOLD_BOOTS, 25)); + _baseLoot.addLoot(new RandomItem(Material.GOLD_CHESTPLATE, 25)); + _baseLoot.addLoot(new RandomItem(Material.GOLD_HELMET, 25)); + _baseLoot.addLoot(new RandomItem(Material.GOLD_LEGGINGS, 25)); // Chain armor - _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_BOOTS, 20)); - _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_CHESTPLATE, 20)); - _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_HELMET, 20)); - _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_LEGGINGS, 20)); + _baseLoot.addLoot(new RandomItem(Material.CHAINMAIL_BOOTS, 20)); + _baseLoot.addLoot(new RandomItem(Material.CHAINMAIL_CHESTPLATE, 20)); + _baseLoot.addLoot(new RandomItem(Material.CHAINMAIL_HELMET, 20)); + _baseLoot.addLoot(new RandomItem(Material.CHAINMAIL_LEGGINGS, 20)); // Throwable - _baseLoot.registerLoot(new RandomItem(Material.FISHING_ROD, 30)); - _baseLoot.registerLoot(new RandomItem(Material.BOW, 20)); - _baseLoot.registerLoot(new RandomItem(Material.ARROW, 20, 1, 3)); - _baseLoot.registerLoot(new RandomItem(Material.SNOW_BALL, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.EGG, 30, 1, 2)); + _baseLoot.addLoot(new RandomItem(Material.FISHING_ROD, 30)); + _baseLoot.addLoot(new RandomItem(Material.BOW, 20)); + _baseLoot.addLoot(new RandomItem(Material.ARROW, 20, 1, 3)); + _baseLoot.addLoot(new RandomItem(Material.SNOW_BALL, 30, 1, 2)); + _baseLoot.addLoot(new RandomItem(Material.EGG, 30, 1, 2)); // Misc - _baseLoot.registerLoot(new RandomItem(Material.EXP_BOTTLE, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.COMPASS, 20)); - _baseLoot.registerLoot(new RandomItem(Material.STICK, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.BOAT, 15)); - _baseLoot.registerLoot(new RandomItem(Material.FLINT, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.FEATHER, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.GOLD_INGOT, 20)); - _baseLoot.registerLoot(new RandomItem(ItemStackFactory.Instance.CreateStack(Material.TNT, (byte)0, 1, F.item("Throwing TNT")), 15)); - _spawnLoot.registerLoot(new RandomItem(Material.MUSHROOM_SOUP, 15)); + _baseLoot.addLoot(new RandomItem(Material.EXP_BOTTLE, 30, 1, 2)); + _baseLoot.addLoot(new RandomItem(Material.COMPASS, 20)); + _baseLoot.addLoot(new RandomItem(Material.STICK, 30, 1, 2)); + _baseLoot.addLoot(new RandomItem(Material.BOAT, 15)); + _baseLoot.addLoot(new RandomItem(Material.FLINT, 30, 1, 2)); + _baseLoot.addLoot(new RandomItem(Material.FEATHER, 30, 1, 2)); + _baseLoot.addLoot(new RandomItem(Material.GOLD_INGOT, 20)); + _baseLoot.addLoot(new RandomItem(ItemStackFactory.Instance.CreateStack(Material.TNT, (byte)0, 1, F.item("Throwing TNT")), 15)); + _spawnLoot.addLoot(new RandomItem(Material.MUSHROOM_SOUP, 15)); _spawnLoot.cloneLoot(_baseLoot); // Food - _spawnLoot.registerLoot(new RandomItem(Material.BAKED_POTATO, 30, 1, 5)); - _spawnLoot.registerLoot(new RandomItem(Material.CAKE, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.MUSHROOM_SOUP, 30, 1, 1)); - _spawnLoot.registerLoot(new RandomItem(Material.COOKED_BEEF, 30, 1, 3)); - _spawnLoot.registerLoot(new RandomItem(Material.COOKED_CHICKEN, 30, 1, 3)); - _spawnLoot.registerLoot(new RandomItem(Material.COOKED_FISH, 30, 1, 6)); - _spawnLoot.registerLoot(new RandomItem(Material.GRILLED_PORK, 30, 1, 3)); - _spawnLoot.registerLoot(new RandomItem(Material.COOKIE, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.PUMPKIN_PIE, 30, 1, 3)); - _spawnLoot.registerLoot(new RandomItem(Material.APPLE, 30, 2, 6)); + _spawnLoot.addLoot(new RandomItem(Material.BAKED_POTATO, 30, 1, 5)); + _spawnLoot.addLoot(new RandomItem(Material.CAKE, 30)); + _spawnLoot.addLoot(new RandomItem(Material.MUSHROOM_SOUP, 30, 1, 1)); + _spawnLoot.addLoot(new RandomItem(Material.COOKED_BEEF, 30, 1, 3)); + _spawnLoot.addLoot(new RandomItem(Material.COOKED_CHICKEN, 30, 1, 3)); + _spawnLoot.addLoot(new RandomItem(Material.COOKED_FISH, 30, 1, 6)); + _spawnLoot.addLoot(new RandomItem(Material.GRILLED_PORK, 30, 1, 3)); + _spawnLoot.addLoot(new RandomItem(Material.COOKIE, 30)); + _spawnLoot.addLoot(new RandomItem(Material.PUMPKIN_PIE, 30, 1, 3)); + _spawnLoot.addLoot(new RandomItem(Material.APPLE, 30, 2, 6)); // Loot for chests in spawn // Weaponry and ores - _spawnLoot.registerLoot(new RandomItem(Material.STONE_SWORD, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.IRON_AXE, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.IRON_INGOT, 30, 1, 2)); - _spawnLoot.registerLoot(new RandomItem(Material.DIAMOND, 30)); + _spawnLoot.addLoot(new RandomItem(Material.STONE_SWORD, 30)); + _spawnLoot.addLoot(new RandomItem(Material.IRON_AXE, 30)); + _spawnLoot.addLoot(new RandomItem(Material.IRON_INGOT, 30, 1, 2)); + _spawnLoot.addLoot(new RandomItem(Material.DIAMOND, 30)); // Iron gear - _spawnLoot.registerLoot(new RandomItem(Material.IRON_BOOTS, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.IRON_CHESTPLATE, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.IRON_HELMET, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.IRON_LEGGINGS, 30)); + _spawnLoot.addLoot(new RandomItem(Material.IRON_BOOTS, 30)); + _spawnLoot.addLoot(new RandomItem(Material.IRON_CHESTPLATE, 30)); + _spawnLoot.addLoot(new RandomItem(Material.IRON_HELMET, 30)); + _spawnLoot.addLoot(new RandomItem(Material.IRON_LEGGINGS, 30)); // Supply crate loot // Diamond gear - _crateLoot.registerLoot(new RandomItem(Material.DIAMOND_HELMET, 10)); - _crateLoot.registerLoot(new RandomItem(Material.DIAMOND_CHESTPLATE, 6)); - _crateLoot.registerLoot(new RandomItem(Material.DIAMOND_LEGGINGS, 8)); - _crateLoot.registerLoot(new RandomItem(Material.DIAMOND_BOOTS, 10)); + _crateLoot.addLoot(new RandomItem(Material.DIAMOND_HELMET, 10)); + _crateLoot.addLoot(new RandomItem(Material.DIAMOND_CHESTPLATE, 6)); + _crateLoot.addLoot(new RandomItem(Material.DIAMOND_LEGGINGS, 8)); + _crateLoot.addLoot(new RandomItem(Material.DIAMOND_BOOTS, 10)); // Iron gear - _crateLoot.registerLoot(new RandomItem(Material.IRON_HELMET, 30)); - _crateLoot.registerLoot(new RandomItem(Material.IRON_CHESTPLATE, 24)); - _crateLoot.registerLoot(new RandomItem(Material.IRON_LEGGINGS, 27)); - _crateLoot.registerLoot(new RandomItem(Material.IRON_BOOTS, 30)); + _crateLoot.addLoot(new RandomItem(Material.IRON_HELMET, 30)); + _crateLoot.addLoot(new RandomItem(Material.IRON_CHESTPLATE, 24)); + _crateLoot.addLoot(new RandomItem(Material.IRON_LEGGINGS, 27)); + _crateLoot.addLoot(new RandomItem(Material.IRON_BOOTS, 30)); // Weapons - _crateLoot.registerLoot(new RandomItem(Material.IRON_SWORD, 24)); - _crateLoot.registerLoot(new RandomItem(Material.DIAMOND_SWORD, 8)); - _crateLoot.registerLoot(new RandomItem(Material.DIAMOND_AXE, 16)); + _crateLoot.addLoot(new RandomItem(Material.IRON_SWORD, 24)); + _crateLoot.addLoot(new RandomItem(Material.DIAMOND_SWORD, 8)); + _crateLoot.addLoot(new RandomItem(Material.DIAMOND_AXE, 16)); // Cooked furnace - _cookedFurnace.registerLoot(new RandomItem(Material.COOKED_BEEF, 3, 1, 2)); - _cookedFurnace.registerLoot(new RandomItem(Material.COOKED_CHICKEN, 3, 1, 2)); - _cookedFurnace.registerLoot(new RandomItem(Material.COOKED_FISH, 3, 1, 2)); - _cookedFurnace.registerLoot(new RandomItem(Material.GRILLED_PORK, 3, 1, 2)); - _cookedFurnace.registerLoot(new RandomItem(Material.BAKED_POTATO, 3, 1, 1)); - _cookedFurnace.registerLoot(new RandomItem(Material.PUMPKIN_PIE, 3, 1, 1)); - _cookedFurnace.registerLoot(new RandomItem(Material.IRON_INGOT, 1, 1, 1)); + _cookedFurnace.addLoot(new RandomItem(Material.COOKED_BEEF, 3, 1, 2)); + _cookedFurnace.addLoot(new RandomItem(Material.COOKED_CHICKEN, 3, 1, 2)); + _cookedFurnace.addLoot(new RandomItem(Material.COOKED_FISH, 3, 1, 2)); + _cookedFurnace.addLoot(new RandomItem(Material.GRILLED_PORK, 3, 1, 2)); + _cookedFurnace.addLoot(new RandomItem(Material.BAKED_POTATO, 3, 1, 1)); + _cookedFurnace.addLoot(new RandomItem(Material.PUMPKIN_PIE, 3, 1, 1)); + _cookedFurnace.addLoot(new RandomItem(Material.IRON_INGOT, 1, 1, 1)); // Raw furnace - _rawFurnace.registerLoot(new RandomItem(Material.RAW_BEEF, 1, 1, 3)); - _rawFurnace.registerLoot(new RandomItem(Material.RAW_CHICKEN, 1, 1, 3)); - _rawFurnace.registerLoot(new RandomItem(Material.RAW_FISH, 1, 1, 3)); - _rawFurnace.registerLoot(new RandomItem(Material.PORK, 1, 1, 3)); - _rawFurnace.registerLoot(new RandomItem(Material.POTATO_ITEM, 1, 1, 3)); + _rawFurnace.addLoot(new RandomItem(Material.RAW_BEEF, 1, 1, 3)); + _rawFurnace.addLoot(new RandomItem(Material.RAW_CHICKEN, 1, 1, 3)); + _rawFurnace.addLoot(new RandomItem(Material.RAW_FISH, 1, 1, 3)); + _rawFurnace.addLoot(new RandomItem(Material.PORK, 1, 1, 3)); + _rawFurnace.addLoot(new RandomItem(Material.POTATO_ITEM, 1, 1, 3)); // Deathmatch Loot - _deathMatchLoot.registerLoot(new RandomItem(Material.PUMPKIN_PIE, 4)); - _deathMatchLoot.registerLoot(new RandomItem(Material.BAKED_POTATO, 4)); - _deathMatchLoot.registerLoot(new RandomItem(Material.CAKE, 4)); - _deathMatchLoot.registerLoot(new RandomItem(Material.APPLE, 4)); - _deathMatchLoot.registerLoot(new RandomItem(Material.CARROT_ITEM, 4)); - _deathMatchLoot.registerLoot(new RandomItem(Material.WOOD_SWORD, 3)); - _deathMatchLoot.registerLoot(new RandomItem(Material.WOOD_AXE, 3)); - _deathMatchLoot.registerLoot(new RandomItem(Material.STONE_AXE, 3)); - _deathMatchLoot.registerLoot(new RandomItem(Material.STONE_SWORD, 1)); + _deathMatchLoot.addLoot(new RandomItem(Material.PUMPKIN_PIE, 4)); + _deathMatchLoot.addLoot(new RandomItem(Material.BAKED_POTATO, 4)); + _deathMatchLoot.addLoot(new RandomItem(Material.CAKE, 4)); + _deathMatchLoot.addLoot(new RandomItem(Material.APPLE, 4)); + _deathMatchLoot.addLoot(new RandomItem(Material.CARROT_ITEM, 4)); + _deathMatchLoot.addLoot(new RandomItem(Material.WOOD_SWORD, 3)); + _deathMatchLoot.addLoot(new RandomItem(Material.WOOD_AXE, 3)); + _deathMatchLoot.addLoot(new RandomItem(Material.STONE_AXE, 3)); + _deathMatchLoot.addLoot(new RandomItem(Material.STONE_SWORD, 1)); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java index 0287e0eb4..5550dbfda 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellButton.java @@ -24,6 +24,11 @@ public class SpellButton implements IButton { Wizard wizard = _spellPage.getWizards().getWizard(player); + if (player.getInventory().getHeldItemSlot() >= wizard.getWandsOwned()) + { + return; + } + if (wizard != null) { if (clickType.isLeftClick()) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java index bc9e963dc..cb09edc26 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java @@ -45,6 +45,7 @@ public class SpellMenuPage extends ShopPageBase 0) { _cooldowns.put(spell, System.currentTimeMillis() + (1000L * cooldown)); } } + public NautHashMap getCooldowns() + { + return _cooldowns; + } + public void setManaPerTick(float manaPerTick) { _manaPerTick = manaPerTick; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java index 8c7901c85..b63acd54c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java @@ -36,10 +36,9 @@ public class WizardSpellMenu extends MiniPlugin @EventHandler public void onJoin(PlayerJoinEvent event) { - if (_wizards.GetState() == GameState.Recruit || _wizards.GetState() == GameState.Live) { - event.getPlayer().getInventory().addItem(_wizardSpells); + event.getPlayer().getInventory().setItem(0, _wizardSpells); } } @@ -52,7 +51,7 @@ public class WizardSpellMenu extends MiniPlugin { if (_wizards.IsLive()) { - event.getEntity().getInventory().addItem(_wizardSpells); + event.getEntity().getInventory().setItem(0, _wizardSpells); } } }); @@ -61,12 +60,11 @@ public class WizardSpellMenu extends MiniPlugin @EventHandler public void onJoin(GameStateChangeEvent event) { - if (event.GetState() == GameState.Recruit) { for (Player player : Bukkit.getOnlinePlayers()) { - player.getInventory().addItem(_wizardSpells); + player.getInventory().setItem(0, _wizardSpells); } } } @@ -74,7 +72,8 @@ public class WizardSpellMenu extends MiniPlugin @EventHandler public void onInteract(PlayerInteractEvent event) { - if (event.getAction() != Action.PHYSICAL && (!_wizards.IsLive() || !_wizards.IsAlive(event.getPlayer()))) + if (event.getAction() != Action.PHYSICAL && event.getAction().name().contains("RIGHT") + && (!_wizards.IsLive() || !_wizards.IsAlive(event.getPlayer()))) { ItemStack item = event.getItem(); @@ -88,13 +87,10 @@ public class WizardSpellMenu extends MiniPlugin if (_wizards.IsLive() && _wizards.IsAlive(event.getPlayer())) { + Player p = event.getPlayer(); - ItemStack item = event.getItem(); - - if (item != null && item.getType() != Material.STAINED_GLASS_PANE) + if (p.getInventory().getHeldItemSlot() < _wizards.getWizard(p).getWandsOwned()) { - Player p = event.getPlayer(); - if (event.getAction().name().contains("RIGHT")) { if (p.getInventory().getHeldItemSlot() < 5) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index bbf980127..54e9397a6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -30,6 +30,7 @@ import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.common.util.UtilWorld; import mineplex.core.hologram.Hologram; import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.loot.ChestLoot; import mineplex.core.packethandler.IPacketHandler; import mineplex.core.packethandler.PacketInfo; import mineplex.core.updater.UpdateType; @@ -76,6 +77,7 @@ import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.enchantment.EnchantItemEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.ItemSpawnEvent; @@ -92,6 +94,7 @@ import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.AnvilInventory; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; @@ -110,6 +113,7 @@ public class Wizards extends SoloGame private float _endgameSize = 1.5F; private float _fireballSpeed = 0.05F; private long _lastEndgameStrike; + private long _lastGhastMoan; private int _lastGamePace; /** * @0 for meteors @@ -117,10 +121,7 @@ public class Wizards extends SoloGame */ private int _endGameEvent; private int _nextEndgameStrike = 6000; - /** - * The entry is so I can randomize the amounts of the items found - */ - private ArrayList> _randomItems = new ArrayList>(); + private ChestLoot _chestLoot = new ChestLoot(); private NautHashMap _spells = new NautHashMap(); private WizardSpellMenu _wizard; private NautHashMap _wizards = new NautHashMap(); @@ -298,33 +299,18 @@ public class Wizards extends SoloGame }; } - private void addRandomItem(int amount, Material itemType, int newDurability, int minAmount, int maxAmount) + @EventHandler + public void onFireballDamage(EntityDamageByEntityEvent event) { - HashMap.SimpleEntry entry = new HashMap.SimpleEntry(new ItemStack(itemType, minAmount, (short) newDurability), maxAmount - - minAmount); - - for (int i = 0; i < amount; i++) + if (event.getDamager() instanceof Fireball) { - _randomItems.add(entry); - } - } - - private void addRandomItem(int amount, ItemStack item, int minAmount, int maxAmount) - { - item.setAmount(minAmount); - HashMap.SimpleEntry entry = new HashMap.SimpleEntry(item, maxAmount - minAmount); - - for (int i = 0; i < amount; i++) - { - _randomItems.add(entry); + event.setCancelled(true); } } @EventHandler public void onDamage(CustomDamageEvent event) { - event.SetDamageToLevel(false); - if (!event.IgnoreArmor()) { double percentProtected = 0; @@ -343,19 +329,19 @@ public class Wizards extends SoloGame if (name.contains("LEATHER")) { - percent = 6; + percent = 8; } else if (name.contains("GOLDEN") || name.contains("CHAINMAIL")) { - percent = 9; + percent = 12; } else if (name.contains("IRON")) { - percent = 12; + percent = 15; } else if (name.contains("DIAMOND")) { - percent = 15; + percent = 20; } if (name.contains("BOOTS")) @@ -398,10 +384,57 @@ public class Wizards extends SoloGame return s; } + @EventHandler + public void spellCooldown(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + if (!IsLive()) + { + return; + } + + for (Player player : GetPlayers(true)) + { + int heldSlot = player.getInventory().getHeldItemSlot(); + Wizard wizard = getWizard(player); + + for (int i = 0; i < 5; i++) + { + if (i == heldSlot) + continue; + + ItemStack item = player.getInventory().getItem(i); + + if (item != null) + { + SpellType spell = wizard.getSpell(i); + + if (spell != null) + { + int timeLeft = (int) Math.ceil(getUsableTime(wizard, spell).getKey()); + + timeLeft = Math.max(0, Math.min(63, timeLeft)) + 1; + + if (timeLeft != item.getAmount()) + { + item.setAmount(timeLeft); + + player.getInventory().setItem(i, item); + } + } + } + } + } + } + public void castSpell(Player player, Wizard wizard, SpellType spell, Object interacted) { - int spellLevel = wizard.getSpellLevel(spell); + if (spellLevel > 0) { @@ -449,29 +482,44 @@ public class Wizards extends SoloGame public void changeWandsType(Player player, int oldSlot, int newSlot) { PlayerInventory inv = player.getInventory(); + Wizard wizard = getWizard(player); if (oldSlot >= 0 && oldSlot < 5) { - SpellType spell = getWizard(player).getSpell(oldSlot); + SpellType spell = wizard.getSpell(oldSlot); if (spell != null) { + int timeLeft = (int) Math.ceil(getUsableTime(wizard, spell).getKey()); + + timeLeft = Math.max(0, Math.min(63, timeLeft)) + 1; + ItemStack item = inv.getItem(oldSlot); + item.setType(spell.getSpellItem().getType()); + + item.setDurability(spell.getSpellItem().getDurability()); + + item.setAmount(timeLeft); + inv.setItem(oldSlot, item); } } if (newSlot >= 0 && newSlot < 5) { - SpellType spell = getWizard(player).getSpell(newSlot); + SpellType spell = wizard.getSpell(newSlot); if (spell != null) { ItemStack item = inv.getItem(newSlot); + item.setDurability((short) 0); + item.setType(spell.getWandType().getMaterial()); + item.setAmount(1); + inv.setItem(newSlot, item); } } @@ -484,11 +532,10 @@ public class Wizards extends SoloGame for (int slot = 0; slot < 5; slot++) { - ItemStack item = inv.getItem(slot); - SpellType type = wizard.getSpell(slot); - - if (item != null && item.getType() != Material.STAINED_GLASS_PANE) + if (slot < wizard.getWandsOwned()) { + ItemStack item = inv.getItem(slot); + SpellType type = wizard.getSpell(slot); String display; if (type != null) @@ -596,46 +643,41 @@ public class Wizards extends SoloGame { for (SpellType spellType : SpellType.values()) { - for (int i = 0; i < spellType.getItemAmount(); i++) - { - _randomItems.add(new HashMap.SimpleEntry(spellType.getSpellBook(this), 0)); - } + _chestLoot.addLoot(spellType.getSpellBook(this), spellType.getItemAmount()); } - for (int i = 0; i < 4; i++) - { - _randomItems.add(new HashMap.SimpleEntry(makeUnusedWand(), 0)); - } + _chestLoot.addLoot( + new ItemBuilder(makeBlankWand()).setTitle(C.cWhite + "Spell Wand" + buildTime()) + .addEnchantment(UtilInv.getDullEnchantment(), 1).build(), 4); - addRandomItem(15, Material.CARROT_ITEM, 0, 1, 2); - addRandomItem(15, Material.COOKED_BEEF, 0, 1, 2); - addRandomItem(15, Material.BREAD, 0, 1, 2); - addRandomItem(15, new ItemBuilder(Material.COOKED_CHICKEN).setTitle(C.cWhite + "Cheese").build(), 1, 2); - addRandomItem(5, Material.WHEAT, 0, 1, 2); - addRandomItem(5, Material.STICK, 0, 1, 2); - addRandomItem(5, Material.WOOD, 0, 1, 10); - addRandomItem(5, Material.BOAT, 0, 1, 2); - addRandomItem(5, Material.FLINT, 0, 1, 2); - addRandomItem(5, Material.FEATHER, 0, 1, 2); - addRandomItem(5, Material.GOLD_INGOT, 0, 1, 2); - addRandomItem(5, Material.LEATHER_BOOTS, 0, 1, 1); - addRandomItem(5, Material.LEATHER_CHESTPLATE, 0, 1, 1); - addRandomItem(5, Material.LEATHER_HELMET, 0, 1, 1); - addRandomItem(5, Material.LEATHER_LEGGINGS, 0, 1, 1); - addRandomItem(3, Material.CHAINMAIL_BOOTS, 0, 1, 1); - addRandomItem(3, Material.CHAINMAIL_CHESTPLATE, 0, 1, 1); - addRandomItem(3, Material.CHAINMAIL_HELMET, 0, 1, 1); - addRandomItem(3, Material.CHAINMAIL_LEGGINGS, 0, 1, 1); - addRandomItem(3, Material.FISHING_ROD, 0, 1, 1); - // addRandomItem(5, Material.BOW, 0, 1, 1); - // addRandomItem(5, Material.ARROW, 0, 1, 5); - addRandomItem(5, Material.IRON_INGOT, 0, 1, 2); - addRandomItem(3, Material.DIAMOND, 0, 1, 1); - addRandomItem(5, Material.EXP_BOTTLE, 0, 1, 2); - addRandomItem(1, Material.IRON_BOOTS, 0, 1, 1); - addRandomItem(1, Material.IRON_CHESTPLATE, 0, 1, 1); - addRandomItem(1, Material.IRON_HELMET, 0, 1, 1); - addRandomItem(1, Material.IRON_LEGGINGS, 0, 1, 1); + _chestLoot.addLoot(Material.CARROT_ITEM, 15, 1, 2); + _chestLoot.addLoot(Material.COOKED_BEEF, 15, 1, 2); + _chestLoot.addLoot(Material.BREAD, 15, 1, 2); + _chestLoot.addLoot(new ItemBuilder(Material.COOKED_CHICKEN).setTitle(C.cWhite + "Cheese").build(), 15, 1, 2); + + _chestLoot.addLoot(Material.WHEAT, 5, 1, 2); + _chestLoot.addLoot(Material.WOOD, 5, 1, 10); + _chestLoot.addLoot(Material.BOAT, 5, 1, 2); + _chestLoot.addLoot(Material.FISHING_ROD, 3, 1, 1); + + _chestLoot.addLoot(Material.GOLD_INGOT, 5, 1, 2); + _chestLoot.addLoot(Material.IRON_INGOT, 5, 1, 2); + _chestLoot.addLoot(Material.DIAMOND, 3, 1, 1); + + _chestLoot.addLoot(Material.LEATHER_BOOTS, 6, 1, 1); + _chestLoot.addLoot(Material.LEATHER_LEGGINGS, 6, 1, 1); + _chestLoot.addLoot(Material.LEATHER_CHESTPLATE, 6, 1, 1); + _chestLoot.addLoot(Material.LEATHER_HELMET, 6, 1, 1); + + _chestLoot.addLoot(Material.CHAINMAIL_BOOTS, 5, 1, 1); + _chestLoot.addLoot(Material.CHAINMAIL_CHESTPLATE, 5, 1, 1); + _chestLoot.addLoot(Material.CHAINMAIL_HELMET, 5, 1, 1); + _chestLoot.addLoot(Material.CHAINMAIL_LEGGINGS, 5, 1, 1); + + _chestLoot.addLoot(Material.IRON_BOOTS, 2, 1, 1); + _chestLoot.addLoot(Material.IRON_CHESTPLATE, 2, 1, 1); + _chestLoot.addLoot(Material.IRON_HELMET, 2, 1, 1); + _chestLoot.addLoot(Material.IRON_LEGGINGS, 2, 1, 1); } @EventHandler @@ -718,27 +760,12 @@ public class Wizards extends SoloGame if (type != null) { + Entry entry = getUsableTime(wizard, type); - double usableTime = 0;// Time in seconds till usable - - if (wizard.getMana() < type.getManaCost(wizard)) - { - usableTime = (type.getManaCost(wizard) - wizard.getMana()) / (20 * wizard.getManaPerTick()); - } - - double cooldown = wizard.getCooldown(type) != 0 ? (double) (wizard.getCooldown(type) - System - .currentTimeMillis()) / 1000D : 0; - boolean displayCooldown = false; - - if (cooldown > 0 && cooldown > usableTime) - { - usableTime = cooldown; - displayCooldown = true; - } + double usableTime = entry.getKey();// Time in seconds till usable if (usableTime > 0) { - usableTime = UtilMath.trim(1, usableTime); double maxSeconds = Math.max(type.getSpellCooldown(wizard), @@ -746,7 +773,7 @@ public class Wizards extends SoloGame displayProgress(C.cRed, C.cRed + type.getSpellName(), 1f - (usableTime / maxSeconds), - (displayCooldown ? + (entry.getValue() ? UtilTime.convertString((long) (usableTime * 1000), 1, TimeUnit.FIT) @@ -770,19 +797,71 @@ public class Wizards extends SoloGame } } + private Entry getUsableTime(Wizard wizard, SpellType type) + { + double usableTime = 0; + + if (wizard.getMana() < type.getManaCost(wizard)) + { + usableTime = (type.getManaCost(wizard) - wizard.getMana()) / (20 * wizard.getManaPerTick()); + } + + double cooldown = wizard.getCooldown(type) != 0 ? (double) (wizard.getCooldown(type) - System.currentTimeMillis()) / 1000D + : 0; + boolean displayCooldown = false; + + if (cooldown > 0 && cooldown > usableTime) + { + usableTime = cooldown; + displayCooldown = true; + } + + return new HashMap.SimpleEntry(usableTime, displayCooldown); + } + + private ArrayList getItems(Player player) + { + ArrayList items = new ArrayList(); + PlayerInventory inv = player.getInventory(); + + for (int i = 5; i < inv.getSize(); i++) + { + ItemStack item = inv.getItem(i); + + if (item != null && item.getType() != Material.AIR) + { + items.add(item.clone()); + } + } + + for (ItemStack item : inv.getArmorContents()) + { + if (item != null && item.getType() != Material.AIR) + { + items.add(item.clone()); + } + } + + ItemStack cursorItem = player.getItemOnCursor(); + + if (cursorItem != null && cursorItem.getType() != Material.AIR) + items.add(cursorItem.clone()); + + return items; + } + private void dropSpells(Player player) { HashSet spells = new HashSet(); ArrayList itemsToDrop = new ArrayList(); Wizard wizard = getWizard(player); - int wandsHeld = 0; for (int i = 0; i < 5; i++) { SpellType type = wizard.getSpell(i); - if (type != null && type != SpellType.MagicMissile) + if (type != null && type != SpellType.ManaBolt) { spells.add(type); } @@ -790,41 +869,29 @@ public class Wizards extends SoloGame for (SpellType spell : wizard.getKnownSpells()) { - if (spell != SpellType.MagicMissile && UtilMath.random.nextInt(5) == 0) + if (spell != SpellType.ManaBolt && UtilMath.random.nextInt(5) == 0) { spells.add(spell); } } - for (ItemStack item : UtilInv.getItems(player)) + for (ItemStack item : getItems(player)) { - switch (item.getType()) - { - case WOOD_HOE: - case STONE_HOE: - case GOLD_HOE: - case IRON_HOE: - case DIAMOND_HOE: - case BLAZE_ROD: - case STICK: - wandsHeld++; - break; - case STAINED_GLASS_PANE: - break; - default: - player.getWorld().dropItemNaturally(player.getLocation(), item); - break; - } + player.getWorld().dropItemNaturally(player.getLocation(), item); } for (SpellType type : spells) { - itemsToDrop.add(type.getSpellBook(this)); + ItemStack item = type.getSpellBook(this); + + UtilInv.addDullEnchantment(item); + + itemsToDrop.add(item); } - if (wandsHeld > 3 || UtilMath.random.nextBoolean()) + if (wizard.getWandsOwned() > 3 || UtilMath.random.nextBoolean()) { - itemsToDrop.add(makeUnusedWand()); + itemsToDrop.add(makeBlankWand()); } itemsToDrop.add(new ItemBuilder(Material.NETHER_STAR).setTitle(buildTime()).build()); @@ -850,9 +917,9 @@ public class Wizards extends SoloGame private void fillWithLoot(Block block) { BlockState state = block.getState(); + if (state instanceof InventoryHolder) { - InventoryHolder holder = (InventoryHolder) state; Inventory inv = holder.getInventory(); boolean containsSpell = false; @@ -860,8 +927,7 @@ public class Wizards extends SoloGame for (int i = 0; i < 5 || !containsSpell; i++) { - Entry entry = _randomItems.get(UtilMath.r(_randomItems.size())); - ItemStack item = entry.getKey().clone(); + ItemStack item = _chestLoot.getLoot(); SpellType spellType = getSpell(item); @@ -871,12 +937,12 @@ public class Wizards extends SoloGame continue; } - if (!containsSpell) + if (spellType != null) { - containsSpell = spellType != null; + containsSpell = true; + UtilInv.addDullEnchantment(item); } - item.setAmount(item.getAmount() + UtilMath.r(entry.getValue() + 1)); inv.setItem(UtilMath.r(inv.getSize()), item); } @@ -948,17 +1014,15 @@ public class Wizards extends SoloGame returnToHub(event.getPlayer()); } - public ItemStack makeUnusedWand() + public ItemStack makeBlankWand() { ItemBuilder builder = new ItemBuilder(Material.BLAZE_ROD); - builder.setTitle(ChatColor.WHITE + "Spell Wand" + buildTime()); + builder.setTitle(C.cWhite + "Right click to set a spell" + buildTime()); - builder.addLore( + builder.addLore(C.cGreen + C.Bold + "Left-Click" + C.cWhite + " Bind to Wand"); - C.cPurple + C.Bold + "LEFT CLICK" + C.cDGreen + " Cast spell", - - C.cGreen + C.Bold + "RIGHT CLICK" + C.cBlue + " Open Spellbook"); + builder.addLore(C.cGreen + C.Bold + "Right-Click" + C.cWhite + " Quickcast Spell"); return builder.build(); } @@ -1111,20 +1175,9 @@ public class Wizards extends SoloGame { Player p = event.getEntity(); - if (IsAlive(p)) + if (IsLive() && IsAlive(p)) { dropSpells(p); - /*Iterator itel = event.getDrops().iterator(); - - while (itel.hasNext()) - { - ItemStack item = itel.next(); - - if (item.getType() == Material.BLAZE_ROD || item.getType() == Material.STAINED_GLASS_PANE) - { - itel.remove(); - } - }*/ } _wizards.remove(p.getName()); @@ -1151,6 +1204,8 @@ public class Wizards extends SoloGame holo.setRemoveOnEntityDeath(); + holo.setViewDistance(16); + holo.start(); _droppedWandsBooks.add(event.getEntity()); @@ -1158,6 +1213,7 @@ public class Wizards extends SoloGame } else if (item.getType() == Material.BLAZE_ROD) { + item.removeEnchantment(UtilInv.getDullEnchantment()); Hologram holo = new Hologram(getArcadeManager().getHologramManager(), @@ -1169,6 +1225,8 @@ public class Wizards extends SoloGame holo.setRemoveOnEntityDeath(); + holo.setViewDistance(16); + holo.start(); _droppedWandsBooks.add(event.getEntity()); @@ -1209,6 +1267,29 @@ public class Wizards extends SoloGame { if (event.GetState() == GameState.Live) { + for (Player player : GetPlayers(true)) + { + Kit kit = GetKit(player); + + if (kit instanceof KitMage) + { + Wizard wizard = getWizard(player); + + for (int a = 0; a < 2; a++) + { + for (int i = 0; i < 100; i++) + { + SpellType spell = SpellType.values()[UtilMath.r(SpellType.values().length)]; + + if (wizard.getSpellLevel(spell) == 0 && UtilMath.r(10) < spell.getItemAmount()) + { + onSpellLearn(player, spell); + break; + } + } + } + } + } for (SpellType spells : SpellType.values()) { try @@ -1251,12 +1332,15 @@ public class Wizards extends SoloGame private boolean onGainWand(Player p) { - int slot = p.getInventory().first(Material.STAINED_GLASS_PANE); + Wizard wizard = getWizard(p); + + int slot = wizard.getWandsOwned(); if (slot >= 0 && slot < 5) { - p.getInventory().setItem(slot, - new ItemBuilder(makeUnusedWand()).setTitle(C.cWhite + "Right click to set a spell").build()); + wizard.setWandsOwned(wizard.getWandsOwned() + 1); + + p.getInventory().setItem(slot, makeBlankWand()); p.updateInventory(); @@ -1264,8 +1348,6 @@ public class Wizards extends SoloGame } else { - Wizard wizard = getWizard(p); - wizard.addMana(100); p.sendMessage(C.cGold + "Wizards" + C.cDGray + "> " + C.cGray + "Wand converted into mana"); } @@ -1304,42 +1386,41 @@ public class Wizards extends SoloGame } } - @EventHandler - public void onLive(GameStateChangeEvent event) + public void setupWizard(Player player) { - if (event.GetState() == GameState.Live) + Kit kit = GetKit(player); + Wizard wizard = new Wizard(kit instanceof KitWitchDoctor ? 150 : 100); + + _wizards.put(player.getName(), wizard); + + if (kit instanceof KitMystic) { - for (Player player : GetPlayers(true)) + wizard.setManaPerTick(wizard.getManaPerTick() * 1.1F); + } + + wizard.setWandsOwned(kit instanceof KitSorcerer ? 3 : 2); + + for (int i = 0; i < 5; i++) + { + if (i < wizard.getWandsOwned()) { - Kit kit = GetKit(player); - Wizard wizard = new Wizard(kit instanceof KitWitchDoctor ? 150 : 100); + player.getInventory().addItem(((Wizards) Manager.GetGame()).makeBlankWand()); + } + else + { + player.getInventory().addItem( - _wizards.put(player.getName(), wizard); + new ItemBuilder(Material.INK_SACK, 1, (short) 5) - if (kit instanceof KitMage) - { - for (int a = 0; a < 2; a++) - { - for (int i = 0; i < 100; i++) - { - SpellType spell = SpellType.values()[UtilMath.r(SpellType.values().length)]; + .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) - if (wizard.getSpellLevel(spell) == 0 && UtilMath.r(10) < spell.getItemAmount()) - { - onSpellLearn(player, spell); - break; - } - } - } - } - else if (kit instanceof KitMystic) - { - wizard.setManaPerTick(wizard.getManaPerTick() * 1.1F); - } + .addLore(C.cGray + C.Italics + "Wands can be found in chests and dead players") - changeWandsTitles(player); + .build()); } } + + changeWandsTitles(player); } @EventHandler @@ -1385,7 +1466,6 @@ public class Wizards extends SoloGame if (item.getType() == Material.BLAZE_ROD) { - if (onGainWand(p)) { event.setCancelled(true); @@ -1425,7 +1505,7 @@ public class Wizards extends SoloGame { Player p = event.getPlayer(); - if (_wizards.containsKey(p.getName())) + if (IsLive() && _wizards.containsKey(p.getName())) { dropSpells(p); } @@ -1501,19 +1581,33 @@ public class Wizards extends SoloGame if (result != null) { - if (result.getType().name().contains("_SWORD") || result.getType().name().contains("_AXE")) + Material mat = result.getType(); + + if (mat.name().contains("_SWORD") || mat.name().contains("_AXE")) { event.getInventory().setResult(new ItemStack(Material.AIR)); UtilPlayer.message(event.getViewers().get(0), C.cRed + "You may not craft weapons"); } - else if (result.getType() == Material.STICK || result.getType() == Material.FERMENTED_SPIDER_EYE - || result.getType().name().contains("_HOE")) + else if (mat == Material.STICK || mat.name().contains("_HOE")) { event.getInventory().setResult(new ItemStack(Material.AIR)); UtilPlayer.message(event.getViewers().get(0), C.cRed + "You may not craft this item"); } + else + { + for (SpellType spell : SpellType.values()) + { + if (mat == spell.getSpellItem().getType()) + { + event.getInventory().setResult(new ItemStack(Material.AIR)); + + UtilPlayer.message(event.getViewers().get(0), C.cRed + "You may not craft this item"); + break; + } + } + } } } @@ -1588,7 +1682,6 @@ public class Wizards extends SoloGame if (_endgameMessageCounter <= 6) { - if (event.getType() != UpdateType.SEC) { return; @@ -1633,6 +1726,12 @@ public class Wizards extends SoloGame } } + if (_endgameMessageCounter == 6) + { + WorldTimeSet = 0; + WorldData.World.setTime(15000); + } + _endgameMessageCounter++; } else @@ -1642,9 +1741,13 @@ public class Wizards extends SoloGame return; } + if (_nextEndgameStrike > 150) + { + _nextEndgameStrike -= 2; + } + if (UtilTime.elapsed(_lastEndgameStrike, _nextEndgameStrike)) { - _nextEndgameStrike -= 20; _lastEndgameStrike = System.currentTimeMillis(); if (_endGameEvent == 0) @@ -1656,6 +1759,33 @@ public class Wizards extends SoloGame makeLightning(); } } + + if (_lastGhastMoan < System.currentTimeMillis()) + { + Sound sound = null; + + switch (UtilMath.r(3)) + { + case 0: + sound = Sound.GHAST_MOAN; + break; + case 1: + sound = Sound.CAT_HIT; + break; + case 2: + sound = Sound.GHAST_SCREAM; + break; + default: + break; + } + + for (Player player : GetPlayers(false)) + { + player.playSound(player.getLocation(), sound, 0.7F, 0 + (UtilMath.random.nextFloat() / 10)); + } + + _lastGhastMoan = System.currentTimeMillis() + 5000 + (UtilMath.r(8) * 1000); + } } } @@ -1663,7 +1793,7 @@ public class Wizards extends SoloGame { int chance = UtilMath.r(50) + 3; int accuracy = Math.max((int) (chance - (_accuracy * chance)), 1); - _accuracy += 0.003; + _accuracy += 0.0001; ArrayList players = GetPlayers(true); @@ -1695,23 +1825,6 @@ public class Wizards extends SoloGame return; } - /*else - { - if (_fireballQueue.isEmpty()) - { - _fireballQueue = GetPlayers(true); - } - - if (_fireballItel == null || !_fireballItel.hasNext()) - { - _fireballItel = _fireballQueue.iterator(); - } - - loc = _fireballItel.next().getLocation(); - - loc.add(UtilMath.r(10) - 5, 0, UtilMath.r(10) - 5); - }*/ - loc.getWorld().spigot().strikeLightningEffect(loc, true); loc.getWorld().playSound(loc, Sound.AMBIENCE_THUNDER, 5F, 0.8F + UtilMath.random.nextFloat()); loc.getWorld().playSound(loc, Sound.EXPLODE, 2F, 0.9F + (UtilMath.random.nextFloat() / 3)); @@ -1746,10 +1859,29 @@ public class Wizards extends SoloGame } } + @EventHandler + public void preventEnchanting(EnchantItemEvent event) + { + event.setCancelled(true); + } + + @EventHandler + public void preventAnvil(InventoryClickEvent event) + { + if (event.getView().getTopInventory() != null && event.getView().getTopInventory() instanceof AnvilInventory) + { + event.setCancelled(true); + } + } + private void makeMeteor() { - _fireballSpeed += 0.01; - _endgameSize += 0.08; + _fireballSpeed += 0.002; + + if (_endgameSize < 10) + { + _endgameSize += 0.04; + } Location loc = getEndgameLocation(); @@ -1758,29 +1890,6 @@ public class Wizards extends SoloGame return; } - /*if (UtilMath.r(3) != 0) - { - loc = new Location(WorldData.World, WorldData.MinX + UtilMath.r(WorldData.MaxX - WorldData.MinX), 0, WorldData.MinZ - + UtilMath.r(WorldData.MaxZ - WorldData.MinZ)); - - loc = loc.getWorld().getHighestBlockAt(loc).getLocation(); - } - else - { - if (_fireballQueue.isEmpty()) - { - _fireballQueue = GetPlayers(true); - } - - if (_fireballItel == null || !_fireballItel.hasNext()) - { - _fireballItel = _fireballQueue.iterator(); - } - - loc = _fireballItel.next().getLocation(); - - }*/ - summonMeteor(loc, 1.5F * _endgameSize); } @@ -1811,7 +1920,7 @@ public class Wizards extends SoloGame if (i++ % 6 == 0) { - fireball.getWorld().playSound(fireball.getLocation(), Sound.CAT_HISS, 1.4F, 0F); + fireball.getWorld().playSound(fireball.getLocation(), Sound.CAT_HISS, 1.3F, 0F); } } else @@ -1836,7 +1945,7 @@ public class Wizards extends SoloGame } @EventHandler - public void summonMeteors(UpdateEvent event) + public void instantDeath(UpdateEvent event) { if (event.getType() != UpdateType.SEC) return; @@ -1870,7 +1979,7 @@ public class Wizards extends SoloGame if (itel.hasNext()) { getArcadeManager().GetDamage().NewDamageEvent(player, null, null, DamageCause.ENTITY_EXPLOSION, 9999, false, - true, true, "Meteor", "Meteor"); + true, true, "Magic", "Magic"); } } } @@ -1879,33 +1988,37 @@ public class Wizards extends SoloGame @EventHandler public void updateMana(UpdateEvent event) { - if ((event.getType() == UpdateType.TICK) && GetState() == GameState.Live) + if (event.getType() != UpdateType.TICK) { - Iterator> itel = _wizards.entrySet().iterator(); - - while (itel.hasNext()) - { - Entry entry = itel.next(); - Player player = Bukkit.getPlayerExact(entry.getKey()); - - Wizard wizard = getWizard(player); - float newMana = wizard.getMana(); - - if (newMana < wizard.getMaxMana()) - { - newMana = Math.min(newMana + wizard.getManaPerTick(), wizard.getMaxMana()); - wizard.setMana(newMana); - } - - float percentage = Math.min(1, wizard.getMana() / wizard.getMaxMana()); - - String text = (int) Math.floor(wizard.getMana()) + "/" + (int) wizard.getMaxMana() + " mana " - + UtilTime.convert((int) (wizard.getManaPerTick() * 20000), 1, TimeUnit.SECONDS) + "mps"; - - UtilTextTop.displayTextBar(player, percentage, text); - - drawUtilTextBottom(player); - } + return; } + + if (!IsLive()) + { + return; + } + + for (Player player : GetPlayers(true)) + { + Wizard wizard = getWizard(player); + + float newMana = wizard.getMana(); + + if (newMana < wizard.getMaxMana()) + { + newMana = Math.min(newMana + wizard.getManaPerTick(), wizard.getMaxMana()); + wizard.setMana(newMana); + } + + float percentage = Math.min(1, wizard.getMana() / wizard.getMaxMana()); + + String text = (int) Math.floor(wizard.getMana()) + "/" + (int) wizard.getMaxMana() + " mana " + + UtilTime.convert((int) (wizard.getManaPerTick() * 20000), 1, TimeUnit.SECONDS) + "mps"; + + UtilTextTop.displayTextBar(player, percentage, text); + + drawUtilTextBottom(player); + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java index 5372ce4cf..72aa5c7af 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java @@ -1,7 +1,5 @@ package nautilus.game.arcade.game.games.wizards.kit; -import mineplex.core.common.util.C; -import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.wizards.Wizards; import nautilus.game.arcade.kit.Kit; @@ -15,35 +13,17 @@ import org.bukkit.inventory.ItemStack; public class KitMage extends Kit { - public KitMage(ArcadeManager manager) - { - super(manager, "Mage", KitAvailability.Free, new String[] - { - "Start with two extra spells" - }, new Perk[0], EntityType.WITCH, new ItemStack(Material.BLAZE_ROD)); - } + public KitMage(ArcadeManager manager) + { + super(manager, "Mage", KitAvailability.Free, new String[] + { + "Start with two extra spells" + }, new Perk[0], EntityType.WITCH, new ItemStack(Material.BLAZE_ROD)); + } - @Override - public void GiveItems(Player player) - { - for (int i = 0; i < 5; i++) - { - if (i < 2) - { - player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); - } - else - { - player.getInventory().addItem( - - new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 8) - - .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) - - .addLore(C.cGray + C.Italics + "Wands can be found in chests and on dead players") - - .build()); - } - } - } + @Override + public void GiveItems(Player player) + { + ((Wizards) this.Manager.GetGame()).setupWizard(player); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java index 32a755eab..66c2e13e5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java @@ -1,7 +1,5 @@ package nautilus.game.arcade.game.games.wizards.kit; -import mineplex.core.common.util.C; -import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.wizards.Wizards; import nautilus.game.arcade.kit.Kit; @@ -15,35 +13,17 @@ import org.bukkit.inventory.ItemStack; public class KitMystic extends Kit { - public KitMystic(ArcadeManager manager) - { - super(manager, "Mystic", KitAvailability.Free, new String[] - { - "Mana regeneration increased by 10%" - }, new Perk[0], EntityType.WITCH, new ItemStack(Material.WOOD_HOE)); - } + public KitMystic(ArcadeManager manager) + { + super(manager, "Mystic", KitAvailability.Free, new String[] + { + "Mana regeneration increased by 10%" + }, new Perk[0], EntityType.WITCH, new ItemStack(Material.WOOD_HOE)); + } - @Override - public void GiveItems(Player player) - { - for (int i = 0; i < 5; i++) - { - if (i < 2) - { - player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); - } - else - { - player.getInventory().addItem( - - new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 8) - - .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) - - .addLore(C.cGray + C.Italics + "Wands can be found in chests and on dead players") - - .build()); - } - } - } + @Override + public void GiveItems(Player player) + { + ((Wizards) this.Manager.GetGame()).setupWizard(player); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java index b0dda7740..d8497fa81 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java @@ -1,7 +1,5 @@ package nautilus.game.arcade.game.games.wizards.kit; -import mineplex.core.common.util.C; -import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.wizards.Wizards; import nautilus.game.arcade.kit.Kit; @@ -15,35 +13,17 @@ import org.bukkit.inventory.ItemStack; public class KitSorcerer extends Kit { - public KitSorcerer(ArcadeManager manager) - { - super(manager, "Sorcerer", KitAvailability.Free, new String[] - { - "Start out with an extra wand" - }, new Perk[0], EntityType.WITCH, new ItemStack(Material.STONE_HOE)); - } + public KitSorcerer(ArcadeManager manager) + { + super(manager, "Sorcerer", KitAvailability.Free, new String[] + { + "Start out with an extra wand" + }, new Perk[0], EntityType.WITCH, new ItemStack(Material.STONE_HOE)); + } - @Override - public void GiveItems(Player player) - { - for (int i = 0; i < 5; i++) - { - if (i < 3) - { - player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); - } - else - { - player.getInventory().addItem( - - new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 8) - - .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) - - .addLore(C.cGray + C.Italics + "Wands can be found in chests and on dead players") - - .build()); - } - } - } + @Override + public void GiveItems(Player player) + { + ((Wizards) this.Manager.GetGame()).setupWizard(player); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java index 74b9cc154..570fc9540 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java @@ -1,8 +1,6 @@ package nautilus.game.arcade.game.games.wizards.kit; import mineplex.core.achievement.Achievement; -import mineplex.core.common.util.C; -import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.wizards.Wizards; import nautilus.game.arcade.kit.Kit; @@ -16,40 +14,22 @@ import org.bukkit.inventory.ItemStack; public class KitWitchDoctor extends Kit { - public KitWitchDoctor(ArcadeManager manager) - { - super(manager, "Witch Doctor", KitAvailability.Free, new String[] - { - "Max mana increased to 150" - }, new Perk[0], EntityType.WITCH, new ItemStack(Material.IRON_HOE)); + public KitWitchDoctor(ArcadeManager manager) + { + super(manager, "Witch Doctor", KitAvailability.Free, new String[] + { + "Max mana increased to 150" + }, new Perk[0], EntityType.WITCH, new ItemStack(Material.IRON_HOE)); - this.setAchievementRequirements(new Achievement[] - { - Achievement.BACON_BRAWL_WINS - }); - } + this.setAchievementRequirements(new Achievement[] + { + Achievement.BACON_BRAWL_WINS + }); + } - @Override - public void GiveItems(Player player) - { - for (int i = 0; i < 5; i++) - { - if (i < 2) - { - player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); - } - else - { - player.getInventory().addItem( - - new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 8) - - .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) - - .addLore(C.cGray + C.Italics + "Wands can be found in chests and on dead players") - - .build()); - } - } - } + @Override + public void GiveItems(Player player) + { + ((Wizards) this.Manager.GetGame()).setupWizard(player); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellAnvilDrop.java similarity index 97% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellAnvilDrop.java index baf2a332e..26486168e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDroom.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellAnvilDrop.java @@ -20,7 +20,7 @@ import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.metadata.FixedMetadataValue; -public class SpellDroom extends Spell implements SpellClick +public class SpellAnvilDrop extends Spell implements SpellClick { private ArrayList _fallingBlocks = new ArrayList(); @@ -44,7 +44,7 @@ public class SpellDroom extends Spell implements SpellClick for (Player p : players) { UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, p.getLocation(), 0, 0, 0, 0, 1); - + Location loc = p.getLocation().clone().add(0, 15 + (getSpellLevel(player) * 3), 0); int lowered = 0; @@ -83,18 +83,18 @@ public class SpellDroom extends Spell implements SpellClick private void handleAnvil(Entity entity) { _fallingBlocks.remove(entity); - + int spellLevel = entity.getMetadata("SpellLevel").get(0).asInt(); CustomExplosion explosion = new CustomExplosion(Wizards.getArcadeManager().GetDamage(), Wizards.getArcadeManager() - .GetExplosion(), entity.getLocation(), 1 + (spellLevel / 2F), "Droom"); + .GetExplosion(), entity.getLocation(), 1 + (spellLevel / 2F), "Anvil Drop"); explosion.setPlayer((Player) entity.getMetadata("Wizard").get(0).value(), true); explosion.setFallingBlockExplosion(true); explosion.setDropItems(false); - + explosion.setMaxDamage(6 + (spellLevel * 4)); explosion.explode(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java index cd83001b1..7bcb923ad 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java @@ -38,7 +38,7 @@ public class SpellFireball extends Spell implements SpellClick explosion.setDropItems(false); - explosion.setMaxDamage((spellLevel * 2) + 6); + explosion.setMaxDamage(spellLevel + 6); explosion.explode(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java index 725d447bd..f20eec657 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java @@ -44,8 +44,8 @@ public class SpellFlash extends Spell implements SpellClick curRange = 0; // Destination - Location loc = player.getLocation() - .add(player.getLocation().getDirection().multiply(curRange).add(new Vector(0, 0.4, 0))); + Location loc = player.getEyeLocation().add(new Vector(0, 0.2, 0)) + .add(player.getLocation().getDirection().multiply(curRange)).add(new Vector(0, 0.4, 0)); if (curRange > 0) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java index c6c2c84db..5e78ee191 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFrostBarrier.java @@ -30,7 +30,7 @@ public class SpellFrostBarrier extends Spell implements SpellClick, SpellClickBl @Override public void castSpell(Player player) { - Location loc = player.getLocation().add(player.getLocation().getDirection().normalize().multiply(1.5)); + Location loc = player.getLocation().add(player.getLocation().getDirection().setY(0).normalize().multiply(1.5)); castSpell(player, loc.getBlock().getRelative(BlockFace.DOWN)); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellHeal.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellHeal.java index 5cc960576..06e82bcf1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellHeal.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellHeal.java @@ -2,42 +2,27 @@ package nautilus.game.arcade.game.games.wizards.spells; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; -import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickEntity; - import org.bukkit.Effect; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -public class SpellHeal extends Spell implements SpellClick, SpellClickEntity +public class SpellHeal extends Spell implements SpellClick { - @Override - public void castSpell(Player p) - { - castSpell(p, p); - } + @Override + public void castSpell(Player p) + { + if (p.getHealth() < p.getMaxHealth()) + { + double health = p.getHealth() + (3 + getSpellLevel(p)); - @Override - public void castSpell(Player p, Entity target) - { - if (!(target instanceof LivingEntity)) - return; + if (health > p.getMaxHealth()) + health = p.getMaxHealth(); - LivingEntity entity = (LivingEntity) target; + p.setHealth(health); - if (entity.getHealth() < entity.getMaxHealth()) - { - double health = entity.getHealth() + (3 + getSpellLevel(p)); + p.getWorld().spigot().playEffect(p.getEyeLocation(), Effect.HEART, 0, 0, 0.8F, 0.4F, 0.8F, 0, 6, 30); - if (health > entity.getMaxHealth()) - health = entity.getMaxHealth(); - - entity.setHealth(health); - - entity.getWorld().spigot().playEffect(entity.getEyeLocation(), Effect.HEART, 0, 0, 0.8F, 0.4F, 0.8F, 0, 6, 30); - - charge(p); - } - } + charge(p); + } + } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java index b4c5c2151..f293d3c25 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java @@ -99,9 +99,20 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.PACKED_ICE, 0), loc, 0.3F, 0.3F, 0.3F, 0, 12); loc.getWorld().playSound(loc, Sound.GLASS, 1.2F, 1); - if (loc.getBlock().getType() == Material.FIRE) + for (int x = -1; x <= 1; x++) { - loc.getBlock().setType(Material.AIR); + for (int y = -1; y <= 1; y++) + { + for (int z = -1; z <= 1; z++) + { + Block block = loc.clone().add(x, y, z).getBlock(); + + if (block.getType() == Material.FIRE) + { + block.setType(Material.AIR); + } + } + } } _lastParticles.remove(data.GetThrown()); @@ -119,7 +130,7 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown { for (Location loc : UtilShapes.getLinesDistancedPoints(_lastParticles.get(entity), entity.getLocation(), 0.3)) { - UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.SNOW_BLOCK, 0), loc, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.PACKED_ICE, 0), loc, 0, 0, 0, 0, 1); } _lastParticles.put(entity, entity.getLocation()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java index 8c69f696b..ae1e5e480 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java @@ -1,7 +1,6 @@ package nautilus.game.arcade.game.games.wizards.spells; import java.util.ArrayList; -import java.util.List; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; @@ -22,6 +21,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.Vector; public class SpellLightningStrike extends Spell implements SpellClick { @@ -29,78 +29,95 @@ public class SpellLightningStrike extends Spell implements SpellClick @Override public void castSpell(final Player p) { - List list = p.getLastTwoTargetBlocks(UtilBlock.blockAirFoliageSet, 150); - if (list.size() > 1) + double curRange = 0; + + while (curRange <= 150) { - final Location loc = list.get(0).getLocation().add(0.5, 0, 0.5); + Location newTarget = p.getEyeLocation().add(new Vector(0, 0.2, 0)) + .add(p.getLocation().getDirection().multiply(curRange)); - while (UtilBlock.solid(loc.getBlock().getRelative(BlockFace.UP))) + if (!UtilBlock.airFoliage(newTarget.getBlock()) + || !UtilBlock.airFoliage(newTarget.getBlock().getRelative(BlockFace.UP))) + break; + + // Progress Forwards + curRange += 0.2; + } + + if (curRange < 2) + { + return; + } + + // Destination + final Location loc = p.getLocation().add(p.getLocation().getDirection().multiply(curRange).add(new Vector(0, 0.4, 0))); + + while (UtilBlock.solid(loc.getBlock().getRelative(BlockFace.UP))) + { + loc.add(0, 1, 0); + } + + UtilParticle.PlayParticle(ParticleType.ANGRY_VILLAGER, loc.clone().add(0, 1.3, 0), 0.5F, 0.3F, 0.5F, 0, 7); + + Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable() + { + + @Override + public void run() { - loc.add(0, 1, 0); - } + LightningStrike lightning = p.getWorld().strikeLightning(loc); - UtilParticle.PlayParticle(ParticleType.ANGRY_VILLAGER, loc.clone().add(0, 1.3, 0), 0.5F, 0.3F, 0.5F, 0, 7); + lightning.setMetadata("Damager", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), p)); - Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable() - { + Block b = loc.getWorld().getHighestBlockAt(loc); - @Override - public void run() + b = b.getRelative(BlockFace.DOWN); + + ArrayList toExplode = new ArrayList(); + ArrayList toFire = new ArrayList(); + + for (int x = -1; x <= 1; x++) { - LightningStrike lightning = p.getWorld().strikeLightning(loc); - - lightning.setMetadata("Damager", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), p)); - - Block b = loc.getWorld().getHighestBlockAt(loc); - - b = b.getRelative(BlockFace.DOWN); - - ArrayList toExplode = new ArrayList(); - ArrayList toFire = new ArrayList(); - - for (int x = -1; x <= 1; x++) + for (int y = -1; y <= 1; y++) { - for (int y = -1; y <= 1; y++) + for (int z = -1; z <= 1; z++) { - for (int z = -1; z <= 1; z++) + if (x == 0 || (Math.abs(x) != Math.abs(z) || UtilMath.r(3) == 0)) { - if (x == 0 || (Math.abs(x) != Math.abs(z) || UtilMath.r(3) == 0)) - { - Block block = b.getRelative(x, y, z); + Block block = b.getRelative(x, y, z); - if ((y == 0 || (x == 0 && z == 0)) && block.getType() != Material.AIR - && block.getType() != Material.BEDROCK) - { - if (y == 0 || UtilMath.random.nextBoolean()) - { - toExplode.add(block); - toFire.add(block); - } - } - else if (block.getType() == Material.AIR) + if ((y == 0 || (x == 0 && z == 0)) && block.getType() != Material.AIR + && block.getType() != Material.BEDROCK) + { + if (y == 0 || UtilMath.random.nextBoolean()) { + toExplode.add(block); toFire.add(block); } } + else if (block.getType() == Material.AIR) + { + toFire.add(block); + } } } } - - Wizards.getArcadeManager().GetExplosion().BlockExplosion(toExplode, b.getLocation(), false); - - for (Block block : toFire) - { - if (UtilMath.random.nextBoolean()) - { - block.setType(Material.FIRE); - } - } } - }, 20); + Wizards.getArcadeManager().GetExplosion().BlockExplosion(toExplode, b.getLocation(), false); - charge(p); - } + for (Block block : toFire) + { + if (UtilMath.random.nextBoolean()) + { + block.setType(Material.FIRE); + } + } + } + + }, 20); + + charge(p); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellManaBolt.java similarity index 97% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellManaBolt.java index b1b2f414b..361a0fdcc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellManaBolt.java @@ -20,7 +20,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -public class SpellMagicMissile extends Spell implements SpellClick +public class SpellManaBolt extends Spell implements SpellClick { public void castSpell(final Player player) @@ -60,7 +60,7 @@ public class SpellMagicMissile extends Spell implements SpellClick if (entity != player && (!(entity instanceof Player) || Wizards.IsAlive(entity))) { Wizards.Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.MAGIC, damage, true, - true, false, "Magic Missile", "Magic Missile"); + true, false, "Mana Bolt", "Mana Bolt"); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java index 41eb6c030..c56787d0e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java @@ -39,6 +39,8 @@ public class SpellNapalm extends Spell implements SpellClick _glazedBlocks.put(Material.SMOOTH_BRICK, Material.NETHER_BRICK); _glazedBlocks.put(Material.LOG, Material.NETHERRACK); _glazedBlocks.put(Material.LOG_2, Material.NETHERRACK); + _glazedBlocks.put(Material.SMOOTH_BRICK, Material.COBBLESTONE); + _glazedBlocks.put(Material.CLAY, Material.STAINED_CLAY); } @Override @@ -55,6 +57,7 @@ public class SpellNapalm extends Spell implements SpellClick { ArrayList litOnFire = new ArrayList(); + HashMap tempIgnore = new HashMap(); double blocksTravelled; double size = 1; double lastTick; @@ -160,6 +163,15 @@ public class SpellNapalm extends Spell implements SpellClick double heat = bSize - UtilMath.offset(block.getLocation().add(0.5, 0.5, 0.5), napalmLoc); + if (tempIgnore.containsKey(block)) + { + if (tempIgnore.remove(block) > heat) + { + litOnFire.add(block); + continue; + } + } + if (heat > 0) { if (block.getType() != Material.AIR) @@ -167,12 +179,6 @@ public class SpellNapalm extends Spell implements SpellClick float strength = net.minecraft.server.v1_7_R4.Block.getById(block.getTypeId()).a( (net.minecraft.server.v1_7_R4.Entity) null) * 0.7F; - if (strength * 2 > size) - { - litOnFire.add(block); - continue; - } - if (strength <= heat) { block.setType(Material.AIR); @@ -180,16 +186,26 @@ public class SpellNapalm extends Spell implements SpellClick block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); } - else if (strength / 10 <= heat) + else if (0.2 <= heat) { if (_glazedBlocks.containsKey(block.getType())) { block.setType(_glazedBlocks.get(block.getType())); + if (block.getType() == Material.STAINED_CLAY) + { + block.setData((byte) 8); + } + block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, 0.6F + ((new Random().nextFloat() - 0.5F) / 3F)); } } + else if (strength * 2 > size) + { + tempIgnore.put(block, heat); + continue; + } } if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER) @@ -199,10 +215,11 @@ public class SpellNapalm extends Spell implements SpellClick block.setType(Material.AIR); block.getWorld().playSound(block.getLocation(), Sound.FIZZ, 1.3F, 0); + + litOnFire.add(block); } } - - if (block.getType() == Material.AIR) + else if (block.getType() == Material.AIR) { if (UtilMath.random.nextBoolean()) { @@ -236,7 +253,7 @@ public class SpellNapalm extends Spell implements SpellClick if (lastTick++ % 8 == 0) { - napalmLoc.getWorld().playSound(napalmLoc, Sound.CAT_HISS, (float) Math.min(2.2, size * 0.4), 0F); + napalmLoc.getWorld().playSound(napalmLoc, Sound.CAT_HISS, Math.min(0.8F + (float) (size * 0.09F), 1.8f), 0F); } if (blocksTravelled >= length) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java index a8683dd02..4be60e6c1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowBeam.java @@ -35,7 +35,7 @@ public class SpellRainbowBeam extends Spell implements SpellClick p.getEyeLocation().getDirection().normalize() .multiply(0.3 + p.getEyeLocation().distance(((LivingEntity) entityTarget).getEyeLocation()))); - double damage = (getSpellLevel(p) * 2) + 5; + double damage = (getSpellLevel(p) * 2) + 4; double dist = loc.distance(p.getLocation()) - (80 * .2D); // If target is more than 20% away diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java index d9aa685a2..b968c5ebd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java @@ -98,7 +98,6 @@ public class SpellRainbowRoad extends Spell implements SpellClick private int makeRoad(Location loc, BlockFace face, int colorProgress) { - Block block = loc.getBlock(); BlockFace[] faces = UtilShapes.getSideBlockFaces(face); @@ -118,6 +117,11 @@ public class SpellRainbowRoad extends Spell implements SpellClick for (Block b : bs) { + if (!Wizards.isInsideMap(b.getLocation())) + { + continue; + } + if (!_wallExpires.containsKey(block) && UtilBlock.solid(b)) { continue; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpeedBoost.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpeedBoost.java index 9589d0078..526028a03 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpeedBoost.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpeedBoost.java @@ -10,9 +10,7 @@ public class SpellSpeedBoost extends Spell implements SpellClick @Override public void castSpell(Player p) { - int potionLevel = getSpellLevel(p); - - Wizards.getArcadeManager().GetCondition().Factory().Speed("Speed Boost", p, p, 20, potionLevel, false, false, false); + Wizards.getArcadeManager().GetCondition().Factory().Speed("Speed Boost", p, p, 20, getSpellLevel(p), false, false, false); charge(p); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java index fbff132c6..d68fb677f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java @@ -6,7 +6,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; -import mineplex.core.common.util.C; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; From 497550549bd1c91c5d545957594f645128395d8c Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 30 Apr 2015 01:33:21 +1200 Subject: [PATCH 024/104] ResourcePackCode: Fixed the return to hub sender displaying the wrong message. Bad downloads are now sent back to hub. --- .../src/nautilus/game/arcade/ArcadeManager.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 80b110a3d..92fa0ebe6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -348,16 +348,14 @@ public class ArcadeManager extends MiniPlugin implements IRelation { _resourcePackNoResponse.remove(player.getName()); - returnHubNoResPack(player); + returnHubNoResPack(player, "Failed to download resource pack!"); } else if (response == EnumResourcePackStatus.FAILED_DOWNLOAD) { - System.out.println(player.getName() + " failed to download resource pack, trying again.."); + _resourcePackNoResponse.remove(player.getName()); - _resourcePackNoResponse.put(player.getName(), System.currentTimeMillis()); + returnHubNoResPack(player, "Failed to download resource pack!"); - player.setResourcePack(_resourcePackUrl); - return; } } @@ -1368,14 +1366,14 @@ public class ArcadeManager extends MiniPlugin implements IRelation for (Player player : UtilServer.getPlayers()) { if (!UtilPlayer.is1_8(player)) - returnHubNoResPack(player); + returnHubNoResPack(player, "You need to be using 1.8 to play " + GetGame().GetName() + "!"); } } - private void returnHubNoResPack(Player player) + private void returnHubNoResPack(Player player, String message) { UtilPlayer.message(player, " "); - UtilPlayer.message(player, C.cGold + C.Bold + "You need to be using 1.8 to play " + GetGame().GetName() + "!"); + UtilPlayer.message(player, C.cGold + C.Bold + message); UtilPlayer.message(player, " "); player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); @@ -1389,7 +1387,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation if (!UtilPlayer.is1_8(player) && _resourcePackRequired) { - returnHubNoResPack(player); + returnHubNoResPack(player, "You need to be using 1.8 to play " + GetGame().GetName() + "!"); return; } From 23ea7bbce47682cc6d7447496d6f4537066aac65 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 30 Apr 2015 20:55:30 +1200 Subject: [PATCH 025/104] Spectators: Set fire ticks to 0 on damage --- .../src/nautilus/game/arcade/managers/GameFlagManager.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java index 7a7c00480..a964681ea 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java @@ -97,6 +97,12 @@ public class GameFlagManager implements Listener if (damagee != null && Manager.isSpectator(damagee)) { event.SetCancelled("Damagee Spectator"); + + if (damagee.getFireTicks() > 0) + { + damagee.setFireTicks(0); + } + return; } From 5d36ddce3ac2296e065db450fa33809c814ff1db Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 30 Apr 2015 21:17:08 +1200 Subject: [PATCH 026/104] Arcade: Close only non-player inventories at 5 seconds --- .../core/cosmetic/CosmeticManager.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/CosmeticManager.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/CosmeticManager.java index 7d5b830fe..d41da36a3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/CosmeticManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/CosmeticManager.java @@ -154,15 +154,22 @@ public class CosmeticManager extends MiniPlugin _gadgetManager.setActiveItemSlot(i-1); } - public void setActive(boolean b) + public void setActive(boolean showInterface) { - _showInterface = b; - - if (!b) + _showInterface = showInterface; + + if (!showInterface) + { for (Player player : UtilServer.getPlayers()) - player.getOpenInventory().close(); + { + if (player.getOpenInventory().getTopInventory().getHolder() != player) + { + player.closeInventory(); + } + } + } } - + public void disableItemsForGame() { _gadgetManager.DisableAll(); From ed1c7e2336005304f3e8178a563115829441efa7 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Thu, 30 Apr 2015 18:20:35 -0500 Subject: [PATCH 027/104] Master Builders initial push (dont worry jon it doesnt effect anything for the update!) --- .../core/achievement/AchievementManager.java | 10 + .../src/nautilus/game/arcade/GameFactory.java | 2 + .../src/nautilus/game/arcade/GameType.java | 3 + .../games/baconbrawl/kits/KitMamaPig.java | 2 +- .../game/arcade/game/games/build/Build.java | 627 ++++++++++++++++++ .../arcade/game/games/build/BuildData.java | 100 +++ .../arcade/game/games/build/BuildQuality.java | 33 + .../game/games/smash/kits/KitSheep.java | 2 +- .../arcade/managers/GamePlayerManager.java | 2 +- .../game/arcade/managers/MiscManager.java | 7 + 10 files changed, 785 insertions(+), 3 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementManager.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementManager.java index a93b46ba3..ab0e5781c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementManager.java @@ -34,6 +34,8 @@ public class AchievementManager extends MiniPlugin private boolean _giveInterfaceItem = false; private NautHashMap> _log = new NautHashMap>(); + + private boolean _shopEnabled = true; public AchievementManager(StatsManager statsManager, CoreClientManager clientManager, DonationManager donationManager) { @@ -177,6 +179,9 @@ public class AchievementManager extends MiniPlugin @EventHandler public void openShop(PlayerInteractEvent event) { + if (!_shopEnabled) + return; + if (event.hasItem() && event.getItem().getType() == Material.SKULL_ITEM) { event.setCancelled(true); @@ -217,4 +222,9 @@ public class AchievementManager extends MiniPlugin return Achievement.getExperienceString(level) + " " + ChatColor.RESET; } + + public void setShopEnabled(boolean var) + { + _shopEnabled = var; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java index 4ff89e234..2320c9083 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java @@ -10,6 +10,7 @@ import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.games.baconbrawl.BaconBrawl; import nautilus.game.arcade.game.games.barbarians.Barbarians; import nautilus.game.arcade.game.games.bridge.Bridge; +import nautilus.game.arcade.game.games.build.Build; import nautilus.game.arcade.game.games.castlesiege.CastleSiege; import nautilus.game.arcade.game.games.champions.ChampionsDominate; import nautilus.game.arcade.game.games.champions.ChampionsTDM; @@ -68,6 +69,7 @@ public class GameFactory if (gameType == GameType.Barbarians) return new Barbarians(_manager); else if (gameType == GameType.BaconBrawl) return new BaconBrawl(_manager); else if (gameType == GameType.Bridge) return new Bridge(_manager); + else if (gameType == GameType.Build) return new Build(_manager); else if (gameType == GameType.CastleSiege) return new CastleSiege(_manager); else if (gameType == GameType.Christmas) return new Christmas(_manager); else if (gameType == GameType.DeathTag) return new DeathTag(_manager); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 95f90b871..6b1531435 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -8,6 +8,7 @@ public enum GameType BaconBrawl("Bacon Brawl", Material.PORK, (byte)0, GameCategory.ARCADE, 1), Barbarians("A Barbarians Life", Material.WOOD_AXE, (byte)0, GameCategory.ARCADE, 2), Bridge("The Bridges", Material.IRON_PICKAXE, (byte)0, GameCategory.SURVIVAL, 3), + CastleSiege("Castle Siege", Material.DIAMOND_CHESTPLATE, (byte)0, GameCategory.CLASSICS, 4), ChampionsTDM("Champions TDM", "Champions", Material.GOLD_SWORD, (byte)0, GameCategory.CHAMPIONS, 5), ChampionsDominate("Champions Domination", "Champions", Material.BEACON, (byte)0, GameCategory.CHAMPIONS, 6), @@ -55,6 +56,8 @@ public enum GameType Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48), ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49), + Build("Master Builders", Material.BRICK, (byte)0, GameCategory.CLASSICS, 50), + Event("Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999); String _name; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/baconbrawl/kits/KitMamaPig.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/baconbrawl/kits/KitMamaPig.java index 4852415a5..ab258e925 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/baconbrawl/kits/KitMamaPig.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/baconbrawl/kits/KitMamaPig.java @@ -32,7 +32,7 @@ public class KitMamaPig extends Kit new String[] { - "Maba & Baby Piggles fight together!" + "Mama & Baby Piggles fight together!" }, new Perk[] diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java new file mode 100644 index 000000000..ea1417dee --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -0,0 +1,627 @@ +package nautilus.game.arcade.game.games.build; + +import java.util.ArrayList; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.entity.ThrownPotion; +import org.bukkit.entity.minecart.ExplosiveMinecart; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockPistonExtendEvent; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.GameType; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.events.PlayerPrepareTeleportEvent; +import nautilus.game.arcade.game.SoloGame; +import nautilus.game.arcade.game.games.draw.kits.*; +import nautilus.game.arcade.kit.Kit; + +public class Build extends SoloGame +{ + private NautHashMap _data = new NautHashMap(); + + private int _buildGameState = 0; + private long _buildStateTime = 0; + private long _buildTime = 300000; + private long _voteTime = 12000; + private long _viewTime = 16000; + private BuildData _viewData = null; + + private String[] _words; + + private String _word = "?"; + + public Build(ArcadeManager manager) + { + super(manager, GameType.Build, + + new Kit[] + { + new KitSlowAndSteady(manager), + new KitSelector(manager), + new KitTools(manager), + }, + + new String[] + { + "Build the word!", + }); + + this.StrictAntiHack = true; + this.Damage = false; + this.HungerSet = 20; + this.HealthSet = 20; + + this.BlockBreak = true; + this.BlockPlace = true; + + this.ItemDrop = true; + this.ItemPickup = true; + + this.InventoryClick = true; + + this.WorldTimeSet = 6000; + + this.PrepareFreeze = false; + + _words = new String[] + { + "Pirate Ship", "Mineshaft", "Archers Tower", "Dinner Table", "Pokemon" + }; + } + + @EventHandler + public void prepare(PlayerPrepareTeleportEvent event) + { + event.GetPlayer().setGameMode(GameMode.CREATIVE); + event.GetPlayer().setFlying(true); + } + + @EventHandler + public void prepare(GameStateChangeEvent event) + { + if (event.GetState() == GameState.Prepare) + { + if (GetPlayers(true).size() > GetTeamList().get(0).GetSpawns().size()) + { + SetState(GameState.End); + Announce(C.Bold + "Too Many Players..."); + return; + } + } + + else if (event.GetState() == GameState.Live) + { + for (Player player : GetPlayers(true)) + { + Location spawn = UtilAlg.findClosest(player.getLocation(), this.GetTeamList().get(0).GetSpawns()); + + _data.put(player, new BuildData(player, spawn, WorldData.GetDataLocs("YELLOW"))); + } + + _word = _words[UtilMath.r(_words.length)]; + + UtilTextMiddle.display(null, C.cYellow + "Build " + C.cWhite + _word, 5, 80, 5); + } + } + + @EventHandler + public void stateChange(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + if (!IsLive()) + return; + + //Game + if (_buildGameState == 0) + { + if (System.currentTimeMillis() - GetStateTime() > _buildTime) + { + _buildGameState++; + _buildStateTime = System.currentTimeMillis(); + + //Flags + this.BlockBreak = false; + this.BlockPlace = false; + + this.InventoryClick = false; + + UtilTextMiddle.display(null, C.cYellow + "Time Up!", 5, 60, 5); + } + } + //Pause + else if (_buildGameState == 1) + { + if (UtilTime.elapsed(_buildStateTime, 5000)) + { + _buildGameState++; + _buildStateTime = System.currentTimeMillis(); + } + } + //Review Phase + else if (_buildGameState == 2) + { + //End Vote Time + if (_viewData != null && (UtilTime.elapsed(_buildStateTime, _voteTime) || + _viewData.Score.size() == GetPlayers(true).size() - 1)) //All votes cast + { + for (Player player : GetPlayers(true)) + UtilInv.Clear(player); + + //Verdict + if (!_viewData.Judged) + { + BuildQuality quality = getQuality(_viewData.getScore()); + + if (quality == BuildQuality.Failure) + { + Manager.GetExplosion().BlockExplosion(_viewData.Blocks, _viewData.Spawn, false); + + //Effects + _viewData.Spawn.getWorld().playSound(_viewData.Spawn, Sound.EXPLODE, 3f, 1f); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, _viewData.Spawn, 4f, 4f, 4f, 0, 10); + } + + //Announce Builder + UtilTextMiddle.display(quality.getText(), "Built by: " + C.Bold + _viewData.Player.getName(), 5, 60, 5); + } + + _viewData.Judged = true; + } + + //Start Vote + if (UtilTime.elapsed(_buildStateTime, _viewTime) || _viewData == null) + { + _viewData = null; + + //Get Next View Data + for (BuildData data : _data.values()) + { + if (!data.Judged) + { + _viewData = data; + break; + } + } + + //All Builds are Viewed + if (_viewData == null) + { + //Wait a little longer after voting, give time for EXPLODES + if (UtilTime.elapsed(_buildStateTime, _voteTime)) + { + _buildGameState++; + _buildStateTime = System.currentTimeMillis(); + } + } + //Start Viewing + else + { + teleportPlayers(_viewData); + + //Give Items + for (Player player : GetPlayers(true)) + { + UtilInv.Clear(player); + + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)14, 1, C.Bold + "+0 " + C.cRed + C.Bold + "MY EYES ARE BLEEDING!")); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)1, 1, C.Bold + "+1 " + C.cGold + C.Bold + "MEH...")); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)4, 1, C.Bold + "+2 " + C.cYellow + C.Bold + "It's okay...")); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)5, 1, C.Bold + "+3 " + C.cGreen + C.Bold + "Good")); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)3, 1, C.Bold + "+4 " + C.cAqua + C.Bold + "Amazing")); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)10, 1, C.Bold + "+5 " + C.cPurple + C.Bold + "WOW! EVERYTHING IS AWESOME!")); + } + + //Text + UtilTextMiddle.display(null, C.cYellow + "Cast Your Vote!", 5, 60, 5); + + _buildStateTime = System.currentTimeMillis(); + } + } + } + //Pause + else if (_buildGameState == 3) + { + if (UtilTime.elapsed(_buildStateTime, 5000)) + { + _buildGameState++; + _buildStateTime = System.currentTimeMillis(); + } + } + else if (_buildGameState == 4) + { + ArrayList places = new ArrayList(); + + //Calculate Places + boolean first = true; + while (!_data.isEmpty()) + { + Player bestPlayer = null; + double bestScore = 0; + + for (Player player : _data.keySet()) + { + double score = _data.get(player).getScore(); + + if (bestPlayer == null || score > bestScore) + { + bestPlayer = player; + bestScore = score; + } + } + + AddGems(bestPlayer, bestScore, "Build Votes", false, false); + + + BuildData data = _data.remove(bestPlayer); + + //Teleport to winner + if (first) + { + teleportPlayers(data); + + first = false; + } + + //Only count if they got above TERRIBLE score + if (getQuality(bestScore) != BuildQuality.Failure) + places.add(bestPlayer); + } + + //Announce + AnnounceEnd(places); + + //Gems + if (places.size() >= 1) + AddGems(places.get(0), 20, "1st Place", false, false); + + if (places.size() >= 2) + AddGems(places.get(1), 15, "2nd Place", false, false); + + if (places.size() >= 3) + AddGems(places.get(2), 10, "3rd Place", false, false); + + for (Player player : GetPlayers(false)) + if (player.isOnline()) + AddGems(player, 10, "Participation", false, false); + + //End + SetState(GameState.End); + } + } + + private void teleportPlayers(BuildData data) + { + //Teleport + for (int i=0 ; i Math.max(data.CornerA.getBlockY(), data.CornerB.getBlockY()) + 3) + { + //Inform + if (Recharge.Instance.use(event.getPlayer(), "Boundary Check", 1000, false, false)) + UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot leave your designated area!")); + + //Stop + event.setTo(event.getFrom()); + + //Velocity + event.getPlayer().setVelocity(UtilAlg.getTrajectory(event.getTo(), data.Spawn)); + } + } + + public boolean inBuildArea(BuildData data, Block block) + { + if (!data.inBuildArea(block)) + { + UtilPlayer.message(data.Player, F.main("Game", "You can only build in your designated area!")); + return false; + } + + return true; + } + + @EventHandler + public void voteRegister(PlayerInteractEvent event) + { + if (!IsLive()) + return; + + if (_buildGameState != 2) + return; + + if (_viewData == null) + return; + + if (!IsAlive(event.getPlayer())) + return; + + if (!UtilGear.isMat(event.getPlayer().getItemInHand(), Material.STAINED_GLASS_PANE)) + return; + + if (!UtilEvent.isAction(event, ActionType.R) && !UtilEvent.isAction(event, ActionType.L)) + return; + + if (event.getPlayer().equals(_viewData.Player)) + { + UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot vote on your own creation!")); + return; + } + + if (!UtilTime.elapsed(_buildStateTime, 1500)) + return; + + switch (event.getPlayer().getItemInHand().getData().getData()) + { + case 14: + _viewData.addScore(event.getPlayer(), 0); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + break; + case 1: + _viewData.addScore(event.getPlayer(), 1); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + break; + case 4: + _viewData.addScore(event.getPlayer(), 2); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + break; + case 5: + _viewData.addScore(event.getPlayer(), 3); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + break; + case 3: + _viewData.addScore(event.getPlayer(), 4); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + break; + case 10: + _viewData.addScore(event.getPlayer(), 5); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + break; + default: + break; + } + } + + @EventHandler + public void playerQuit(PlayerQuitEvent event) + { + _data.remove(event.getPlayer()); + + for (BuildData data : _data.values()) + data.removeScore(event.getPlayer()); + } + + @EventHandler + public void clean(UpdateEvent event) + { + if (!InProgress()) + return; + + if (event.getType() != UpdateType.FAST) + return; + + for (Entity ent : this.WorldData.World.getEntities()) + { + if (ent instanceof TNTPrimed || + ent instanceof ExplosiveMinecart || + ent instanceof Item) + { + ent.remove(); + } + } + } + + @EventHandler + public void potionThrow(ProjectileLaunchEvent event) + { + if (event.getEntity() instanceof ThrownPotion) + event.getEntity().remove(); + } + + @EventHandler + public void bowShoot(EntityShootBowEvent event) + { + event.getProjectile().remove(); + } + + @EventHandler + public void blockFromTo(BlockFromToEvent event) + { + for (BuildData data : _data.values()) + if (data.inBuildArea(event.getToBlock())) + return; + + event.setCancelled(true); + } + + @EventHandler + public void blockFromTo(BlockPistonExtendEvent event) + { + for (BuildData data : _data.values()) + for (Block block : event.getBlocks()) + if (!data.inBuildArea(block)) + { + event.getBlock().getWorld().playSound(event.getBlock().getLocation(), Sound.PISTON_EXTEND, 2f, 0.5f); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1); + event.setCancelled(true); + return; + } + } + + @EventHandler + public void blockFromTo(BlockPistonRetractEvent event) + { + for (BuildData data : _data.values()) + if (!data.inBuildArea(event.getBlock())) + { + event.getBlock().getWorld().playSound(event.getBlock().getLocation(), Sound.PISTON_RETRACT, 2f, 0.5f); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.getBlock().getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1); + event.setCancelled(true); + return; + } + } + + @Override + @EventHandler + public void ScoreboardUpdate(UpdateEvent event) + { + if (!InProgress()) + return; + + if (event.getType() != UpdateType.FAST) + return; + + //Wipe Last + Scoreboard.Reset(); + + Scoreboard.WriteBlank(); + Scoreboard.Write(C.cYellow + C.Bold + "Build Theme"); + Scoreboard.Write(_word); + + + Scoreboard.WriteBlank(); + + if (_buildGameState == 0) + { + Scoreboard.Write(C.cYellow + C.Bold + "Build Time"); + Scoreboard.Write(UtilTime.MakeStr(Math.max(0, _buildTime - (System.currentTimeMillis() - this.GetStateTime())), 1)); + } + else if (_buildGameState == 2) + { + Scoreboard.Write(C.cYellow + C.Bold + "Vote Time"); + Scoreboard.Write(UtilTime.MakeStr(Math.max(0, _voteTime - (System.currentTimeMillis() - _buildStateTime)), 1)); + + if (_viewData != null) + { + Scoreboard.WriteBlank(); + + Scoreboard.Write(C.cYellow + C.Bold + "Votes Cast"); + Scoreboard.Write(_viewData.Score.size() + " / " + GetPlayers(true).size()); + } + } + + + Scoreboard.Draw(); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java new file mode 100644 index 000000000..e007a60d6 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -0,0 +1,100 @@ +package nautilus.game.arcade.game.games.build; + +import java.util.ArrayList; +import java.util.HashSet; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilParticle.ParticleType; + +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +public class BuildData +{ + public Player Player; + + public boolean Judged = false; + + public Location Spawn; + + public Location CornerA; + public Location CornerB; + + public HashSet Blocks = new HashSet(); + + public HashSet Entities = new HashSet(); + + public NautHashMap Particles = new NautHashMap(); + + public int Time = 6000; + + public int Weather = 0; + + public NautHashMap Score = new NautHashMap(); + + public BuildData(Player player, Location spawn, ArrayList buildBorders) + { + Player = player; + Spawn = spawn; + + CornerA = UtilAlg.findClosest(spawn, buildBorders); + buildBorders.remove(CornerA); + CornerB = UtilAlg.findClosest(spawn, buildBorders); + buildBorders.remove(CornerB); + } + + public void addBlock(Block block) + { + Blocks.add(block); + } + + public void addScore(Player player, int i) + { + Score.put(player, i); + } + + public void removeScore(Player player) + { + Score.remove(player); + } + + public double getScore() + { + double score = 0; + + for (int i : Score.values()) + score += i; + + return score/(double)Score.size(); + } + + public boolean inBuildArea(Block block) + { + if (block.getX() < Math.min(CornerA.getBlockX(), CornerB.getBlockX())) + return false; + + if (block.getY() < Math.min(CornerA.getBlockY(), CornerB.getBlockY())) + return false; + + if (block.getZ() < Math.min(CornerA.getBlockZ(), CornerB.getBlockZ())) + return false; + + if (block.getX() > Math.max(CornerA.getBlockX(), CornerB.getBlockX())) + return false; + + if (block.getY() > Math.max(CornerA.getBlockY(), CornerB.getBlockY())) + return false; + + if (block.getZ() > Math.max(CornerA.getBlockZ(), CornerB.getBlockZ())) + return false; + + return true; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java new file mode 100644 index 000000000..7b5d2b218 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java @@ -0,0 +1,33 @@ +package nautilus.game.arcade.game.games.build; + +import mineplex.core.common.util.C; + +public enum BuildQuality +{ + Mindblowing(C.cAqua + "Mindblowing"), + Amazing(C.cGreen + "Amazing"), + Good(C.cYellow + "Good"), + Satisfactory(C.cGold + "Satisfactory"), + Failure(C.cRed + "FAILURE"); + + private String _text; + + BuildQuality(String text) + { + _text = text; + } + + public String getText() + { + return _text; + } + + public static BuildQuality getQuality(double score) + { + if (score <= 0.25) return Failure; + if (score <= 0.50) return Satisfactory; + if (score <= 0.70) return Good; + if (score <= 0.95) return Amazing; + return Mindblowing; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java index 90dfa2574..cbabc5f8f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java @@ -66,7 +66,7 @@ public class KitSheep extends SmashKit { ChatColor.RESET + "Charge up static electricity in your", ChatColor.RESET + "wooly coat, and then unleash it upon", - ChatColor.RESET + "enemies in a devestating laser beam!", + ChatColor.RESET + "enemies in a devastating laser beam!", })); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java index d2a8b950c..0c28bab88 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java @@ -159,7 +159,7 @@ public class GamePlayerManager implements Listener @EventHandler public void DisallowCreativeClick(InventoryClickEvent event) { - if (Manager.GetGame() == null || !Manager.GetGame().InProgress() || Manager.GetGameHostManager().isEventServer()) + if (Manager.GetGame() == null || !Manager.GetGame().InProgress() || Manager.GetGameHostManager().isEventServer() || Manager.GetGame().GetType() == GameType.Build) return; if ((event.getInventory().getType() == InventoryType.CREATIVE || event.getInventory().getType() == InventoryType.PLAYER) && !event.getWhoClicked().isOp()) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java index a598d8459..1929aaeba 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java @@ -9,6 +9,7 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; +import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game.GameState; import org.bukkit.Material; @@ -134,4 +135,10 @@ public class MiscManager implements Listener event.setCancelled(true); } } + + @EventHandler + public void disableAchievementGUI(GameStateChangeEvent event) + { + Manager.GetAchievement().setShopEnabled(event.GetState() != GameState.Prepare && event.GetState() != GameState.Live); + } } From 7bd133f704619c4d5e9ff638eac4271fd9479062 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 1 May 2015 13:04:05 +1200 Subject: [PATCH 028/104] Wizards: Temporary resource pack --- .../Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index c7870ef28..972830fa5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -52,7 +52,7 @@ public enum GameType TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE, 45), UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46), WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE, 47), - Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48), + Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48, "https://www.dropbox.com/s/qrtc9c91ktvmf3q/WizPack.zip?dl=1", true), ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49), Event("Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999); From c660e0e3c7fb382506c865ee7dee83364979b32b Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 1 May 2015 14:19:13 +1200 Subject: [PATCH 029/104] Wizards: Re-sorted spells --- .../game/games/wizards/SpellMenuPage.java | 2 - .../arcade/game/games/wizards/SpellType.java | 76 ++++++++++--------- .../arcade/game/games/wizards/Wizards.java | 4 +- 3 files changed, 42 insertions(+), 40 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java index cb09edc26..8e2a33cf9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java @@ -1,7 +1,6 @@ package nautilus.game.arcade.game.games.wizards; import java.util.ArrayList; - import mineplex.core.account.CoreClientManager; import mineplex.core.common.util.C; import mineplex.core.donation.DonationManager; @@ -124,5 +123,4 @@ public class SpellMenuPage extends ShopPageBase spells = new ArrayList(Arrays.asList(SpellType.values())); - for (SpellType spell2 : values()) + Collections.sort(spells, new Comparator() + { + + @Override + public int compare(SpellType o1, SpellType o2) + { + int number = new Integer(o2.getItemAmount()).compareTo(o1.getItemAmount()); + + if (number == 0) + { + return o1.getSpellName().compareToIgnoreCase(o2.getSpellName()); + } + + return number; + } + }); + + for (SpellType spell : spells) + { + spell._slot = 18 + spell.getElement().getFirstSlot(); + + for (SpellType spell2 : spells) { if (spell != spell2 && spell.getElement() == spell2.getElement() && spell._slot <= spell2._slot) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 54e9397a6..1c126f8d0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -1196,7 +1196,7 @@ public class Wizards extends SoloGame event.getEntity().getLocation().add(0, 1, 0), - C.cDPurple + C.Bold + "Spellbook", + C.cDPurple + C.Bold + "Spell", spell.getElement().getColor() + spell.getSpellName()); @@ -1741,7 +1741,7 @@ public class Wizards extends SoloGame return; } - if (_nextEndgameStrike > 150) + if (_nextEndgameStrike > 750) { _nextEndgameStrike -= 2; } From fbafeca1503c782aedf328c9561352595bcf2a46 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 1 May 2015 15:44:11 +1200 Subject: [PATCH 030/104] Wizards: Remove block burn flag true --- .../src/nautilus/game/arcade/game/games/wizards/Wizards.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 1c126f8d0..5984c0601 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -163,7 +163,6 @@ public class Wizards extends SoloGame InventoryOpenBlock = true; InventoryOpenChest = true; InventoryClick = true; - WorldBlockBurn = true; DisableKillCommand = false; SoupEnabled = false; DamageTeamSelf = true; From 319cde5c462e20f64e37f675b9577744d44896dd Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 1 May 2015 16:14:59 +1200 Subject: [PATCH 031/104] Wizards: Update resource pack url --- .../Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 0c40897fe..0b1975da0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -52,7 +52,7 @@ public enum GameType TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE, 45), UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46), WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE, 47), - Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48, "https://www.dropbox.com/s/qrtc9c91ktvmf3q/WizPack.zip?dl=1", true), + Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48, "http://chivebox.com/file/c/ResWizards.zip", true), ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49), Build("Master Builders", Material.BRICK, (byte)0, GameCategory.CLASSICS, 50), From 21800d83c682823e979fe6aecee6ad1a2ca1b9e5 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Thu, 30 Apr 2015 23:16:30 -0500 Subject: [PATCH 032/104] Build fixes --- .../game/arcade/game/games/build/Build.java | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index ea1417dee..e0d6b2701 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -140,7 +140,7 @@ public class Build extends SoloGame _word = _words[UtilMath.r(_words.length)]; - UtilTextMiddle.display(null, C.cYellow + "Build " + C.cWhite + _word, 5, 80, 5); + UtilTextMiddle.display(null, C.cYellow + "Build " + C.cWhite + _word, 0, 80, 5); } } @@ -167,7 +167,7 @@ public class Build extends SoloGame this.InventoryClick = false; - UtilTextMiddle.display(null, C.cYellow + "Time Up!", 5, 60, 5); + UtilTextMiddle.display(null, C.cYellow + "Time Up!", 0, 60, 5); } } //Pause @@ -204,7 +204,7 @@ public class Build extends SoloGame } //Announce Builder - UtilTextMiddle.display(quality.getText(), "Built by: " + C.Bold + _viewData.Player.getName(), 5, 60, 5); + UtilTextMiddle.display(quality.getText(), "Built by: " + C.Bold + _viewData.Player.getName(), 0, 80, 5); } _viewData.Judged = true; @@ -254,7 +254,7 @@ public class Build extends SoloGame } //Text - UtilTextMiddle.display(null, C.cYellow + "Cast Your Vote!", 5, 60, 5); + UtilTextMiddle.display(null, C.cYellow + "Cast Your Vote!", 0, 60, 5); _buildStateTime = System.currentTimeMillis(); } @@ -353,7 +353,7 @@ public class Build extends SoloGame private BuildQuality getQuality(double score) { - return BuildQuality.getQuality(score / ((double)GetPlayers(true).size()-1 * 1.5d)); + return BuildQuality.getQuality(score / (double)(GetPlayers(true).size()-1)); } @EventHandler @@ -476,27 +476,27 @@ public class Build extends SoloGame { case 14: _viewData.addScore(event.getPlayer(), 0); - UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 0, 40, 5, event.getPlayer()); break; case 1: _viewData.addScore(event.getPlayer(), 1); - UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 0, 40, 5, event.getPlayer()); break; case 4: _viewData.addScore(event.getPlayer(), 2); - UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 0, 40, 5, event.getPlayer()); break; case 5: _viewData.addScore(event.getPlayer(), 3); - UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 0, 40, 5, event.getPlayer()); break; case 3: _viewData.addScore(event.getPlayer(), 4); - UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 0, 40, 5, event.getPlayer()); break; case 10: _viewData.addScore(event.getPlayer(), 5); - UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 5, 40, 5, event.getPlayer()); + UtilTextMiddle.display(null, event.getPlayer().getItemInHand().getItemMeta().getDisplayName(), 0, 40, 5, event.getPlayer()); break; default: break; @@ -562,8 +562,6 @@ public class Build extends SoloGame for (Block block : event.getBlocks()) if (!data.inBuildArea(block)) { - event.getBlock().getWorld().playSound(event.getBlock().getLocation(), Sound.PISTON_EXTEND, 2f, 0.5f); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1); event.setCancelled(true); return; } @@ -575,8 +573,6 @@ public class Build extends SoloGame for (BuildData data : _data.values()) if (!data.inBuildArea(event.getBlock())) { - event.getBlock().getWorld().playSound(event.getBlock().getLocation(), Sound.PISTON_RETRACT, 2f, 0.5f); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.getBlock().getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1); event.setCancelled(true); return; } @@ -617,7 +613,7 @@ public class Build extends SoloGame Scoreboard.WriteBlank(); Scoreboard.Write(C.cYellow + C.Bold + "Votes Cast"); - Scoreboard.Write(_viewData.Score.size() + " / " + GetPlayers(true).size()); + Scoreboard.Write(_viewData.Score.size() + " / " + (GetPlayers(true).size()-1)); } } From b33828f5a1233fffa23f23f2b99302be2c43ac6e Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Thu, 30 Apr 2015 23:48:58 -0500 Subject: [PATCH 033/104] Added LibraryAddict's crash exploit patch for craftbukkit.jar --- Plugins/Libraries/craftbukkit.jar | Bin 20773493 -> 21005637 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Plugins/Libraries/craftbukkit.jar b/Plugins/Libraries/craftbukkit.jar index 2fb5e85809dff6e1ff22bcd940355de88868bd3b..8936962120684038bdc5038f28c0ff486dee0306 100644 GIT binary patch delta 1367410 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 c8<{aVi3_0NjRXN#A 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 z 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

g`XGkui<z|14iUXSF< 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≫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 va<2mq;w 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

yul5DsfRUo}&V)#$e z-U0zY*opyjuDrt=9P;6AZOU=r3@5g!*uIB`r%Gu?a|5!@fodc|B$@AeYACard0aQ3 z`(t!UWjmo4S@a8olWeD{+wvzlEy>3j(%TKiB_~>T;hjFxpe;B+>*8x~3@hl)9TK|! z#uxsNh6hfA-c#DRtOJc#TA>}NJ>p=s^M*&_HOQI6s9zkdGE~w$wiQJ}JSLPtYO4VF-q@%0Vz;M71k_dn7frsW?-`9{6VTlLqupp&a+O zFx^(lu;KfTB7b~$#SD{uM?z{DmJmD?^G&_-bo8M%1MnnS>|{YkFFrrGDu~260Us-IHgpHu36>gUP2dqwGwz_Qv3LqQd_yUViL{NoO?em&tbWv`m zq~!AdI%0sXbKvgw%Py^=9T$m*ef#~M5uu#ZR-9@vJQZ`0!HyMn%6Kjtb!vU>mpZfG zL(K0GBgC8|Qprv4ongxyx@Wj6r8jH+j=gl)^fgTD95}5aO8`D1!x7Szbz486OIhQw z9axGqL_8B;G9bfJ)oDe^U=pC8*&x}M#2ga*S`vvE=tV3Z&ovcEk8BU*bao3?g4pfee%~&Q?c_UOI z#GFPOt^VghOVTQ&}BPVmGjJg79d*+**5us$L{;zHqf&sTs zCF+=jv?7=Pb+$P>tIaS;@K2aOjovbxo=pf8vRuHQAu>upMiA5JGfZAgAQ|+ky~=kY z^y&~!7||XAWMIQPC1JMU0>1@%atDSYG*L1!W3m+ZnjJ?nxu`Y>47S823p-{%1?m12 z{%KU>=uuNab~$@t?JDE-2X}Qj2pa5*;prU=G_e?3DU2JF;!9-+^b637%OFw9_2^8j*gd-AGHc zf@QQ-ifg$#e>=Sd-P2AO?n3JwQ{ZK?q&*oYWLWCz@>5^^_W)hJ9rv*?&H-B+LC`sv zxb|l}lC2F%;oIs%zLv;we7cU{@d4DG)jE{nue@8oyYi5)mO!{ixCSN)7s){@TJvhB zP~2U)lY(J)^iqbkq&tpUK?=X7hVn7^w?5tFvS!1tWXO+iE*C&>%P*8G?p86FmacXz z@L{F3E70Bz`cB+CuChjA*LB-*5@V5k2*Tj9W@x3%mcB z-4i05trB}2t$Oe=t}w4$!P5+TcI8nw*`cV7Q1*54P-SMsK-C zN!}~kjW42Cwbxe=W+ei%Wqn>{)R!EcH|azoV$z}P$%l;7(*5pOJ(a_G2;~ppU!R@T zGe0QJ{IRI6e^b)@Vdd#;Df+P>$ebTso75#|{Y*P<@8}oyj4z*gUCHa-Rx@>KXm>4K zWh3i|YASZaA~Rbl+!`UaU-yIZU^ij1Auvxa*DJFEdv2S#TR9(WYvPMj#;{K=BFfi$ zgH-&oIuIXUlz~OX+5p!~WsR#&Qx6UX_7oQpJ8F0`U>_%gk@$X<#AU|=Y`m**frZPr z%?#ql)g{Gxad563iw(?7RMzlpS~X=aoUf`vb^u%rt(NJ=hh$+aa-*we$~PUT4=*l! z_ni(7uC@|-odLE?!qf08M^pTu7awpbpdS{ofbiz7Z_07zqK4<#us1a`O^(14%71pY zPMM1e`LNU&Ut;q=CQ)2vMp)+7QpLj#cZDY4SiCH6K>ezurD* z#7bm!MZAWg!W*T2wfeasWHE$afZzp9I>iGrz1hjWnLCtxJcxODnbw_o-a=%A0c@et zS`SL7yx=T2y$34*Z-)yUo$1Jmhh=_J4%l9{YbR3vjKg9Ci2=;y*)yVfdxL7dgTbV^ zamO1?srZ8Wq{XAMX#u-yT&78kne_8%&ZNO#z(kNrRAWNQT2IJymfI$5M<9CNXWb*O_~I|bU@RFML^jAa)GGX>%`15%ajM^n@`?@NJ9L? zV3CB)gZuRX#%gqG=6$7zCbqr!_yBmHDja*Lz2IdK-k{H+$ncrW%tMkcgri6dL;%8t zi~WE9ou|*#?qa|JNqLvl8_* z+*X_<5V*(u*d!F0atS>QM{>*A=vpFR2kFZl#lil4=k2=SF+=6 zn}y;KVt#W9sv7Y`$=Cc+ME|NhKq<=~jmefXc#Kz}mwLB$wqbL}H5c}vbF-nu!OIbF%H_RH9l zN$BD8f}yIzzg|EKu;%k9?y>q*W{Rwj#PYCb5l>Umai>I&fr}2xvS#|?%rYAyots&A zod=|qVU7A_nIg4h%PwVZRw7NR=keEhaJ5Z1SD}R7e=YNwlEdLUZ!-@_>60sk2Th?Z zn14xTm=sXT11I8^hCn6Or2t;J_I+Mw|O{4Yqgi}oiLAM`a zCkqQ-xhf0)kXdF6tATD)+j>}*^a~UtSfwP{^HGbyBWv(Evw`$hMhq2+!MRd63%&@2 z6}gxJ3(eWLa#@pQQm9jhx9kx}dm8@;#~TGwY}rGrEFm?J5RcF-CY-cALUh{lr|~t~|JmxW*>Ez_m5+ok!Fp)W|Y9qd;AGrG0-qFZF-2 zt~0EvQ4<#G$iv9cIzj3U-mqhgIUiYE4k zHPJ*tjnVkGyuaCVIp-eUFFtba?Ck99?C$KeMW_$Tdy$2c*v?h~*k39xUS-c`gvP(u z%COyL_YPFiuWCgO`pX40bPxH?KpA*0h}5MeT-YSum2G2mDbPp7UsKfK3;1M?_#r;? zBTeE5s6!;ePVWBw+I9GBuQ!qp8DMf@^WOzQ3A#9Yyc0JxkH4urzIi{7(2-`46BF;i zf9)J!t|-Q-KD%;uW0-@h%I7XRtt@?RR<{a^K1ZolPkO}fRkqp}Yb~*{xOQRCqYR(7 zI!WHM3+;KxfcSD1qVMgz@`&`G5+`v}6*LSR6mMZJr4dzh{G~zz@TN)yj*Uf9^;7!s zL7LULarhC1D{1cr3J>XhJ%2dEvuZ6GByi5DZfXCC3G;ajYV%L*fs>R6o zsan{TwcoTH3s^khOR#%m;!P?5iDa9b{-5aOoN&}aC11AS&Wa9oD@(CAkhNRo>-cKw zi=K6{t&mH7>*V;YTC98j z*Soj{*oZPLW$^6NM!LP*vm}0#cKdn$y2`e7I7qg7D0AS!BDT;` zW|JJhLAwU~&rM(VHz@oD2}khcigD@nSh)w#Ac(io#ak5pCq`I#d%kLmO~+YQC~1a0 zxIrJUI*MX{B07Iz@jY2F{u>~DZUUpWVR^ibvZuIiB@l9&$`bOCVLSxv%rfXF9Ya=e6turB3w!?Qp7u$L^FSg@1j*ArY%f( za{>6yq8u&)0|Xr`EWeReGama>e37!hOvfj4RLT+jHHrJOa*FcA;E56kkr?__JgB`BR{J zg-E!GWCgn$q4LG^qwz15v1jg}u_GcloE780^*K)Qi|W{^%j&DA{*T<04k-U8p#(v} z{}y|iQ7u0kU#cDVgK6FR{|MkC)^Y%c=u!flyX2#b_mg5zEx-%Izs6ex4^kiN&c8ah z6MMvyYO<$WZsyf7)0cmFF@Bd;lM8v$I*u#`)7cPKf{N>zvykXS1)XY__Bp z94%(41QXb}Z*&E88lYAv86>#wWBdS>?*viBy(oZQY>AQMg{0!6b@86eK8i5vdQ$Jl z$A6Bu$W|hj=UkejyA3XOLS12)%GDOWyjO*UyDG~GePYA^T`$1(%-)K_bx=v|n=lf)v5O|5=9dke!HkNW9kBmjg18+8D#Gj?k~ES%Eq{%ak0 zu5*ILv+0ES_wW4o><8vsazOzp??7F=Z;I?I(b$jwQ#s*hwI^zkxOVg7$!O6SPkGVl zq-|lxdOae`i13p)^h}tdHYPHIj<`)CE%ymx&&Y&c`ZKNw+_8GX17%xd_#``=#IGTI zhEKvB6$_D2JbvDz7B-y@xXbc2R=`zexreYt@)iCG zsamXhw`;wrRILFKCJhrhvNeG7=g35}s8UN~Sf4R)A(e`q4$CYiLtu56KBXa4K4RJe zdp;{9!B#uB4w1M^FE#%x-9Tq>=@* zBU&Xm^6AYJ#wdQsyM@Fvpen$x>vSVR^KU&wC?du%|HeSl=<;0f1ZGF#J*7N?iXfX06PlI{gIwD5dIP6vco2`FFDu8Y_467xXK? zwlJZ#x`b(52gmK(bQ#lJ!&UZq77QR>xhzVk%%?6+c&UiL+b^PPGCLRlR~P4g!H+Kd zSwg~Tb-$wF%)Zw@ofeWi);m-V=}0C2D%>|M;fV@Hz3%*PZoN|gL&X;n07GEx%s`Bq z#aWSE0fA#@l)ew25+iGbz5(bV6@IRZ$j0}DF8p?Of<>)e!d&M>71uv7PkXTjvAOZ$ z)d|juU>rS7h(zpiL4-e|X4WA*?W?>5TkV_#-F}0Le3@Asqta;IlB_nC@A8_?eRa1?}ZL0Sae9Ew&p8#C(PIGGYxFo zK2OBict!-{U|peqsnp9KnVUReje0E7G_P#pw8#c{$yI`=V%GOUBfR=qm>KNIqCJ{g zp^i_p6?Q!DP{LbbN)sVmHaj$ZG6EQSbdXI?aYYFRb?YJW=Z_Bjo5Xg$r*vsyLMs+GnB1MNmk@5t z7d=e)Ly_1WMPHK1N;^oz6~$XUGBNf^OpP8vIhlL`Q|Kp9ILD zw>vyk96ZK0(IPRI#@V68BX4?tJitZhavbO^Jp05e!-%ed?E#VNATMA*I7@Cr{i~UI zALy3YvD}jXE`H4c6v3|FMAoF@M*1THXfZ70kEM(+FhYRAni7cMPDP=fMY-+ zo|ZO8ja(AHlJnU7>$7@^r&KW}%6_YOcWNwnHNKLphZ2@5+$SWFDOgIbQXe8bMljqj zJn@=#2e{B^*m$a9d&lhgCNOppnEd#>MxaMCi9d#?)hErP8D6^V313s+Mu{G5#Pvp2 z!91~X;#8$uBR-jT9|fNsAJHtaoQdhq`dPDQ0pC5#&Zpm?&ReujEccYvwz>r^sVV>p z-U#o5TWfUw5y1XDIy%up^CRB4e!V7#(!2WO@hQ@g1Q~?cj%D5iaXh#~VvZuj`Sgiy z2w|+~E(JS;bWPl-4xI$$yT<;>HPHKAQQ-%m3my= zyI1pmI$m4nt&#ijIab3>vC6$z;ePCWaG$x2hWFAOi0Bi&&z_H7m}sXR=;$+Vi~B(ZeCH|WC1QSS zNS~Mcmz}CF;}S*v6=Cu81y-}GfI4WzFD56h(DLS|YE#{|Vm!=+jK5J*@g|^heLyzC zmuZRl+68`SL&7+!`Oyt20ti&64aT39f@n8sHB&Z*CWb_{Vr>yn!PRFIJ<`(P++;Z99 z#^Rn*?{}Y2@8i!TTD%iUy|X{B9J~!^2aJroNGddH@PQ{@e9Nzica>8>k59r5+C(ba zm}tXGE+wwjM*g(;=f`@qtIV;La{y>KUVHB(T9hOq9?i+wvvw_6qY!Va_Ui^(y?NE* z#C6(J>~c~Ehcl3-8Zg4sC5w<&X6GtIS-G(-XyeJdJxM&L6{`3;n_5#AARa(PC_yWk z-uZte{;n0&mcLl-IflcfxT(s1cXsF*A-(t_@r3%u0oOC&-{GHhm!1{AuF-bKgy}&2=&cTaqlH#MPj zst2~e=6#825W*4UfdQ{Q{C4S<&B=*OUKM zq90%8ljNtefac=e4V$khE$M5x7@(Vo7ScC$;$f2xO||FkYbRNxCJ`4JUwgM;D0YI6 zT@)_VVsS5sW$glzhF2*&bMxpEWxhiDt`^{$TS7Kb7>lfVK#QaTEwhFliXTHB2Rv6o z8wN8>q}xPmr+~5@Xk^bE?cN={W~UQt3xA71E;o0zF75(FCqqr zV~Z6{4YTrR1*Np3j_;CmsjB8UzW3)pOL~A21<+$5GR*HK)gC%EBB__U#E4;Cd|sw? zg7AK*Ci})gf*XrSX@n>53(*7xkw+(W(Ms@_p=*-oV|YI}QcYmoZqz1yUQvMPqVY)! zm91X!og+LmPiCaZd=vOv^OvD{Y!NQ9cCgrPC67am%4%P0W%bK3@7TkAe zKwbG}XuCA2Sj+vQg9rDmfY5Z1bpalooK!B5dEK;tS8EWrl+{h;Bx>%%`Ae}pPCP3u ziD_e)KD*AGnFwNQq2?Pcz~UuIcntdu$^X&Zq-2#?V(IdiKkmxG`O^q#HguU4m*g!! zB>k+~9cWD50&Xn(j2N~lVX^^=z*zpjv=2Y{G094OX@zjEZ`kP7BWTErM4e#dO3Vqc zW1(+Ja)$0rdZKWaU|S6|Od`Wdw0HzSz#>zDCoNRviNI`@yxDdTVAX6nq_nnn46aiv z?rVY{r=zSFIY-f-1IvF$7SfN0lA0;nTrob$>VOL3#Jc=PbAI4R(%)LFJ*VtFNg*fo zusSLIx&UzXxX;NXHQMApHKoTG!X&>90S;1Ja)6^09f?F&#NM{kj^I;N>xh#e@+Xlq z3r14|$292cBkC=6=F`t5{i1C!{M(98>8?6V)E+Z8sICiek}~S9Mh_Q~%3W32mk&x` zW7}&ZlDg#vO!r+FvN?|Yj~3qIOG$6k%N?=xc3`#IROtY*3?g_+5anwMaAK`LP>Yh^ zlK$1Uc;0(l(`#rEYSDt_1GpNGxterCxx5wOli8p{NcrmPN&U6s`{wz?M|Cj1SC*JI zePSqJ`=tt;{$^ zd6l$QZAEmRxjJTP4q62u$3U3SNN6Lr2lxnAt%TKO$MtWL4BA$KiEp0`s)o(tOR;iz z?7O7J)s$6F)aQ`-&7Dp--||kU)68N3zAs^n|JL z@~}~rK%t#kiU8)xT7L}|NqOrg*=?HYnXD2=4W6VuTSuG4w`v1NskjIW*ATMWnip3~ zj@CBV(6@0_S|i;o8-)Lc25u3nMHH(YUsW@?+&Y=M>r5=Yk8w}bV?fY0jnJ(U6=rhs zNq()2upvH~MGPPgEJJ|I^-KOkE7>jH*K?u;;G=TPfwhUl{eoYplWgI^q-k@jcWYWO zwyvf~=B4BTw}9kwCuyWl(gE=@j(8Lo+Y_E+ToGmWv_n+diudV0%m89!tgj$etF7Z&Y#>wF!;l2dlq3@N zQ(~10{G|ZKTc}Nve^8{~-GL|-;k5!}3jVIgZ!}NlDn6ojSE%2Co;a6V$||>%*F3ql z6t*iAZ-c;XElsbGWy}3qCwEp)Xlk{rntN*_ICTWsEtIGwy6}#tRd%;sGE-SXBqv*U z&HYdvO86)__{!};fIGj}DY=UJ=m_Dgy8KzE%Ftupioz+8c$zs3fiOz+y{xJ&j7fG= zEQs5kXpCh4U`KReRxUYSfzIq^KiaX}zDa(qQbFi1_l@=6jDaS*N&Q|WHn;B%QgfF*!uN=F!Nud@DVpl8*1?z)Zounml)Ta=EvX z?&;>SAiy0q*TW|4HF@aj}rUZJhV)sa^>T;#QcPzPFwB)~?XSeH_H42pKd>=* zoVMZd)2%{pVgjKSlAfCbvUvKB$u?STc-CwE@2)@(Yc_?338)YG$>GXcYEXsPOYt@= z4*w0~1v`>0Vq%EIo6W||rih!VmBpkAI4{;$PuB+Ia=UQnJ;}RO?U9;n8ui8T3b>em zk0xcrg&j-|Q(`IZR@KaE4QXK~e|Y{Vn)251CYnlYYdp=2?qQ&$%`ay$5 z5TkbHTu}m({B}T?VuLAesmZhCIBg4$+pBYb!eT;!RxHs@Qt9r%sw^6BvpDhgFOs*Z zi-`#R`L{8;0s!BYufQxX8`HywmL^|P;b_rioE)12tAL2u zQsRCk2D1`}C#n#2$m6V2%4N$&`~Kd+9XR~3VZsg}0iq5oe1fTxugdwhDHin#2;GE}>oQh&Ajy%S~!50^k&68*`o{drs0 zlrG94ISmNS^9+(~rMb5QtMkv5Q*_#?`*8nSf}1<;aFKFq16W`qMHdG;h=(EedZkoW zubafrjeN&;s*yYeAp{hGR1)YVXP#u%PwAwcz?Ix*){hwHPtfZqE-$Y%u!c14S*8mg z7@YE>c2sZH+EnNcSh$vCfBWk|fBE*YI4q@y3QPQZ)pU@5Az)9#ietv>DvkUXn^x)?yxAbMBx}2+Klu+61=QQQ9P>uX5Vu)+MY|V?#37)C=H;TczC4B3Tme=TBw8bA{8=j6?zw8}1sNGDJPx zXe^$)2G#Zka1r)K3aJOq8vItrlyc9DXDu<79LJD@&2gf6uLH5K1x8}w=)0xdQN~;v zK-9qo62S`aUmq5li#P>d+B0R0w%?VG?9)*o^buKpO$2mJezqTQX->YEi@Mfo3293e zHVX4#SX{kG1jx1eGNrXDOf;IYNj5{fU^G`m7&CGVgK(rvdEWJ$%=Q(VAt~Loggj5k zh$Vf))?r3NolGczC`Q9?Dqo-F|xY|4X=W^HUK!3fFYjKQY;Fo6R=_BgkuCe zOm<;0w;#f+8q1jTzfC!!a)FkJ-L=#V$|dh3?lVH}U0G@fX?`ESOBt@xOu*p|Kg|6b z!0Yhx4pod3Gg~7x67HVA=BB(*X0|sz$^Lj+M=m^iVaiOcMl<+!i+P=~GEs$H1jo4b ztmn)^!Xm8#dE1nfuIk#PZtMLt$%mfX-ikW_1;!Vrrrg&;1f6u=L!mmAcxXugoj;hKpJ1) zjbW$^MnSH;z6sC@QljwUjm5J!LogP&OZV5Bk&1Tp_y5qDu>%rxggnEV=*VdChl+;KS0Nr?wURVijdJqIbg z&tfNO`jGWDyz{1%3ChME9!c0lF$uuBF+KkF;f;SvaaE}!2Bzr3@8(0Y?n7V0tZ>ZA zJ+15w?9t|I2vvOPl^N@UqQ{WYYbm|uYR3H62PvzySX|%CbD=;Jgdu~RffC9Wd-3;A zQl4trR^iAjM+u$f$%JuKF185xCN>##!B>~55K`=Qkd7k7PCWNTilptd(z`=XcLMgd z8Qb<(Dd!ZT!&?#2@TP?ktNj?Gzq$R}l=ey#P@(vQ(E!Q5!n>}Pza z&NC{cdMca2T>&F1Zz|J{atx^!Df~2&{~l}#Dg{gKAySQYMg>*^tc#TQ*4vSlwt+G& z;UGf9ghT2xm02VNdAHX-bH{C98ZzTPr*xIvY*U>iw;Q$1&)~gtPW4dLLFzH$)sjgL z;76JR$B{5kWkoa%{hC+m2$g@-LG2SQ;=IwpBHSG`6ta(PBk_uGLCw_0Y7f-n`K5<* z+;KwbJY?lf2=SqIbehhplj@3^HwVSAx)8|VhSI4HG&c7&5E{e1ocSmXvx zo%YCRhg5fVw|yjBDtVjXrdb=BY7x&sLp*Mke?9_Rb-25HNC*NZc8ElF_&*I&8)>)T z!Iw_IehLB*w?M0iy#*Y!vh%riyf7;Dp?15`>weAoHW-TGw{i>zVdkz)Q;or8H>4dM zNj5f3No~(vzD_Nd8Gmrz#*?o>*w098rO-}lE|tWl+VCmkQ(d)J#s5tUccdDynT{N4 z+I{V$_}&`v{sDem>qI(SPd2SfBpx^|?i`5_0k0XUkF?N_1`he67rJfg%4^R~J*AGH zn6)?X`;iGir56|19?ZEb#?KedOHERd5M1)yxuzSKhRx!6k-mKHqSROFL=i+n%MaqE z+hL9z#>#Rr+lNBxeWW5K?H^2rt$){}JoYX3; zZ+9}9_@$=q)dGig{gAaCrtb>X_4REzv0!X4OU-Ekj~ zvj(nzgdCZ1Q@aTMXl1ION(pgmPtk{+bU4Jo;-gY>?R2PBO;P_~6-%`^90>pJAMMtB zff@MLhP$szEfvlMq^hB7cku~l$L!R0;#U_IdmfK7$$Y-EKedQ=2dc-;Sd<|#Ug zKw3bR)GoZ>SgOUPlt|fG{G`DaUnDt95Wx>5Fdocx0C4h-r&722mM!82^hth>*HA6Z zIcI4-M`pk`CqC|vREta)!WsA56W@Vg>pnTQ7EvoCe;@I$7k}|Ib&zsu_zWbZu#v#D zBVcCZgBL&WcWSxXYQvYuy`YIA)tcVlBNEu(0(fVM#iV+U zeEX|ZNtFPCy>%)!m|{N;;a066UbvNP*xTQvexq`efI~uK7WRMye1(!9Wx#yqf2m_t zF{a`7>eegZ1-4Hcf}^?X0q2oO60uU9C*ZNCEWo*ik86i&t9 ziv|1HUV`9*E2hP&yZ(kQf;K7W%azx z*R;v@X}#2gi-!DSVyl4Jz&FZ#m!}pie+af#?(3GOS34)*+wn(_(VcFsv+R*ofPHz0 zM_ReUX}5bk7~=upRZgn_=M&CdUxgiS1Om3fkxEe(H1pD5ewhBlL&*p{ z#3wCE8Co$unPcM!jsvcVHX`DS7j5!-09`{1bbN7e+PB(~bX>E=nIc{zEy4PPrOi^o zh}-+Owth$NY#lPk?h4|7&6yPq2PM2?MA~bGxKjEgm!U93rVUiGOs0*X?;TKkU`p3!NyiTs$C$E9H7;M4(bIY__N1iU^> zw~hF}v}@WPl_`YSF85gDKLLz)mT|19h<*8q9%&Y;8o@rgG5w!!v7){fImFFS4vlV! zexqpzZr&%&B8`Qhy$c@I^Z?1LMQwB#O?sqNWm^I4$r}z#vp6;h*r88FFFH(~I>;)Q z;DupWniD_tRhmV)EMjfgFB_h<#vP+hO+hmA`x>XKx!&N;VQFpEO9o*caXWDUY5qF% zfmsToLs_3Obbm=1n^rCc>tn+{dx9b7EnQ{(i0BZ&_I%2OwDx89S>`^Lrj6nxX_T$yEd{PB#mzts7qF%6w~<2YrIT@r8DA+UK@7%H0{ ziTw#BN;8fjV0}(nIejE3BY)%;w74f;ypNQ`^8Md9kRd)Wo;h5F6?S_8=;7G() z=B72nd74&=G|d zJajl!Hdp!$MPYGgQHv*~m1zBHy?tuLilpZq|<6Io1T z?h$GaR%0L85Q~0J3s+}-st{5*CFJdg0Nt1lfG$$ezDy{CUZbpedSP0*^ZQ-!!F5Y< z|G896*7AjDi2*R@X~de9$I=qCtclxYe9#EPZB-TpyPqiHF{(+c3)Zz z{`pFpM~G(EO&ZYRF%=dmt9BFZnO;R&Y?Xdh1NGivmFYMZc};hDkrNcljg3SE!!HsMhQ6hKEI8$s>|nirduSm5?gNgJWbvQoB#NR@{x;mrF{5F+h3k!^vgyBjI+C(893F96eX(uQ-PpOAq@5g& zN-wAE)Ej?y29?*FUhGP2jsoAd+9JbQ`{rx|W-f!R=$O7z3-*zvTQ3CI5|J@2I<3mm=R{fsNawenLH*M%>2tI# z0>kgdSH~($7iRe=4l?^|SAYEM1C_{8Vr%vU#I{SX#`3=>pI}1o^q$J;e;=PjZRjuA z(7D9e3H{PfsGZT2HEhsf#cH5hkLBIQ8f$8OraAw~!kUT9pG6c(@)6$uf!^J$aL8JFHdT}?Ea0e@~CLX7z&On&AWZaz8PLRBNMkzXHrPnDb# za7xhKG7jj1nf;n>DM3|?yCF^uLIMc$TlYj)%q9Yd_ja?}~67Zy9S z^n7LJd=hAyD2bFAj#K5KMfl*wXa10WQGsCshN5;@DgN7#pWl!^Lp#)N+h5h|j+4cJ z+;J)pO1NBDS|W+Xfi3Ah)!P#dao*BT4aZ=Jwd5MXEczEXKG=UJsOp_~>qNgJeXJ@E zG_7Bp4>WDX@a*NvwX_X;ve=X4+(3zP>t%7fQG4zmQzgE1Px=O}uvID4|JN6XtUXFP z!K1+A_N6aW&s0LbdwSPPGcc>G5rtE>2HW1-yjb3H)KIXbql+xNLtV0Q<#N&dx&rNI7|2o>5E3_4s8lV$562kb|utobIem21!TnXX!($mhB@W>66H^ zl?obX*s+q!l;A?8>-Pj?)YYEx`=94M8-StX2ov5K(O}qbv_VAc$N*DlmGPyP7q{a6 zh<^{(K9{ROP#+Fb8;>Aou{yZHI^%=NUK(Cez0LE+VtDzeGe*&;)PR@RWvF53eKUz- zQI$*lc+ojyo1zw85I>5bWAWoX_l#TG4u0sD|Mog4Dzu=8dwXV-3llpy>!ZyG&~eRz z4(ZVbofl85kugd;B{3VLX43`dgq?6@3Yr-+klSILZ$`Ph&F5-Q=jH$yhmJBp=53@c zpjX|D<;qCf;FCG_kw(H+2#`_rGWx087yHcJw>1v)U~Wg=(KSSGwk`~@QfX57X%!8zV5NT=;DYue;Bgl zEai2{uwijmsIVKA_m^TS?6v0W8fNTPM$j8L%{CCFh4e8XsIpMd`HjXI7Zlh_0v2`N z!dXE!7{^-S-)cEOoweo7TV!lhHpY?o45b2RoPcW}MPFHD&8M`^n62IKBE$aNa~unG{~O)x{SQw7rSKCR4!Fk zIYa=Sc?_2bg!k&1aZb588^n*-q8H%FSTm2TrO>WO_`1+P6UCeQXZUMlS)Q79)DH)l zc!owk+y)0#mwXo`ROfBSW>~mdXcn3;SzWpo6t+YqZF-~+Jvd0NW08el{7uGwg+RaM zfxPp z3V>)}BV~>cvaF1JU{*%C6vB~%{Vumes?fTsB8Z+ZoSQL9HG~o8CyWg;Edmc-KryDg z=Yrc|R)JFMO9nSSIX+{7GWFY6(!l7Y4<4PAQC}sFkeoee-8CEfJnEy0>nk8?u!DDK zFB2ti-=<~cXg4z(Q?GVG=(dry>^dVRFu%KDR!H8V8pyu7j1Z;oQLCwMx{a^`{MUyc z)n_!SQq|HZ*6)ii*V6UurS$T5U6j;wea3yw#Vq5WO;4+V!h7<=RXk}!Mq4dK0oRH> zop7SxsUo&l?z1T)R8j7F=Mn|u+hzw)>03L-@OLdP`Bg!U`DwI z(C+uIZ}TTmPpT+4Sp;Bjo?DplOpAKz>kz9@ z&nAF`WF+rh%V@?^e$TMD)Dy(C3kDxb@9Sm90dYWG*|ct)^FObAjUOl4a`&4V1GT5Y z;R_v`{EHu_qFC3>jIQkc4>T}Q+vnAtj8YX7bu)Tgf%P>2PnT~#tmpyMH)-3W3}+U% z4tFX(>wd-!MP|0+lWby=0XYDdXv^$;Y&-uVJ@^#jOue^|3f^P?m0o37slrVo$h?{q z7y+;x2WiJRT?eVuL05^}zRf82il=X<1P{{jmcfHR8xI}DYy#g!c@;Z;;eAHA7m}B~ z2s}*YmWvKj-?uyHS)3Y{EhMzC<2OEKG*fnrB^$*e7z(9SMqNT5_?ikjcV!23MW3G1 z+e}n4CYW}-tDUZ`mWxNvAKXl-L*b5cGJdgxZiseL7WT~l(ujPjh&plv2Oz3S`5$$7 zV%0^LrB9e5+hCyE zP=$`dOpDs+)bNAtFtCg8k+9tSNEENQ)n509IxcG7B!X{j3!S$f#zmR4v^1(o#cg!< ztO1p9<=s2$+G+LOU)S!s`4gI~_ToEw>8fZg+ZQVIT+#~h?j1uc@x@gR_K*|%dJWRG zQIlY427X&Mu%;IVP|c2Gk(4WK(q`a=eakUDOR;jv86ELH$cVsnW!_V z10r<4x>U#=0!~s4B}D^>79)3%ISUe1F2vU>^i6ll(>p5yoh;B-;+tpabSh?I)xECL zUs14>t@n|on=td-S-O5oR7>toVz<}Lj0V#7c%6+D;TtTDaVI`&p{`gf#|LA_#Y>R? zCvI}(k`lDFl}h|!^+w8s6Tcj6+y3#ThFN-wq2^ja9mLDv3mYVvD31 z)|i>raHo);5`DO7Re$=T&Z`}7$|COXnPrUN3AJw>y+eD^Nh2Q6>|n}svK!xZnpgF2-6i7~nS ztouRPb@TR%0aMviqK>;9)v0fL)jmK!(py+E>G;u}N1V`=3$=OM?UjE3hWW-EyQ%spPZXgC-WA+)qwYmRw zokctu%~j>n8#Nf9?9QZ{~x+q)fuVK9! z)NBvd#hP<20PHG7?+ivtV~fR}Jgr)03zeNj;+qO8>jhRtW(V^h_()0+#G%oedv?vTquwSe_W}gMv87izd zH~405Rf#6BLx;M|%h96rmLiS?J4$^rBqx5hcII-m0TI2z?|LXDGBw6kon)Z2FxZ=4 zubbIU*`k)5ph*%@hxpNz`F*5I#PdVIDQMkXFSEXOL*E%xuL~tTrOFl|!YMbaDHWbv z?ZQU~XI4>JM`R~&pY8JzYi(lr7H%vb-I=Mk4$u6o?a6OsLZ88ChXe_6%TaoAW1*j@ z-MzMJoMi2FWy8$=+Q#ojRVW^Y#wq`=vE=eQ6}mb_k&Ht1jgQK-u;U26d5;;q31j>q zT?%$63~}JN_kU2Qfmrn5&BT?zKxDh)-gywK0LuoC=AFZS zmNRsdJs&VAvrx;53iVnvz5yp)4HVlT=QFl{IP3>!T0556@bu@2ofMDFit*oY>Ft=z zLe0>R|8XObp0>}CtKvzeS3}&`bEj}*Zv>6YEEkV4{LApV+cDQcatS|y(=*p49A-ZG z;WOQ&%pKZ!zm+m_Iak#N$uA|uMVcBDB3`dMsgOeB-~Zo$w3Q$QCL@{!R^Uoh6i?4Q zpq$@rF4B0K;-W!_s!9>xhuCqq*_qDTJ#zdvcaDaFPWXmIovJceH@<3qW@nW^lBXPx zHZ!cytG)TLjWXC8a#iN<7H3w_3c#N4zAT_S*K<4BGD8hm%q6;XS4hY#SN!z&%E!Mu z0T{27lNpB@Ji@I4%wFEZ$(b%HEyRHvD`xpl!XlXmS1Bfxl~xJIt47}V*FpNb2{!k> z>6w$&p%VFP!al4{2KmvB99!p0EvaEs|7klNvg&4*Ymiz60SB2nt&pxByTF>NX-u${ z3yH;64MzqEUbS}O->k`8rJUQne<$vXH(d!NNb;`fCkl-^@fCTQom9eTEH1B){rwh% z?RFA#z~Vf^5wa=!w`Xn2{7;$FxGMsy8+4+AjUk>KkN0_Khhd5=6|v8w;Qyz0N1_jf z__BqsLXnOpKi7@7gPgRS%srEw9tFN%gm=)G*-q+x2=^+C$c5M1lNqJL5(}LtZ?C@w zu)`eWoge7EC5NL}qX-xHNre?NRG4$~PjK|J3&$Gms2#H361)0F@X-#79i6g1HN&kc zNkx}K?Agaw^hyB||LysLJ zbMR~w0RA^nKDA?FLY$=ePeRJpw(sT4IjWI@(0e_sYNRVcWh;3rj_nePR}5~Eoy4O! z^XIZnXf(bE!zk=$PcnU2k@&m!?gRFG?ETD&in3BFzLR)y!1=3;C+Y&P-Dp8(Tf~5f zB@Kvr%OXM@%t0gbo@H8?ZK*;0sBIsA!Aw;}(6*>O^CUBXEvgGr_@B=+Ppd0{fP3eU zdA*SsC7egNeBY&L@=^B4$Mf@#go88IHqoAU{wGrnQS1W{bIun*x8QMaGc8>4gf&9y zcCr;nSc9TbCiRue z%)tZB%;|zFy<-)=#7Cd6z3&(0oqH1i(?=U$d3_5^(GN*X3j_7_R5K=Zo9|={?*kg` zL^z2&C`Q0Gd_;tPl9t8|n+|#w<3_#9ThPe;n(Dn3BZ}b>%^*E%DdBq^cC#l{!n+i$ zFIN!v5kH;u6V_c1Ti&p%zN&U$p8ph#E5VOnSn!znJs}PMx1Rc!S|NTlY|NRO5VJ}) z^81Q00VqMj`}WfZDSPZaG)1_vkG^wmU^sMo@$i_^n?4%T_727gVQmWvxAK-2e}g0M)KdKzmDvQm zb=Ism-)ft_2&fvp3{7j8ttRNp+;r|Nu&v-Zc~j$bdW#rw>hWH^ zhyPN=8Nc$)SojONe=~!AxgukI@d=EcV+faG=7oB)1)-`2cPLBWNL`(TIxOL77`+}1 zL-^=91~}Hk!V#!eiZ()rbK5~-PF(ot`h!no5U5Uo~Ri+uh@Nbd&LUuNq7uKef zbW%}aEo*~5Q{_4>^wP)A*P<849c8^jUMF*KG6x!#@)dPUn> z#h>-s|Q4OZsz) zA<_MfSRvmS8cNY;Ls1Ky5|Jz3(oa=ZW2S%*MYiMKL+IFF_y8yA$y^)$>JR-vElo9a zk*`eHJEG*UdL}pNVM{#r{Y#&xZXv`r$M^f6Zvu1|4fG)ajW;eW&JKbOD0)8SIqpS^ zD~i#`xOw+CdRvtS;_}jdrqCH+-yY%F?aqF$+StmAUw^BgsfBA$aqTej8m+FxAz0_s zAE`6Dx7+n(>}Y2%m@9V%_lw?v|MXFBQD>8YO~!V~H4&`%bwhb$@SA0DVli(iKz*{6 zp@r6?JE>1ZP0D%gBr9X)VK{ggij>9E0E`w!uZ9AP9dGMth*nELQI~r|?Pkpc>+a&b zq2QhZt0;sg%Y{Hcgd1jS8C^8|#7){3Dx-*s@Sqa3^luY`JInbW?F%0w4a>C*=-;d0 zU1N06tn3y>O*op2)S`ZT>JO(hFzODRzT&nf2wC%i*5{p;h784Qasi*rjvtxWPoKy{ z_jg;va#j3k{?5-Cl1xKGZ8!2eNd=LHdeX(V25)ZL(U7V3POyh6fApo-VG1hCR~Adm z)w&rDYEPh3uT953fDI!Y%0oBf)A|@bDH9O=nP?R^9DxzHbi*Ch|3DK^T>a>~Yfx71 zdGkxd3@x;I?r{x$v#Q{z8y3J(7;bXeVp>y-qCIlKdP3{W+TdR=DY_O4Wz?Q&$S>2B zN8z(bvj~@BH$jvR;cp+Q zD>U-xsL*LG=4*|?@E;QmJIdI=+R`Uc29p`^-=_ST$&jlE$|dcuesb3w?~Pg%fu&w^ zcL&()f){XOeQ}luT)w==D#JO|14tZNJ8o&C&k&N=h&ZIK~Ck<{LJ-W{*X z|7K8+-V5|e0#r*D=0KAc5mjK%cV9I$Ra@aZG9qpmPAgo$PoLyiQXC|RS$~8vce!H- zQZDE-90@`c3R5Aj-#3J4<#GCm87`y=hno$71j~V~ww57(dThHub%9^uwvFlzQW;8n z@%Fn5UYVTlxc8~S;-Oud@&&s~z9ie&Hk808%ZOi8I6^`4CVY)Ii~ly9R-&!-&P1zh z@WOw?dHoVYxnrVz@{ga={RKi~J#P|k_AWJlo{I^et52x~iY zYaEVTO8Cz#(#nXwIpf3c?!_&jnw4DlrNIZtTB<9}g3td9`!sg0)y9H|-+{9PFVMp# z!~tvZECXTNJ7m)Y10bT!+8o7oaQ$b4s^K1Sqj8GT5@_zlk5n*P=rJVxot&0z3j?38 zA+D3`qyTfl1HZ;jH1jYTej)W~c|J%g8g2BD4AI6)()ad8PxQ$eRu(Ko%`~Yr)MzWM z@i02@+xA9_C{v;_G-LbzSy%*kr5YMEDy)~mGB=MXgy3FuF@C4cJW(VqZa8N@7+)PK z;FSe(3l8j0)y4I*||ex+o#6 zwy4Y)S_JV!zD5g$jEFDXZ9ml-eXKy-#FcqwQqV`ZikQIa*Edz88ivzR!|+;$0CVB3 z>Kn@i@PC?c!iFMd(yV2lAz0zUe+)KS)HbAn#r(A8)OLW)LUAcnM&$szt_bd7PvW`= z5W{yj9@N0tQM;vg@9gDH3hXhwQDvstjbCVF+^a4_qIvdJqnF z-Pq`+&IrMF+U9#nk2$R8MDaKR)|C%$VccY`31BL6*gm}w5>qPeu*(RQXL?v$hn`4!+oS)XzXyWAQyy?O18YLbN?eWHlY z0Okg`rlffPMqh>PUb*XYMe0bN-tox92!u|sxW&Mt*N&eTDr-e8Rqwn}(zzfbfXE##zd)=~Ih-MCgkABa6k~(Y(z7 zW4Y2CQ*XT)u?CcFsUTgprm5O`!wj;$w z#>5xQHttgntdX^eaq{ahL=6JMHog2=0~c z2SRM{;vE>qidvDm{cs&R58Nh>x90JBqmP#MEm=03gVDOv`(He zNxfzh_ASK?CXwl*0YdU<4G?zG437&@!b6kI#(%XlK0bV%D>>irlCO{*K~LIG#?FcY z5?7CSDc*9S;jjz%yEC6sV63Yc0etEci2tbt0UYhEwLNUD)bB$LNJ0)Ql|yk<0U|&O zOEP)#*!{*@s!S054u@83vx9n{h7`V4D?(UaP?S|)9#&{{&|a~3blSF>binTs1w^w& zaCKy)M@}27Yggvup22f>U~2859f%`sxzR>y@T>8vc?Zo6A?o4v#F1duu-q_47Y}^9g1~@5n}l zqE8<7yK%pwW-g{r=GS5rxDjDdh|m~|s&rm_;(cS7c4YCXt(^X zPmDViYor0F%ASSMz&Y^Ne;a>SCyj=8~(ssVX1oVk+mw|8GF?_p}H-5Y6~rZ|(}PUn-06 zBAzUOj8a;ypyNnY(>N`;&Hl|#IDoOaI?I7EhA&MX5{R*7`B7-gmsd9(ROq@upJb7b z2sEK|XyYh^I9>HNm8&B>V9vC`?SOPI%ywUyqL?4xZ20^-rgAw+6Drzmp~?f!a*;+3 zq%X7rwQ}1!&*?CV^>HKPF;;97>d_QrnxS6sNmSOh?s&Wy(l80^ERzNa=)Ny~4aD6LNxk&5EE$siD0rukcNw61**v)bHG2a$6U;ni+%~a;AEqx--JEF{6m|Xa| z_NH#?&Pk+?pV{ckz3A~E)DO~V2#oo+BvlZ+K(X(xrUHd;z40C4e%(#Z%87Z8K9P|` z^x(`Iw~E45%c_?NS9LiYiH*c35hf*r@RHu9|5U~h5hdgFeb0gjL7mnIK;PEkkyRFKyq2zKT<1Mp~tW=fJL)iSIG*cagBSEiOc|4Y*$EyN$^lU!E{ z2o4A}^|z!Akt<3G2;7f{l*b*hf9Cl;uw;08D@&#Z|8JP-SJjX~qY9h2VRI2?X{&kH z05&JqCOQgcw2l)@m$l1qh-ZWY<*rtTz1}+oe$Oyv?-t%t9iPq_(^2$R9O zXNHbZD1$SieUw#o+H2Jea+121eRh9(1v35z-3*2CEP>grc68I4I>YpjA~G((0+Feb z8ejq0n!lNCvM7Q?c$c0Zac2q+kpvM|Vu`mJFZ$k;pvoCRU%K+?(-r71I#KybhIW>G zl1#45(1A=UPZyc4X?2;cjeZUu2Eu=o9XNszu2(BiJ?u7Aj|4h?HMJ%IeA4$< zv6l}*9@{qt3*Z3WEZ20Mc64$7Z);qGJlMxZJGKs(Jf(=3Tx-Y;J1YJn1)Di^CB?RQ zovC>R%~p11LgZJ6AvP~0_oE9!rAZr2f0SV@3V>C?u*npn+`(RdY}2s_^o*1hJpOKz z>3`}8M#DRhm^k(`xNsI1_&uhUth5^$P8zh`V#8y%nLa4%-@QB0>9xnynE$%nWKq$H zkbG!5qANvTcwzDg$s+)x{LoI5#l42$9*^k!l)}OH=Jz z=x=U+%mGuLiL5diE`U3nHvZNx?Q-HEiZmmM?$*))c8O8X8^pv1MU& zI9C9j#ij<5pHr5Dl=0Exc&6@8^!>HDJGxJi6T1bk>{#gl+BBc`ryIbuyaWe+=ab1^ zOU2T6>#X);x_^P&hO!`t$z=_vpm`9VRw3(WMcHEb1hwL-DM%2)Q*5&=?8-z*ZVy*c zKc;;^i{J9Yz?eNPs^OVM9 z!}MQ*4({%mb;Y^t4Bk$kq*Do5^@;gj(u@1^o%u-rta28C$ph_!BC#4o zmr&*m?H~LYY(OXr?MrGCYz!I5Y#2Hr%c2M;O<(AegB_=Xq(g2Jb|}<~=@ zvFjs9&Q4FtnxQ3Z=^5SSA3@mvU@BMJGy!xYequ(JMQ|SVP_;@Oe|o@fcSQ+n!rTKt zJv-}v>YhY!1^4TZ+=IQcy0;K`nG#;>`z&zQtZ7aIzl20a@!m_bdTAwW?y$SY`4GgP ztvU9z3yK)Wj4EryiaStvgb?IPDOr=%_SAoeId#WOMf)v6kXuO6V^Qf+=qSGFaF>;u-$7X-%cFP95y$E|UE&I~VSvK6~hpalviFgz(&380Ngf(;dItou)9NUmp zF4RtH8ozfoFbzal4jJ|dSbDJ)GL(lFb$Oj1v*xJVA<=kbT(8Oh!*0uA>mn6}T5z-| zS61LVWCD*@=Y8|D{!#^m5Y2nAXys9KT~dkTJgA|n74&1#w(F|~g3oxi zV(tE{e3hp(30L`*nqT9`dLkYqgy$X1TBgio+i}Xs@x2DmE6h5t$`Ik+6x`T-2V@Pg zfkOTXOd1g%=E-poTEuA+tdp0U)mJd3&2y72_kgV~jo5$ElZT$j8lu$;Hs2iMLO~1z z5h8Z`SalXVk&LMK&ShD|j1o?V$r*Q29(y zem^dXbpS1cuqEQgp(1wXaksMkwNw}i!wRhc-1GkfJKoKzsRGj|cUD;Md=tR!<>Max zJ21CNbT3?2oON3ZJIplLtwRlj1oV|IIl{eC^e}6T`hE~$`;>LRq7AUMww4c&0$8(n z`lqZwEuxTs(<{m3fS?{)7;O4vT4(`Q*&VdZ$zS8Q^ASYgk=f{d*gm^5KWCl&QI!

_x>H7MVH9ucD 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

YJyHib(-qO-T&h64$MNS{v@y* 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

dMt-x+t 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 H@!$Dcp*ZiiM#b*RxqmX-NQTPD6Le%bo^nT;?^ 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 Date: Thu, 30 Apr 2015 23:56:08 -0500 Subject: [PATCH 034/104] Added chat filtering to private messages. --- .../src/mineplex/core/chat/Chat.java | 119 +++++++----------- .../mineplex/core/message/MessageManager.java | 10 +- .../Mineplex.Hub/src/mineplex/hub/Hub.java | 6 +- .../src/nautilus/game/arcade/Arcade.java | 6 +- .../nautilus/game/arcade/ArcadeManager.java | 10 +- 5 files changed, 66 insertions(+), 85 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/chat/Chat.java b/Plugins/Mineplex.Core/src/mineplex/core/chat/Chat.java index 652a4fb6d..c67a3286a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/chat/Chat.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/chat/Chat.java @@ -207,82 +207,59 @@ public class Chat extends MiniPlugin if (event.isAsynchronous()) { - final Player player = event.getPlayer(); - //final String plyrname = player.toString(); - final String plyrname = player.getUniqueId().toString(); - final String msg = event.getMessage().replaceAll("[^\\x00-\\x7F]", "").trim(); - //final String filtertype = "chat"; - final String filtertype = "moderate"; - final String dname = player.getPlayerListName(); - - - JSONObject message = buildJsonChatObject(filtertype, dname, plyrname, msg, _serverName, 1); - String response = getResponseFromCleanSpeak(message, filtertype); + String filteredMessage = getFilteredMessage(event.getPlayer(), event.getMessage()); - if (response == null) + for (Player onlinePlayer : event.getRecipients()) { - System.out.println("[ERROR] Unable to filter chat message...thanks a lot CleanSpeak."); - return; + onlinePlayer.sendMessage(String.format(event.getFormat(), event.getPlayer().getDisplayName(), filteredMessage)); } - /* TESTING OUTPUT - POSSIBLY USEFUL - System.out.println(message); - System.out.println(response); - System.out.println(JSONValue.parse(response)); - //NullPointerException occasionally happening, JSONValue.parse(String) returns null randomly, why? + event.setCancelled(true); + } + } + + public String getFilteredMessage(Player player, String originalMessage) + { + final String playerName = player.getUniqueId().toString(); + originalMessage = originalMessage.replaceAll("[^\\x00-\\x7F]", "").trim(); + final String filterType = "moderate"; + final String displayName = player.getPlayerListName(); + + JSONObject message = buildJsonChatObject(filterType, displayName, playerName, originalMessage, _serverName, 1); + String response = getResponseFromCleanSpeak(message, filterType); + + if (response == null) + { + System.out.println("[ERROR] Unable to filter chat message...thanks a lot CleanSpeak."); + return originalMessage; + } + + /* TESTING OUTPUT - POSSIBLY USEFUL + System.out.println(message); + System.out.println(response); + System.out.println(JSONValue.parse(response)); + //NullPointerException occasionally happening, JSONValue.parse(String) returns null randomly, why? + + for (Object o : ((JSONObject)JSONValue.parse(response)).values()) + { + System.out.println(o.toString()); + } + */ + + String filteredMsg = ""; + + filteredMsg = ((JSONObject) JSONValue.parse(response)).get("content").toString(); + if (filteredMsg.contains("parts")) + { + filteredMsg = ((JSONObject) JSONValue.parse(filteredMsg)).get("parts").toString(); + filteredMsg = filteredMsg.replace('[', ' ').replace(']', ' ').trim(); + filteredMsg = ((JSONObject) JSONValue.parse(filteredMsg)).get("replacement").toString(); - for (Object o : ((JSONObject)JSONValue.parse(response)).values()) - { - System.out.println(o.toString()); - } - */ - - String filteredMsg = ""; - - filteredMsg = ((JSONObject) JSONValue.parse(response)).get("content").toString(); - if (filteredMsg.contains("parts")) - { - filteredMsg = ((JSONObject) JSONValue.parse(filteredMsg)).get("parts").toString(); - filteredMsg = filteredMsg.replace('[', ' ').replace(']', ' ').trim(); - filteredMsg = ((JSONObject) JSONValue.parse(filteredMsg)).get("replacement").toString(); - - for (Player onlinePlayer : event.getRecipients()) - { - onlinePlayer.sendMessage(String.format(event.getFormat(), event.getPlayer().getDisplayName(), filteredMsg)); - } - - event.setCancelled(true); - } - - /* - int risk = Integer.parseInt(((JSONObject) JSONValue.parse(response)).get("risk").toString()); - - if (risk >= 5) - { - String filteredMessage = event.getMessage().replaceAll("[^\\x00-\\x7F]", "").trim(); - - if (parseHashes(response) == null) - event.setMessage(ChatColor.RED + msg); - else - { - JSONArray hashindex = parseHashes(response); - String newmessage = hasher(hashindex, msg); - String badmessage = (new StringBuilder().append(newmessage)).toString(); - - if (newmessage.contains("*")) - { - filteredMessage = badmessage; - } - } - - for (Player onlinePlayer : event.getRecipients()) - { - onlinePlayer.sendMessage(String.format(event.getFormat(), event.getPlayer().getDisplayName(), filteredMessage)); - } - - event.setCancelled(true); - } - */ + return filteredMsg; + } + else + { + return originalMessage; } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java b/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java index 82081ee85..b531744a8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java @@ -13,6 +13,7 @@ import org.bukkit.scheduler.BukkitRunnable; import mineplex.core.MiniClientPlugin; import mineplex.core.account.CoreClientManager; +import mineplex.core.chat.Chat; import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.F; @@ -46,11 +47,12 @@ public class MessageManager extends MiniClientPlugin private HashMap _messageTimeouts = new HashMap(); private PreferencesManager _preferences; private Punish _punish; + private Chat _chat; private LinkedList _randomMessage; private String _serverName; public MessageManager(JavaPlugin plugin, CoreClientManager clientManager, PreferencesManager preferences, - IgnoreManager ignoreManager, Punish punish, FriendManager friendManager) + IgnoreManager ignoreManager, Punish punish, FriendManager friendManager, Chat chat) { super("Message", plugin); @@ -59,6 +61,7 @@ public class MessageManager extends MiniClientPlugin _ignoreManager = ignoreManager; _punish = punish; _friendsManager = friendManager; + _chat = chat; _serverName = getPlugin().getConfig().getString("serverstatus.name"); MessageHandler messageHandler = new MessageHandler(this); @@ -181,6 +184,8 @@ public class MessageManager extends MiniClientPlugin return; } + message = _chat.getFilteredMessage(from, message); + // Inform UtilPlayer.message(from, C.cGold + "§l" + from.getName() + " > " + to.getName() + C.cYellow + " §l" + message); @@ -278,6 +283,9 @@ public class MessageManager extends MiniClientPlugin _randomMessage.add("i like pie."); _randomMessage.add("Do you play Clash of Clans?"); _randomMessage.add("Mmm...Steak!"); + _randomMessage.add("Poop! Poop everywhere!"); + _randomMessage.add("I'm so forgetful. Like I was going to say somethin...wait what were we talking about?"); + _randomMessage.add("Mmm...Steak!"); } public CoreClientManager GetClientManager() diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index 1ff7875a9..920f5c8f1 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -109,8 +109,7 @@ public class Hub extends JavaPlugin implements IRelation IgnoreManager ignoreManager = new IgnoreManager(this, clientManager, preferenceManager, portal); - FriendManager friendManager = new FriendManager(this, clientManager, preferenceManager, portal); - new MessageManager(this, clientManager, preferenceManager, ignoreManager, punish, friendManager); + FriendManager friendManager = new FriendManager(this, clientManager, preferenceManager, portal); StatsManager statsManager = new StatsManager(this, clientManager); AchievementManager achievementManager = new AchievementManager(statsManager, clientManager, donationManager); @@ -122,7 +121,8 @@ public class Hub extends JavaPlugin implements IRelation QueueManager queueManager = new QueueManager(this, clientManager, donationManager, new EloManager(this, clientManager), partyManager); new ServerManager(this, clientManager, donationManager, portal, partyManager, serverStatusManager, hubManager, new StackerManager(hubManager), queueManager); - new Chat(this, clientManager, preferenceManager, serverStatusManager.getCurrentServerName()); + Chat chat = new Chat(this, clientManager, preferenceManager, serverStatusManager.getCurrentServerName()); + new MessageManager(this, clientManager, preferenceManager, ignoreManager, punish, friendManager, chat); new MemoryFix(this); new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion()); new CustomTagFix(this, packetHandler); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java index ae9ca9b08..a3b81be8e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -12,6 +12,7 @@ import mineplex.core.account.CoreClientManager; import mineplex.core.antihack.AntiHack; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.blood.Blood; +import mineplex.core.chat.Chat; import mineplex.core.command.CommandCenter; import mineplex.core.common.util.FileUtil; import mineplex.core.common.util.UtilServer; @@ -113,7 +114,8 @@ public class Arcade extends JavaPlugin IgnoreManager ignoreManager = new IgnoreManager(this, _clientManager, preferenceManager, portal); FriendManager friendManager = new FriendManager(this, _clientManager, preferenceManager, portal); - new MessageManager(this, _clientManager, preferenceManager, ignoreManager, punish, friendManager); + Chat chat = new Chat(this, _clientManager, preferenceManager, serverStatusManager.getCurrentServerName()); + new MessageManager(this, _clientManager, preferenceManager, ignoreManager, punish, friendManager, chat); BlockRestore blockRestore = new BlockRestore(this); @@ -129,7 +131,7 @@ public class Arcade extends JavaPlugin cosmeticManager.setInterfaceSlot(7); //Arcade Manager - _gameManager = new ArcadeManager(this, serverStatusManager, ReadServerConfig(), _clientManager, _donationManager, _damageManager, disguiseManager, creature, teleport, new Blood(this), portal, preferenceManager, inventoryManager, packetHandler, cosmeticManager, projectileManager, petManager, hologramManager, webServerAddress); + _gameManager = new ArcadeManager(this, serverStatusManager, ReadServerConfig(), _clientManager, _donationManager, _damageManager, disguiseManager, creature, teleport, new Blood(this), chat, portal, preferenceManager, inventoryManager, packetHandler, cosmeticManager, projectileManager, petManager, hologramManager, webServerAddress); new MemoryFix(this); new CustomTagFix(this, packetHandler); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 3410e0604..84ef69d19 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -39,11 +39,9 @@ import mineplex.core.chat.Chat; import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.creature.Creature; import mineplex.core.disguise.DisguiseManager; @@ -68,8 +66,6 @@ import mineplex.core.status.ServerStatusManager; import mineplex.core.task.TaskManager; import mineplex.core.teleport.Teleport; import mineplex.core.timing.TimingManager; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.classcombat.Class.ClassManager; import mineplex.minecraft.game.classcombat.Condition.SkillConditionManager; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -109,7 +105,6 @@ import nautilus.game.arcade.managers.GameSpectatorManager; import nautilus.game.arcade.managers.GameStatManager; import nautilus.game.arcade.managers.GameTournamentManager; import nautilus.game.arcade.managers.GameWorldManager; -import nautilus.game.arcade.managers.HolidayManager; import nautilus.game.arcade.managers.IdleManager; import nautilus.game.arcade.managers.MiscManager; import nautilus.game.arcade.shop.ArcadeShop; @@ -184,7 +179,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation public ArcadeManager(Arcade plugin, ServerStatusManager serverStatusManager, GameServerConfig serverConfig, CoreClientManager clientManager, DonationManager donationManager, DamageManager damageManager, - DisguiseManager disguiseManager, Creature creature, Teleport teleport, Blood blood, + DisguiseManager disguiseManager, Creature creature, Teleport teleport, Blood blood, Chat chat, Portal portal, PreferencesManager preferences, InventoryManager inventoryManager, PacketHandler packetHandler, CosmeticManager cosmeticManager, ProjectileManager projectileManager, PetManager petManager, HologramManager hologramManager, String webAddress) { @@ -215,8 +210,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation _clientManager = clientManager; _serverStatusManager = serverStatusManager; - _chat = new Chat(plugin, _clientManager, preferences, _serverStatusManager.getCurrentServerName()); - + _chat = chat; _creature = creature; _damageManager = damageManager; From af86586d742e859624c6978b2d106e37851b4874 Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Thu, 30 Apr 2015 23:57:11 -0500 Subject: [PATCH 035/104] Added 'Sloth' to draw my thing list. --- .../src/nautilus/game/arcade/game/games/draw/Draw.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java index ef6d9d7ab..1b5bd2003 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/draw/Draw.java @@ -112,7 +112,7 @@ public class Draw extends SoloGame _words = new String[] { - "Bird", "Volcano", "Love", "Dance", "Hair", "Glasses", "Domino", "Dice", "Computer", "Top Hat", "Beard", "Wind", "Rain", "Minecraft", "Push", "Fighting", "Juggle", "Clown", "Miner", "Creeper", "Ghast", "Spider", "Punch", "Roll", "River", "Desert", "Cold", "Pregnant", "Photo", "Quick", "Mario", "Luigi", "Bridge", "Turtle", "Door Knob", "Mineplex", "Binoculars", "Telescope", "Planet", "Mountain Bike", "Moon", "Comet", "Flower", "Squirrel", "Horse Riding", "Chef", "Elephant", "Yoshi", "Shotgun", "Pistol", "James Bond", "Money", "Salt and Pepper", "Truck", "Helicopter", "Hot Air Balloon", "Sprout", "Yelling", "Muscles", "Skinny", "Zombie", "Lava", "Snake", "Motorbike", "Whale", "Boat", "Letterbox", "Window", "Lollipop", "Handcuffs", "Police", "Uppercut", "Windmill", "Eyepatch", "Campfire", "Rainbow", "Storm", "Pikachu", "Charmander", "Tornado", "Crying", "King", "Hobo", "Worm", "Snail", "XBox", "Playstation", "Nintendo", "Duck", "Pull", "Dinosaur", "Alligator", "Ankle", "Angel", "Acorn", "Bread", "Booty", "Bacon", "Crown", "Donut", "Drill", "Leash", "Magic", "Wizard", "Igloo", "Plant", "Screw", "Rifle", "Puppy", "Stool", "Stamp", "Letter", "Witch", "Zebra", "Wagon", "Compass", "Watch", "Clock", "Time", "Cyclops", "Coconut", "Hang", "Penguin", "Confused", "Bucket", "Lion", "Rubbish", "Spaceship", "Bowl", "Shark", "Pizza", "Pyramid", "Dress", "Pants", "Shorts", "Boots", "Boy", "Girl", "Math", "Sunglasses", "Frog", "Chair", "Cake", "Grapes", "Kiss", "Snorlax", "Earth", "Spaghetti", "Couch", "Family", "Milk", "Blood", "Pig", "Giraffe", "Mouse", "Couch", "Fat", "Chocolate", "Camel", "Cheese", "Beans", "Water", "Chicken", "Cannibal", "Zipper", "Book", "Swimming", "Horse", "Paper", "Toaster", "Television", "Hammer", "Piano", "Sleeping", "Yawn", "Sheep", "Night", "Chest", "Lamp", "Redstone", "Grass", "Plane", "Ocean", "Lake", "Melon", "Pumpkin", "Gift", "Fishing", "Pirate", "Lightning", "Stomach", "Belly Button", "Fishing Rod", "Iron Ore", "Diamonds", "Emeralds", "Nether Portal", "Ender Dragon", "Rabbit", "Harry Potter", "Torch", "Light", "Battery", "Zombie Pigman", "Telephone", "Tent", "Hand", "Traffic Lights", "Anvil", "Tail", "Umbrella", "Piston", "Skeleton", "Spikes", "Bridge", "Bomb", "Spoon", "Rainbow", "Staircase", "Poop", "Dragon", "Fire", "Apple", "Shoe", "Squid", "Cookie", "Tooth", "Camera", "Sock", "Monkey", "Unicorn", "Smile", "Pool", "Rabbit", "Cupcake", "Pancake", "Princess", "Castle", "Flag", "Planet", "Stars", "Camp Fire", "Rose", "Spray", "Pencil", "Ice Cream", "Toilet", "Moose", "Bear", "Beer", "Batman", "Eggs", "Teapot", "Golf Club", "Tennis Racket", "Shield", "Crab", "Pot of Gold", "Cactus", "Television", "Pumpkin Pie", "Chimney", "Stable", "Nether", "Wither", "Beach", "Stop Sign", "Chestplate", "Pokeball", "Christmas Tree", "Present", "Snowflake", "Laptop", "Superman", "Football", "Basketball", "Creeper", "Tetris", "Jump", "Ninja", "Baby", "Troll Face", "Grim Reaper", "Temple", "Explosion", "Vomit", "Ants", "Barn", "Burn", "Baggage", "Frisbee", "Iceberg", "Sleeping", "Dream", "Snorlax", "Balloons", "Elevator", "Alligator", "Bikini", "Butterfly", "Bumblebee", "Pizza", "Jellyfish", "Sideburns", "Speedboat", "Treehouse", "Water Gun", "Drink", "Hook", "Dance", "Fall", "Summer", "Autumn", "Spring", "Winter", "Night Time", "Galaxy", "Sunrise", "Sunset", "Picnic", "Snowflake", "Holding Hands", "America", "Laptop", "Anvil", "Bagel", "Bench", "Cigar", "Darts", "Muffin", "Queen", "Wheat", "Dolphin", "Scarf", "Swing", "Thumb", "Tomato", "Alcohol", "Armor", "Alien", "Beans", "Cheek", "Phone", "Keyboard", "Orange", "Calculator", "Paper", "Desk", "Disco", "Elbow", "Drool", "Giant", "Golem", "Grave", "Llama", "Moose", "Party", "Panda", "Plumber", "Salsa", "Salad", "Skunk", "Skull", "Stump", "Sugar", "Ruler", "Bookcase", "Hamster", "Soup", "Teapot", "Towel", "Waist", "Archer", "Anchor", "Bamboo", "Branch", "Booger", "Carrot", "Cereal", "Coffee", "Wolf", "Crayon", "Finger", "Forest", "Hotdog", "Burger", "Obsidian", "Pillow", "Swing", "YouTube", "Farm", "Rain", "Cloud", "Frozen", "Garbage", "Music", "Twitter", "Facebook", "Santa Hat", "Rope", "Neck", "Sponge", "Sushi", "Noodles", "Soup", "Tower", "Berry", "Capture", "Prison", "Robot", "Trash", "School", "Skype", "Snowman", "Crowd", "Bank", "Mudkip", "Joker", "Lizard", "Tiger", "Royal", "Erupt", "Wizard", "Stain", "Cinema", "Notebook", "Blanket", "Paint", "Guard", "Astronaut" , "Slime" , "Mansion" , "Radar" , "Thorn" , "Tears" , "Tiny" , "Candy" , "Pepsi" , "Flint" , "Draw My Thing" , "Rice" , "Shout" , "Prize" , "Skirt" , "Thief" , "Syrup" , "Kirby" , "Brush" , "Violin", + "Bird", "Volcano", "Sloth", "Love", "Dance", "Hair", "Glasses", "Domino", "Dice", "Computer", "Top Hat", "Beard", "Wind", "Rain", "Minecraft", "Push", "Fighting", "Juggle", "Clown", "Miner", "Creeper", "Ghast", "Spider", "Punch", "Roll", "River", "Desert", "Cold", "Pregnant", "Photo", "Quick", "Mario", "Luigi", "Bridge", "Turtle", "Door Knob", "Mineplex", "Binoculars", "Telescope", "Planet", "Mountain Bike", "Moon", "Comet", "Flower", "Squirrel", "Horse Riding", "Chef", "Elephant", "Yoshi", "Shotgun", "Pistol", "James Bond", "Money", "Salt and Pepper", "Truck", "Helicopter", "Hot Air Balloon", "Sprout", "Yelling", "Muscles", "Skinny", "Zombie", "Lava", "Snake", "Motorbike", "Whale", "Boat", "Letterbox", "Window", "Lollipop", "Handcuffs", "Police", "Uppercut", "Windmill", "Eyepatch", "Campfire", "Rainbow", "Storm", "Pikachu", "Charmander", "Tornado", "Crying", "King", "Hobo", "Worm", "Snail", "XBox", "Playstation", "Nintendo", "Duck", "Pull", "Dinosaur", "Alligator", "Ankle", "Angel", "Acorn", "Bread", "Booty", "Bacon", "Crown", "Donut", "Drill", "Leash", "Magic", "Wizard", "Igloo", "Plant", "Screw", "Rifle", "Puppy", "Stool", "Stamp", "Letter", "Witch", "Zebra", "Wagon", "Compass", "Watch", "Clock", "Time", "Cyclops", "Coconut", "Hang", "Penguin", "Confused", "Bucket", "Lion", "Rubbish", "Spaceship", "Bowl", "Shark", "Pizza", "Pyramid", "Dress", "Pants", "Shorts", "Boots", "Boy", "Girl", "Math", "Sunglasses", "Frog", "Chair", "Cake", "Grapes", "Kiss", "Snorlax", "Earth", "Spaghetti", "Couch", "Family", "Milk", "Blood", "Pig", "Giraffe", "Mouse", "Couch", "Fat", "Chocolate", "Camel", "Cheese", "Beans", "Water", "Chicken", "Cannibal", "Zipper", "Book", "Swimming", "Horse", "Paper", "Toaster", "Television", "Hammer", "Piano", "Sleeping", "Yawn", "Sheep", "Night", "Chest", "Lamp", "Redstone", "Grass", "Plane", "Ocean", "Lake", "Melon", "Pumpkin", "Gift", "Fishing", "Pirate", "Lightning", "Stomach", "Belly Button", "Fishing Rod", "Iron Ore", "Diamonds", "Emeralds", "Nether Portal", "Ender Dragon", "Rabbit", "Harry Potter", "Torch", "Light", "Battery", "Zombie Pigman", "Telephone", "Tent", "Hand", "Traffic Lights", "Anvil", "Tail", "Umbrella", "Piston", "Skeleton", "Spikes", "Bridge", "Bomb", "Spoon", "Rainbow", "Staircase", "Poop", "Dragon", "Fire", "Apple", "Shoe", "Squid", "Cookie", "Tooth", "Camera", "Sock", "Monkey", "Unicorn", "Smile", "Pool", "Rabbit", "Cupcake", "Pancake", "Princess", "Castle", "Flag", "Planet", "Stars", "Camp Fire", "Rose", "Spray", "Pencil", "Ice Cream", "Toilet", "Moose", "Bear", "Beer", "Batman", "Eggs", "Teapot", "Golf Club", "Tennis Racket", "Shield", "Crab", "Pot of Gold", "Cactus", "Television", "Pumpkin Pie", "Chimney", "Stable", "Nether", "Wither", "Beach", "Stop Sign", "Chestplate", "Pokeball", "Christmas Tree", "Present", "Snowflake", "Laptop", "Superman", "Football", "Basketball", "Creeper", "Tetris", "Jump", "Ninja", "Baby", "Troll Face", "Grim Reaper", "Temple", "Explosion", "Vomit", "Ants", "Barn", "Burn", "Baggage", "Frisbee", "Iceberg", "Sleeping", "Dream", "Snorlax", "Balloons", "Elevator", "Alligator", "Bikini", "Butterfly", "Bumblebee", "Pizza", "Jellyfish", "Sideburns", "Speedboat", "Treehouse", "Water Gun", "Drink", "Hook", "Dance", "Fall", "Summer", "Autumn", "Spring", "Winter", "Night Time", "Galaxy", "Sunrise", "Sunset", "Picnic", "Snowflake", "Holding Hands", "America", "Laptop", "Anvil", "Bagel", "Bench", "Cigar", "Darts", "Muffin", "Queen", "Wheat", "Dolphin", "Scarf", "Swing", "Thumb", "Tomato", "Alcohol", "Armor", "Alien", "Beans", "Cheek", "Phone", "Keyboard", "Orange", "Calculator", "Paper", "Desk", "Disco", "Elbow", "Drool", "Giant", "Golem", "Grave", "Llama", "Moose", "Party", "Panda", "Plumber", "Salsa", "Salad", "Skunk", "Skull", "Stump", "Sugar", "Ruler", "Bookcase", "Hamster", "Soup", "Teapot", "Towel", "Waist", "Archer", "Anchor", "Bamboo", "Branch", "Booger", "Carrot", "Cereal", "Coffee", "Wolf", "Crayon", "Finger", "Forest", "Hotdog", "Burger", "Obsidian", "Pillow", "Swing", "YouTube", "Farm", "Rain", "Cloud", "Frozen", "Garbage", "Music", "Twitter", "Facebook", "Santa Hat", "Rope", "Neck", "Sponge", "Sushi", "Noodles", "Soup", "Tower", "Berry", "Capture", "Prison", "Robot", "Trash", "School", "Skype", "Snowman", "Crowd", "Bank", "Mudkip", "Joker", "Lizard", "Tiger", "Royal", "Erupt", "Wizard", "Stain", "Cinema", "Notebook", "Blanket", "Paint", "Guard", "Astronaut" , "Slime" , "Mansion" , "Radar" , "Thorn" , "Tears" , "Tiny" , "Candy" , "Pepsi" , "Flint" , "Draw My Thing" , "Rice" , "Shout" , "Prize" , "Skirt" , "Thief" , "Syrup" , "Kirby" , "Brush" , "Violin", }; _tools = new HashSet(); From 88bd99e11f2469ddea81b7573174a042795fbe12 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 1 May 2015 16:57:11 +1200 Subject: [PATCH 036/104] Wizards: Update UtilTextBottom text for the custom method --- .../src/nautilus/game/arcade/game/games/wizards/Wizards.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 5984c0601..6d8aa6464 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -712,7 +712,7 @@ public class Wizards extends SoloGame private void displayProgress(String progressColor, String prefix, double amount, String suffix, Player... players) { // Generate Bar - int bars = 52; + int bars = 24; String progressBar = C.cGreen + ""; boolean colorChange = false; for (int i = 0; i < bars; i++) @@ -723,7 +723,7 @@ public class Wizards extends SoloGame colorChange = true; } - progressBar += "|"; + progressBar += "▌"; } // Send to Player From ba5802cc14b5fb4c2f906fed5486084c9f820fae Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Fri, 1 May 2015 00:47:51 -0500 Subject: [PATCH 037/104] wizards kit availability --- .../mineplex/core/common/util/UtilTextBottom.java | 4 ++-- .../mineplex/core/achievement/Achievement.java | 9 ++++++++- .../core/achievement/AchievementCategory.java | 15 +++++++++++---- .../game/games/wizards/WizardSpellMenu.java | 2 +- .../arcade/game/games/wizards/kit/KitMystic.java | 2 +- .../game/games/wizards/kit/KitSorcerer.java | 2 +- .../game/games/wizards/kit/KitWitchDoctor.java | 4 ++-- 7 files changed, 26 insertions(+), 12 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTextBottom.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTextBottom.java index 26300c36d..56e4f6770 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTextBottom.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTextBottom.java @@ -46,7 +46,7 @@ public class UtilTextBottom amount = 1 - amount; //Generate Bar - int bars = 52; + int bars = 24; String progressBar = C.cGreen + ""; boolean colorChange = false; for (int i=0 ; i Date: Fri, 1 May 2015 01:24:01 -0500 Subject: [PATCH 038/104] Added Wizards to quick game menu. --- .../mineplex/hub/server/ServerManager.java | 5 +++ .../hub/server/ui/ServerGameMenu.java | 31 ++++++++++++++----- .../hub/server/ui/button/SelectWIZButton.java | 23 ++++++++++++++ 3 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/button/SelectWIZButton.java diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java index 597de1c2b..a0c85fa2d 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java @@ -744,4 +744,9 @@ public class ServerManager extends MiniPlugin { return _serverNpcShopMap.get("Mine-Strike"); } + + public ShopBase getWizardShop() + { + return _serverNpcShopMap.get("Wizards"); + } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java index 6acd08b2d..2cf8cb46b 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java @@ -24,6 +24,7 @@ import mineplex.hub.server.ui.button.SelectMSButton; import mineplex.hub.server.ui.button.SelectSGButton; import mineplex.hub.server.ui.button.SelectSSMButton; import mineplex.hub.server.ui.button.SelectTDMButton; +import mineplex.hub.server.ui.button.SelectWIZButton; public class ServerGameMenu extends ShopPageBase { @@ -35,7 +36,7 @@ public class ServerGameMenu extends ShopPageBase public ServerGameMenu(ServerManager plugin, QuickShop quickShop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player) { - super(plugin, quickShop, clientManager, donationManager, name, player, 27); + super(plugin, quickShop, clientManager, donationManager, name, player, 56); createSuperSmashCycle(); createMinigameCycle(); @@ -74,12 +75,12 @@ public class ServerGameMenu extends ShopPageBase this.setItem(6, _superSmashCycle.get(_ssmIndex)); - this.setItem(8, ItemStackFactory.Instance.CreateStack(Material.GRASS.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Block Hunt " + C.cGray + "Cat and Mouse", new String[] + this.setItem(8, ItemStackFactory.Instance.CreateStack(Material.BLAZE_ROD.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Wizards " + C.cGray + "Last Man Standing", new String[] { ChatColor.RESET + "", - ChatColor.RESET + "Hide as blocks/animals, upgrade your ", - ChatColor.RESET + "weapon and fight to survive against", - ChatColor.RESET + "the Hunters!", + ChatColor.RESET + "Wield powerful spells to fight", + ChatColor.RESET + "against other players in this", + ChatColor.RESET + "exciting free-for-all brawl!", })); this.setItem(18, ItemStackFactory.Instance.CreateStack(Material.BOOK_AND_QUILL.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Draw My Thing " + C.cGray + "Pictionary!", new String[] @@ -113,20 +114,29 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "and battle with the opposing team to the", ChatColor.RESET + "last man standing.", })); + + this.setItem(26, ItemStackFactory.Instance.CreateStack(Material.GRASS.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Block Hunt " + C.cGray + "Cat and Mouse", new String[] + { + ChatColor.RESET + "", + ChatColor.RESET + "Hide as blocks/animals, upgrade your ", + ChatColor.RESET + "weapon and fight to survive against", + ChatColor.RESET + "the Hunters!", + })); - this.setItem(26, _minigameCycle.get(_minigameIndex)); + this.setItem(40, _minigameCycle.get(_minigameIndex)); getButtonMap().put(0, new SelectBRButton(this)); getButtonMap().put(2, new SelectSGButton(this)); getButtonMap().put(4, new SelectMSButton(this)); getButtonMap().put(6, new SelectSSMButton(this)); - getButtonMap().put(8, new SelectBHButton(this)); + getButtonMap().put(8, new SelectWIZButton(this)); getButtonMap().put(18, new SelectDMTButton(this)); getButtonMap().put(20, new SelectCSButton(this)); getButtonMap().put(22, new SelectDOMButton(this)); getButtonMap().put(24, new SelectTDMButton(this)); - getButtonMap().put(26, new SelectMINButton(this)); + getButtonMap().put(26, new SelectBHButton(this)); + getButtonMap().put(40, new SelectMINButton(this)); } @SuppressWarnings("deprecation") @@ -407,4 +417,9 @@ public class ServerGameMenu extends ShopPageBase { getPlugin().getMinestrikeShop().attemptShopOpen(player); } + + public void OpenWIZ(Player player) + { + getPlugin().getWizardShop().attemptShopOpen(player); + } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/button/SelectWIZButton.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/button/SelectWIZButton.java new file mode 100644 index 000000000..d82bc7a23 --- /dev/null +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/button/SelectWIZButton.java @@ -0,0 +1,23 @@ +package mineplex.hub.server.ui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.shop.item.IButton; +import mineplex.hub.server.ui.ServerGameMenu; + +public class SelectWIZButton implements IButton +{ + private ServerGameMenu _menu; + + public SelectWIZButton(ServerGameMenu menu) + { + _menu = menu; + } + + @Override + public void onClick(Player player, ClickType clickType) + { + _menu.OpenWIZ(player); + } +} From cc65830f9be14a4f4f275171b493b814def8bc03 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 1 May 2015 19:24:20 +1200 Subject: [PATCH 039/104] ResourcePack: Ignore ServerGroup's resource pack and set MineStrike to use new ResourcePack code --- .../src/mineplex/core/serverConfig/ServerConfiguration.java | 2 +- .../src/nautilus/game/arcade/GameType.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/serverConfig/ServerConfiguration.java b/Plugins/Mineplex.Core/src/mineplex/core/serverConfig/ServerConfiguration.java index d0c29b368..02cc887b0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/serverConfig/ServerConfiguration.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/serverConfig/ServerConfiguration.java @@ -50,7 +50,7 @@ public class ServerConfiguration extends MiniPlugin _plugin.getServer().setWhitelist(_serverGroup.getWhitelist()); ((CraftServer)_plugin.getServer()).getServer().setPvP(_serverGroup.getPvp()); - ((CraftServer)_plugin.getServer()).getServer().setTexturePack(_serverGroup.getResourcePack()); + //((CraftServer)_plugin.getServer()).getServer().setTexturePack(_serverGroup.getResourcePack()); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 0b1975da0..a0d9cb96f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -28,7 +28,7 @@ public enum GameType Horse("Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE, 21), Micro("Micro Battle", Material.LAVA_BUCKET, (byte)0, GameCategory.ARCADE, 24), MilkCow("Milk the Cow", Material.MILK_BUCKET, (byte)0, GameCategory.ARCADE, 27), - MineStrike("MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS, 25), + MineStrike("MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS, 25, "http://chivebox.com/file/c/assets.zip", false), MineWare("MineWare", Material.PAPER, (byte)0, GameCategory.ARCADE, 26), Paintball("Super Paintball", Material.ENDER_PEARL, (byte)0, GameCategory.ARCADE, 28), Quiver("One in the Quiver", Material.ARROW, (byte)0, GameCategory.ARCADE, 29), @@ -52,7 +52,7 @@ public enum GameType TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE, 45), UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46), WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE, 47), - Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48, "http://chivebox.com/file/c/ResWizards.zip", true), + Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48, "https://chivebox.com/file/c/ResWizards.zip", true), ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49), Build("Master Builders", Material.BRICK, (byte)0, GameCategory.CLASSICS, 50), From c240a1752f40051e07d9ac9eff9842952375c00e Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 1 May 2015 19:28:42 +1200 Subject: [PATCH 040/104] GameType: Update resource pack to use https not http --- .../Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index a0d9cb96f..2937bd701 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -28,7 +28,7 @@ public enum GameType Horse("Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE, 21), Micro("Micro Battle", Material.LAVA_BUCKET, (byte)0, GameCategory.ARCADE, 24), MilkCow("Milk the Cow", Material.MILK_BUCKET, (byte)0, GameCategory.ARCADE, 27), - MineStrike("MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS, 25, "http://chivebox.com/file/c/assets.zip", false), + MineStrike("MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS, 25, "https://chivebox.com/file/c/assets.zip", false), MineWare("MineWare", Material.PAPER, (byte)0, GameCategory.ARCADE, 26), Paintball("Super Paintball", Material.ENDER_PEARL, (byte)0, GameCategory.ARCADE, 28), Quiver("One in the Quiver", Material.ARROW, (byte)0, GameCategory.ARCADE, 29), From e800d74976562e26dc6fc5c9803173f26449b70f Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Fri, 1 May 2015 02:29:20 -0500 Subject: [PATCH 041/104] Disabled Double Gems. --- .../src/nautilus/game/arcade/managers/GameGemManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameGemManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameGemManager.java index 46c4b86b6..bd55ff74b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameGemManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameGemManager.java @@ -30,7 +30,7 @@ public class GameGemManager implements Listener { ArcadeManager Manager; - boolean DoubleGem = true; + boolean DoubleGem = false; public GameGemManager(ArcadeManager manager) { From 84a5e5e5214623ff760b93b3f3e1a3e05dfe3d54 Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Fri, 1 May 2015 02:29:34 -0500 Subject: [PATCH 042/104] Added motd. --- .../src/mineplex/bungee/motd/MotdManager.java | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java index e420dfaa7..68680211a 100644 --- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java @@ -1,5 +1,6 @@ package mineplex.bungee.motd; +import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.TimeUnit; @@ -53,23 +54,13 @@ public class MotdManager implements Listener, Runnable public void run() { // Add in default MOTD listing to database - /* - if (!_repository.elementExists("MainMotd")) - { - _repository.removeElement("MainMotd"); List lines = new ArrayList(); - lines.add(" §a§lDouble Gems for 1.8 Players!"); - lines.add(" §e§lChampions Update §a§lBalance Patch"); - lines.add(" §6§lSpecial Egg Baskets!"); - lines.add(" §e§lBunny Morph §a§lLimited Time!"); - lines.add(" §d§lHero Sale §a§l33% Off"); - lines.add(" §a§lDouble Gems for 1.8 Players!"); + lines.add(" §e§lNEW GAME §a§lWizards!"); + lines.add(" §d§lRank Sale §a§l40% Off"); updateMainMotd(" §b§l§m §8§l§m[ §r §9§lMineplex§r §f§lGames§r §8§l§m ]§b§l§m §r", lines); - } - */ - + GlobalMotd motd = _repository.getElement("MainMotd"); if (motd != null) From 93a25d5a676063f8f0796d59c114c34035506bdc Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 1 May 2015 21:26:42 +1200 Subject: [PATCH 043/104] ResourcePack: Fixed links and declined message --- .../src/nautilus/game/arcade/ArcadeManager.java | 2 +- .../src/nautilus/game/arcade/GameType.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 7ad59fed2..22219056b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -346,7 +346,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation { _resourcePackNoResponse.remove(player.getName()); - returnHubNoResPack(player, "Failed to download resource pack!"); + returnHubNoResPack(player, "You need to accept the resource pack!"); } else if (response == EnumResourcePackStatus.FAILED_DOWNLOAD) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 2937bd701..3a514a456 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -28,7 +28,7 @@ public enum GameType Horse("Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE, 21), Micro("Micro Battle", Material.LAVA_BUCKET, (byte)0, GameCategory.ARCADE, 24), MilkCow("Milk the Cow", Material.MILK_BUCKET, (byte)0, GameCategory.ARCADE, 27), - MineStrike("MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS, 25, "https://chivebox.com/file/c/assets.zip", false), + MineStrike("MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS, 25, "http://chivebox.com/file/c/assets.zip", false), MineWare("MineWare", Material.PAPER, (byte)0, GameCategory.ARCADE, 26), Paintball("Super Paintball", Material.ENDER_PEARL, (byte)0, GameCategory.ARCADE, 28), Quiver("One in the Quiver", Material.ARROW, (byte)0, GameCategory.ARCADE, 29), @@ -52,7 +52,7 @@ public enum GameType TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE, 45), UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46), WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE, 47), - Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48, "https://chivebox.com/file/c/ResWizards.zip", true), + Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48, "http://chivebox.com/file/c/ResWizards.zip", true), ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49), Build("Master Builders", Material.BRICK, (byte)0, GameCategory.CLASSICS, 50), From b136be0d47385ec8e4e33cb0b0668920b199bbec Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 2 May 2015 03:03:53 +1200 Subject: [PATCH 044/104] ResourcePack: Removed code that demanded a enum and changed to boolean --- .../src/nautilus/game/arcade/ArcadeManager.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 22219056b..6d1ff9a47 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -183,7 +183,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation private IPacketHandler _resourcePacketHandler; private String _resourcePackUrl; private boolean _resourcePackRequired; - private NautHashMap _resourcePackUsers = new NautHashMap(); + private NautHashMap _resourcePackUsers = new NautHashMap(); private NautHashMap _resourcePackNoResponse = new NautHashMap(); // Observers @@ -360,7 +360,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation if (response == EnumResourcePackStatus.ACCEPTED || response == EnumResourcePackStatus.LOADED) { - _resourcePackUsers.put(player.getName(), response); + _resourcePackUsers.put(player.getName(), true); } else { @@ -1341,14 +1341,10 @@ public class ArcadeManager extends MiniPlugin implements IRelation @EventHandler public void ResourcePackQuit(PlayerQuitEvent event) { - Player player = event.getPlayer(); - EnumResourcePackStatus status = _resourcePackUsers.get(player.getName()); - - if (status == EnumResourcePackStatus.ACCEPTED || status == EnumResourcePackStatus.LOADED) + if (_resourcePackUsers.containsKey(player.getName()) && _resourcePackUsers.get(player.getName())) { - new RedisUnloadResPack(player.getName()).publish(); _resourcePackUsers.remove(player.getName()); @@ -1397,7 +1393,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation _resourcePackNoResponse.put(player.getName(), System.currentTimeMillis()); } - _resourcePackUsers.put(player.getName(), null); + _resourcePackUsers.put(player.getName(), false); player.setResourcePack(_resourcePackUrl); } } @@ -1429,7 +1425,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation _resourcePackNoResponse.put(player.getName(), System.currentTimeMillis()); } - _resourcePackUsers.put(player.getName(), null); + _resourcePackUsers.put(player.getName(), false); player.setResourcePack(_resourcePackUrl); } } From 02e9649c20e70e88bf727fb96e0a0e24d1c4d849 Mon Sep 17 00:00:00 2001 From: Ty Sayers Date: Fri, 1 May 2015 12:33:11 -0400 Subject: [PATCH 045/104] Encapsulate remote process related code into new project ServerProcesses for better dependability. Likewise, add project Queue.Core for queue related API methods. Queuer incorporated into new matchmaking logic for matching and pairing players for ranked matches, as well as handling server management. Adapt Core and Arcade to new ranked system for proper loading, modification, and saving of rankings. --- .../Queuer.launch} | 10 +- Plugins/Mineplex.Core/.classpath | 1 + .../src/mineplex/core/elo/EloManager.java | 123 ++--- .../src/mineplex/core/elo/EloPlayer.java | 12 - .../src/mineplex/core/elo/EloRating.java | 63 +++ .../mineplex/core/elo/EloRatingSystem.java | 62 +-- .../src/mineplex/core/elo/EloRepository.java | 65 ++- .../src/mineplex/core/elo/EloTeam.java | 23 - .../src/mineplex/core/elo/GameResult.java | 8 - .../src/mineplex/core/elo/KFactor.java | 34 -- .../src/mineplex/core/elo/RankedGame.java | 43 ++ .../src/mineplex/core/elo/RankedPlayer.java | 47 ++ .../src/mineplex/core/elo/RankedTeam.java | 58 ++ .../src/mineplex/core/elo/RatingSystem.java | 12 + .../src/mineplex/core/elo/Team.java | 9 + Plugins/Mineplex.Queue.Core/.classpath | 12 + .../.externalToolBuilders/Queue.Core.launch | 17 + Plugins/Mineplex.Queue.Core/.project | 17 + .../Mineplex.Queue.Core.iml | 17 + Plugins/Mineplex.Queue.Core/build.xml | 90 ++++ .../src/mineplex/queuer/Match.java | 49 +- .../src/mineplex/queuer/QueueParty.java | 115 ++++ .../src/mineplex/queuer/QueuePartySorter.java | 0 .../src/mineplex/queuer/QueueRepository.java | 110 ++-- .../src/mineplex/queuer/Ranked.java | 15 + Plugins/Mineplex.Queuer/.classpath | 2 + .../src/mineplex/queuer/QueueParty.java | 78 --- .../src/mineplex/queuer/Queuer.java | 500 +++++++++++------- Plugins/Mineplex.ServerData/.project | 12 +- Plugins/Mineplex.ServerData/build.xml | 2 +- .../serverdata/servers/ConnectionData.java | 3 +- .../serverdata/servers/ServerManager.java | 4 +- Plugins/Mineplex.ServerMonitor/.classpath | 1 + .../mineplex/servermonitor/ServerMonitor.java | 62 +-- Plugins/Mineplex.ServerProcesses/.classpath | 6 + Plugins/Mineplex.ServerProcesses/.project | 17 + .../serverprocesses}/GenericRunnable.java | 2 +- .../serverprocesses/ProcessManager.java | 119 +++++ .../serverprocesses}/ProcessRunner.java | 4 +- .../src/nautilus/game/arcade/game/Game.java | 17 +- .../nautilus/game/arcade/game/GameTeam.java | 17 +- .../nautilus/game/arcade/game/TeamGame.java | 16 + .../games/champions/ChampionsDominate.java | 3 - .../arcade/game/games/common/Domination.java | 46 +- .../game/games/common/TeamDeathmatch.java | 46 +- .../arcade/managers/GameLobbyManager.java | 5 +- 46 files changed, 1272 insertions(+), 702 deletions(-) rename Plugins/{Mineplex.ServerData/.externalToolBuilders/New_Builder.launch => .externalToolBuilders/Queuer.launch} (88%) delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/EloRating.java delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/GameResult.java delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/KFactor.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/RankedGame.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/RankedPlayer.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/RankedTeam.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/RatingSystem.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/Team.java create mode 100644 Plugins/Mineplex.Queue.Core/.classpath create mode 100644 Plugins/Mineplex.Queue.Core/.externalToolBuilders/Queue.Core.launch create mode 100644 Plugins/Mineplex.Queue.Core/.project create mode 100644 Plugins/Mineplex.Queue.Core/Mineplex.Queue.Core.iml create mode 100644 Plugins/Mineplex.Queue.Core/build.xml rename Plugins/{Mineplex.Queuer => Mineplex.Queue.Core}/src/mineplex/queuer/Match.java (52%) create mode 100644 Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueParty.java rename Plugins/{Mineplex.Queuer => Mineplex.Queue.Core}/src/mineplex/queuer/QueuePartySorter.java (100%) rename Plugins/{Mineplex.Queuer => Mineplex.Queue.Core}/src/mineplex/queuer/QueueRepository.java (61%) create mode 100644 Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Ranked.java delete mode 100644 Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueParty.java create mode 100644 Plugins/Mineplex.ServerProcesses/.classpath create mode 100644 Plugins/Mineplex.ServerProcesses/.project rename Plugins/{Mineplex.ServerMonitor/src/mineplex/servermonitor => Mineplex.ServerProcesses/src/mineplex/serverprocesses}/GenericRunnable.java (62%) create mode 100644 Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessManager.java rename Plugins/{Mineplex.ServerMonitor/src/mineplex/servermonitor => Mineplex.ServerProcesses/src/mineplex/serverprocesses}/ProcessRunner.java (95%) diff --git a/Plugins/Mineplex.ServerData/.externalToolBuilders/New_Builder.launch b/Plugins/.externalToolBuilders/Queuer.launch similarity index 88% rename from Plugins/Mineplex.ServerData/.externalToolBuilders/New_Builder.launch rename to Plugins/.externalToolBuilders/Queuer.launch index 0c6e0f696..7fe0fe5da 100644 --- a/Plugins/Mineplex.ServerData/.externalToolBuilders/New_Builder.launch +++ b/Plugins/.externalToolBuilders/Queuer.launch @@ -1,11 +1,11 @@ - - - + + + - + @@ -13,5 +13,5 @@ - + diff --git a/Plugins/Mineplex.Core/.classpath b/Plugins/Mineplex.Core/.classpath index 8171cd881..f6f18e5b2 100644 --- a/Plugins/Mineplex.Core/.classpath +++ b/Plugins/Mineplex.Core/.classpath @@ -14,5 +14,6 @@ + diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java index 858e89198..74117863b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java @@ -2,13 +2,20 @@ package mineplex.core.elo; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.UUID; import mineplex.core.MiniDbClientPlugin; import mineplex.core.account.CoreClientManager; import mineplex.core.common.util.NautHashMap; +import mineplex.queuer.QueueParty; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; public class EloManager extends MiniDbClientPlugin @@ -16,91 +23,66 @@ public class EloManager extends MiniDbClientPlugin private static Object _playerEloLock = new Object(); private EloRepository _repository; - private EloRatingSystem _ratingSystem; - private NautHashMap> _playerElos; + private RatingSystem _ratingSystem; + private Map _rankings; public EloManager(JavaPlugin plugin, CoreClientManager clientManager) { super("Elo Rating", plugin, clientManager); _repository = new EloRepository(plugin); - _ratingSystem = new EloRatingSystem(new KFactor(0, 1200, 25), new KFactor(1201, 1600, 20), new KFactor(1601, 2000, 15), new KFactor(2001, 2500, 10)); - _playerElos = new NautHashMap>(); + _ratingSystem = new EloRatingSystem(); + _rankings = new HashMap(); } - - public int getElo(UUID uuid, String gameType) + + public void resolveMatch(Team winner, Team loser, int gamemode) { - int elo = 1000; + Set winnerMembers = new HashSet(); + Set loserMembers = new HashSet(); - synchronized (_playerEloLock) + for (String memberName : winner.getMemberNames()) { - if (_playerElos.containsKey(uuid.toString())) - { - if (_playerElos.get(uuid.toString()).containsKey(gameType)) - { - elo = _playerElos.get(uuid.toString()).get(gameType); - } - } + RankedPlayer player = getRankedPlayer(memberName); + winnerMembers.add(player); } - return elo; - } - - public EloTeam getNewRatings(EloTeam teamA, EloTeam teamB, GameResult result) - { - EloTeam newTeam = new EloTeam(); - - System.out.println("Old " + result + " Team Rating:" + teamA.TotalElo); - - int newTotal = _ratingSystem.getNewRating(teamA.TotalElo / teamA.getPlayers().size(), teamB.TotalElo / teamB.getPlayers().size(), result) * teamA.getPlayers().size(); - - System.out.println("New " + result + " Team Rating:" + newTotal); - - for (EloPlayer player : teamA.getPlayers()) + for (String memberName : loser.getMemberNames()) { - EloPlayer newPlayer = new EloPlayer(); - newPlayer.UniqueId = player.UniqueId; - newPlayer.Rating = (int)(player.Rating + ((double)player.Rating / (double)teamA.TotalElo) * (newTotal - teamA.TotalElo)); - - System.out.println("Old:"); - player.printInfo(); - - System.out.println("New:"); - newPlayer.printInfo(); - - newTeam.addPlayer(newPlayer); + RankedPlayer player = getRankedPlayer(memberName); + loserMembers.add(player); } - return newTeam; - } - - public void saveElo(UUID uuid, String gameType, int elo) - { - saveElo(uuid.toString(), gameType, elo); - } - - public void saveElo(final String uuid, final String gameType, final int elo) - { - Bukkit.getServer().getScheduler().runTaskAsynchronously(getPlugin(), new Runnable() - { - public void run() - { - _repository.saveElo(uuid, gameType, elo); - - synchronized (_playerEloLock) - { - if (_playerElos.containsKey(uuid)) - { - if (_playerElos.get(uuid).containsKey(gameType)) - { - _playerElos.get(uuid).put(gameType, elo); - } - } - } - } - }); + RankedTeam team1 = new RankedTeam(winnerMembers, gamemode); + RankedTeam team2 = new RankedTeam(loserMembers, gamemode); + RankedGame game = new RankedGame(team1, team2); + + // Allow the rating system to resolve and update player ratings from match + _ratingSystem.resolveGame(game); } + public EloRating getRating(String playerName, int gamemode) + { + return getRankedPlayer(playerName).getRating(gamemode); + } + + public RankedPlayer getRankedPlayer(String playerName) + { + return null; // TODO: Implement fetching for cached player ranking + } + + private void savePlayer(RankedPlayer player) + { + // TODO: Do this asynchronously! + for (EloRating rating : player.getRatings()) + { + if (rating.isUpdated()) + { + _repository.saveRating(rating); + } + } + } + + // TODO: DEPCRECATED? @Override protected EloClientData AddPlayer(String player) { @@ -110,12 +92,15 @@ public class EloManager extends MiniDbClientPlugin @Override public void processLoginResultSet(String playerName, ResultSet resultSet) throws SQLException { + Collection ratings = _repository.parseRatings(resultSet); + RankedPlayer rankedPlayer = new RankedPlayer(playerName, uuid, ratings); Set(playerName, _repository.loadClientInformation(resultSet)); } @Override public String getQuery(String uuid, String name) { - return "SELECT gameType, elo FROM eloRating WHERE uuid = '" + uuid + "';"; + // Query elo ratings table for all the EloRatings associated with player logging in! + return "SELECT uuid, gamemode, elo, matchesPlayed FROM eloRating WHERE uuid = '" + uuid + "';"; } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java deleted file mode 100644 index a2661fee3..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java +++ /dev/null @@ -1,12 +0,0 @@ -package mineplex.core.elo; - -public class EloPlayer -{ - public String UniqueId; - public int Rating; - - public void printInfo() - { - System.out.println(UniqueId + "'s elo is " + Rating); - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRating.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRating.java new file mode 100644 index 000000000..de07f6621 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRating.java @@ -0,0 +1,63 @@ +package mineplex.core.elo; + +public class EloRating +{ + public static final int PROVISIONAL_GAMES = 10; // Number of provisional games to ensure rating accuracy + public static final int DEFAULT_RATING = 1200; // Default starting ELO for first-time players. + + private int _rating; + public int getRating() { return _rating; } + + private int _gamemode; + public int getGamemode() { return _gamemode; } + + private String _uuid; + public String getUuid() { return _uuid; } + + private int _matchesPlayed; + public int getMatchesPlayed() { return _matchesPlayed; } + public void incrementMatchesPlayed() { _matchesPlayed++; } + + private boolean _updated; // Whether this EloRating has been updated/modified since caching + public boolean isUpdated() { return _updated; } + private void onUpdate() { _updated = true; } + + public EloRating(String uuid, int gamemode, int rating, int matchesPlayed) + { + _updated = false; + _uuid = uuid; + _gamemode = gamemode; + _rating = rating; + _matchesPlayed = matchesPlayed;; + } + + public EloRating(String uuid, int gamemode) + { + this(uuid, gamemode, DEFAULT_RATING, 0); + } + + public void updateRating(int eloDelta) + { + setRating(_rating + eloDelta); + } + + public double getKFactor() + { + if (_matchesPlayed < PROVISIONAL_GAMES) + { + double provisionalPercent = _matchesPlayed / (double) PROVISIONAL_GAMES; + return 50d - (25 * provisionalPercent); // Range of [50, 25] Kfactor for provisionl games period + } + else + { + double ratio = ((double) PROVISIONAL_GAMES) / _matchesPlayed; + return 10d + 15 * (ratio); // Range of [10, 25] KFactor for games after provisionals + } + } + + private void setRating(int rating) + { + _rating = Math.max(rating, 0); + onUpdate(); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRatingSystem.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRatingSystem.java index d32433ed6..a27d308ba 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRatingSystem.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRatingSystem.java @@ -1,6 +1,8 @@ package mineplex.core.elo; -public class EloRatingSystem +import java.util.List; + +public class EloRatingSystem implements RatingSystem { private final static int DEFAULT_KFACTOR = 25; @@ -8,26 +10,37 @@ public class EloRatingSystem public final static double DRAW = 0.5; public final static double LOSS = 0.0; - private KFactor[] _kFactors = {}; - - public EloRatingSystem(KFactor...kFactors) + public EloRatingSystem() { - _kFactors = kFactors; + } - public int getNewRating(int rating, int opponentRating, GameResult result) + @Override + public void resolveGame(RankedGame game) { - switch (result) - { - case Win: - return getNewRating(rating, opponentRating, WIN); - case Loss: - return getNewRating(rating, opponentRating, LOSS); - case Draw: - return getNewRating(rating, opponentRating, DRAW); - } + List teams = game.getSortedTeams(); + RankedTeam winner = teams.get(0); + RankedTeam loser = teams.get(1); // TODO: Impelement non-arbitrary rating? + double winningExpected = getExpectedScore(winner.getElo(), loser.getElo()); + double losingExpected = getExpectedScore(loser.getElo(), winner.getElo()); - return -1; + // Update the ratings of all participants + updateRatings(winner, winningExpected, 1.0d); + updateRatings(loser, losingExpected, 0.0d); + } + + private void updateRatings(RankedTeam team, double expectedScore, double score) + { + double scoreDelta = score - expectedScore; + for (EloRating rating : team.getRatings()) + { + // R' = R + K(S - E) + int eloDelta = (int) (rating.getKFactor() * scoreDelta); + rating.updateRating(eloDelta); + rating.incrementMatchesPlayed(); + + System.out.println("Player with " + rating.getMatchesPlayed() + " games had ELO updated by " + eloDelta + " for new rating of " + rating.getRating()); + } } /** @@ -45,7 +58,7 @@ public class EloRatingSystem */ public int getNewRating(int rating, int opponentRating, double score) { - double kFactor = getKFactor(rating); + double kFactor = 0;//getKFactor(rating); double expectedScore = getExpectedScore(rating, opponentRating); int newRating = calculateNewRating(rating, score, expectedScore, kFactor); @@ -57,20 +70,7 @@ public class EloRatingSystem return oldRating + (int) (kFactor * (score - expectedScore)); } - private double getKFactor(int rating) - { - for (int i = 0; i < _kFactors.length; i++) - { - if (rating >= _kFactors[i].getStartIndex() && rating <= _kFactors[i].getEndIndex()) - { - return _kFactors[i].value; - } - } - - return DEFAULT_KFACTOR; - } - - private double getExpectedScore(int rating, int opponentRating) + public static double getExpectedScore(int rating, int opponentRating) { return 1.0 / (1.0 + Math.pow(10.0, ((double) (opponentRating - rating) / 400.0))); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java index 54503474f..bdbee8acb 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java @@ -2,6 +2,8 @@ package mineplex.core.elo; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.HashSet; +import java.util.Set; import org.bukkit.plugin.java.JavaPlugin; @@ -12,40 +14,59 @@ import mineplex.core.database.column.ColumnVarChar; public class EloRepository extends RepositoryBase { - private static String CREATE_ELO_TABLE = "CREATE TABLE IF NOT EXISTS eloRating (id INT NOT NULL AUTO_INCREMENT, uuid VARCHAR(256), gameType VARCHAR(256), elo INT, PRIMARY KEY (id), UNIQUE INDEX uuid_gameType_index (uuid, gameType));"; - private static String INSERT_ELO = "INSERT INTO eloRating (uuid, gameType, elo) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE elo=VALUES(elo);"; + private static String INSERT_ELO = "INSERT INTO eloRating (uuid, gamemode, elo, matchesPlayed) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE elo=VALUES(elo);"; + /** + * Constructor + * @param plugin + */ public EloRepository(JavaPlugin plugin) { super(plugin, DBPool.ACCOUNT); - - initialize(); } - - public void initialize() + + /** + * Save & update an {@link EloRating} into repository. + * @param rating - the rating to be saved/updated in the repository. + */ + public void saveRating(EloRating rating) { - //executeUpdate(CREATE_ELO_TABLE); + String uuid = rating.getUuid(); + int gamemode = rating.getGamemode(); + int elo = rating.getRating(); + int matchesPlayed = rating.getMatchesPlayed(); + + // Execute update/insert + executeUpdate(INSERT_ELO, new ColumnVarChar("uuid", 100, uuid), new ColumnInt("gamemode", gamemode), + new ColumnInt("elo", elo), new ColumnInt("matchesPlayed", matchesPlayed)); } - - public void saveElo(String uuid, String gameType, int elo) + + /** + * Parse incoming SQL result from EloRatings table into usable {@link EloRating} objects. + * @param resultSet - the resulting set from SQL query for ELO ratings. + * @return parsed {@link EloRating} objects return from {@code resultSet}. + */ + public Set parseRatings(ResultSet resultSet) throws SQLException { - executeUpdate(INSERT_ELO, new ColumnVarChar("uuid", 100, uuid), new ColumnVarChar("gameType", 100, gameType), new ColumnInt("elo", elo)); - } - - public EloClientData loadClientInformation(ResultSet resultSet) throws SQLException - { - EloClientData clientData = new EloClientData(); - + Set ratings = new HashSet(); + while (resultSet.next()) { - clientData.Elos.put(resultSet.getString(1), resultSet.getInt(2)); + String uuid = resultSet.getString(1); + int gamemode = resultSet.getInt(2); + int elo = resultSet.getInt(3); + int matchesPlayed = resultSet.getInt(4); + + EloRating rating = new EloRating(uuid, gamemode, elo, matchesPlayed); + ratings.add(rating); } - - return clientData; + + return ratings; } @Override - protected void update() - { - } + protected void update() { } + + @Override + protected void initialize() { } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java deleted file mode 100644 index 73f54168a..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java +++ /dev/null @@ -1,23 +0,0 @@ -package mineplex.core.elo; - -import java.util.ArrayList; -import java.util.List; - -public class EloTeam -{ - private List _players = new ArrayList(); - - public int TotalElo = 0; - - public void addPlayer(EloPlayer player) - { - TotalElo += player.Rating; - - _players.add(player); - } - - public List getPlayers() - { - return _players; - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/GameResult.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/GameResult.java deleted file mode 100644 index 5c00d8d5f..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/GameResult.java +++ /dev/null @@ -1,8 +0,0 @@ -package mineplex.core.elo; - -public enum GameResult -{ - Win, - Loss, - Draw -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/KFactor.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/KFactor.java deleted file mode 100644 index 81d9be811..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/KFactor.java +++ /dev/null @@ -1,34 +0,0 @@ -package mineplex.core.elo; - -public class KFactor -{ - public int startIndex, endIndex; - public double value; - - public KFactor(int startIndex, int endIndex, double value) - { - this.startIndex = startIndex; - this.endIndex = endIndex; - this.value = value; - } - - public int getStartIndex() - { - return startIndex; - } - - public int getEndIndex() - { - return endIndex; - } - - public double getValue() - { - return value; - } - - public String toString() - { - return "kfactor: " + startIndex + " " + endIndex + " " + value; - } -} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedGame.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedGame.java new file mode 100644 index 000000000..6651404f9 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedGame.java @@ -0,0 +1,43 @@ +package mineplex.core.elo; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Random; +import java.util.Set; + +public class RankedGame +{ + + private Set _teams; + + public RankedGame(RankedTeam team1, RankedTeam team2) + { + // TODO: Implement non-arbitrary ranking of multi-team game comps + _teams = new HashSet(); + _teams.add(team1); // Winner team + _teams.add(team2); // Loser team + } + + public List getSortedTeams() + { + List sortedTeams = new ArrayList(_teams); + + Random rand = new Random(); + double roll = rand.nextDouble(); + + int rating1 = sortedTeams.get(0).getElo(); + int rating2 = sortedTeams.get(1).getElo(); + + double chanceOfWinning = EloRatingSystem.getExpectedScore(rating1, rating2); + + if (roll > chanceOfWinning) + { + RankedTeam team1 = sortedTeams.remove(0); + sortedTeams.add(team1); + } + + return sortedTeams; + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedPlayer.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedPlayer.java new file mode 100644 index 000000000..03e1bf719 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedPlayer.java @@ -0,0 +1,47 @@ +package mineplex.core.elo; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +public class RankedPlayer +{ + private String _name; + public String getName() { return _name; } + + private String _uuid; + private Map _ratings; + + public RankedPlayer(String playerName, String uuid, Collection ratings) + { + _name = playerName; + _uuid = uuid; + + // Initialize ratings + _ratings = new HashMap(); + for (EloRating rating : ratings) + { + _ratings.put(rating.getGamemode(), rating); + } + } + + public EloRating getRating(int gamemode) + { + if (!_ratings.containsKey(gamemode)) + { + _ratings.put(gamemode, generateRating(gamemode)); + } + + return _ratings.get(gamemode); + } + + public Collection getRatings() + { + return _ratings.values(); + } + + private EloRating generateRating(int gamemode) + { + return new EloRating(_uuid, gamemode); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedTeam.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedTeam.java new file mode 100644 index 000000000..1f37af442 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedTeam.java @@ -0,0 +1,58 @@ +package mineplex.core.elo; + +import java.util.HashSet; +import java.util.Set; + +import mineplex.queuer.Ranked; + + +public class RankedTeam implements Ranked, Team +{ + + private Set _players; + private int _gamemode; + + public RankedTeam(Set players, int gamemode) + { + _players = players; + _gamemode = gamemode; + } + + @Override + public int getElo() + { + int totalElo = 0; + + for (EloRating rating : getRatings()) + { + totalElo += rating.getRating(); + } + + return totalElo / _players.size(); /// Return average elo + } + + @Override + public Set getMemberNames() + { + Set memberNames = new HashSet(); + + for (RankedPlayer player : _players) + { + memberNames.add(player.getName()); + } + + return memberNames; + } + + public Set getRatings() + { + Set ratings = new HashSet(); + + for (RankedPlayer player : _players) + { + ratings.add(player.getRating(_gamemode)); + } + + return ratings; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/RatingSystem.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/RatingSystem.java new file mode 100644 index 000000000..f4f8d0808 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/RatingSystem.java @@ -0,0 +1,12 @@ +package mineplex.core.elo; + +public interface RatingSystem +{ + + /** + * Resolve a {@link RankedGame} by updating the rankings of all participants dependant on + * the outcome of the game. + * @param game - the game to be resolved after completion (must be a completed RankedGame) + */ + public void resolveGame(RankedGame game); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/Team.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/Team.java new file mode 100644 index 000000000..8e03b7171 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/Team.java @@ -0,0 +1,9 @@ +package mineplex.core.elo; + +import java.util.Set; + +public interface Team +{ + + public Set getMemberNames(); +} diff --git a/Plugins/Mineplex.Queue.Core/.classpath b/Plugins/Mineplex.Queue.Core/.classpath new file mode 100644 index 000000000..793451685 --- /dev/null +++ b/Plugins/Mineplex.Queue.Core/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Plugins/Mineplex.Queue.Core/.externalToolBuilders/Queue.Core.launch b/Plugins/Mineplex.Queue.Core/.externalToolBuilders/Queue.Core.launch new file mode 100644 index 000000000..2981815ed --- /dev/null +++ b/Plugins/Mineplex.Queue.Core/.externalToolBuilders/Queue.Core.launch @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Plugins/Mineplex.Queue.Core/.project b/Plugins/Mineplex.Queue.Core/.project new file mode 100644 index 000000000..669fb734b --- /dev/null +++ b/Plugins/Mineplex.Queue.Core/.project @@ -0,0 +1,17 @@ + + + Mineplex.Queue.Core + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Plugins/Mineplex.Queue.Core/Mineplex.Queue.Core.iml b/Plugins/Mineplex.Queue.Core/Mineplex.Queue.Core.iml new file mode 100644 index 000000000..d65267f31 --- /dev/null +++ b/Plugins/Mineplex.Queue.Core/Mineplex.Queue.Core.iml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Plugins/Mineplex.Queue.Core/build.xml b/Plugins/Mineplex.Queue.Core/build.xml new file mode 100644 index 000000000..bfa129910 --- /dev/null +++ b/Plugins/Mineplex.Queue.Core/build.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Plugins/Mineplex.Queuer/src/mineplex/queuer/Match.java b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Match.java similarity index 52% rename from Plugins/Mineplex.Queuer/src/mineplex/queuer/Match.java rename to Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Match.java index 747c8e5a4..93bbb70ea 100644 --- a/Plugins/Mineplex.Queuer/src/mineplex/queuer/Match.java +++ b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Match.java @@ -1,11 +1,11 @@ package mineplex.queuer; -import java.util.Collection; -import java.util.HashMap; import java.util.HashSet; import java.util.Set; -public class Match +import mineplex.serverdata.data.ServerGroup; + +public class Match implements Ranked { private int _id; public int getId() { return _id; } @@ -16,16 +16,23 @@ public class Match private boolean _waitingForInvites; public boolean isWaitingForInvites() { return _waitingForInvites; } + private boolean _ready; + public boolean isReady() { return _ready; } + public void setReady(boolean ready) { _ready = ready; } + private long _waitingStartTime; public long getWaitDuration() { return System.currentTimeMillis() - _waitingStartTime; } - private int _averageElo; - public int getAverageElo() { return _averageElo; } + private ServerGroup _serverGroup; // The server group associated with this Match type. + public ServerGroup getServerGroup() { return _serverGroup; } - public Match(int id, int averageElo, QueueParty... parties) + public Match(int id, ServerGroup serverGroup, QueueParty... parties) { - this._id = id; - this._averageElo = averageElo; + _ready = false; + _id = id; + _parties = new HashSet(); + _waitingForInvites = false; + _serverGroup = serverGroup; for (QueueParty party : parties) { @@ -51,6 +58,32 @@ public class Match _parties.remove(queueParty); } + /** + * @return average ELO of all members of the match, if the match contains players, 0 otherwise. + */ + @Override + public int getElo() + { + if (_parties.size() == 0) return 0; + + int totalElo = 0; + for (QueueParty party : _parties) + { + totalElo += (party.getAverageElo() * party.getPlayerCount()); + } + + return totalElo / getPlayerCount(); + } + + /** + * @return the number of open slots remaining in the match to be filled. + */ + public int getOpenSlots() + { + int openSlots = _serverGroup.getMaxPlayers() - getPlayerCount(); + return Math.max(openSlots, 0); + } + public int getPlayerCount() { int playerCount = 0; diff --git a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueParty.java b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueParty.java new file mode 100644 index 000000000..0e76c9ad5 --- /dev/null +++ b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueParty.java @@ -0,0 +1,115 @@ +package mineplex.queuer; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +import mineplex.serverdata.Region; +import mineplex.serverdata.data.Data; +import mineplex.serverdata.data.ServerGroup; + +public class QueueParty implements Data, Ranked +{ + + private int _id; + public int getId() { return _id; } + + private String _state; + public String getState() { return _state; } + public void setState(String state) { this._state = state; } + + private Set _players; + public Set getPlayers() { return _players; } + + private int _assignedMatch; + public int getAssignedMatch () { return _assignedMatch; } + public void setAssignedMatch(int assignedMatch) { this._assignedMatch = assignedMatch; } + + private ServerGroup _serverGroup; + public ServerGroup getServerGroup() { return _serverGroup; } + + private int _averageElo; + public int getAverageElo() { return _averageElo; } + public int getElo() { return getAverageElo(); } + + public int getPlayerCount() { return _players.size(); } + + private long _queueStartTime; + public long getQueueDuration() { return System.currentTimeMillis() - _queueStartTime; } + + private boolean _prompted; + public boolean isPrompted() { return _prompted; } + public void setPrompted(boolean prompted) { this._prompted = prompted; } + + private Region _region; + + private Set _otherPartyStates; + public Set getOtherPartyStates() { return _otherPartyStates; } + public void setOtherPartyStates(Set otherPartyStates) { this._otherPartyStates = otherPartyStates; } + + private QueueParty(int id) + { + _id = id; + unassignMatch(); + _prompted = false; + _region = Region.US; + _players = new HashSet(); + _otherPartyStates = new HashSet(); + _queueStartTime = System.currentTimeMillis(); + } + + public QueueParty(int id, Collection players, ServerGroup serverGroup, int averageElo) + { + this(id); + _players.addAll(players); + _serverGroup = serverGroup; + _averageElo = averageElo; + } + + public boolean hasAssignedMatch() + { + return _assignedMatch != -1; + } + + /** + * @return true, if the {@link QueueParty}s status is set to 'Ready', false otherwise. + */ + public boolean isReady() + { + return getState().equalsIgnoreCase("Ready"); + } + + /** + * Assign a {@link Match} to this queue party. + * @param match - the match to be assigned for this party + */ + public void assignMatch(Match match) + { + setState("Awaiting Players"); + setAssignedMatch(match.getId()); + } + + /** + * Unassign any matches from this QueueParty. + */ + public void unassignMatch() + { + setState("Awaiting Match"); + setAssignedMatch(-1); + } + + /** + * Initiate the sending of gameplay invite to the party when the assigned match + * is ready to start. + */ + public void sendInvites() + { + setState("Awaiting Confirmation"); + } + + @Override + public String getDataId() + { + return Integer.toString(_id); + } +} diff --git a/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueuePartySorter.java b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueuePartySorter.java similarity index 100% rename from Plugins/Mineplex.Queuer/src/mineplex/queuer/QueuePartySorter.java rename to Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueuePartySorter.java diff --git a/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueRepository.java b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueRepository.java similarity index 61% rename from Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueRepository.java rename to Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueRepository.java index eeef5c327..b3ce4004c 100644 --- a/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueRepository.java +++ b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueRepository.java @@ -14,27 +14,42 @@ import mineplex.serverdata.Utility; import mineplex.serverdata.commands.ServerTransfer; import mineplex.serverdata.commands.TransferCommand; import mineplex.serverdata.data.DataRepository; +import mineplex.serverdata.data.DedicatedServer; import mineplex.serverdata.data.MinecraftServer; +import mineplex.serverdata.data.ServerGroup; import mineplex.serverdata.redis.RedisDataRepository; import mineplex.serverdata.servers.ConnectionData; import mineplex.serverdata.servers.ServerManager; import mineplex.serverdata.servers.ServerRepository; +import mineplex.serverprocesses.GenericRunnable; +import mineplex.serverprocesses.ProcessManager; +import mineplex.serverprocesses.ProcessRunner; public class QueueRepository { + private ServerRepository _serverRepository; private DataRepository _partyRepository; + private long _cacheTimeout; + private long _lastUpdated; + private Map _cachedParties; + private int _serverId; + /** * Class constructor * @param host - the host to connect the QueueRepository to * @param port - the designated port of the QueueRepository database * @param region - the region of server queues to manage */ - public QueueRepository(ConnectionData connectionData, Region region) + public QueueRepository(ConnectionData connectionData, Region region, long cacheTimeout) { - this._partyRepository = new RedisDataRepository(connectionData, region, + _serverRepository = ServerManager.getServerRepository(region); + _partyRepository = new RedisDataRepository(connectionData, region, QueueParty.class, "queue-parties"); + _cacheTimeout = cacheTimeout; + _lastUpdated = 0; + _serverId = 0; } /** @@ -45,24 +60,23 @@ public class QueueRepository */ public QueueRepository(Region region) { - this(ServerManager.getMasterConnection(), region); + this(ServerManager.getMasterConnection(), region, 1000); } public QueueParty getQueueParty(int partyId) { - return _partyRepository.getElement(Integer.toString(partyId)); - } - - public QueueParty createQueueParty(Collection players, String gameType, int averageElo) - { - QueueParty queueParty = new QueueParty(players, gameType, averageElo); - updateQueueParty(queueParty); - return queueParty; + updatePartyCache(); + return _cachedParties.get(partyId); } + /** + * Update/save a Queue Party object to the repository. + * @param queueParty - the queue party to be updated/saved in repo. + */ public void updateQueueParty(QueueParty queueParty) { _partyRepository.addElement(queueParty); + _cachedParties.put(queueParty.getId(), queueParty); } public void deleteQueueParty(int partyId) @@ -83,9 +97,20 @@ public class QueueRepository } } + public boolean queuePartyExists(int partyId) + { + return getQueueParty(partyId) != null; + } + + /** + * + * @return a cached set of active {@link QueueParty}'s that are guaranteed + * to have been cached less than {@code cacheTimeout} milliseconds. + */ public Collection getQueueParties() { - return _partyRepository.getElements(); + updatePartyCache(); + return _cachedParties.values(); } public Collection getJoinedQueueParties(int matchId) @@ -117,46 +142,16 @@ public class QueueRepository public void assignMatch(QueueParty queueParty, Match match) { - queueParty.setAssignedMatch(match.getId()); - queueParty.setState("Awaiting Confirmation"); + queueParty.assignMatch(match); updateQueueParty(queueParty); } - public void startMatch(int matchId) + public void sendInvite(QueueParty queueParty) { - MinecraftServer emptyServer = getEmptyServer(); - - if (emptyServer != null) - { - for (QueueParty queueParty : getJoinedQueueParties(matchId)) - { - for (String playerName : queueParty.getPlayers()) - { - // Execute a transfer command - ServerTransfer serverTransfer = new ServerTransfer(playerName, emptyServer.getName()); - TransferCommand transferCommand = new TransferCommand(serverTransfer); - transferCommand.publish(); - } - } - } + queueParty.sendInvites(); + updateQueueParty(queueParty); } - - protected MinecraftServer getEmptyServer() - { - ServerRepository serverRepository = ServerManager.getServerRepository(Region.US); - Collection servers = serverRepository.getServersByGroup("DominateElo"); - for (MinecraftServer server : servers) - { - if (server.getPlayerCount() == 0) - { - return server; - } - } - - return null; - } - public void deleteMatch(int matchId) { for (QueueParty queueParty : getJoinedQueueParties(matchId)) @@ -166,4 +161,27 @@ public class QueueRepository updateQueueParty(queueParty); } } + + /** + * Update the internal cache of {@link QueueParty}s if the cache age is + * older than {@code _cacheTimeout}. + */ + private void updatePartyCache() + { + long cacheAge = (System.currentTimeMillis() - _lastUpdated); + if (cacheAge >= _cacheTimeout) // Old cache, update contents + { + _cachedParties = new HashMap(); + + for (QueueParty queueParty : _partyRepository.getElements()) + { + _cachedParties.put(queueParty.getId(), queueParty); + } + } + } + + private static void log(String message) + { + System.out.println(message); + } } \ No newline at end of file diff --git a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Ranked.java b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Ranked.java new file mode 100644 index 000000000..f1fbe0ada --- /dev/null +++ b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Ranked.java @@ -0,0 +1,15 @@ +package mineplex.queuer; + +/** + * Ranked represents any object that can be classified as possessing an ELO ranking. + * @author MrTwiggy + * + */ +public interface Ranked +{ + + /** + * @return the ELO point ranking associated with this {@link Ranked} object. + */ + public int getElo(); +} diff --git a/Plugins/Mineplex.Queuer/.classpath b/Plugins/Mineplex.Queuer/.classpath index 945e9a997..dc40c82a0 100644 --- a/Plugins/Mineplex.Queuer/.classpath +++ b/Plugins/Mineplex.Queuer/.classpath @@ -8,5 +8,7 @@ + + diff --git a/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueParty.java b/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueParty.java deleted file mode 100644 index 19dd01fdb..000000000 --- a/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueParty.java +++ /dev/null @@ -1,78 +0,0 @@ -package mineplex.queuer; - -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - -import mineplex.serverdata.Region; -import mineplex.serverdata.data.Data; - -public class QueueParty implements Data -{ - - private int _id; - public int getId() { return _id; } - - private String _state; - public String getState() { return _state; } - public void setState(String state) { this._state = state; } - - private Set _players; - public Set getPlayers() { return _players; } - - private int _assignedMatch; - public int getAssignedMatch () { return _assignedMatch; } - public void setAssignedMatch(int assignedMatch) { this._assignedMatch = assignedMatch; } - - private int _variance; - private String _gameType; - - private int _averageElo; - public int getAverageElo() { return _averageElo; } - - private int _playerCount; - public int getPlayerCount() { return _playerCount; } - - private long _queueStartTime; - - private boolean _prompted; - public boolean isPrompted() { return _prompted; } - public void setPrompted(boolean prompted) { this._prompted = prompted; } - - private Region _region; - - private Set _otherPartyStates; - public Set getOtherPartyStates() { return _otherPartyStates; } - public void setOtherPartyStates(Set otherPartyStates) { this._otherPartyStates = otherPartyStates; } - - public QueueParty() - { - this._id = -1; - this._state = "Awaiting Match"; - this._assignedMatch = -1; - this._variance = 25; - this._prompted = false; - this._region = Region.US; - this._players = new HashSet(); - this._otherPartyStates = new HashSet(); - this._queueStartTime = System.currentTimeMillis(); - } - - public QueueParty(Collection players, String gameType, int averageElo) - { - this._players.addAll(players); - this._gameType = gameType; - this._averageElo = averageElo; - } - - public boolean hasAssignedMatch() - { - return _assignedMatch != -1; - } - - @Override - public String getDataId() - { - return Integer.toString(_id); - } -} diff --git a/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java b/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java index 331d025a2..a008c7054 100644 --- a/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java +++ b/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java @@ -9,208 +9,55 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; +import java.util.UUID; import mineplex.serverdata.Region; +import mineplex.serverdata.commands.ServerTransfer; +import mineplex.serverdata.commands.TransferCommand; +import mineplex.serverdata.data.DedicatedServer; +import mineplex.serverdata.data.ServerGroup; +import mineplex.serverdata.servers.ConnectionData; +import mineplex.serverdata.servers.ServerManager; +import mineplex.serverdata.servers.ServerRepository; +import mineplex.serverprocesses.GenericRunnable; +import mineplex.serverprocesses.ProcessManager; +import mineplex.serverprocesses.ProcessRunner; public class Queuer { + public static final int MIN_QUEUE_WAIT = 0; // The number of seconds required in queue before creating a new match for a party. + private static QueueRepository _repo; + private static ServerRepository _serverRepository; + private static Set _pendingMatches; // Set of all matches awaiting players + private static int _matchId = 0; + private static int _matchesMade = 0; + private static int _updates = 0; + private static int _partyId = 0; + private static int _serverId = 0; public static void main (String args[]) { Region region = (!new File("eu.dat").exists()) ? Region.US : Region.EU; - + _serverRepository = ServerManager.getServerRepository(region); _repo = new QueueRepository(region); - - HashMap playerVarianceMap = new HashMap(); - HashMap playerPrepMatchMap = new HashMap(); - Set matches = new HashSet(); - - QueuePartySorter partySorter = new QueuePartySorter(); - - int matchId = 1; + _pendingMatches = new HashSet(); while (true) - { - int matchesMade = 0; - matchId %= 1500; + { + _updates++; + updateQueuer(); + ProcessManager.getInstance().updateProcesses(); - List assignedMatchIdChecked = new ArrayList(); - Map queueParties = _repo.getMappedQueueParties(); - - int matchPlayerCount = 2; - - System.out.println("Checking " + queueParties.size() + " queues..."); - for (QueueParty queueParty : queueParties.values()) - { - int partyId = queueParty.getId(); - int variance = playerVarianceMap.containsKey(partyId) ? playerVarianceMap.get(partyId) : 0; - variance += 25; - playerVarianceMap.put(partyId, variance); - - if (queueParty.hasAssignedMatch()) - { - for (Match match : matches) - { - if (Math.abs(match.getAverageElo() - queueParty.getAverageElo()) <= variance) - { - if (playerPrepMatchMap.containsKey(partyId)) - { - if (playerPrepMatchMap.get(partyId) == match) - break; - - playerPrepMatchMap.get(partyId).quitQueueParty(queueParty); - } - - match.joinQueueParty(queueParty); - playerPrepMatchMap.put(partyId, match); - - log("Found prep match for '" + queueParty.getId() + "'"); - break; - } - } - - if (!playerPrepMatchMap.containsKey(partyId)) - { - Match match = new Match(matchId++, queueParty.getAverageElo(), queueParty); - - playerPrepMatchMap.put(partyId, match); - matches.add(match); - } - } - else if (!assignedMatchIdChecked.contains(queueParty.getAssignedMatch())) - { - int assignedMatchId = queueParty.getAssignedMatch(); - log("Checking if match '" + assignedMatchId + "' is ready."); - //List matchStatuses = _repo.getMatchStatuses(queueRecord.AssignedMatch); - Collection joinedParties = _repo.getJoinedQueueParties(assignedMatchId); - boolean matchReady = true; - boolean matchDeny = false; - - for (QueueParty joinedParty : joinedParties) - { - String partyState = joinedParty.getState(); - if (partyState.equalsIgnoreCase("Deny")) - { - matchDeny = true; - matchReady = false; - break; - } - else if (!partyState.equalsIgnoreCase("Ready")) - { - matchReady = false; - } - } - - if (matchReady) - { - _repo.startMatch(assignedMatchId); - _repo.deleteAssignedParties(assignedMatchId); - - System.out.println("Starting match '" + assignedMatchId + "'"); - } - else if (matchDeny) - { - _repo.deleteMatch(assignedMatchId); - } - - assignedMatchIdChecked.add(assignedMatchId); - } - } - - System.out.println("Checking " + matches.size() + " matches..."); - - // Check for and kick off invites for ready matches - for (Iterator matchIterator = matches.iterator(); matchIterator.hasNext();) - { - Match match = matchIterator.next(); - - // Don't give me crap about not using iterator...can't cuz of stupid thing. - Set partiesToRemove = new HashSet(); - - for (QueueParty queueParty : match.getParties()) - { - if (!queueParties.containsKey(queueParty.getId())) - { - log("Removing matchStatus : " + queueParty.getId()); - partiesToRemove.add(queueParty); - - if (match.isWaitingForInvites()) - { - _repo.deleteMatch(match.getId()); - match.setWaitingForInvites(false); - } - } - } - - for (QueueParty party : partiesToRemove) - { - match.quitQueueParty(party); - } - - if (match.isWaitingForInvites()) - { - if ((match.getWaitDuration()) > 15000) - { - for (QueueParty queueParty : match.getParties()) - { - if (!queueParty.getState().equalsIgnoreCase("Ready")) - { - _repo.deleteQueueParty(queueParty.getId()); - } - } - - _repo.deleteMatch(match.getId()); - match.setWaitingForInvites(false); - } - - continue; - } - - if (match.getPlayerCount() >= matchPlayerCount) - { - List partyList = new ArrayList(match.getParties()); - Collections.sort(partyList, partySorter); - - int playerCount = 0; - for (QueueParty party : partyList) - { - if (playerCount + party.getPlayerCount() > matchPlayerCount) - { - match.quitQueueParty(party); - playerPrepMatchMap.remove(party.getId()); - log("Oops hit player cap, can't fit you in this match."); - continue; - } - - playerCount += party.getPlayerCount(); - } - - if (playerCount == matchPlayerCount) - { - log("Sent match invites for '" + match.getId() + "'"); - - for (QueueParty party : match.getParties()) - { - playerPrepMatchMap.remove(party.getId()); - _repo.assignMatch(party, match); - } - - match.setWaitingForInvites(true); - matchesMade++; - } - } - else if (match.getPlayerCount() == 0) - { - matchIterator.remove(); - } - } + log("Total pending matches after update: " + _pendingMatches.size()); + log("Total queued parties after update: " + _repo.getQueueParties().size()); try { - if (matchesMade > 0) - System.out.println("Made " + matchesMade + " matches."); + if (_matchesMade > 0) + System.out.println("Made " + _matchesMade + " matches."); Thread.sleep(1000); } @@ -222,6 +69,291 @@ public class Queuer } + + /** + * Tick & update the Queuer as a whole, making one whole pass through all queued players and pending matches to + * assign matches to parties and start matches. + */ + private static void updateQueuer() + { + // Update the status of each queue party, searching for best matchings and assigning matches to parties. + for (QueueParty queueParty : _repo.getQueueParties()) + { + updateParty(queueParty); + } + + // Update all matches, and remove pending matches if they are finished. + Iterator iterator = _pendingMatches.iterator(); + while (iterator.hasNext()) + { + Match match = iterator.next(); + boolean matchFinished = updateMatch(match); + + // Remove match if it is completed/finished + if (matchFinished) iterator.remove(); + } + } + + /** + * Update the status of a {@link QueueParty} by attempting to locate the best resulting + * {@code Match} available, or creating a new one if required. + * @param queueParty - the queue party to be updated for matchmaking purposes. + */ + private static void updateParty(QueueParty queueParty) + { + int queueDuration = (int) queueParty.getQueueDuration() / 1000; // Queue duration in seconds + Match bestMatch = getBestMatch(queueParty); + + if (queueParty.hasAssignedMatch()) + { + // TODO: If player has been waiting too long in current game and there is a better match, join that! + } + else + { + if (bestMatch != null) // Assign party into best match! + { + bestMatch.joinQueueParty(queueParty); + _repo.assignMatch(queueParty, bestMatch); + } + else if (queueDuration >= MIN_QUEUE_WAIT) // Create a new match for others to join! + { + Match match = new Match(_matchId++, queueParty.getServerGroup(), queueParty); + _pendingMatches.add(match); + _repo.assignMatch(queueParty, match); + } + } + } + + /** + * Update a {@link Match} by verifying it's player statuses, sending out invites + * and managing a Match from creation to deletion. + * @param match - the match to be updated. + * @return true, if the match is no longer required (successful or otherwise) and should be removed, false otherwise. + */ + private static boolean updateMatch(Match match) + { + // Remove queued parties that have left queue/match + // Don't give me crap about not using iterator...can't cuz of stupid thing. + Set partiesToRemove = new HashSet(); + for (QueueParty queueParty : match.getParties()) + { + int partyId = queueParty.getId(); + if (!_repo.queuePartyExists(partyId)) + { + log("Removing matchStatus : " + queueParty.getId()); + partiesToRemove.add(queueParty); + + if (match.isWaitingForInvites()) + { + _repo.deleteMatch(match.getId()); + match.setWaitingForInvites(false); + } + } + } + for (QueueParty party : partiesToRemove) + { + match.quitQueueParty(party); + } + + // If match took too long to find players, or is empty, quit match. + if (match.getPlayerCount() == 0) + { + return true; // Match is empty, remove from pending matches. + } + + // If match sent invites and is waiting for too long (15 seconds), kick players who didn't + // accept and keep looking + // Otherwise if everyone accepted, start game! + if (match.isWaitingForInvites()) + { + boolean matchReady = true; + for (QueueParty party : _repo.getJoinedQueueParties(match.getId())) + { + if (!party.isReady()) + { + matchReady = false; + } + } + + if (!matchReady && match.getWaitDuration() > 500) + { + matchReady = true; + } + + if (match.isReady()) // Invites accepted, MinecraftServer started, and players transferred. + { + return true; + } + else if (matchReady) // Players accepted invites, start match! + { + startMatch(match); + return false; + } + else if (match.getWaitDuration() > 15000) + { + for (QueueParty queueParty : match.getParties()) + { + if (!queueParty.isReady()) + { + _repo.deleteQueueParty(queueParty.getId()); + } + } + + _repo.deleteMatch(match.getId()); + match.setWaitingForInvites(false); + } + + return false; + } + + // Match has filled up, send out invites! + if (match.getOpenSlots() == 0) + { + for (QueueParty party : match.getParties()) + { + _repo.sendInvite(party); + } + + match.setWaitingForInvites(true); + } + + return false; + } + + /** + * @param queueParty - the party for whom a match is being searched. + * @return the best matching {@link Match} for the {@code queueParty}, if an acceptable {@link Match} + * could be found, null otherwise. + */ + private static Match getBestMatch(QueueParty queueParty) + { + Match best = null; + int minEloDelta = 0; + int variance = getSearchVariance(queueParty); + + for (Match match : _pendingMatches) + { + if (match.getOpenSlots() >= queueParty.getPlayerCount()) + { + int eloDelta = getEloDelta(queueParty, match); + if (eloDelta <= variance && (eloDelta < minEloDelta || best == null)) + { + best = match; + minEloDelta = eloDelta; + } + } + } + + return best; + } + + /** + * @param r1 + * @param r2 + * @return the ELO point delta (difference) between two {@link Ranked} objects. + */ + private static int getEloDelta(Ranked r1, Ranked r2) + { + return Math.abs(r1.getElo() - r2.getElo()); + } + + public static boolean startMatch(Match match) + { + ServerGroup group = match.getServerGroup(); + DedicatedServer bestServer = getBestDedicatedServer(group); + startServer(bestServer, group, match); + return true; + } + + /** + * Transfer all players queue'd into a {@link Match} to one server. + * @param match - the match whose queue'd players are to be transferred + * @param serverName - the name of the server to transfer the players to + */ + public static void transferPlayers(Match match, String serverName) + { + for (QueueParty queueParty : _repo.getJoinedQueueParties(match.getId())) + { + for (String playerName : queueParty.getPlayers()) + { + // Execute a transfer command + ServerTransfer serverTransfer = new ServerTransfer(playerName, serverName); + TransferCommand transferCommand = new TransferCommand(serverTransfer); + transferCommand.publish(); + } + } + } + + /** + * @return newly generated unique server id. + */ + public static int generateServerId() + { + return _serverId++; + } + + private static void startServer(final DedicatedServer serverSpace, final ServerGroup serverGroup, final Match match) + { + String cmd = "/home/mineplex/easyRemoteStartServerCustom.sh"; + final String groupPrefix = serverGroup.getPrefix(); + final String serverName = serverSpace.getName(); + final String serverAddress = serverSpace.getPublicAddress(); + final int serverId = generateServerId(); + + ProcessRunner pr = new ProcessRunner(new String[] {"/bin/sh", cmd, serverAddress, serverSpace.getPrivateAddress(), (serverGroup.getPortSection() + serverId) + "", serverGroup.getRequiredRam() + "", serverGroup.getWorldZip(), serverGroup.getPlugin(), serverGroup.getConfigPath(), serverGroup.getName(), serverGroup.getPrefix() + "-" + serverId, serverSpace.isUsRegion() ? "true" : "false", serverGroup.getAddNoCheat() + "" }); + pr.start(new GenericRunnable() + { + public void run(Boolean error) + { + if (!error) + { + // Successfully started server, now transfer players + transferPlayers(match, serverName); + } + else + { + // TODO: Error in starting server for ELO match, try again or disband queued match? + log("[" + serverName + ":" + serverAddress + " Free Resources; CPU " + serverSpace.getAvailableCpu() + " RAM " + serverSpace.getAvailableRam() + "MB] Errored " + serverName + "(" + groupPrefix+ "-" + serverId + ")"); + } + + } + }); + + ProcessManager.getInstance().addProcess(pr); + serverSpace.incrementServerCount(serverGroup); + } + + private static DedicatedServer getBestDedicatedServer(ServerGroup serverGroup) + { + Collection dedicatedServers = _serverRepository.getDedicatedServers(); + DedicatedServer bestServer = null; + + for (DedicatedServer serverData : dedicatedServers) + { + if (serverData.getAvailableRam() > serverGroup.getRequiredRam() + && serverData.getAvailableCpu() > serverGroup.getRequiredCpu()) + { + if (bestServer == null || serverData.getServerCount(serverGroup) < bestServer.getServerCount(serverGroup)) + { + bestServer = serverData; + } + } + } + + return bestServer; + } + + /** + * @param party - the party whose ELO search variance is being fetched. + * @return the variance in ELO search parameters for {@code party}. + * I.E: Queuer searches for potential matches in [party.elo - variance, party.elo + variance] ELO range. + */ + private static int getSearchVariance(QueueParty party) + { + int seconds = (int) party.getQueueDuration() / 1000; // Duration of queue in seconds + + return seconds * 10; // 5 ELO variance for every second in queue + } private static void log(String message) { diff --git a/Plugins/Mineplex.ServerData/.project b/Plugins/Mineplex.ServerData/.project index 87c600cb6..669fb734b 100644 --- a/Plugins/Mineplex.ServerData/.project +++ b/Plugins/Mineplex.ServerData/.project @@ -1,6 +1,6 @@ - Mineplex.ServerData + Mineplex.Queue.Core @@ -10,16 +10,6 @@ - - org.eclipse.ui.externaltools.ExternalToolBuilder - auto,full,incremental, - - - LaunchConfigHandle - <project>/.externalToolBuilders/ServerData.launch - - - org.eclipse.jdt.core.javanature diff --git a/Plugins/Mineplex.ServerData/build.xml b/Plugins/Mineplex.ServerData/build.xml index 411a60854..bc33f19cd 100644 --- a/Plugins/Mineplex.ServerData/build.xml +++ b/Plugins/Mineplex.ServerData/build.xml @@ -13,7 +13,7 @@ - + diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ConnectionData.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ConnectionData.java index efb265fc1..45c28a85b 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ConnectionData.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ConnectionData.java @@ -4,10 +4,11 @@ package mineplex.serverdata.servers; * ConnectionData stores information relevant for initiating a connection to a repository. * @author MrTwiggy * + * */ + public class ConnectionData { - private String _host; // The host URL to connect to repository public String getHost() { return _host; } diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java index 81a87c6a4..5be9b16ef 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java @@ -16,10 +16,10 @@ public class ServerManager { // Connection host to server database - private static final String DATABASE_HOST = "10.33.53.16"; + private static final String DATABASE_HOST = "localhost";// TESTING, REPLACE WITH ORIGINAL: "10.33.53.16"; // Ports associated with slave redis instances - private static final int[] SLAVE_PORTS = {6377, 6378, 6380, 6381, 6382}; + private static final int[] SLAVE_PORTS = {6379}; // TESTING, REPLACE WITH: {6377, 6378, 6380, 6381, 6382}; private static Random random = new Random(); // The cached repository instances diff --git a/Plugins/Mineplex.ServerMonitor/.classpath b/Plugins/Mineplex.ServerMonitor/.classpath index 49e473eb4..23fda4021 100644 --- a/Plugins/Mineplex.ServerMonitor/.classpath +++ b/Plugins/Mineplex.ServerMonitor/.classpath @@ -7,5 +7,6 @@ + diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java index 441cfe60b..8f7506b67 100644 --- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java +++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java @@ -29,13 +29,15 @@ import mineplex.serverdata.data.ServerGroup; import mineplex.serverdata.servers.DedicatedServerSorter; import mineplex.serverdata.servers.ServerManager; import mineplex.serverdata.servers.ServerRepository; +import mineplex.serverprocesses.GenericRunnable; +import mineplex.serverprocesses.ProcessManager; +import mineplex.serverprocesses.ProcessRunner; public class ServerMonitor { private static ServerRepository _repository = null; private static StatusHistoryRepository _historyRepository = null; private static int _count = 0; - private static HashSet _processes = new HashSet(); private static HashMap _badServers = new HashMap(); private static Collection _serverStatuses = null; private static Collection _serverGroups = null; @@ -283,55 +285,7 @@ public class ServerMonitor } } - int processWaits = 0; - - while (_processes.size() > 0) - { - for (Iterator iterator = _processes.iterator(); iterator.hasNext();) - { - ProcessRunner pr = iterator.next(); - - try - { - pr.join(100); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - - if (pr.isDone()) - iterator.remove(); - } - - if (_processes.size() > 0) - { - try - { - log("Sleeping while processes run..."); - Thread.sleep(6000); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - if (processWaits >= 10) - { - log("Killing stale processes."); - - for (Iterator iterator = _processes.iterator(); iterator.hasNext();) - { - iterator.next().abort(); - iterator.remove(); - } - } - - processWaits++; - } - - processWaits = 0; + ProcessManager.getInstance().updateProcesses(); try { @@ -565,7 +519,9 @@ public class ServerMonitor if (!pr.isDone()) - _processes.add(pr); + { + ProcessManager.getInstance().addProcess(pr); + } } private static boolean isServerOffline(DedicatedServer serverData) @@ -666,7 +622,9 @@ public class ServerMonitor serverSpace.incrementServerCount(serverGroup); if (!pr.isDone()) - _processes.add(pr); + { + ProcessManager.getInstance().addProcess(pr); + } } private static void log(String message) diff --git a/Plugins/Mineplex.ServerProcesses/.classpath b/Plugins/Mineplex.ServerProcesses/.classpath new file mode 100644 index 000000000..fceb4801b --- /dev/null +++ b/Plugins/Mineplex.ServerProcesses/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/Plugins/Mineplex.ServerProcesses/.project b/Plugins/Mineplex.ServerProcesses/.project new file mode 100644 index 000000000..66b31cde0 --- /dev/null +++ b/Plugins/Mineplex.ServerProcesses/.project @@ -0,0 +1,17 @@ + + + Mineplex.ServerProcesses + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/GenericRunnable.java b/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/GenericRunnable.java similarity index 62% rename from Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/GenericRunnable.java rename to Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/GenericRunnable.java index 2541be020..a1e509698 100644 --- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/GenericRunnable.java +++ b/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/GenericRunnable.java @@ -1,4 +1,4 @@ -package mineplex.servermonitor; +package mineplex.serverprocesses; public interface GenericRunnable { diff --git a/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessManager.java b/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessManager.java new file mode 100644 index 000000000..9a7f80d34 --- /dev/null +++ b/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessManager.java @@ -0,0 +1,119 @@ +package mineplex.serverprocesses; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +/** + * Handles the management and cleaning of {@link ProcessRunnner}s. + * @author MrTwiggy + * + */ +public class ProcessManager +{ + + private static ProcessManager _instance; // Singleton instance + private Set _processes; // Set of running processes currently managed. + + /** + * Private class constructor to prevent non-singletons. + */ + private ProcessManager() + { + _processes = new HashSet(); + } + + /** + * Add a {@link ProcessRunner} to the manager to be updated and cleaned after completion. + * @param process - the process to be added to the manager. + */ + public void addProcess(ProcessRunner process) + { + _processes.add(process); + } + + /** + * Update processes and clean up stale ones. + * NOTE: Blocks calling thread while polling process states. + * @return the number of {@link ProcessRunner}s that were finished and cleaned up. + */ + public int updateProcesses() + { + int cleanedProcesses = 0; + int processWaits = 0; + + while (_processes.size() > 0) + { + for (Iterator iterator = _processes.iterator(); iterator.hasNext();) + { + ProcessRunner pr = iterator.next(); + + try + { + pr.join(100); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + + if (pr.isDone()) + { + iterator.remove(); + cleanedProcesses++; + } + } + + if (_processes.size() > 0) + { + try + { + log("Sleeping while processes run..."); + Thread.sleep(6000); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + if (processWaits >= 10) + { + log("Killing stale processes."); + + for (Iterator iterator = _processes.iterator(); iterator.hasNext();) + { + iterator.next().abort(); + iterator.remove(); + cleanedProcesses++; + } + } + + processWaits++; + } + + return cleanedProcesses; + } + + /** + * @return a singleton instance of {@link ProcessManager}. + */ + public static ProcessManager getInstance() + { + if (_instance == null) + { + _instance = new ProcessManager(); + } + + return _instance; + } + + /** + * Log a message to developer output. + * @param message - the message to be logged. + */ + private static void log(String message) + { + System.out.println(message); // Is this technically considered logging? + } +} diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ProcessRunner.java b/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessRunner.java similarity index 95% rename from Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ProcessRunner.java rename to Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessRunner.java index 6e2056ca7..dc9fc6217 100644 --- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ProcessRunner.java +++ b/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessRunner.java @@ -1,4 +1,4 @@ -package mineplex.servermonitor; +package mineplex.serverprocesses; import java.io.BufferedReader; import java.io.InputStreamReader; @@ -12,7 +12,7 @@ public class ProcessRunner extends Thread boolean _done = false; Boolean _error = false; - ProcessRunner(String[] args) + public ProcessRunner(String[] args) { super("ProcessRunner " + args); _processBuilder = new ProcessBuilder(args); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 95feec423..d09b71120 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -96,7 +96,7 @@ public abstract class Game implements Listener public ArcadeManager Manager; //Game - private GameType _gameType; + protected GameType _gameType; protected String[] _gameDesc; //Map @@ -260,9 +260,6 @@ public abstract class Game implements Listener public String Winner = "Nobody"; public GameTeam WinnerTeam = null; - public boolean EloRanking = false; - public int EloStart = 1000; - public boolean CanAddStats = true; public boolean CanGiveLoot = true; @@ -868,18 +865,6 @@ public abstract class Game implements Listener Scoreboard.SetPlayerTeam(player, "SPEC"); } - @EventHandler - public void eloStart(PlayerLoginEvent event) - { - if (EloRanking) - { - if (Manager.getEloManager().getElo(event.getPlayer().getUniqueId(), GetName()) == -1) - { - Manager.getEloManager().saveElo(event.getPlayer().getUniqueId(), GetName(), EloStart); - } - } - } - @EventHandler public abstract void ScoreboardUpdate(UpdateEvent event); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameTeam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameTeam.java index 87e8f7f6f..20537ec44 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameTeam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameTeam.java @@ -4,12 +4,14 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.Set; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.elo.Team; import nautilus.game.arcade.game.GameTeam.PlayerState; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; @@ -21,7 +23,7 @@ import org.bukkit.entity.Creature; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -public class GameTeam +public class GameTeam implements Team { private Game Host; @@ -381,4 +383,17 @@ public class GameTeam return _places; } + + @Override + public Set getMemberNames() + { + Set memberNames = new HashSet(); + + for (Player player : _players.keySet()) + { + memberNames.add(player.getName()); + } + + return memberNames; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/TeamGame.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/TeamGame.java index dcc877d8f..af0e35cd9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/TeamGame.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/TeamGame.java @@ -27,6 +27,9 @@ public abstract class TeamGame extends Game protected NautHashMap RejoinHealth = new NautHashMap(); protected long RejoinTime = 120000; + + // Whether or not this is a Ranked match. + protected boolean Ranked = false; public TeamGame(ArcadeManager manager, GameType gameType, Kit[] kits, String[] gameDesc) { @@ -212,6 +215,19 @@ public abstract class TeamGame extends Game if (player.isOnline()) AddGems(player, 10, "Participation", false, false); } + + // Update and resolve match for ranked games + if (Ranked) + { + if (GetTeamList().size() == 2) // Must have matches of 2 teams for now + { + List teamList = GetTeamList(); + GameTeam loserTeam = (teamList.get(1).equals(WinnerTeam)) ? teamList.get(0) : teamList.get(1); + int gamemode = _gameType.getGameId(); + + Manager.getEloManager().resolveMatch(WinnerTeam, loserTeam, gamemode); // Resolves and updates player ratings. + } + } //End SetState(GameState.End); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java index 59f2f34d4..713a67f33 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java @@ -61,9 +61,6 @@ public class ChampionsDominate extends Domination InventoryOpenChest = true; - EloRanking = false; - EloStart = 1000; - this.DisableKillCommand = false; registerStatTrackers( diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java index cc96c5dad..891dc238d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java @@ -6,6 +6,7 @@ import java.util.HashMap; + import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.Entity; @@ -21,9 +22,6 @@ import org.bukkit.event.player.PlayerPickupItemEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilPlayer; -import mineplex.core.elo.EloPlayer; -import mineplex.core.elo.EloTeam; -import mineplex.core.elo.GameResult; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.CombatComponent; @@ -279,48 +277,6 @@ public class Domination extends TeamGame if (player.isOnline()) AddGems(player, 10, "Participation", false, false); } - - if (EloRanking) - { - EloTeam teamWinner = new EloTeam(); - EloTeam teamLoser = new EloTeam(); - - for (GameTeam team : GetTeamList()) - { - if (WinnerTeam != null && team.equals(WinnerTeam)) - { - for (Player player : WinnerTeam.GetPlayers(false)) - { - EloPlayer eloPlayer = new EloPlayer(); - eloPlayer.UniqueId = player.getUniqueId().toString(); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); - - teamWinner.addPlayer(eloPlayer); - } - } - else - { - for (Player player : team.GetPlayers(false)) - { - EloPlayer eloPlayer = new EloPlayer(); - eloPlayer.UniqueId = player.getUniqueId().toString(); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); - - teamLoser.addPlayer(eloPlayer); - } - } - } - - for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamWinner, teamLoser, GameResult.Win).getPlayers()) - { - Manager.getEloManager().saveElo(eloPlayer.UniqueId, GetName(), eloPlayer.Rating); - } - - for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamLoser, teamWinner, GameResult.Loss).getPlayers()) - { - Manager.getEloManager().saveElo(eloPlayer.UniqueId, GetName(), eloPlayer.Rating); - } - } //End SetState(GameState.End); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java index 4ea0687be..f52ec3294 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java @@ -21,9 +21,7 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; -import mineplex.core.elo.EloPlayer; -import mineplex.core.elo.EloTeam; -import mineplex.core.elo.GameResult; + import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.DeathMessageType; @@ -323,48 +321,6 @@ public class TeamDeathmatch extends TeamGame AddGems(player, 10, "Participation", false, false); } - if (EloRanking) - { - EloTeam teamWinner = new EloTeam(); - EloTeam teamLoser = new EloTeam(); - - for (GameTeam team : GetTeamList()) - { - if (WinnerTeam != null && team.equals(WinnerTeam)) - { - for (Player player : WinnerTeam.GetPlayers(false)) - { - EloPlayer eloPlayer = new EloPlayer(); - eloPlayer.UniqueId = player.getUniqueId().toString(); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); - - teamWinner.addPlayer(eloPlayer); - } - } - else - { - for (Player player : team.GetPlayers(false)) - { - EloPlayer eloPlayer = new EloPlayer(); - eloPlayer.UniqueId = player.getUniqueId().toString(); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); - - teamLoser.addPlayer(eloPlayer); - } - } - } - - for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamWinner, teamLoser, GameResult.Win).getPlayers()) - { - Manager.getEloManager().saveElo(eloPlayer.UniqueId, GetName(), eloPlayer.Rating); - } - - for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamLoser, teamWinner, GameResult.Loss).getPlayers()) - { - Manager.getEloManager().saveElo(eloPlayer.UniqueId, GetName(), eloPlayer.Rating); - } - } - //End SetState(GameState.End); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java index fe3a858b4..451319d92 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java @@ -1022,7 +1022,8 @@ public class GameLobbyManager implements Listener, IPacketHandler objective.getScore(_serverName).setScore(line--); //ELO - if (Manager.GetGame() != null && Manager.GetGame().EloRanking) + // TODO: Implement GUI based for ELO ranking/ratings? + /*if (Manager.GetGame() != null && Manager.GetGame().EloRanking) { objective.getScore(" ").setScore(line--); objective.getScore(C.cPurple + C.Bold + "Elo").setScore(line--); @@ -1032,7 +1033,7 @@ public class GameLobbyManager implements Listener, IPacketHandler // Set new objective.getScore(Manager.getEloManager().getElo(entry.getKey().getUniqueId(), Manager.GetGame().GetName()) + " ").setScore(line--); - } + }*/ } _oldPlayerCount = UtilServer.getPlayers().length; From ac14cc40f493f18f845d71296f09850270bd9f62 Mon Sep 17 00:00:00 2001 From: Ty Sayers Date: Fri, 1 May 2015 12:34:32 -0400 Subject: [PATCH 046/104] Revert "Encapsulate remote process related code into new project ServerProcesses for better dependability. Likewise, add project Queue.Core for queue related API methods. Queuer incorporated into new matchmaking logic for matching and pairing players for ranked matches, as well as handling server management. Adapt Core and Arcade to new ranked system for proper loading, modification, and saving of rankings." This reverts commit 02e9649c20e70e88bf727fb96e0a0e24d1c4d849. --- Plugins/Mineplex.Core/.classpath | 1 - .../src/mineplex/core/elo/EloManager.java | 127 +++-- .../src/mineplex/core/elo/EloPlayer.java | 12 + .../src/mineplex/core/elo/EloRating.java | 63 --- .../mineplex/core/elo/EloRatingSystem.java | 60 +-- .../src/mineplex/core/elo/EloRepository.java | 65 +-- .../src/mineplex/core/elo/EloTeam.java | 23 + .../src/mineplex/core/elo/GameResult.java | 8 + .../src/mineplex/core/elo/KFactor.java | 34 ++ .../src/mineplex/core/elo/RankedGame.java | 43 -- .../src/mineplex/core/elo/RankedPlayer.java | 47 -- .../src/mineplex/core/elo/RankedTeam.java | 58 -- .../src/mineplex/core/elo/RatingSystem.java | 12 - .../src/mineplex/core/elo/Team.java | 9 - Plugins/Mineplex.Queue.Core/.classpath | 12 - .../.externalToolBuilders/Queue.Core.launch | 17 - Plugins/Mineplex.Queue.Core/.project | 17 - .../Mineplex.Queue.Core.iml | 17 - Plugins/Mineplex.Queue.Core/build.xml | 90 ---- .../src/mineplex/queuer/QueueParty.java | 115 ---- .../src/mineplex/queuer/Ranked.java | 15 - Plugins/Mineplex.Queuer/.classpath | 2 - .../src/mineplex/queuer/Match.java | 49 +- .../src/mineplex/queuer/QueueParty.java | 78 +++ .../src/mineplex/queuer/QueuePartySorter.java | 0 .../src/mineplex/queuer/QueueRepository.java | 112 ++-- .../src/mineplex/queuer/Queuer.java | 500 +++++++----------- .../.externalToolBuilders/New_Builder.launch} | 10 +- Plugins/Mineplex.ServerData/.project | 12 +- Plugins/Mineplex.ServerData/build.xml | 2 +- .../serverdata/servers/ConnectionData.java | 3 +- .../serverdata/servers/ServerManager.java | 4 +- Plugins/Mineplex.ServerMonitor/.classpath | 1 - .../servermonitor}/GenericRunnable.java | 2 +- .../servermonitor}/ProcessRunner.java | 4 +- .../mineplex/servermonitor/ServerMonitor.java | 62 ++- Plugins/Mineplex.ServerProcesses/.classpath | 6 - Plugins/Mineplex.ServerProcesses/.project | 17 - .../serverprocesses/ProcessManager.java | 119 ----- .../src/nautilus/game/arcade/game/Game.java | 17 +- .../nautilus/game/arcade/game/GameTeam.java | 17 +- .../nautilus/game/arcade/game/TeamGame.java | 16 - .../games/champions/ChampionsDominate.java | 3 + .../arcade/game/games/common/Domination.java | 46 +- .../game/games/common/TeamDeathmatch.java | 46 +- .../arcade/managers/GameLobbyManager.java | 5 +- 46 files changed, 704 insertions(+), 1274 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/EloRating.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/GameResult.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/KFactor.java delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/RankedGame.java delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/RankedPlayer.java delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/RankedTeam.java delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/RatingSystem.java delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/elo/Team.java delete mode 100644 Plugins/Mineplex.Queue.Core/.classpath delete mode 100644 Plugins/Mineplex.Queue.Core/.externalToolBuilders/Queue.Core.launch delete mode 100644 Plugins/Mineplex.Queue.Core/.project delete mode 100644 Plugins/Mineplex.Queue.Core/Mineplex.Queue.Core.iml delete mode 100644 Plugins/Mineplex.Queue.Core/build.xml delete mode 100644 Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueParty.java delete mode 100644 Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Ranked.java rename Plugins/{Mineplex.Queue.Core => Mineplex.Queuer}/src/mineplex/queuer/Match.java (52%) create mode 100644 Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueParty.java rename Plugins/{Mineplex.Queue.Core => Mineplex.Queuer}/src/mineplex/queuer/QueuePartySorter.java (100%) rename Plugins/{Mineplex.Queue.Core => Mineplex.Queuer}/src/mineplex/queuer/QueueRepository.java (61%) rename Plugins/{.externalToolBuilders/Queuer.launch => Mineplex.ServerData/.externalToolBuilders/New_Builder.launch} (88%) rename Plugins/{Mineplex.ServerProcesses/src/mineplex/serverprocesses => Mineplex.ServerMonitor/src/mineplex/servermonitor}/GenericRunnable.java (62%) rename Plugins/{Mineplex.ServerProcesses/src/mineplex/serverprocesses => Mineplex.ServerMonitor/src/mineplex/servermonitor}/ProcessRunner.java (95%) delete mode 100644 Plugins/Mineplex.ServerProcesses/.classpath delete mode 100644 Plugins/Mineplex.ServerProcesses/.project delete mode 100644 Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessManager.java diff --git a/Plugins/Mineplex.Core/.classpath b/Plugins/Mineplex.Core/.classpath index f6f18e5b2..8171cd881 100644 --- a/Plugins/Mineplex.Core/.classpath +++ b/Plugins/Mineplex.Core/.classpath @@ -14,6 +14,5 @@ - diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java index 74117863b..858e89198 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java @@ -2,20 +2,13 @@ package mineplex.core.elo; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; import java.util.UUID; import mineplex.core.MiniDbClientPlugin; import mineplex.core.account.CoreClientManager; import mineplex.core.common.util.NautHashMap; -import mineplex.queuer.QueueParty; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; public class EloManager extends MiniDbClientPlugin @@ -23,66 +16,91 @@ public class EloManager extends MiniDbClientPlugin private static Object _playerEloLock = new Object(); private EloRepository _repository; - private RatingSystem _ratingSystem; - private Map _rankings; + private EloRatingSystem _ratingSystem; + private NautHashMap> _playerElos; public EloManager(JavaPlugin plugin, CoreClientManager clientManager) { super("Elo Rating", plugin, clientManager); _repository = new EloRepository(plugin); - _ratingSystem = new EloRatingSystem(); - _rankings = new HashMap(); - } - - public void resolveMatch(Team winner, Team loser, int gamemode) - { - Set winnerMembers = new HashSet(); - Set loserMembers = new HashSet(); - - for (String memberName : winner.getMemberNames()) - { - RankedPlayer player = getRankedPlayer(memberName); - winnerMembers.add(player); - } - - for (String memberName : loser.getMemberNames()) - { - RankedPlayer player = getRankedPlayer(memberName); - loserMembers.add(player); - } - - RankedTeam team1 = new RankedTeam(winnerMembers, gamemode); - RankedTeam team2 = new RankedTeam(loserMembers, gamemode); - RankedGame game = new RankedGame(team1, team2); - - // Allow the rating system to resolve and update player ratings from match - _ratingSystem.resolveGame(game); + _ratingSystem = new EloRatingSystem(new KFactor(0, 1200, 25), new KFactor(1201, 1600, 20), new KFactor(1601, 2000, 15), new KFactor(2001, 2500, 10)); + _playerElos = new NautHashMap>(); } - public EloRating getRating(String playerName, int gamemode) + public int getElo(UUID uuid, String gameType) { - return getRankedPlayer(playerName).getRating(gamemode); - } - - public RankedPlayer getRankedPlayer(String playerName) - { - return null; // TODO: Implement fetching for cached player ranking - } - - private void savePlayer(RankedPlayer player) - { - // TODO: Do this asynchronously! - for (EloRating rating : player.getRatings()) + int elo = 1000; + + synchronized (_playerEloLock) { - if (rating.isUpdated()) + if (_playerElos.containsKey(uuid.toString())) { - _repository.saveRating(rating); + if (_playerElos.get(uuid.toString()).containsKey(gameType)) + { + elo = _playerElos.get(uuid.toString()).get(gameType); + } } } + + return elo; + } + + public EloTeam getNewRatings(EloTeam teamA, EloTeam teamB, GameResult result) + { + EloTeam newTeam = new EloTeam(); + + System.out.println("Old " + result + " Team Rating:" + teamA.TotalElo); + + int newTotal = _ratingSystem.getNewRating(teamA.TotalElo / teamA.getPlayers().size(), teamB.TotalElo / teamB.getPlayers().size(), result) * teamA.getPlayers().size(); + + System.out.println("New " + result + " Team Rating:" + newTotal); + + for (EloPlayer player : teamA.getPlayers()) + { + EloPlayer newPlayer = new EloPlayer(); + newPlayer.UniqueId = player.UniqueId; + newPlayer.Rating = (int)(player.Rating + ((double)player.Rating / (double)teamA.TotalElo) * (newTotal - teamA.TotalElo)); + + System.out.println("Old:"); + player.printInfo(); + + System.out.println("New:"); + newPlayer.printInfo(); + + newTeam.addPlayer(newPlayer); + } + + return newTeam; + } + + public void saveElo(UUID uuid, String gameType, int elo) + { + saveElo(uuid.toString(), gameType, elo); + } + + public void saveElo(final String uuid, final String gameType, final int elo) + { + Bukkit.getServer().getScheduler().runTaskAsynchronously(getPlugin(), new Runnable() + { + public void run() + { + _repository.saveElo(uuid, gameType, elo); + + synchronized (_playerEloLock) + { + if (_playerElos.containsKey(uuid)) + { + if (_playerElos.get(uuid).containsKey(gameType)) + { + _playerElos.get(uuid).put(gameType, elo); + } + } + } + } + }); } - // TODO: DEPCRECATED? @Override protected EloClientData AddPlayer(String player) { @@ -92,15 +110,12 @@ public class EloManager extends MiniDbClientPlugin @Override public void processLoginResultSet(String playerName, ResultSet resultSet) throws SQLException { - Collection ratings = _repository.parseRatings(resultSet); - RankedPlayer rankedPlayer = new RankedPlayer(playerName, uuid, ratings); Set(playerName, _repository.loadClientInformation(resultSet)); } @Override public String getQuery(String uuid, String name) { - // Query elo ratings table for all the EloRatings associated with player logging in! - return "SELECT uuid, gamemode, elo, matchesPlayed FROM eloRating WHERE uuid = '" + uuid + "';"; + return "SELECT gameType, elo FROM eloRating WHERE uuid = '" + uuid + "';"; } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java new file mode 100644 index 000000000..a2661fee3 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java @@ -0,0 +1,12 @@ +package mineplex.core.elo; + +public class EloPlayer +{ + public String UniqueId; + public int Rating; + + public void printInfo() + { + System.out.println(UniqueId + "'s elo is " + Rating); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRating.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRating.java deleted file mode 100644 index de07f6621..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRating.java +++ /dev/null @@ -1,63 +0,0 @@ -package mineplex.core.elo; - -public class EloRating -{ - public static final int PROVISIONAL_GAMES = 10; // Number of provisional games to ensure rating accuracy - public static final int DEFAULT_RATING = 1200; // Default starting ELO for first-time players. - - private int _rating; - public int getRating() { return _rating; } - - private int _gamemode; - public int getGamemode() { return _gamemode; } - - private String _uuid; - public String getUuid() { return _uuid; } - - private int _matchesPlayed; - public int getMatchesPlayed() { return _matchesPlayed; } - public void incrementMatchesPlayed() { _matchesPlayed++; } - - private boolean _updated; // Whether this EloRating has been updated/modified since caching - public boolean isUpdated() { return _updated; } - private void onUpdate() { _updated = true; } - - public EloRating(String uuid, int gamemode, int rating, int matchesPlayed) - { - _updated = false; - _uuid = uuid; - _gamemode = gamemode; - _rating = rating; - _matchesPlayed = matchesPlayed;; - } - - public EloRating(String uuid, int gamemode) - { - this(uuid, gamemode, DEFAULT_RATING, 0); - } - - public void updateRating(int eloDelta) - { - setRating(_rating + eloDelta); - } - - public double getKFactor() - { - if (_matchesPlayed < PROVISIONAL_GAMES) - { - double provisionalPercent = _matchesPlayed / (double) PROVISIONAL_GAMES; - return 50d - (25 * provisionalPercent); // Range of [50, 25] Kfactor for provisionl games period - } - else - { - double ratio = ((double) PROVISIONAL_GAMES) / _matchesPlayed; - return 10d + 15 * (ratio); // Range of [10, 25] KFactor for games after provisionals - } - } - - private void setRating(int rating) - { - _rating = Math.max(rating, 0); - onUpdate(); - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRatingSystem.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRatingSystem.java index a27d308ba..d32433ed6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRatingSystem.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRatingSystem.java @@ -1,8 +1,6 @@ package mineplex.core.elo; -import java.util.List; - -public class EloRatingSystem implements RatingSystem +public class EloRatingSystem { private final static int DEFAULT_KFACTOR = 25; @@ -10,37 +8,26 @@ public class EloRatingSystem implements RatingSystem public final static double DRAW = 0.5; public final static double LOSS = 0.0; - public EloRatingSystem() + private KFactor[] _kFactors = {}; + + public EloRatingSystem(KFactor...kFactors) { - + _kFactors = kFactors; } - @Override - public void resolveGame(RankedGame game) + public int getNewRating(int rating, int opponentRating, GameResult result) { - List teams = game.getSortedTeams(); - RankedTeam winner = teams.get(0); - RankedTeam loser = teams.get(1); // TODO: Impelement non-arbitrary rating? - double winningExpected = getExpectedScore(winner.getElo(), loser.getElo()); - double losingExpected = getExpectedScore(loser.getElo(), winner.getElo()); - - // Update the ratings of all participants - updateRatings(winner, winningExpected, 1.0d); - updateRatings(loser, losingExpected, 0.0d); - } - - private void updateRatings(RankedTeam team, double expectedScore, double score) - { - double scoreDelta = score - expectedScore; - for (EloRating rating : team.getRatings()) + switch (result) { - // R' = R + K(S - E) - int eloDelta = (int) (rating.getKFactor() * scoreDelta); - rating.updateRating(eloDelta); - rating.incrementMatchesPlayed(); - - System.out.println("Player with " + rating.getMatchesPlayed() + " games had ELO updated by " + eloDelta + " for new rating of " + rating.getRating()); + case Win: + return getNewRating(rating, opponentRating, WIN); + case Loss: + return getNewRating(rating, opponentRating, LOSS); + case Draw: + return getNewRating(rating, opponentRating, DRAW); } + + return -1; } /** @@ -58,7 +45,7 @@ public class EloRatingSystem implements RatingSystem */ public int getNewRating(int rating, int opponentRating, double score) { - double kFactor = 0;//getKFactor(rating); + double kFactor = getKFactor(rating); double expectedScore = getExpectedScore(rating, opponentRating); int newRating = calculateNewRating(rating, score, expectedScore, kFactor); @@ -70,7 +57,20 @@ public class EloRatingSystem implements RatingSystem return oldRating + (int) (kFactor * (score - expectedScore)); } - public static double getExpectedScore(int rating, int opponentRating) + private double getKFactor(int rating) + { + for (int i = 0; i < _kFactors.length; i++) + { + if (rating >= _kFactors[i].getStartIndex() && rating <= _kFactors[i].getEndIndex()) + { + return _kFactors[i].value; + } + } + + return DEFAULT_KFACTOR; + } + + private double getExpectedScore(int rating, int opponentRating) { return 1.0 / (1.0 + Math.pow(10.0, ((double) (opponentRating - rating) / 400.0))); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java index bdbee8acb..54503474f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java @@ -2,8 +2,6 @@ package mineplex.core.elo; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.HashSet; -import java.util.Set; import org.bukkit.plugin.java.JavaPlugin; @@ -14,59 +12,40 @@ import mineplex.core.database.column.ColumnVarChar; public class EloRepository extends RepositoryBase { - private static String INSERT_ELO = "INSERT INTO eloRating (uuid, gamemode, elo, matchesPlayed) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE elo=VALUES(elo);"; + private static String CREATE_ELO_TABLE = "CREATE TABLE IF NOT EXISTS eloRating (id INT NOT NULL AUTO_INCREMENT, uuid VARCHAR(256), gameType VARCHAR(256), elo INT, PRIMARY KEY (id), UNIQUE INDEX uuid_gameType_index (uuid, gameType));"; + private static String INSERT_ELO = "INSERT INTO eloRating (uuid, gameType, elo) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE elo=VALUES(elo);"; - /** - * Constructor - * @param plugin - */ public EloRepository(JavaPlugin plugin) { super(plugin, DBPool.ACCOUNT); + + initialize(); } - - /** - * Save & update an {@link EloRating} into repository. - * @param rating - the rating to be saved/updated in the repository. - */ - public void saveRating(EloRating rating) + + public void initialize() { - String uuid = rating.getUuid(); - int gamemode = rating.getGamemode(); - int elo = rating.getRating(); - int matchesPlayed = rating.getMatchesPlayed(); - - // Execute update/insert - executeUpdate(INSERT_ELO, new ColumnVarChar("uuid", 100, uuid), new ColumnInt("gamemode", gamemode), - new ColumnInt("elo", elo), new ColumnInt("matchesPlayed", matchesPlayed)); + //executeUpdate(CREATE_ELO_TABLE); } - - /** - * Parse incoming SQL result from EloRatings table into usable {@link EloRating} objects. - * @param resultSet - the resulting set from SQL query for ELO ratings. - * @return parsed {@link EloRating} objects return from {@code resultSet}. - */ - public Set parseRatings(ResultSet resultSet) throws SQLException + + public void saveElo(String uuid, String gameType, int elo) { - Set ratings = new HashSet(); - + executeUpdate(INSERT_ELO, new ColumnVarChar("uuid", 100, uuid), new ColumnVarChar("gameType", 100, gameType), new ColumnInt("elo", elo)); + } + + public EloClientData loadClientInformation(ResultSet resultSet) throws SQLException + { + EloClientData clientData = new EloClientData(); + while (resultSet.next()) { - String uuid = resultSet.getString(1); - int gamemode = resultSet.getInt(2); - int elo = resultSet.getInt(3); - int matchesPlayed = resultSet.getInt(4); - - EloRating rating = new EloRating(uuid, gamemode, elo, matchesPlayed); - ratings.add(rating); + clientData.Elos.put(resultSet.getString(1), resultSet.getInt(2)); } - - return ratings; + + return clientData; } @Override - protected void update() { } - - @Override - protected void initialize() { } + protected void update() + { + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java new file mode 100644 index 000000000..73f54168a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java @@ -0,0 +1,23 @@ +package mineplex.core.elo; + +import java.util.ArrayList; +import java.util.List; + +public class EloTeam +{ + private List _players = new ArrayList(); + + public int TotalElo = 0; + + public void addPlayer(EloPlayer player) + { + TotalElo += player.Rating; + + _players.add(player); + } + + public List getPlayers() + { + return _players; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/GameResult.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/GameResult.java new file mode 100644 index 000000000..5c00d8d5f --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/GameResult.java @@ -0,0 +1,8 @@ +package mineplex.core.elo; + +public enum GameResult +{ + Win, + Loss, + Draw +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/KFactor.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/KFactor.java new file mode 100644 index 000000000..81d9be811 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/KFactor.java @@ -0,0 +1,34 @@ +package mineplex.core.elo; + +public class KFactor +{ + public int startIndex, endIndex; + public double value; + + public KFactor(int startIndex, int endIndex, double value) + { + this.startIndex = startIndex; + this.endIndex = endIndex; + this.value = value; + } + + public int getStartIndex() + { + return startIndex; + } + + public int getEndIndex() + { + return endIndex; + } + + public double getValue() + { + return value; + } + + public String toString() + { + return "kfactor: " + startIndex + " " + endIndex + " " + value; + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedGame.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedGame.java deleted file mode 100644 index 6651404f9..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedGame.java +++ /dev/null @@ -1,43 +0,0 @@ -package mineplex.core.elo; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Random; -import java.util.Set; - -public class RankedGame -{ - - private Set _teams; - - public RankedGame(RankedTeam team1, RankedTeam team2) - { - // TODO: Implement non-arbitrary ranking of multi-team game comps - _teams = new HashSet(); - _teams.add(team1); // Winner team - _teams.add(team2); // Loser team - } - - public List getSortedTeams() - { - List sortedTeams = new ArrayList(_teams); - - Random rand = new Random(); - double roll = rand.nextDouble(); - - int rating1 = sortedTeams.get(0).getElo(); - int rating2 = sortedTeams.get(1).getElo(); - - double chanceOfWinning = EloRatingSystem.getExpectedScore(rating1, rating2); - - if (roll > chanceOfWinning) - { - RankedTeam team1 = sortedTeams.remove(0); - sortedTeams.add(team1); - } - - return sortedTeams; - } - -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedPlayer.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedPlayer.java deleted file mode 100644 index 03e1bf719..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedPlayer.java +++ /dev/null @@ -1,47 +0,0 @@ -package mineplex.core.elo; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -public class RankedPlayer -{ - private String _name; - public String getName() { return _name; } - - private String _uuid; - private Map _ratings; - - public RankedPlayer(String playerName, String uuid, Collection ratings) - { - _name = playerName; - _uuid = uuid; - - // Initialize ratings - _ratings = new HashMap(); - for (EloRating rating : ratings) - { - _ratings.put(rating.getGamemode(), rating); - } - } - - public EloRating getRating(int gamemode) - { - if (!_ratings.containsKey(gamemode)) - { - _ratings.put(gamemode, generateRating(gamemode)); - } - - return _ratings.get(gamemode); - } - - public Collection getRatings() - { - return _ratings.values(); - } - - private EloRating generateRating(int gamemode) - { - return new EloRating(_uuid, gamemode); - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedTeam.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedTeam.java deleted file mode 100644 index 1f37af442..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/RankedTeam.java +++ /dev/null @@ -1,58 +0,0 @@ -package mineplex.core.elo; - -import java.util.HashSet; -import java.util.Set; - -import mineplex.queuer.Ranked; - - -public class RankedTeam implements Ranked, Team -{ - - private Set _players; - private int _gamemode; - - public RankedTeam(Set players, int gamemode) - { - _players = players; - _gamemode = gamemode; - } - - @Override - public int getElo() - { - int totalElo = 0; - - for (EloRating rating : getRatings()) - { - totalElo += rating.getRating(); - } - - return totalElo / _players.size(); /// Return average elo - } - - @Override - public Set getMemberNames() - { - Set memberNames = new HashSet(); - - for (RankedPlayer player : _players) - { - memberNames.add(player.getName()); - } - - return memberNames; - } - - public Set getRatings() - { - Set ratings = new HashSet(); - - for (RankedPlayer player : _players) - { - ratings.add(player.getRating(_gamemode)); - } - - return ratings; - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/RatingSystem.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/RatingSystem.java deleted file mode 100644 index f4f8d0808..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/RatingSystem.java +++ /dev/null @@ -1,12 +0,0 @@ -package mineplex.core.elo; - -public interface RatingSystem -{ - - /** - * Resolve a {@link RankedGame} by updating the rankings of all participants dependant on - * the outcome of the game. - * @param game - the game to be resolved after completion (must be a completed RankedGame) - */ - public void resolveGame(RankedGame game); -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/Team.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/Team.java deleted file mode 100644 index 8e03b7171..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/Team.java +++ /dev/null @@ -1,9 +0,0 @@ -package mineplex.core.elo; - -import java.util.Set; - -public interface Team -{ - - public Set getMemberNames(); -} diff --git a/Plugins/Mineplex.Queue.Core/.classpath b/Plugins/Mineplex.Queue.Core/.classpath deleted file mode 100644 index 793451685..000000000 --- a/Plugins/Mineplex.Queue.Core/.classpath +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/Plugins/Mineplex.Queue.Core/.externalToolBuilders/Queue.Core.launch b/Plugins/Mineplex.Queue.Core/.externalToolBuilders/Queue.Core.launch deleted file mode 100644 index 2981815ed..000000000 --- a/Plugins/Mineplex.Queue.Core/.externalToolBuilders/Queue.Core.launch +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/Plugins/Mineplex.Queue.Core/.project b/Plugins/Mineplex.Queue.Core/.project deleted file mode 100644 index 669fb734b..000000000 --- a/Plugins/Mineplex.Queue.Core/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - Mineplex.Queue.Core - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/Plugins/Mineplex.Queue.Core/Mineplex.Queue.Core.iml b/Plugins/Mineplex.Queue.Core/Mineplex.Queue.Core.iml deleted file mode 100644 index d65267f31..000000000 --- a/Plugins/Mineplex.Queue.Core/Mineplex.Queue.Core.iml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/Plugins/Mineplex.Queue.Core/build.xml b/Plugins/Mineplex.Queue.Core/build.xml deleted file mode 100644 index bfa129910..000000000 --- a/Plugins/Mineplex.Queue.Core/build.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueParty.java b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueParty.java deleted file mode 100644 index 0e76c9ad5..000000000 --- a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueParty.java +++ /dev/null @@ -1,115 +0,0 @@ -package mineplex.queuer; - -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - -import mineplex.serverdata.Region; -import mineplex.serverdata.data.Data; -import mineplex.serverdata.data.ServerGroup; - -public class QueueParty implements Data, Ranked -{ - - private int _id; - public int getId() { return _id; } - - private String _state; - public String getState() { return _state; } - public void setState(String state) { this._state = state; } - - private Set _players; - public Set getPlayers() { return _players; } - - private int _assignedMatch; - public int getAssignedMatch () { return _assignedMatch; } - public void setAssignedMatch(int assignedMatch) { this._assignedMatch = assignedMatch; } - - private ServerGroup _serverGroup; - public ServerGroup getServerGroup() { return _serverGroup; } - - private int _averageElo; - public int getAverageElo() { return _averageElo; } - public int getElo() { return getAverageElo(); } - - public int getPlayerCount() { return _players.size(); } - - private long _queueStartTime; - public long getQueueDuration() { return System.currentTimeMillis() - _queueStartTime; } - - private boolean _prompted; - public boolean isPrompted() { return _prompted; } - public void setPrompted(boolean prompted) { this._prompted = prompted; } - - private Region _region; - - private Set _otherPartyStates; - public Set getOtherPartyStates() { return _otherPartyStates; } - public void setOtherPartyStates(Set otherPartyStates) { this._otherPartyStates = otherPartyStates; } - - private QueueParty(int id) - { - _id = id; - unassignMatch(); - _prompted = false; - _region = Region.US; - _players = new HashSet(); - _otherPartyStates = new HashSet(); - _queueStartTime = System.currentTimeMillis(); - } - - public QueueParty(int id, Collection players, ServerGroup serverGroup, int averageElo) - { - this(id); - _players.addAll(players); - _serverGroup = serverGroup; - _averageElo = averageElo; - } - - public boolean hasAssignedMatch() - { - return _assignedMatch != -1; - } - - /** - * @return true, if the {@link QueueParty}s status is set to 'Ready', false otherwise. - */ - public boolean isReady() - { - return getState().equalsIgnoreCase("Ready"); - } - - /** - * Assign a {@link Match} to this queue party. - * @param match - the match to be assigned for this party - */ - public void assignMatch(Match match) - { - setState("Awaiting Players"); - setAssignedMatch(match.getId()); - } - - /** - * Unassign any matches from this QueueParty. - */ - public void unassignMatch() - { - setState("Awaiting Match"); - setAssignedMatch(-1); - } - - /** - * Initiate the sending of gameplay invite to the party when the assigned match - * is ready to start. - */ - public void sendInvites() - { - setState("Awaiting Confirmation"); - } - - @Override - public String getDataId() - { - return Integer.toString(_id); - } -} diff --git a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Ranked.java b/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Ranked.java deleted file mode 100644 index f1fbe0ada..000000000 --- a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Ranked.java +++ /dev/null @@ -1,15 +0,0 @@ -package mineplex.queuer; - -/** - * Ranked represents any object that can be classified as possessing an ELO ranking. - * @author MrTwiggy - * - */ -public interface Ranked -{ - - /** - * @return the ELO point ranking associated with this {@link Ranked} object. - */ - public int getElo(); -} diff --git a/Plugins/Mineplex.Queuer/.classpath b/Plugins/Mineplex.Queuer/.classpath index dc40c82a0..945e9a997 100644 --- a/Plugins/Mineplex.Queuer/.classpath +++ b/Plugins/Mineplex.Queuer/.classpath @@ -8,7 +8,5 @@ - - diff --git a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Match.java b/Plugins/Mineplex.Queuer/src/mineplex/queuer/Match.java similarity index 52% rename from Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Match.java rename to Plugins/Mineplex.Queuer/src/mineplex/queuer/Match.java index 93bbb70ea..747c8e5a4 100644 --- a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/Match.java +++ b/Plugins/Mineplex.Queuer/src/mineplex/queuer/Match.java @@ -1,11 +1,11 @@ package mineplex.queuer; +import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.Set; -import mineplex.serverdata.data.ServerGroup; - -public class Match implements Ranked +public class Match { private int _id; public int getId() { return _id; } @@ -16,23 +16,16 @@ public class Match implements Ranked private boolean _waitingForInvites; public boolean isWaitingForInvites() { return _waitingForInvites; } - private boolean _ready; - public boolean isReady() { return _ready; } - public void setReady(boolean ready) { _ready = ready; } - private long _waitingStartTime; public long getWaitDuration() { return System.currentTimeMillis() - _waitingStartTime; } - private ServerGroup _serverGroup; // The server group associated with this Match type. - public ServerGroup getServerGroup() { return _serverGroup; } + private int _averageElo; + public int getAverageElo() { return _averageElo; } - public Match(int id, ServerGroup serverGroup, QueueParty... parties) + public Match(int id, int averageElo, QueueParty... parties) { - _ready = false; - _id = id; - _parties = new HashSet(); - _waitingForInvites = false; - _serverGroup = serverGroup; + this._id = id; + this._averageElo = averageElo; for (QueueParty party : parties) { @@ -58,32 +51,6 @@ public class Match implements Ranked _parties.remove(queueParty); } - /** - * @return average ELO of all members of the match, if the match contains players, 0 otherwise. - */ - @Override - public int getElo() - { - if (_parties.size() == 0) return 0; - - int totalElo = 0; - for (QueueParty party : _parties) - { - totalElo += (party.getAverageElo() * party.getPlayerCount()); - } - - return totalElo / getPlayerCount(); - } - - /** - * @return the number of open slots remaining in the match to be filled. - */ - public int getOpenSlots() - { - int openSlots = _serverGroup.getMaxPlayers() - getPlayerCount(); - return Math.max(openSlots, 0); - } - public int getPlayerCount() { int playerCount = 0; diff --git a/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueParty.java b/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueParty.java new file mode 100644 index 000000000..19dd01fdb --- /dev/null +++ b/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueParty.java @@ -0,0 +1,78 @@ +package mineplex.queuer; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +import mineplex.serverdata.Region; +import mineplex.serverdata.data.Data; + +public class QueueParty implements Data +{ + + private int _id; + public int getId() { return _id; } + + private String _state; + public String getState() { return _state; } + public void setState(String state) { this._state = state; } + + private Set _players; + public Set getPlayers() { return _players; } + + private int _assignedMatch; + public int getAssignedMatch () { return _assignedMatch; } + public void setAssignedMatch(int assignedMatch) { this._assignedMatch = assignedMatch; } + + private int _variance; + private String _gameType; + + private int _averageElo; + public int getAverageElo() { return _averageElo; } + + private int _playerCount; + public int getPlayerCount() { return _playerCount; } + + private long _queueStartTime; + + private boolean _prompted; + public boolean isPrompted() { return _prompted; } + public void setPrompted(boolean prompted) { this._prompted = prompted; } + + private Region _region; + + private Set _otherPartyStates; + public Set getOtherPartyStates() { return _otherPartyStates; } + public void setOtherPartyStates(Set otherPartyStates) { this._otherPartyStates = otherPartyStates; } + + public QueueParty() + { + this._id = -1; + this._state = "Awaiting Match"; + this._assignedMatch = -1; + this._variance = 25; + this._prompted = false; + this._region = Region.US; + this._players = new HashSet(); + this._otherPartyStates = new HashSet(); + this._queueStartTime = System.currentTimeMillis(); + } + + public QueueParty(Collection players, String gameType, int averageElo) + { + this._players.addAll(players); + this._gameType = gameType; + this._averageElo = averageElo; + } + + public boolean hasAssignedMatch() + { + return _assignedMatch != -1; + } + + @Override + public String getDataId() + { + return Integer.toString(_id); + } +} diff --git a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueuePartySorter.java b/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueuePartySorter.java similarity index 100% rename from Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueuePartySorter.java rename to Plugins/Mineplex.Queuer/src/mineplex/queuer/QueuePartySorter.java diff --git a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueRepository.java b/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueRepository.java similarity index 61% rename from Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueRepository.java rename to Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueRepository.java index b3ce4004c..eeef5c327 100644 --- a/Plugins/Mineplex.Queue.Core/src/mineplex/queuer/QueueRepository.java +++ b/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueRepository.java @@ -14,42 +14,27 @@ import mineplex.serverdata.Utility; import mineplex.serverdata.commands.ServerTransfer; import mineplex.serverdata.commands.TransferCommand; import mineplex.serverdata.data.DataRepository; -import mineplex.serverdata.data.DedicatedServer; import mineplex.serverdata.data.MinecraftServer; -import mineplex.serverdata.data.ServerGroup; import mineplex.serverdata.redis.RedisDataRepository; import mineplex.serverdata.servers.ConnectionData; import mineplex.serverdata.servers.ServerManager; import mineplex.serverdata.servers.ServerRepository; -import mineplex.serverprocesses.GenericRunnable; -import mineplex.serverprocesses.ProcessManager; -import mineplex.serverprocesses.ProcessRunner; public class QueueRepository { - private ServerRepository _serverRepository; private DataRepository _partyRepository; - private long _cacheTimeout; - private long _lastUpdated; - private Map _cachedParties; - private int _serverId; - /** * Class constructor * @param host - the host to connect the QueueRepository to * @param port - the designated port of the QueueRepository database * @param region - the region of server queues to manage */ - public QueueRepository(ConnectionData connectionData, Region region, long cacheTimeout) + public QueueRepository(ConnectionData connectionData, Region region) { - _serverRepository = ServerManager.getServerRepository(region); - _partyRepository = new RedisDataRepository(connectionData, region, + this._partyRepository = new RedisDataRepository(connectionData, region, QueueParty.class, "queue-parties"); - _cacheTimeout = cacheTimeout; - _lastUpdated = 0; - _serverId = 0; } /** @@ -60,23 +45,24 @@ public class QueueRepository */ public QueueRepository(Region region) { - this(ServerManager.getMasterConnection(), region, 1000); + this(ServerManager.getMasterConnection(), region); } public QueueParty getQueueParty(int partyId) { - updatePartyCache(); - return _cachedParties.get(partyId); + return _partyRepository.getElement(Integer.toString(partyId)); + } + + public QueueParty createQueueParty(Collection players, String gameType, int averageElo) + { + QueueParty queueParty = new QueueParty(players, gameType, averageElo); + updateQueueParty(queueParty); + return queueParty; } - /** - * Update/save a Queue Party object to the repository. - * @param queueParty - the queue party to be updated/saved in repo. - */ public void updateQueueParty(QueueParty queueParty) { _partyRepository.addElement(queueParty); - _cachedParties.put(queueParty.getId(), queueParty); } public void deleteQueueParty(int partyId) @@ -97,20 +83,9 @@ public class QueueRepository } } - public boolean queuePartyExists(int partyId) - { - return getQueueParty(partyId) != null; - } - - /** - * - * @return a cached set of active {@link QueueParty}'s that are guaranteed - * to have been cached less than {@code cacheTimeout} milliseconds. - */ public Collection getQueueParties() { - updatePartyCache(); - return _cachedParties.values(); + return _partyRepository.getElements(); } public Collection getJoinedQueueParties(int matchId) @@ -142,16 +117,46 @@ public class QueueRepository public void assignMatch(QueueParty queueParty, Match match) { - queueParty.assignMatch(match); + queueParty.setAssignedMatch(match.getId()); + queueParty.setState("Awaiting Confirmation"); updateQueueParty(queueParty); } - public void sendInvite(QueueParty queueParty) + public void startMatch(int matchId) { - queueParty.sendInvites(); - updateQueueParty(queueParty); - } + MinecraftServer emptyServer = getEmptyServer(); + if (emptyServer != null) + { + for (QueueParty queueParty : getJoinedQueueParties(matchId)) + { + for (String playerName : queueParty.getPlayers()) + { + // Execute a transfer command + ServerTransfer serverTransfer = new ServerTransfer(playerName, emptyServer.getName()); + TransferCommand transferCommand = new TransferCommand(serverTransfer); + transferCommand.publish(); + } + } + } + } + + protected MinecraftServer getEmptyServer() + { + ServerRepository serverRepository = ServerManager.getServerRepository(Region.US); + Collection servers = serverRepository.getServersByGroup("DominateElo"); + + for (MinecraftServer server : servers) + { + if (server.getPlayerCount() == 0) + { + return server; + } + } + + return null; + } + public void deleteMatch(int matchId) { for (QueueParty queueParty : getJoinedQueueParties(matchId)) @@ -161,27 +166,4 @@ public class QueueRepository updateQueueParty(queueParty); } } - - /** - * Update the internal cache of {@link QueueParty}s if the cache age is - * older than {@code _cacheTimeout}. - */ - private void updatePartyCache() - { - long cacheAge = (System.currentTimeMillis() - _lastUpdated); - if (cacheAge >= _cacheTimeout) // Old cache, update contents - { - _cachedParties = new HashMap(); - - for (QueueParty queueParty : _partyRepository.getElements()) - { - _cachedParties.put(queueParty.getId(), queueParty); - } - } - } - - private static void log(String message) - { - System.out.println(message); - } } \ No newline at end of file diff --git a/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java b/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java index a008c7054..331d025a2 100644 --- a/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java +++ b/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java @@ -9,55 +9,208 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Random; import java.util.Set; -import java.util.UUID; import mineplex.serverdata.Region; -import mineplex.serverdata.commands.ServerTransfer; -import mineplex.serverdata.commands.TransferCommand; -import mineplex.serverdata.data.DedicatedServer; -import mineplex.serverdata.data.ServerGroup; -import mineplex.serverdata.servers.ConnectionData; -import mineplex.serverdata.servers.ServerManager; -import mineplex.serverdata.servers.ServerRepository; -import mineplex.serverprocesses.GenericRunnable; -import mineplex.serverprocesses.ProcessManager; -import mineplex.serverprocesses.ProcessRunner; public class Queuer { - public static final int MIN_QUEUE_WAIT = 0; // The number of seconds required in queue before creating a new match for a party. - private static QueueRepository _repo; - private static ServerRepository _serverRepository; - private static Set _pendingMatches; // Set of all matches awaiting players - private static int _matchId = 0; - private static int _matchesMade = 0; - private static int _updates = 0; - private static int _partyId = 0; - private static int _serverId = 0; public static void main (String args[]) { Region region = (!new File("eu.dat").exists()) ? Region.US : Region.EU; - _serverRepository = ServerManager.getServerRepository(region); + _repo = new QueueRepository(region); - _pendingMatches = new HashSet(); + + HashMap playerVarianceMap = new HashMap(); + HashMap playerPrepMatchMap = new HashMap(); + Set matches = new HashSet(); + + QueuePartySorter partySorter = new QueuePartySorter(); + + int matchId = 1; while (true) - { - _updates++; - updateQueuer(); - ProcessManager.getInstance().updateProcesses(); + { + int matchesMade = 0; + matchId %= 1500; - log("Total pending matches after update: " + _pendingMatches.size()); - log("Total queued parties after update: " + _repo.getQueueParties().size()); + List assignedMatchIdChecked = new ArrayList(); + Map queueParties = _repo.getMappedQueueParties(); + + int matchPlayerCount = 2; + + System.out.println("Checking " + queueParties.size() + " queues..."); + for (QueueParty queueParty : queueParties.values()) + { + int partyId = queueParty.getId(); + int variance = playerVarianceMap.containsKey(partyId) ? playerVarianceMap.get(partyId) : 0; + variance += 25; + playerVarianceMap.put(partyId, variance); + + if (queueParty.hasAssignedMatch()) + { + for (Match match : matches) + { + if (Math.abs(match.getAverageElo() - queueParty.getAverageElo()) <= variance) + { + if (playerPrepMatchMap.containsKey(partyId)) + { + if (playerPrepMatchMap.get(partyId) == match) + break; + + playerPrepMatchMap.get(partyId).quitQueueParty(queueParty); + } + + match.joinQueueParty(queueParty); + playerPrepMatchMap.put(partyId, match); + + log("Found prep match for '" + queueParty.getId() + "'"); + break; + } + } + + if (!playerPrepMatchMap.containsKey(partyId)) + { + Match match = new Match(matchId++, queueParty.getAverageElo(), queueParty); + + playerPrepMatchMap.put(partyId, match); + matches.add(match); + } + } + else if (!assignedMatchIdChecked.contains(queueParty.getAssignedMatch())) + { + int assignedMatchId = queueParty.getAssignedMatch(); + log("Checking if match '" + assignedMatchId + "' is ready."); + //List matchStatuses = _repo.getMatchStatuses(queueRecord.AssignedMatch); + Collection joinedParties = _repo.getJoinedQueueParties(assignedMatchId); + boolean matchReady = true; + boolean matchDeny = false; + + for (QueueParty joinedParty : joinedParties) + { + String partyState = joinedParty.getState(); + if (partyState.equalsIgnoreCase("Deny")) + { + matchDeny = true; + matchReady = false; + break; + } + else if (!partyState.equalsIgnoreCase("Ready")) + { + matchReady = false; + } + } + + if (matchReady) + { + _repo.startMatch(assignedMatchId); + _repo.deleteAssignedParties(assignedMatchId); + + System.out.println("Starting match '" + assignedMatchId + "'"); + } + else if (matchDeny) + { + _repo.deleteMatch(assignedMatchId); + } + + assignedMatchIdChecked.add(assignedMatchId); + } + } + + System.out.println("Checking " + matches.size() + " matches..."); + + // Check for and kick off invites for ready matches + for (Iterator matchIterator = matches.iterator(); matchIterator.hasNext();) + { + Match match = matchIterator.next(); + + // Don't give me crap about not using iterator...can't cuz of stupid thing. + Set partiesToRemove = new HashSet(); + + for (QueueParty queueParty : match.getParties()) + { + if (!queueParties.containsKey(queueParty.getId())) + { + log("Removing matchStatus : " + queueParty.getId()); + partiesToRemove.add(queueParty); + + if (match.isWaitingForInvites()) + { + _repo.deleteMatch(match.getId()); + match.setWaitingForInvites(false); + } + } + } + + for (QueueParty party : partiesToRemove) + { + match.quitQueueParty(party); + } + + if (match.isWaitingForInvites()) + { + if ((match.getWaitDuration()) > 15000) + { + for (QueueParty queueParty : match.getParties()) + { + if (!queueParty.getState().equalsIgnoreCase("Ready")) + { + _repo.deleteQueueParty(queueParty.getId()); + } + } + + _repo.deleteMatch(match.getId()); + match.setWaitingForInvites(false); + } + + continue; + } + + if (match.getPlayerCount() >= matchPlayerCount) + { + List partyList = new ArrayList(match.getParties()); + Collections.sort(partyList, partySorter); + + int playerCount = 0; + for (QueueParty party : partyList) + { + if (playerCount + party.getPlayerCount() > matchPlayerCount) + { + match.quitQueueParty(party); + playerPrepMatchMap.remove(party.getId()); + log("Oops hit player cap, can't fit you in this match."); + continue; + } + + playerCount += party.getPlayerCount(); + } + + if (playerCount == matchPlayerCount) + { + log("Sent match invites for '" + match.getId() + "'"); + + for (QueueParty party : match.getParties()) + { + playerPrepMatchMap.remove(party.getId()); + _repo.assignMatch(party, match); + } + + match.setWaitingForInvites(true); + matchesMade++; + } + } + else if (match.getPlayerCount() == 0) + { + matchIterator.remove(); + } + } try { - if (_matchesMade > 0) - System.out.println("Made " + _matchesMade + " matches."); + if (matchesMade > 0) + System.out.println("Made " + matchesMade + " matches."); Thread.sleep(1000); } @@ -69,291 +222,6 @@ public class Queuer } - - /** - * Tick & update the Queuer as a whole, making one whole pass through all queued players and pending matches to - * assign matches to parties and start matches. - */ - private static void updateQueuer() - { - // Update the status of each queue party, searching for best matchings and assigning matches to parties. - for (QueueParty queueParty : _repo.getQueueParties()) - { - updateParty(queueParty); - } - - // Update all matches, and remove pending matches if they are finished. - Iterator iterator = _pendingMatches.iterator(); - while (iterator.hasNext()) - { - Match match = iterator.next(); - boolean matchFinished = updateMatch(match); - - // Remove match if it is completed/finished - if (matchFinished) iterator.remove(); - } - } - - /** - * Update the status of a {@link QueueParty} by attempting to locate the best resulting - * {@code Match} available, or creating a new one if required. - * @param queueParty - the queue party to be updated for matchmaking purposes. - */ - private static void updateParty(QueueParty queueParty) - { - int queueDuration = (int) queueParty.getQueueDuration() / 1000; // Queue duration in seconds - Match bestMatch = getBestMatch(queueParty); - - if (queueParty.hasAssignedMatch()) - { - // TODO: If player has been waiting too long in current game and there is a better match, join that! - } - else - { - if (bestMatch != null) // Assign party into best match! - { - bestMatch.joinQueueParty(queueParty); - _repo.assignMatch(queueParty, bestMatch); - } - else if (queueDuration >= MIN_QUEUE_WAIT) // Create a new match for others to join! - { - Match match = new Match(_matchId++, queueParty.getServerGroup(), queueParty); - _pendingMatches.add(match); - _repo.assignMatch(queueParty, match); - } - } - } - - /** - * Update a {@link Match} by verifying it's player statuses, sending out invites - * and managing a Match from creation to deletion. - * @param match - the match to be updated. - * @return true, if the match is no longer required (successful or otherwise) and should be removed, false otherwise. - */ - private static boolean updateMatch(Match match) - { - // Remove queued parties that have left queue/match - // Don't give me crap about not using iterator...can't cuz of stupid thing. - Set partiesToRemove = new HashSet(); - for (QueueParty queueParty : match.getParties()) - { - int partyId = queueParty.getId(); - if (!_repo.queuePartyExists(partyId)) - { - log("Removing matchStatus : " + queueParty.getId()); - partiesToRemove.add(queueParty); - - if (match.isWaitingForInvites()) - { - _repo.deleteMatch(match.getId()); - match.setWaitingForInvites(false); - } - } - } - for (QueueParty party : partiesToRemove) - { - match.quitQueueParty(party); - } - - // If match took too long to find players, or is empty, quit match. - if (match.getPlayerCount() == 0) - { - return true; // Match is empty, remove from pending matches. - } - - // If match sent invites and is waiting for too long (15 seconds), kick players who didn't - // accept and keep looking - // Otherwise if everyone accepted, start game! - if (match.isWaitingForInvites()) - { - boolean matchReady = true; - for (QueueParty party : _repo.getJoinedQueueParties(match.getId())) - { - if (!party.isReady()) - { - matchReady = false; - } - } - - if (!matchReady && match.getWaitDuration() > 500) - { - matchReady = true; - } - - if (match.isReady()) // Invites accepted, MinecraftServer started, and players transferred. - { - return true; - } - else if (matchReady) // Players accepted invites, start match! - { - startMatch(match); - return false; - } - else if (match.getWaitDuration() > 15000) - { - for (QueueParty queueParty : match.getParties()) - { - if (!queueParty.isReady()) - { - _repo.deleteQueueParty(queueParty.getId()); - } - } - - _repo.deleteMatch(match.getId()); - match.setWaitingForInvites(false); - } - - return false; - } - - // Match has filled up, send out invites! - if (match.getOpenSlots() == 0) - { - for (QueueParty party : match.getParties()) - { - _repo.sendInvite(party); - } - - match.setWaitingForInvites(true); - } - - return false; - } - - /** - * @param queueParty - the party for whom a match is being searched. - * @return the best matching {@link Match} for the {@code queueParty}, if an acceptable {@link Match} - * could be found, null otherwise. - */ - private static Match getBestMatch(QueueParty queueParty) - { - Match best = null; - int minEloDelta = 0; - int variance = getSearchVariance(queueParty); - - for (Match match : _pendingMatches) - { - if (match.getOpenSlots() >= queueParty.getPlayerCount()) - { - int eloDelta = getEloDelta(queueParty, match); - if (eloDelta <= variance && (eloDelta < minEloDelta || best == null)) - { - best = match; - minEloDelta = eloDelta; - } - } - } - - return best; - } - - /** - * @param r1 - * @param r2 - * @return the ELO point delta (difference) between two {@link Ranked} objects. - */ - private static int getEloDelta(Ranked r1, Ranked r2) - { - return Math.abs(r1.getElo() - r2.getElo()); - } - - public static boolean startMatch(Match match) - { - ServerGroup group = match.getServerGroup(); - DedicatedServer bestServer = getBestDedicatedServer(group); - startServer(bestServer, group, match); - return true; - } - - /** - * Transfer all players queue'd into a {@link Match} to one server. - * @param match - the match whose queue'd players are to be transferred - * @param serverName - the name of the server to transfer the players to - */ - public static void transferPlayers(Match match, String serverName) - { - for (QueueParty queueParty : _repo.getJoinedQueueParties(match.getId())) - { - for (String playerName : queueParty.getPlayers()) - { - // Execute a transfer command - ServerTransfer serverTransfer = new ServerTransfer(playerName, serverName); - TransferCommand transferCommand = new TransferCommand(serverTransfer); - transferCommand.publish(); - } - } - } - - /** - * @return newly generated unique server id. - */ - public static int generateServerId() - { - return _serverId++; - } - - private static void startServer(final DedicatedServer serverSpace, final ServerGroup serverGroup, final Match match) - { - String cmd = "/home/mineplex/easyRemoteStartServerCustom.sh"; - final String groupPrefix = serverGroup.getPrefix(); - final String serverName = serverSpace.getName(); - final String serverAddress = serverSpace.getPublicAddress(); - final int serverId = generateServerId(); - - ProcessRunner pr = new ProcessRunner(new String[] {"/bin/sh", cmd, serverAddress, serverSpace.getPrivateAddress(), (serverGroup.getPortSection() + serverId) + "", serverGroup.getRequiredRam() + "", serverGroup.getWorldZip(), serverGroup.getPlugin(), serverGroup.getConfigPath(), serverGroup.getName(), serverGroup.getPrefix() + "-" + serverId, serverSpace.isUsRegion() ? "true" : "false", serverGroup.getAddNoCheat() + "" }); - pr.start(new GenericRunnable() - { - public void run(Boolean error) - { - if (!error) - { - // Successfully started server, now transfer players - transferPlayers(match, serverName); - } - else - { - // TODO: Error in starting server for ELO match, try again or disband queued match? - log("[" + serverName + ":" + serverAddress + " Free Resources; CPU " + serverSpace.getAvailableCpu() + " RAM " + serverSpace.getAvailableRam() + "MB] Errored " + serverName + "(" + groupPrefix+ "-" + serverId + ")"); - } - - } - }); - - ProcessManager.getInstance().addProcess(pr); - serverSpace.incrementServerCount(serverGroup); - } - - private static DedicatedServer getBestDedicatedServer(ServerGroup serverGroup) - { - Collection dedicatedServers = _serverRepository.getDedicatedServers(); - DedicatedServer bestServer = null; - - for (DedicatedServer serverData : dedicatedServers) - { - if (serverData.getAvailableRam() > serverGroup.getRequiredRam() - && serverData.getAvailableCpu() > serverGroup.getRequiredCpu()) - { - if (bestServer == null || serverData.getServerCount(serverGroup) < bestServer.getServerCount(serverGroup)) - { - bestServer = serverData; - } - } - } - - return bestServer; - } - - /** - * @param party - the party whose ELO search variance is being fetched. - * @return the variance in ELO search parameters for {@code party}. - * I.E: Queuer searches for potential matches in [party.elo - variance, party.elo + variance] ELO range. - */ - private static int getSearchVariance(QueueParty party) - { - int seconds = (int) party.getQueueDuration() / 1000; // Duration of queue in seconds - - return seconds * 10; // 5 ELO variance for every second in queue - } private static void log(String message) { diff --git a/Plugins/.externalToolBuilders/Queuer.launch b/Plugins/Mineplex.ServerData/.externalToolBuilders/New_Builder.launch similarity index 88% rename from Plugins/.externalToolBuilders/Queuer.launch rename to Plugins/Mineplex.ServerData/.externalToolBuilders/New_Builder.launch index 7fe0fe5da..0c6e0f696 100644 --- a/Plugins/.externalToolBuilders/Queuer.launch +++ b/Plugins/Mineplex.ServerData/.externalToolBuilders/New_Builder.launch @@ -1,11 +1,11 @@ - - - + + + - + @@ -13,5 +13,5 @@ - + diff --git a/Plugins/Mineplex.ServerData/.project b/Plugins/Mineplex.ServerData/.project index 669fb734b..87c600cb6 100644 --- a/Plugins/Mineplex.ServerData/.project +++ b/Plugins/Mineplex.ServerData/.project @@ -1,6 +1,6 @@ - Mineplex.Queue.Core + Mineplex.ServerData @@ -10,6 +10,16 @@ + + org.eclipse.ui.externaltools.ExternalToolBuilder + auto,full,incremental, + + + LaunchConfigHandle + <project>/.externalToolBuilders/ServerData.launch + + + org.eclipse.jdt.core.javanature diff --git a/Plugins/Mineplex.ServerData/build.xml b/Plugins/Mineplex.ServerData/build.xml index bc33f19cd..411a60854 100644 --- a/Plugins/Mineplex.ServerData/build.xml +++ b/Plugins/Mineplex.ServerData/build.xml @@ -13,7 +13,7 @@ - + diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ConnectionData.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ConnectionData.java index 45c28a85b..efb265fc1 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ConnectionData.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ConnectionData.java @@ -4,11 +4,10 @@ package mineplex.serverdata.servers; * ConnectionData stores information relevant for initiating a connection to a repository. * @author MrTwiggy * - * */ - public class ConnectionData { + private String _host; // The host URL to connect to repository public String getHost() { return _host; } diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java index 5be9b16ef..81a87c6a4 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java @@ -16,10 +16,10 @@ public class ServerManager { // Connection host to server database - private static final String DATABASE_HOST = "localhost";// TESTING, REPLACE WITH ORIGINAL: "10.33.53.16"; + private static final String DATABASE_HOST = "10.33.53.16"; // Ports associated with slave redis instances - private static final int[] SLAVE_PORTS = {6379}; // TESTING, REPLACE WITH: {6377, 6378, 6380, 6381, 6382}; + private static final int[] SLAVE_PORTS = {6377, 6378, 6380, 6381, 6382}; private static Random random = new Random(); // The cached repository instances diff --git a/Plugins/Mineplex.ServerMonitor/.classpath b/Plugins/Mineplex.ServerMonitor/.classpath index 23fda4021..49e473eb4 100644 --- a/Plugins/Mineplex.ServerMonitor/.classpath +++ b/Plugins/Mineplex.ServerMonitor/.classpath @@ -7,6 +7,5 @@ - diff --git a/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/GenericRunnable.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/GenericRunnable.java similarity index 62% rename from Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/GenericRunnable.java rename to Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/GenericRunnable.java index a1e509698..2541be020 100644 --- a/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/GenericRunnable.java +++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/GenericRunnable.java @@ -1,4 +1,4 @@ -package mineplex.serverprocesses; +package mineplex.servermonitor; public interface GenericRunnable { diff --git a/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessRunner.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ProcessRunner.java similarity index 95% rename from Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessRunner.java rename to Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ProcessRunner.java index dc9fc6217..6e2056ca7 100644 --- a/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessRunner.java +++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ProcessRunner.java @@ -1,4 +1,4 @@ -package mineplex.serverprocesses; +package mineplex.servermonitor; import java.io.BufferedReader; import java.io.InputStreamReader; @@ -12,7 +12,7 @@ public class ProcessRunner extends Thread boolean _done = false; Boolean _error = false; - public ProcessRunner(String[] args) + ProcessRunner(String[] args) { super("ProcessRunner " + args); _processBuilder = new ProcessBuilder(args); diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java index 8f7506b67..441cfe60b 100644 --- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java +++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java @@ -29,15 +29,13 @@ import mineplex.serverdata.data.ServerGroup; import mineplex.serverdata.servers.DedicatedServerSorter; import mineplex.serverdata.servers.ServerManager; import mineplex.serverdata.servers.ServerRepository; -import mineplex.serverprocesses.GenericRunnable; -import mineplex.serverprocesses.ProcessManager; -import mineplex.serverprocesses.ProcessRunner; public class ServerMonitor { private static ServerRepository _repository = null; private static StatusHistoryRepository _historyRepository = null; private static int _count = 0; + private static HashSet _processes = new HashSet(); private static HashMap _badServers = new HashMap(); private static Collection _serverStatuses = null; private static Collection _serverGroups = null; @@ -285,7 +283,55 @@ public class ServerMonitor } } - ProcessManager.getInstance().updateProcesses(); + int processWaits = 0; + + while (_processes.size() > 0) + { + for (Iterator iterator = _processes.iterator(); iterator.hasNext();) + { + ProcessRunner pr = iterator.next(); + + try + { + pr.join(100); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + + if (pr.isDone()) + iterator.remove(); + } + + if (_processes.size() > 0) + { + try + { + log("Sleeping while processes run..."); + Thread.sleep(6000); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + if (processWaits >= 10) + { + log("Killing stale processes."); + + for (Iterator iterator = _processes.iterator(); iterator.hasNext();) + { + iterator.next().abort(); + iterator.remove(); + } + } + + processWaits++; + } + + processWaits = 0; try { @@ -519,9 +565,7 @@ public class ServerMonitor if (!pr.isDone()) - { - ProcessManager.getInstance().addProcess(pr); - } + _processes.add(pr); } private static boolean isServerOffline(DedicatedServer serverData) @@ -622,9 +666,7 @@ public class ServerMonitor serverSpace.incrementServerCount(serverGroup); if (!pr.isDone()) - { - ProcessManager.getInstance().addProcess(pr); - } + _processes.add(pr); } private static void log(String message) diff --git a/Plugins/Mineplex.ServerProcesses/.classpath b/Plugins/Mineplex.ServerProcesses/.classpath deleted file mode 100644 index fceb4801b..000000000 --- a/Plugins/Mineplex.ServerProcesses/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/Plugins/Mineplex.ServerProcesses/.project b/Plugins/Mineplex.ServerProcesses/.project deleted file mode 100644 index 66b31cde0..000000000 --- a/Plugins/Mineplex.ServerProcesses/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - Mineplex.ServerProcesses - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessManager.java b/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessManager.java deleted file mode 100644 index 9a7f80d34..000000000 --- a/Plugins/Mineplex.ServerProcesses/src/mineplex/serverprocesses/ProcessManager.java +++ /dev/null @@ -1,119 +0,0 @@ -package mineplex.serverprocesses; - -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -/** - * Handles the management and cleaning of {@link ProcessRunnner}s. - * @author MrTwiggy - * - */ -public class ProcessManager -{ - - private static ProcessManager _instance; // Singleton instance - private Set _processes; // Set of running processes currently managed. - - /** - * Private class constructor to prevent non-singletons. - */ - private ProcessManager() - { - _processes = new HashSet(); - } - - /** - * Add a {@link ProcessRunner} to the manager to be updated and cleaned after completion. - * @param process - the process to be added to the manager. - */ - public void addProcess(ProcessRunner process) - { - _processes.add(process); - } - - /** - * Update processes and clean up stale ones. - * NOTE: Blocks calling thread while polling process states. - * @return the number of {@link ProcessRunner}s that were finished and cleaned up. - */ - public int updateProcesses() - { - int cleanedProcesses = 0; - int processWaits = 0; - - while (_processes.size() > 0) - { - for (Iterator iterator = _processes.iterator(); iterator.hasNext();) - { - ProcessRunner pr = iterator.next(); - - try - { - pr.join(100); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - - if (pr.isDone()) - { - iterator.remove(); - cleanedProcesses++; - } - } - - if (_processes.size() > 0) - { - try - { - log("Sleeping while processes run..."); - Thread.sleep(6000); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - if (processWaits >= 10) - { - log("Killing stale processes."); - - for (Iterator iterator = _processes.iterator(); iterator.hasNext();) - { - iterator.next().abort(); - iterator.remove(); - cleanedProcesses++; - } - } - - processWaits++; - } - - return cleanedProcesses; - } - - /** - * @return a singleton instance of {@link ProcessManager}. - */ - public static ProcessManager getInstance() - { - if (_instance == null) - { - _instance = new ProcessManager(); - } - - return _instance; - } - - /** - * Log a message to developer output. - * @param message - the message to be logged. - */ - private static void log(String message) - { - System.out.println(message); // Is this technically considered logging? - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index d09b71120..95feec423 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -96,7 +96,7 @@ public abstract class Game implements Listener public ArcadeManager Manager; //Game - protected GameType _gameType; + private GameType _gameType; protected String[] _gameDesc; //Map @@ -260,6 +260,9 @@ public abstract class Game implements Listener public String Winner = "Nobody"; public GameTeam WinnerTeam = null; + public boolean EloRanking = false; + public int EloStart = 1000; + public boolean CanAddStats = true; public boolean CanGiveLoot = true; @@ -865,6 +868,18 @@ public abstract class Game implements Listener Scoreboard.SetPlayerTeam(player, "SPEC"); } + @EventHandler + public void eloStart(PlayerLoginEvent event) + { + if (EloRanking) + { + if (Manager.getEloManager().getElo(event.getPlayer().getUniqueId(), GetName()) == -1) + { + Manager.getEloManager().saveElo(event.getPlayer().getUniqueId(), GetName(), EloStart); + } + } + } + @EventHandler public abstract void ScoreboardUpdate(UpdateEvent event); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameTeam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameTeam.java index 20537ec44..87e8f7f6f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameTeam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameTeam.java @@ -4,14 +4,12 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.Set; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; -import mineplex.core.elo.Team; import nautilus.game.arcade.game.GameTeam.PlayerState; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; @@ -23,7 +21,7 @@ import org.bukkit.entity.Creature; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -public class GameTeam implements Team +public class GameTeam { private Game Host; @@ -383,17 +381,4 @@ public class GameTeam implements Team return _places; } - - @Override - public Set getMemberNames() - { - Set memberNames = new HashSet(); - - for (Player player : _players.keySet()) - { - memberNames.add(player.getName()); - } - - return memberNames; - } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/TeamGame.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/TeamGame.java index af0e35cd9..dcc877d8f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/TeamGame.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/TeamGame.java @@ -27,9 +27,6 @@ public abstract class TeamGame extends Game protected NautHashMap RejoinHealth = new NautHashMap(); protected long RejoinTime = 120000; - - // Whether or not this is a Ranked match. - protected boolean Ranked = false; public TeamGame(ArcadeManager manager, GameType gameType, Kit[] kits, String[] gameDesc) { @@ -215,19 +212,6 @@ public abstract class TeamGame extends Game if (player.isOnline()) AddGems(player, 10, "Participation", false, false); } - - // Update and resolve match for ranked games - if (Ranked) - { - if (GetTeamList().size() == 2) // Must have matches of 2 teams for now - { - List teamList = GetTeamList(); - GameTeam loserTeam = (teamList.get(1).equals(WinnerTeam)) ? teamList.get(0) : teamList.get(1); - int gamemode = _gameType.getGameId(); - - Manager.getEloManager().resolveMatch(WinnerTeam, loserTeam, gamemode); // Resolves and updates player ratings. - } - } //End SetState(GameState.End); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java index 713a67f33..59f2f34d4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java @@ -61,6 +61,9 @@ public class ChampionsDominate extends Domination InventoryOpenChest = true; + EloRanking = false; + EloStart = 1000; + this.DisableKillCommand = false; registerStatTrackers( diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java index 891dc238d..cc96c5dad 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java @@ -6,7 +6,6 @@ import java.util.HashMap; - import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.Entity; @@ -22,6 +21,9 @@ import org.bukkit.event.player.PlayerPickupItemEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.elo.EloPlayer; +import mineplex.core.elo.EloTeam; +import mineplex.core.elo.GameResult; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.CombatComponent; @@ -277,6 +279,48 @@ public class Domination extends TeamGame if (player.isOnline()) AddGems(player, 10, "Participation", false, false); } + + if (EloRanking) + { + EloTeam teamWinner = new EloTeam(); + EloTeam teamLoser = new EloTeam(); + + for (GameTeam team : GetTeamList()) + { + if (WinnerTeam != null && team.equals(WinnerTeam)) + { + for (Player player : WinnerTeam.GetPlayers(false)) + { + EloPlayer eloPlayer = new EloPlayer(); + eloPlayer.UniqueId = player.getUniqueId().toString(); + eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + + teamWinner.addPlayer(eloPlayer); + } + } + else + { + for (Player player : team.GetPlayers(false)) + { + EloPlayer eloPlayer = new EloPlayer(); + eloPlayer.UniqueId = player.getUniqueId().toString(); + eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + + teamLoser.addPlayer(eloPlayer); + } + } + } + + for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamWinner, teamLoser, GameResult.Win).getPlayers()) + { + Manager.getEloManager().saveElo(eloPlayer.UniqueId, GetName(), eloPlayer.Rating); + } + + for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamLoser, teamWinner, GameResult.Loss).getPlayers()) + { + Manager.getEloManager().saveElo(eloPlayer.UniqueId, GetName(), eloPlayer.Rating); + } + } //End SetState(GameState.End); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java index f52ec3294..4ea0687be 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java @@ -21,7 +21,9 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; - +import mineplex.core.elo.EloPlayer; +import mineplex.core.elo.EloTeam; +import mineplex.core.elo.GameResult; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.DeathMessageType; @@ -321,6 +323,48 @@ public class TeamDeathmatch extends TeamGame AddGems(player, 10, "Participation", false, false); } + if (EloRanking) + { + EloTeam teamWinner = new EloTeam(); + EloTeam teamLoser = new EloTeam(); + + for (GameTeam team : GetTeamList()) + { + if (WinnerTeam != null && team.equals(WinnerTeam)) + { + for (Player player : WinnerTeam.GetPlayers(false)) + { + EloPlayer eloPlayer = new EloPlayer(); + eloPlayer.UniqueId = player.getUniqueId().toString(); + eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + + teamWinner.addPlayer(eloPlayer); + } + } + else + { + for (Player player : team.GetPlayers(false)) + { + EloPlayer eloPlayer = new EloPlayer(); + eloPlayer.UniqueId = player.getUniqueId().toString(); + eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + + teamLoser.addPlayer(eloPlayer); + } + } + } + + for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamWinner, teamLoser, GameResult.Win).getPlayers()) + { + Manager.getEloManager().saveElo(eloPlayer.UniqueId, GetName(), eloPlayer.Rating); + } + + for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamLoser, teamWinner, GameResult.Loss).getPlayers()) + { + Manager.getEloManager().saveElo(eloPlayer.UniqueId, GetName(), eloPlayer.Rating); + } + } + //End SetState(GameState.End); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java index 451319d92..fe3a858b4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java @@ -1022,8 +1022,7 @@ public class GameLobbyManager implements Listener, IPacketHandler objective.getScore(_serverName).setScore(line--); //ELO - // TODO: Implement GUI based for ELO ranking/ratings? - /*if (Manager.GetGame() != null && Manager.GetGame().EloRanking) + if (Manager.GetGame() != null && Manager.GetGame().EloRanking) { objective.getScore(" ").setScore(line--); objective.getScore(C.cPurple + C.Bold + "Elo").setScore(line--); @@ -1033,7 +1032,7 @@ public class GameLobbyManager implements Listener, IPacketHandler // Set new objective.getScore(Manager.getEloManager().getElo(entry.getKey().getUniqueId(), Manager.GetGame().GetName()) + " ").setScore(line--); - }*/ + } } _oldPlayerCount = UtilServer.getPlayers().length; From 37f1f7eabbe8f24543423f8bf9f7ea4d38e53ebd Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Fri, 1 May 2015 17:46:42 -0500 Subject: [PATCH 047/104] Master Builders changes for chiss --- .../artifacts/Mineplex_Game_Clans_jar.xml | 2 +- .../artifacts/Nautilus_Game_Arcade_jar.xml | 2 +- Plugins/.idea/misc.xml | 3 - .../core/common/util/UtilParticle.java | 113 ++++++++++++------ .../game/arcade/game/games/build/Build.java | 73 +++++++++++ .../arcade/game/games/build/BuildData.java | 7 +- .../game/games/build/gui/OptionsShop.java | 28 +++++ .../games/build/gui/page/OptionsMenu.java | 62 ++++++++++ .../games/build/gui/page/ParticlesPage.java | 86 +++++++++++++ .../game/games/build/gui/page/TimePage.java | 69 +++++++++++ .../games/build/gui/page/WeatherPage.java | 100 ++++++++++++++++ 11 files changed, 503 insertions(+), 42 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/OptionsShop.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsMenu.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java diff --git a/Plugins/.idea/artifacts/Mineplex_Game_Clans_jar.xml b/Plugins/.idea/artifacts/Mineplex_Game_Clans_jar.xml index 85ea6bec4..d88c9bbd4 100644 --- a/Plugins/.idea/artifacts/Mineplex_Game_Clans_jar.xml +++ b/Plugins/.idea/artifacts/Mineplex_Game_Clans_jar.xml @@ -5,7 +5,6 @@ - @@ -18,6 +17,7 @@ + \ No newline at end of file diff --git a/Plugins/.idea/artifacts/Nautilus_Game_Arcade_jar.xml b/Plugins/.idea/artifacts/Nautilus_Game_Arcade_jar.xml index cd4447b88..3f5cae6e4 100644 --- a/Plugins/.idea/artifacts/Nautilus_Game_Arcade_jar.xml +++ b/Plugins/.idea/artifacts/Nautilus_Game_Arcade_jar.xml @@ -17,7 +17,7 @@ - + \ No newline at end of file diff --git a/Plugins/.idea/misc.xml b/Plugins/.idea/misc.xml index d5107f5ca..76fba6e9f 100644 --- a/Plugins/.idea/misc.xml +++ b/Plugins/.idea/misc.xml @@ -10,7 +10,4 @@ - - - \ No newline at end of file diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index 1c42b669e..699b4f48c 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -5,6 +5,7 @@ import java.lang.reflect.Field; import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -12,47 +13,87 @@ public class UtilParticle { public enum ParticleType { - HUGE_EXPLOSION("hugeexplosion"), - LARGE_EXPLODE("largeexplode"), - FIREWORKS_SPARK("fireworksSpark"), - BUBBLE("bubble"), - SUSPEND("suspended"), - DEPTH_SUSPEND("depthSuspend"), - TOWN_AURA("townaura"), - CRIT("crit"), - MAGIC_CRIT("magicCrit"), - MOB_SPELL("mobSpell"), - MOB_SPELL_AMBIENT("mobSpellAmbient"), - SPELL("spell"), - INSTANT_SPELL("instantSpell"), - WITCH_MAGIC("witchMagic"), - NOTE("note"), - PORTAL("portal"), - ENCHANTMENT_TABLE("enchantmenttable"), - EXPLODE("explode"), - FLAME("flame"), - LAVA("lava"), - FOOTSTEP("footstep"), - SPLASH("splash"), - LARGE_SMOKE("largesmoke"), - CLOUD("cloud"), - RED_DUST("reddust"), - SNOWBALL_POOF("snowballpoof"), - DRIP_WATER("dripWater"), - DRIP_LAVA("dripLava"), - DROPLET("droplet"), - SNOW_SHOVEL("snowshovel"), - SLIME("slime"), - HEART("heart"), - ANGRY_VILLAGER("angryVillager"), - HAPPY_VILLAGER("happyVillager"); + // TODO Update material data as well as friendly name + HUGE_EXPLOSION("hugeexplosion", "Huge Explosion", Material.SAPLING, (byte) 0, true), + LARGE_EXPLODE("largeexplode", "Large Explosion", Material.SAPLING, (byte) 0, true), + FIREWORKS_SPARK("fireworksSpark", "Spark", Material.SAPLING, (byte) 0, true), + BUBBLE("bubble", "Bubble", Material.SAPLING, (byte) 0, true), + SUSPEND("suspended", "Suspended", Material.SAPLING, (byte) 0, true), + DEPTH_SUSPEND("depthSuspend", "Depth Suspend", Material.SAPLING, (byte) 0, true), + TOWN_AURA("townaura", "Town Aura", Material.SAPLING, (byte) 0, true), + CRIT("crit", "Critical Hit", Material.SAPLING, (byte) 0, true), + MAGIC_CRIT("magicCrit", "Magic Critical Hit", Material.SAPLING, (byte) 0, true), + MOB_SPELL("mobSpell", "Mob Spell", Material.SAPLING, (byte) 0, true), + MOB_SPELL_AMBIENT("mobSpellAmbient", "Mob Spell Ambient", Material.SAPLING, (byte) 0, true), + SPELL("spell", "Spell", Material.SAPLING, (byte) 0, true), + INSTANT_SPELL("instantSpell", "Instant Spell", Material.SAPLING, (byte) 0, true), + WITCH_MAGIC("witchMagic", "Witch Magic", Material.SAPLING, (byte) 0, true), + NOTE("note", "Note", Material.SAPLING, (byte) 0, true), + PORTAL("portal", "Portal", Material.SAPLING, (byte) 0, true), + ENCHANTMENT_TABLE("enchantmenttable", "Enchantment Table", Material.SAPLING, (byte) 0, true), + EXPLODE("explode", "Explode", Material.SAPLING, (byte) 0, true), + FLAME("flame", "Flame", Material.SAPLING, (byte) 0, true), + LAVA("lava", "Lava", Material.SAPLING, (byte) 0, true), + FOOTSTEP("footstep", "Footstep", Material.SAPLING, (byte) 0, true), + SPLASH("splash", "Splash", Material.SAPLING, (byte) 0, true), + LARGE_SMOKE("largesmoke", "Large Smoke", Material.SAPLING, (byte) 0, true), + CLOUD("cloud", "Cloud", Material.SAPLING, (byte) 0, true), + RED_DUST("reddust", "Red Dust", Material.SAPLING, (byte) 0, true), + SNOWBALL_POOF("snowballpoof", "Snowball Poof", Material.SAPLING, (byte) 0, true), + DRIP_WATER("dripWater", "Drip Water", Material.SAPLING, (byte) 0, true), + DRIP_LAVA("dripLava", "Drip Lava", Material.SAPLING, (byte) 0, true), + DROPLET("droplet", "Droplet", Material.SAPLING, (byte) 0, true), + SNOW_SHOVEL("snowshovel", "Snow Shovel", Material.SAPLING, (byte) 0, true), + SLIME("slime", "Slime", Material.SAPLING, (byte) 0, true), + HEART("heart", "Heart", Material.SAPLING, (byte) 0, true), + ANGRY_VILLAGER("angryVillager", "Angry Villager", Material.SAPLING, (byte) 0, true), + HAPPY_VILLAGER("happyVillager", "Happy Villager", Material.SAPLING, (byte) 0, true); public String particleName; - - ParticleType(String particleName) + private String _friendlyName; + private Material _material; + private byte _data; + private boolean _displayGuis; + + ParticleType(String particleName, String friendlyName, Material material, byte data, boolean displayGuis) { this.particleName = particleName; + _friendlyName = friendlyName; + _material = material; + _data = data; + _displayGuis = displayGuis; } + + public String getFriendlyName() + { + return _friendlyName; + } + + public Material getMaterial() + { + return _material; + } + + public byte getData() + { + return _data; + } + + public boolean shouldDisplayGuis() + { + return _displayGuis; + } + + public static ParticleType getFromFriendlyName(String name) + { + for (ParticleType t : values()) + { + if (t.getFriendlyName().equals(name)) + return t; + } + + return null; + } } public static void PlayParticle(Player player, ParticleType type, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index ea1417dee..b2fa275c2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.build; import java.util.ArrayList; +import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; @@ -22,7 +23,9 @@ import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -52,6 +55,7 @@ import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.events.PlayerPrepareTeleportEvent; import nautilus.game.arcade.game.SoloGame; +import nautilus.game.arcade.game.games.build.gui.OptionsShop; import nautilus.game.arcade.game.games.draw.kits.*; import nautilus.game.arcade.kit.Kit; @@ -70,6 +74,9 @@ public class Build extends SoloGame private String _word = "?"; + private OptionsShop _shop; + private ItemStack _shopItem; + public Build(ArcadeManager manager) { super(manager, GameType.Build, @@ -107,6 +114,9 @@ public class Build extends SoloGame { "Pirate Ship", "Mineshaft", "Archers Tower", "Dinner Table", "Pokemon" }; + + _shop = new OptionsShop(this, getArcadeManager(), getArcadeManager().GetClients(), getArcadeManager().GetDonation()); + _shopItem = ItemStackFactory.Instance.CreateStack(Material.DIAMOND, (byte) 0, 1, C.cGreen + "Options"); } @EventHandler @@ -168,6 +178,9 @@ public class Build extends SoloGame this.InventoryClick = false; UtilTextMiddle.display(null, C.cYellow + "Time Up!", 5, 60, 5); + + for (Player player : GetPlayers(true)) + player.getInventory().clear(8); } } //Pause @@ -356,6 +369,11 @@ public class Build extends SoloGame return BuildQuality.getQuality(score / ((double)GetPlayers(true).size()-1 * 1.5d)); } + public BuildData getBuildData(Player player) + { + return _data.get(player); + } + @EventHandler public void blockPlace(BlockPlaceEvent event) { @@ -624,4 +642,59 @@ public class Build extends SoloGame Scoreboard.Draw(); } + + @EventHandler + public void openShop(PlayerInteractEvent event) + { + if (IsAlive(event.getPlayer()) && _shopItem.equals(event.getPlayer().getItemInHand())) + _shop.attemptShopOpen(event.getPlayer()); + } + + @EventHandler + public void giveItem(UpdateEvent event) + { + if (event.getType() != UpdateType.TWOSEC) return; + + if (IsLive() && _buildGameState == 0) + for (Player player : GetPlayers(true)) + player.getInventory().setItem(8, _shopItem); + } + + @EventHandler + public void stopShopItemMove(InventoryClickEvent event) + { + if (event.getClickedInventory() != null && _shopItem.equals(event.getClickedInventory().getItem(event.getSlot()))) + event.setCancelled(true); + } + + @EventHandler + public void stopShopItemDrop(PlayerDropItemEvent event) + { + if (_shopItem.equals(event.getItemDrop().getItemStack())) + event.setCancelled(true); + } + + @EventHandler + public void placeParticles(PlayerInteractEvent event) + { + if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; + + ItemStack itemInHand = event.getPlayer().getItemInHand(); + if (itemInHand != null && itemInHand.getItemMeta().getDisplayName().startsWith(ChatColor.GREEN + "Place ")) + { + ParticleType particleType = ParticleType.getFromFriendlyName(itemInHand.getItemMeta().getDisplayName().substring(8)); + if (particleType != null) + { + BuildData data = _data.get(event.getPlayer()); + if (data != null) + { + data.Particles.put(event.getPlayer().getLocation(), particleType); + } + } + else + { + System.out.println("Place particles error! This shouldn't happen!"); + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index e007a60d6..b169ef50d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -35,7 +35,7 @@ public class BuildData public int Time = 6000; - public int Weather = 0; + public WeatherType Weather = WeatherType.SUNNY; public NautHashMap Score = new NautHashMap(); @@ -97,4 +97,9 @@ public class BuildData return true; } + + public enum WeatherType + { + SUNNY, RAINING, STORMING; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/OptionsShop.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/OptionsShop.java new file mode 100644 index 000000000..f1d9e43e1 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/OptionsShop.java @@ -0,0 +1,28 @@ +package nautilus.game.arcade.game.games.build.gui; + +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.ShopBase; +import mineplex.core.shop.page.ShopPageBase; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.build.Build; +import nautilus.game.arcade.game.games.build.gui.page.OptionsMenu; + +public class OptionsShop extends ShopBase +{ + private Build _game; + + public OptionsShop(Build game, ArcadeManager plugin, CoreClientManager clientManager, DonationManager donationManager) + { + super(plugin, clientManager, donationManager, "Options"); + _game = game; + } + + @Override + protected ShopPageBase> buildPagesFor(Player player) + { + return new OptionsMenu(_game, getPlugin(), this, getClientManager(), getDonationManager(), player); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsMenu.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsMenu.java new file mode 100644 index 000000000..4025b12ad --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsMenu.java @@ -0,0 +1,62 @@ +package nautilus.game.arcade.game.games.build.gui.page; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; +import mineplex.core.shop.page.ShopPageBase; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.build.Build; +import nautilus.game.arcade.game.games.build.gui.OptionsShop; + +public class OptionsMenu extends ShopPageBase +{ + private Build _game; + + public OptionsMenu(Build game, ArcadeManager plugin, OptionsShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Options", player, 9); + _game = game; + buildPage(); + } + + @Override + protected void buildPage() + { + + ShopItem particles = new ShopItem(Material.NETHER_STAR, "Particles", 0, false); + ShopItem weather = new ShopItem(Material.FEATHER, "Weather", 0, false); + ShopItem time = new ShopItem(Material.WATCH, "Time of Day", 0, false); + + addButton(2, particles, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(player, new ParticlesPage(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + + addButton(4, weather, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(player, new WeatherPage(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + + addButton(6, time, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(player, new TimePage(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java new file mode 100644 index 000000000..fd3bfa24f --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java @@ -0,0 +1,86 @@ +package nautilus.game.arcade.game.games.build.gui.page; + +import java.util.Arrays; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.donation.DonationManager; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; +import mineplex.core.shop.page.ShopPageBase; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.build.Build; +import nautilus.game.arcade.game.games.build.BuildData; +import nautilus.game.arcade.game.games.build.gui.OptionsShop; + +public class ParticlesPage extends ShopPageBase +{ + private Build _game; + + public ParticlesPage(Build game, ArcadeManager plugin, OptionsShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Add Particles", player); + _game = game; + buildPage(); + } + + @Override + protected void buildPage() + { + final BuildData buildData = _game.getBuildData(getPlayer()); + + if (buildData == null) + { + getPlayer().closeInventory(); + return; + } + + int index = 0; + for (final UtilParticle.ParticleType particleType : UtilParticle.ParticleType.values()) + { + if (particleType.shouldDisplayGuis()) + { + ShopItem shopItem = new ShopItem(particleType.getMaterial(), particleType.getFriendlyName(), null, 0, false); + addButton(index, shopItem, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + String[] lore = { ChatColor.GRAY + "Right click to place" }; + ItemStack itemStack = ItemStackFactory.Instance.CreateStack(particleType.getMaterial(), particleType.getData(), 1, ChatColor.GREEN + "Place " + particleType.getFriendlyName(), Arrays.asList(lore)); + player.getInventory().addItem(itemStack); + } + }); + + index++; + } + } + + ShopItem clearButton = new ShopItem(Material.TNT, "Clear Particles", null, 0, false); + addButton(53, clearButton, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + buildData.Particles.clear(); + } + }); + + addButton((9 * 5) + 4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(player, new OptionsMenu(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java new file mode 100644 index 000000000..981d50e2e --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java @@ -0,0 +1,69 @@ +package nautilus.game.arcade.game.games.build.gui.page; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; +import mineplex.core.shop.page.ShopPageBase; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.build.Build; +import nautilus.game.arcade.game.games.build.BuildData; +import nautilus.game.arcade.game.games.build.gui.OptionsShop; + +public class TimePage extends ShopPageBase +{ + private Build _game; + + public TimePage(Build game, ArcadeManager plugin, OptionsShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Set Time", player, 18); + _game = game; + buildPage(); + } + + @Override + protected void buildPage() + { + final BuildData buildData = _game.getBuildData(getPlayer()); + + if (buildData == null) + { + getPlayer().closeInventory(); + return; + } + + for (int i = 0; i < 9; i++) + { + final int ticks = 3000 * i; + boolean am = (ticks >= 0 && ticks < 6000) || (ticks >= 18000); + int time = (6 + (ticks / 1000)) % 12; + if (time == 0) time = 12; + + byte data = (byte) (buildData.Time == ticks ? 5 : 14); + ShopItem item = new ShopItem(Material.STAINED_CLAY, data, time + (am ? " am" : " pm"), null, 0, false, false); + addButton(i, item, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + buildData.Time = ticks; + buildPage(); + } + }); + } + + addButton(9 + 4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(player, new OptionsMenu(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java new file mode 100644 index 000000000..484b3c896 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java @@ -0,0 +1,100 @@ +package nautilus.game.arcade.game.games.build.gui.page; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; +import mineplex.core.shop.page.ShopPageBase; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.build.Build; +import nautilus.game.arcade.game.games.build.BuildData; +import nautilus.game.arcade.game.games.build.gui.OptionsShop; + +public class WeatherPage extends ShopPageBase +{ + private Build _game; + + public WeatherPage(Build game, ArcadeManager plugin, OptionsShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Set Weather", player, 18); + _game = game; + buildPage(); + } + + @Override + protected void buildPage() + { + + final BuildData buildData = _game.getBuildData(getPlayer()); + + if (buildData == null) + { + getPlayer().closeInventory(); + return; + } + + int sunnySlot = 2; + int rainingSlot = 4; + int stormingSlot = 6; + + ShopItem sunny = new ShopItem(Material.DOUBLE_PLANT, "Sunny", 1, false); + ShopItem raining = new ShopItem(Material.WATER_BUCKET, "Raining", 1, false); + ShopItem storming = new ShopItem(Material.BLAZE_ROD, "Storming", 1, false); + + addButton(sunnySlot, sunny, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + buildData.Weather = BuildData.WeatherType.SUNNY; + buildPage(); + } + }); + + addButton(rainingSlot, raining, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + buildData.Weather = BuildData.WeatherType.RAINING; + buildPage(); + } + }); + + addButton(stormingSlot, storming, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + buildData.Weather = BuildData.WeatherType.STORMING; + buildPage(); + } + }); + + switch (buildData.Weather) + { + case RAINING: + addGlow(rainingSlot); + break; + case STORMING: + addGlow(stormingSlot); + break; + default: + addGlow(sunnySlot); + } + + addButton(9 + 4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(player, new OptionsMenu(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + } +} From 244ffece8a6d43cbacd52e6c15f915fe363a8622 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Fri, 1 May 2015 18:02:06 -0500 Subject: [PATCH 048/104] Fixes for build game + fix clans compile --- .../core/common/util/UtilParticle.java | 45 ++++++++++++++++++- .../src/mineplex/game/clans/Clans.java | 4 +- .../game/arcade/game/games/build/Build.java | 2 + .../games/build/gui/page/ParticlesPage.java | 2 +- 4 files changed, 50 insertions(+), 3 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index 0cd02d837..df8cd78a2 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -12,7 +12,7 @@ public class UtilParticle { public enum ParticleType { - ANGRY_VILLAGER("angryVillager"), + ANGRY_VILLAGER("angryVillager", "Angry Villager", Material.SAPLING, (byte) 0), BLOCK_CRACK("blockcrack_1_0") { @@ -117,16 +117,59 @@ public class UtilParticle WITCH_MAGIC("witchMagic"); public String particleName; + private boolean _friendlyData; + private String _friendlyName; + private Material _material; + private byte _data; ParticleType(String particleName) { this.particleName = particleName; + _friendlyData = false; + } + + ParticleType(String particleName, String friendlyName, Material material, byte data) + { + _friendlyData = true; + _friendlyName = friendlyName; + _material = material; + _data = data; } public String getParticle(Material type, int data) { return particleName; } + + public boolean hasFriendlyData() + { + return _friendlyData; + } + + public String getFriendlyName() + { + return _friendlyName; + } + + public Material getMaterial() + { + return _material; + } + + public byte getData() + { + return _data; + } + + public static ParticleType getFromFriendlyName(String name) + { + for (ParticleType type : values()) + { + if (type.hasFriendlyData() && type.getFriendlyName().equals(name)) + return type; + } + return null; + } } private static PacketPlayOutWorldParticles getPacket(String particleName, Location location, float offsetX, float offsetY, diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index 6c61713e8..899cbc101 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -6,6 +6,7 @@ import net.minecraft.server.v1_7_R4.MinecraftServer; import mineplex.core.account.CoreClientManager; import mineplex.core.antihack.AntiHack; import mineplex.core.blockrestore.BlockRestore; +import mineplex.core.chat.Chat; import mineplex.core.command.CommandCenter; import mineplex.core.donation.DonationManager; import mineplex.core.explosion.Explosion; @@ -78,7 +79,8 @@ public class Clans extends JavaPlugin BlockRestore blockRestore = new BlockRestore(this); IgnoreManager ignoreManager = new IgnoreManager(this, _clientManager, preferenceManager, portal); - new MessageManager(this, _clientManager, preferenceManager, ignoreManager, punish, new FriendManager(this, _clientManager, preferenceManager, portal)); + Chat chat = new Chat(this, _clientManager, preferenceManager, serverStatusManager.getCurrentServerName()); + new MessageManager(this, _clientManager, preferenceManager, ignoreManager, punish, new FriendManager(this, _clientManager, preferenceManager, portal), chat); new MemoryFix(this); new Explosion(this, blockRestore); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index 907c717cf..1b607c9aa 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -686,6 +686,8 @@ public class Build extends SoloGame { data.Particles.put(event.getPlayer().getLocation(), particleType); } + + event.setCancelled(true); } else { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java index fd3bfa24f..4afc50e15 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java @@ -46,7 +46,7 @@ public class ParticlesPage extends ShopPageBase int index = 0; for (final UtilParticle.ParticleType particleType : UtilParticle.ParticleType.values()) { - if (particleType.shouldDisplayGuis()) + if (particleType.hasFriendlyData()) { ShopItem shopItem = new ShopItem(particleType.getMaterial(), particleType.getFriendlyName(), null, 0, false); addButton(index, shopItem, new IButton() From e04b61a91dcb7d8055e278eba6beb6d0a63b8ea7 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Fri, 1 May 2015 18:03:56 -0500 Subject: [PATCH 049/104] Give build item when game starts --- .../nautilus/game/arcade/game/games/build/Build.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index 1b607c9aa..826aa9289 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -646,6 +646,16 @@ public class Build extends SoloGame _shop.attemptShopOpen(event.getPlayer()); } + @EventHandler + public void giveItemStart(GameStateChangeEvent event) + { + if (event.GetGame() == this && event.GetState() == GameState.Live) + { + for (Player player : GetPlayers(true)) + player.getInventory().setItem(8, _shopItem); + } + } + @EventHandler public void giveItem(UpdateEvent event) { From 05c91744915f65a026ef3c5a364066ff9002ac9c Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 2 May 2015 14:59:15 +1200 Subject: [PATCH 050/104] Wizards: Prevent using keyboard shortcuts to drop hotbar locked items --- .../src/nautilus/game/arcade/game/games/wizards/Wizards.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 6d8aa6464..b638f8ded 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -1375,7 +1375,7 @@ public class Wizards extends SoloGame @EventHandler public void onItemClick(InventoryClickEvent event) { - int slot = event.getClick().isKeyboardClick() ? event.getHotbarButton() : event.getSlot(); + int slot = event.getClick().isKeyboardClick() && event.getSlot() >= 5 ? event.getHotbarButton() : event.getSlot(); if (slot >= 0 && slot < 5 && (event.getClickedInventory().getType() == InventoryType.PLAYER || event.getClick() == ClickType.NUMBER_KEY)) @@ -1867,7 +1867,7 @@ public class Wizards extends SoloGame @EventHandler public void preventAnvil(InventoryClickEvent event) { - if (event.getView().getTopInventory() != null && event.getView().getTopInventory() instanceof AnvilInventory) + if (event.getView().getTopInventory() instanceof AnvilInventory) { event.setCancelled(true); } From 2902e6075f85adde80aa5b527585c79e88590fd7 Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Fri, 1 May 2015 22:05:03 -0500 Subject: [PATCH 051/104] Fix for n positive bug. --- .../game/arcade/game/games/wizards/spells/SpellImplode.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java index 592e55b16..82859b284 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java @@ -76,6 +76,7 @@ public class SpellImplode extends Spell implements SpellClick public void run() { + if (effectedBlocks.size() > 0) { Block block = effectedBlocks.get(UtilMath.r(effectedBlocks.size())); block.getWorld().playSound(block.getLocation(), From 3e9b64db6627486beacd3ad3dd2cecd0c3202597 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 2 May 2015 15:26:23 +1200 Subject: [PATCH 052/104] Wizards Implode: Don't cast spell if no blocks are effected --- .../game/arcade/game/games/wizards/spells/SpellImplode.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java index 82859b284..9408397d4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java @@ -67,6 +67,11 @@ public class SpellImplode extends Spell implements SpellClick } } + if (effectedBlocks.isEmpty()) + { + return; + } + Collections.shuffle(effectedBlocks); new BukkitRunnable() From efed6e129be54353ca738a83f47572715a8e091e Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 2 May 2015 16:11:57 +1200 Subject: [PATCH 053/104] Wizards: Removed fishing rod from loot, fixed overtime locations not permitted to touch the highest block. --- .../nautilus/game/arcade/game/games/wizards/Wizards.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index b638f8ded..28c2c6ec0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -657,7 +657,6 @@ public class Wizards extends SoloGame _chestLoot.addLoot(Material.WHEAT, 5, 1, 2); _chestLoot.addLoot(Material.WOOD, 5, 1, 10); _chestLoot.addLoot(Material.BOAT, 5, 1, 2); - _chestLoot.addLoot(Material.FISHING_ROD, 3, 1, 1); _chestLoot.addLoot(Material.GOLD_INGOT, 5, 1, 2); _chestLoot.addLoot(Material.IRON_INGOT, 5, 1, 2); @@ -1805,7 +1804,12 @@ public class Wizards extends SoloGame location = WorldData.World.getHighestBlockAt(location).getLocation().add(0.5, 0, 0.5); - if (location.getBlockY() > 0 && location.getBlock().getRelative(BlockFace.DOWN).getType() != Material.AIR) + if (location.getBlock().getType() == Material.AIR) + { + location.add(0, -1, 0); + } + + if (location.getBlockY() > 0 && location.getBlock().getType() != Material.AIR) { return location; } From 9c268786aac1e91912a3d9839138b39f56018347 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 2 May 2015 16:22:59 +1200 Subject: [PATCH 054/104] Wizards: Nerfed lightning strike damage --- .../src/nautilus/game/arcade/game/games/wizards/SpellType.java | 2 +- .../arcade/game/games/wizards/spells/SpellLightningStrike.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java index 9dbf0f330..b0417a29e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java @@ -215,7 +215,7 @@ public enum SpellType // ❤ 0, // Cooldown change per level 10, // Item amount in loot - C.cYellow + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level x 2) + 2", + C.cYellow + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level x 2) + 1", "", diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java index ae1e5e480..cf3b15a7a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java @@ -142,7 +142,7 @@ public class SpellLightningStrike extends Spell implements SpellClick Wizards.getArcadeManager() .GetDamage() .NewDamageEvent((LivingEntity) event.getEntity(), player, null, DamageCause.LIGHTNING, - 4 + (4 * getSpellLevel(player)), false, true, false, "Lightning Strike", "Lightning Strike"); + 2 + (4 * getSpellLevel(player)), false, true, false, "Lightning Strike", "Lightning Strike"); } } } From 8cb94931255134bf2ea1c71fbaf7ebf9ab29f88a Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 2 May 2015 16:39:20 +1200 Subject: [PATCH 055/104] Wizards: Rainbow Road no longer lasts more than 20 seconds, cooldown never decreases --- .../src/nautilus/game/arcade/game/games/wizards/SpellType.java | 2 +- .../game/arcade/game/games/wizards/spells/SpellRainbowRoad.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java index b0417a29e..c72976da6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java @@ -727,7 +727,7 @@ public enum SpellType // ❤ + _spellCooldown - _cooldownChangePerLevel) - * (this == SpellType.Heal ? 1 : wizard.getCooldownModifier()))); + * (this == Heal || this == RainbowRoad ? 1 : wizard.getCooldownModifier()))); } public ItemStack getSpellItem() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java index b968c5ebd..06d20eb1b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRainbowRoad.java @@ -132,7 +132,7 @@ public class SpellRainbowRoad extends Spell implements SpellClick b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WOOL, b.getData()); - _wallExpires.put(b, System.currentTimeMillis() + ((20 + UtilMath.r(10)) * 1000L)); + _wallExpires.put(b, System.currentTimeMillis() + ((14 + UtilMath.r(7)) * 1000L)); playSound = true; } From 08140f88637a9403359e402a5fe9f490b4ad6e74 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 3 May 2015 08:10:25 +1200 Subject: [PATCH 056/104] ResourcePack: Resource pack refused now links to a forum guide --- .../nautilus/game/arcade/ArcadeManager.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 6d1ff9a47..8d8355415 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -42,6 +42,9 @@ import mineplex.core.blockrestore.BlockRestore; import mineplex.core.blood.Blood; import mineplex.core.chat.Chat; import mineplex.core.common.Rank; +import mineplex.core.common.jsonchat.ChildJsonMessage; +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.JsonMessage; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; @@ -346,7 +349,21 @@ public class ArcadeManager extends MiniPlugin implements IRelation { _resourcePackNoResponse.remove(player.getName()); - returnHubNoResPack(player, "You need to accept the resource pack!"); + UtilPlayer.message(player, " "); + JsonMessage message = new JsonMessage("") + .color("gold") + .bold() + .extra("You need to accept the resource pack!\n" + + "Click me for instructions on how to fix this!") + + .click(ClickEvent.OPEN_URL, + + "http://mineplex.com/forums/m/11929946/viewthread/21554536-wizards-resource-pack-help"); + + message.sendToPlayer(player); + UtilPlayer.message(player, " "); + + returnHubNoResPack(player); } else if (response == EnumResourcePackStatus.FAILED_DOWNLOAD) { @@ -1363,15 +1380,20 @@ public class ArcadeManager extends MiniPlugin implements IRelation returnHubNoResPack(player, "You need to be using 1.8 to play " + GetGame().GetName() + "!"); } } - + + private void returnHubNoResPack(Player player) + { + player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); + GetPortal().sendPlayerToServer(player, "Lobby"); + } + private void returnHubNoResPack(Player player, String message) { UtilPlayer.message(player, " "); UtilPlayer.message(player, C.cGold + C.Bold + message); UtilPlayer.message(player, " "); - - player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - GetPortal().sendPlayerToServer(player, "Lobby"); + + returnHubNoResPack(player); } @EventHandler From 6ad09f0adefc61053f697600c9545af7056fb700 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sat, 2 May 2015 22:05:12 -0500 Subject: [PATCH 057/104] Master Builder update --- .../core/common/util/UtilParticle.java | 62 +-- .../game/arcade/game/games/build/Build.java | 466 +++++++++++++++--- .../arcade/game/games/build/BuildData.java | 159 +++++- .../arcade/game/games/build/BuildQuality.java | 13 +- .../games/build/gui/page/ParticlesPage.java | 4 +- 5 files changed, 608 insertions(+), 96 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index df8cd78a2..644b58e31 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -12,7 +12,7 @@ public class UtilParticle { public enum ParticleType { - ANGRY_VILLAGER("angryVillager", "Angry Villager", Material.SAPLING, (byte) 0), + ANGRY_VILLAGER("angryVillager", "Lightning Cloud", Material.INK_SACK, (byte) 11), BLOCK_CRACK("blockcrack_1_0") { @@ -34,33 +34,33 @@ public class UtilParticle BUBBLE("bubble"), - CLOUD("cloud"), + CLOUD("cloud", "White Smoke", Material.INK_SACK, (byte) 7), - CRIT("crit"), + CRIT("crit", "Brown Magic", Material.INK_SACK, (byte) 14), DEPTH_SUSPEND("depthSuspend"), - DRIP_LAVA("dripLava"), + DRIP_LAVA("dripLava", "Lava Drip", Material.LAVA_BUCKET, (byte) 0), - DRIP_WATER("dripWater"), + DRIP_WATER("dripWater", "Water Drop", Material.WATER_BUCKET, (byte) 0), - DROPLET("droplet"), + DROPLET("droplet", "Water Splash", Material.INK_SACK, (byte) 4), - ENCHANTMENT_TABLE("enchantmenttable"), + ENCHANTMENT_TABLE("enchantmenttable", "Enchantment Words", Material.BOOK, (byte) 0), - EXPLODE("explode"), + EXPLODE("explode", "Big White Smoke", Material.INK_SACK, (byte) 15), - FIREWORKS_SPARK("fireworksSpark"), + FIREWORKS_SPARK("fireworksSpark", "White Sparkle", Material.GHAST_TEAR, (byte) 0), - FLAME("flame"), + FLAME("flame", "Flame", Material.BLAZE_POWDER, (byte) 0), - FOOTSTEP("footstep"), + FOOTSTEP("footstep", "Foot Step", Material.LEATHER_BOOTS, (byte) 0), - HAPPY_VILLAGER("happyVillager"), + HAPPY_VILLAGER("happyVillager", "Emerald Sparkle", Material.EMERALD, (byte) 0), - HEART("heart"), + HEART("heart", "Love Heart", Material.APPLE, (byte) 0), - HUGE_EXPLOSION("hugeexplosion"), + HUGE_EXPLOSION("hugeexplosion", "Huge Explosion", Material.TNT, (byte) 0), ICON_CRACK("iconcrack_1_0") { @@ -73,48 +73,48 @@ public class UtilParticle INSTANT_SPELL("instantSpell"), - LARGE_EXPLODE("largeexplode"), + LARGE_EXPLODE("largeexplode", "Explosion", Material.FIREBALL, (byte) 0), - LARGE_SMOKE("largesmoke"), + LARGE_SMOKE("largesmoke", "Black Smoke", Material.INK_SACK, (byte) 0), - LAVA("lava"), + LAVA("lava", "Lava Debris", Material.LAVA, (byte) 0), - MAGIC_CRIT("magicCrit"), + MAGIC_CRIT("magicCrit", "Teal Magic", Material.INK_SACK, (byte) 6), /** * Can be colored if count is 0, color is RGB and depends on the offset of xyz */ - MOB_SPELL("mobSpell"), + MOB_SPELL("mobSpell", "Black Swirls", Material.getMaterial(2263), (byte) 0), /** * Can be colored if count is 0, color is RGB and depends on the offset of xyz */ - MOB_SPELL_AMBIENT("mobSpellAmbient"), + MOB_SPELL_AMBIENT("mobSpellAmbient", "Transparent Black Swirls", Material.getMaterial(2266), (byte) 0), - NOTE("note"), + NOTE("note", "Musical Note", Material.JUKEBOX, (byte) 0), - PORTAL("portal"), + PORTAL("portal", "Portal Effect", Material.INK_SACK, (byte) 5), /** * Can be colored if count is 0, color is RGB and depends on the offset of xyz. Offset y if 0 will default to 1, counter by making it 0.0001 */ - RED_DUST("reddust"), + RED_DUST("reddust", "Red Smoke", Material.INK_SACK, (byte) 1), - SLIME("slime"), + SLIME("slime", "Slime Particles", Material.SLIME_BALL, (byte) 0), - SNOW_SHOVEL("snowshovel"), + SNOW_SHOVEL("snowshovel", "Snow Puffs", Material.SNOW_BALL, (byte) 0), SNOWBALL_POOF("snowballpoof"), - SPELL("spell"), + SPELL("spell", "White Swirls", Material.getMaterial(2264), (byte) 0), SPLASH("splash"), SUSPEND("suspended"), - TOWN_AURA("townaura"), + TOWN_AURA("townaura", "Black Specks", Material.COAL, (byte) 0), - WITCH_MAGIC("witchMagic"); + WITCH_MAGIC("witchMagic", "Purple Magic", Material.INK_SACK, (byte) 13); public String particleName; private boolean _friendlyData; @@ -130,6 +130,7 @@ public class UtilParticle ParticleType(String particleName, String friendlyName, Material material, byte data) { + this.particleName = particleName; _friendlyData = true; _friendlyName = friendlyName; _material = material; @@ -148,6 +149,11 @@ public class UtilParticle public String getFriendlyName() { + if (_friendlyName == null) + { + return toString(); + } + return _friendlyName; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index 826aa9289..03d8080cb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -8,27 +8,48 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; +import org.bukkit.entity.Boat; import org.bukkit.entity.Entity; import org.bukkit.entity.Item; +import org.bukkit.entity.ItemFrame; +import org.bukkit.entity.Minecart; +import org.bukkit.entity.Painting; import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.ThrownPotion; +import org.bukkit.entity.minecart.CommandMinecart; import org.bukkit.entity.minecart.ExplosiveMinecart; +import org.bukkit.entity.minecart.HopperMinecart; +import org.bukkit.entity.minecart.PoweredMinecart; +import org.bukkit.entity.minecart.RideableMinecart; +import org.bukkit.entity.minecart.SpawnerMinecart; +import org.bukkit.entity.minecart.StorageMinecart; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; +import org.bukkit.event.entity.EntityCombustEvent; +import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.entity.ItemDespawnEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.vehicle.VehicleCreateEvent; +import org.bukkit.event.vehicle.VehicleDamageEvent; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; @@ -46,10 +67,12 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.explosion.ExplosionEvent; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; @@ -100,16 +123,18 @@ public class Build extends SoloGame this.BlockBreak = true; this.BlockPlace = true; - + this.ItemDrop = true; this.ItemPickup = true; this.InventoryClick = true; this.WorldTimeSet = 6000; - + this.PrepareFreeze = false; + this.CreatureAllow = true; + _words = new String[] { "Pirate Ship", "Mineshaft", "Archers Tower", "Dinner Table", "Pokemon" @@ -124,6 +149,7 @@ public class Build extends SoloGame { event.GetPlayer().setGameMode(GameMode.CREATIVE); event.GetPlayer().setFlying(true); + event.GetPlayer().setFlySpeed(0.04f); } @EventHandler @@ -146,10 +172,12 @@ public class Build extends SoloGame Location spawn = UtilAlg.findClosest(player.getLocation(), this.GetTeamList().get(0).GetSpawns()); _data.put(player, new BuildData(player, spawn, WorldData.GetDataLocs("YELLOW"))); + + player.setFlySpeed(0.1f); } _word = _words[UtilMath.r(_words.length)]; - + UtilTextMiddle.display(null, C.cYellow + "Build " + C.cWhite + _word, 0, 80, 5); } } @@ -170,13 +198,13 @@ public class Build extends SoloGame { _buildGameState++; _buildStateTime = System.currentTimeMillis(); - + //Flags this.BlockBreak = false; this.BlockPlace = false; this.InventoryClick = false; - + UtilTextMiddle.display(null, C.cYellow + "Time Up!", 0, 60, 5); for (Player player : GetPlayers(true)) @@ -201,33 +229,33 @@ public class Build extends SoloGame { for (Player player : GetPlayers(true)) UtilInv.Clear(player); - + //Verdict if (!_viewData.Judged) { - BuildQuality quality = getQuality(_viewData.getScore()); - + BuildQuality quality = BuildQuality.getQuality(_viewData.getScore()); + if (quality == BuildQuality.Failure) { Manager.GetExplosion().BlockExplosion(_viewData.Blocks, _viewData.Spawn, false); - + //Effects _viewData.Spawn.getWorld().playSound(_viewData.Spawn, Sound.EXPLODE, 3f, 1f); UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, _viewData.Spawn, 4f, 4f, 4f, 0, 10); } - + //Announce Builder UtilTextMiddle.display(quality.getText(), "Built by: " + C.Bold + _viewData.Player.getName(), 0, 80, 5); } - + _viewData.Judged = true; } - + //Start Vote if (UtilTime.elapsed(_buildStateTime, _viewTime) || _viewData == null) { _viewData = null; - + //Get Next View Data for (BuildData data : _data.values()) { @@ -237,7 +265,7 @@ public class Build extends SoloGame break; } } - + //All Builds are Viewed if (_viewData == null) { @@ -252,7 +280,7 @@ public class Build extends SoloGame else { teleportPlayers(_viewData); - + //Give Items for (Player player : GetPlayers(true)) { @@ -265,10 +293,10 @@ public class Build extends SoloGame player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)3, 1, C.Bold + "+4 " + C.cAqua + C.Bold + "Amazing")); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)10, 1, C.Bold + "+5 " + C.cPurple + C.Bold + "WOW! EVERYTHING IS AWESOME!")); } - + //Text UtilTextMiddle.display(null, C.cYellow + "Cast Your Vote!", 0, 60, 5); - + _buildStateTime = System.currentTimeMillis(); } } @@ -306,19 +334,19 @@ public class Build extends SoloGame AddGems(bestPlayer, bestScore, "Build Votes", false, false); - + BuildData data = _data.remove(bestPlayer); - + //Teleport to winner if (first) { teleportPlayers(data); - + first = false; } //Only count if they got above TERRIBLE score - if (getQuality(bestScore) != BuildQuality.Failure) + if (BuildQuality.getQuality(bestScore) != BuildQuality.Failure) places.add(bestPlayer); } @@ -346,14 +374,14 @@ public class Build extends SoloGame private void teleportPlayers(BuildData data) { - //Teleport + //Teleport for (int i=0 ; i Math.max(data.CornerA.getBlockY(), data.CornerB.getBlockY()) + 3) + if (event.getTo().getY() > Math.max(data.CornerA.getBlockY(), data.CornerB.getBlockY()) + 3 && + UtilMath.offset(data.Spawn, event.getFrom()) < UtilMath.offset(data.Spawn, event.getTo())) { //Inform if (Recharge.Instance.use(event.getPlayer(), "Boundary Check", 1000, false, false)) @@ -468,28 +494,28 @@ public class Build extends SoloGame if (_buildGameState != 2) return; - + if (_viewData == null) return; - + if (!IsAlive(event.getPlayer())) return; - + if (!UtilGear.isMat(event.getPlayer().getItemInHand(), Material.STAINED_GLASS_PANE)) return; - + if (!UtilEvent.isAction(event, ActionType.R) && !UtilEvent.isAction(event, ActionType.L)) return; - + if (event.getPlayer().equals(_viewData.Player)) { UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot vote on your own creation!")); return; } - + if (!UtilTime.elapsed(_buildStateTime, 1500)) return; - + switch (event.getPlayer().getItemInHand().getData().getData()) { case 14: @@ -520,18 +546,18 @@ public class Build extends SoloGame break; } } - + @EventHandler public void playerQuit(PlayerQuitEvent event) { _data.remove(event.getPlayer()); - + for (BuildData data : _data.values()) data.removeScore(event.getPlayer()); } @EventHandler - public void clean(UpdateEvent event) + public void cleanTNT(UpdateEvent event) { if (!InProgress()) return; @@ -541,40 +567,38 @@ public class Build extends SoloGame for (Entity ent : this.WorldData.World.getEntities()) { - if (ent instanceof TNTPrimed || - ent instanceof ExplosiveMinecart || - ent instanceof Item) + if (ent instanceof TNTPrimed) { ent.remove(); } } } - + @EventHandler public void potionThrow(ProjectileLaunchEvent event) { if (event.getEntity() instanceof ThrownPotion) event.getEntity().remove(); } - + @EventHandler public void bowShoot(EntityShootBowEvent event) { event.getProjectile().remove(); } - + @EventHandler public void blockFromTo(BlockFromToEvent event) { for (BuildData data : _data.values()) if (data.inBuildArea(event.getToBlock())) return; - + event.setCancelled(true); } - + @EventHandler - public void blockFromTo(BlockPistonExtendEvent event) + public void pistonExtend(BlockPistonExtendEvent event) { for (BuildData data : _data.values()) for (Block block : event.getBlocks()) @@ -584,9 +608,9 @@ public class Build extends SoloGame return; } } - + @EventHandler - public void blockFromTo(BlockPistonRetractEvent event) + public void pistonRetract(BlockPistonRetractEvent event) { for (BuildData data : _data.values()) if (!data.inBuildArea(event.getBlock())) @@ -595,6 +619,255 @@ public class Build extends SoloGame return; } } + + @EventHandler + public void entityCombust(EntityCombustEvent event) + { + event.setCancelled(true); + } + + @EventHandler + public void itemClean(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + for (BuildData data : _data.values()) + { + data.clean(); + } + + for (Entity ent : this.WorldData.World.getEntities()) + { + if (!(ent instanceof Item)) + continue; + + boolean isPlacedItem = false; + for (BuildData data : _data.values()) + { + if (data.Items.contains(ent)) + { + isPlacedItem = true; + break; + } + } + + if (!isPlacedItem) + ent.remove(); + } + } + + @EventHandler + public void itemDrop(PlayerDropItemEvent event) + { + BuildData data = _data.get(event.getPlayer()); + + if (data == null) + { + event.setCancelled(true); + return; + } + + data.addItem(event.getItemDrop()); + } + + @EventHandler + public void itemPickup(PlayerPickupItemEvent event) + { + event.setCancelled(true); + + BuildData data = _data.get(event.getPlayer()); + + if (data == null) + return; + + if (data.Player.equals(event.getPlayer())) + { + event.getItem().remove(); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.getItem().getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1); + } + } + + @EventHandler + public void itemExpire(ItemDespawnEvent event) + { + for (BuildData data : _data.values()) + { + if (data.Items.contains(event.getEntity())) + { + event.setCancelled(true); + return; + } + } + } + + @EventHandler + public void dataClean(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + for (BuildData data : _data.values()) + { + data.clean(); + } + } + + @EventHandler + public void entSpawn(CreatureSpawnEvent event) + { + if (event.getSpawnReason() != SpawnReason.SPAWNER_EGG) + { + event.setCancelled(true); + return; + } + + Player bestPlayer = null; + double bestDist = 0; + + for (Player player : GetPlayers(true)) + { + double dist = UtilMath.offset(event.getLocation(), player.getLocation()); + + if (bestPlayer == null || dist < bestDist) + { + bestPlayer = player; + bestDist = dist; + } + } + + if (bestPlayer == null) + { + event.setCancelled(true); + return; + } + + + BuildData data = _data.get(bestPlayer); + + if (data == null) + { + event.setCancelled(true); + return; + } + + //Not in area + if (!inBuildArea(data, event.getLocation().getBlock())) + { + event.setCancelled(true); + } + + //Maxed + else if (!data.addEntity(event.getEntity())) + { + event.setCancelled(true); + } + } + + @EventHandler + public void entKill(CustomDamageEvent event) + { + if (event.GetDamagerPlayer(false) == null) + return; + + BuildData data = _data.get(event.GetDamagerPlayer(false)); + + if (data == null) + return; + + data.removeEntity(event.GetDamageeEntity()); + } + + @EventHandler + public void entKill(PlayerInteractEntityEvent event) + { + BuildData data = _data.get(event.getPlayer()); + + if (data == null) + return; + + data.removeEntity(event.getRightClicked()); + } + + @EventHandler + public void vehicleSpawn(VehicleCreateEvent event) + { + if (event.getVehicle() instanceof Boat || + event.getVehicle() instanceof Minecart || + event.getVehicle() instanceof ExplosiveMinecart || + event.getVehicle() instanceof HopperMinecart || + event.getVehicle() instanceof CommandMinecart || + event.getVehicle() instanceof StorageMinecart || + event.getVehicle() instanceof SpawnerMinecart || + event.getVehicle() instanceof PoweredMinecart || + event.getVehicle() instanceof RideableMinecart || + event.getVehicle() instanceof Painting || + event.getVehicle() instanceof ItemFrame) + { + Player bestPlayer = null; + double bestDist = 0; + + for (Player player : GetPlayers(true)) + { + double dist = UtilMath.offset(event.getVehicle().getLocation(), player.getLocation()); + + if (bestPlayer == null || dist < bestDist) + { + bestPlayer = player; + bestDist = dist; + } + } + + if (bestPlayer == null) + { + event.getVehicle().remove(); + return; + } + + + BuildData data = _data.get(bestPlayer); + + if (data == null) + { + event.getVehicle().remove(); + return; + } + + //Not in area + if (!inBuildArea(data, event.getVehicle().getLocation().getBlock())) + { + event.getVehicle().remove(); + } + + //Maxed + else if (!data.addEntity(event.getVehicle())) + { + event.getVehicle().remove(); + } + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void vehicleDamage(VehicleDamageEvent event) + { + if (_buildGameState != 0 || event.getAttacker() == null || !(event.getAttacker() instanceof Player)) + { + event.setCancelled(true); + return; + } + + Player player = (Player)event.getAttacker(); + + BuildData data = _data.get(player); + + if (data == null) + { + event.setCancelled(true); + return; + } + + data.removeEntity(event.getVehicle()); + } @Override @EventHandler @@ -625,13 +898,23 @@ public class Build extends SoloGame { Scoreboard.Write(C.cYellow + C.Bold + "Vote Time"); Scoreboard.Write(UtilTime.MakeStr(Math.max(0, _voteTime - (System.currentTimeMillis() - _buildStateTime)), 1)); - + if (_viewData != null) { Scoreboard.WriteBlank(); - - Scoreboard.Write(C.cYellow + C.Bold + "Votes Cast"); + + Scoreboard.Write(C.cYellow + C.Bold + "Debug Voted"); Scoreboard.Write(_viewData.Score.size() + " / " + (GetPlayers(true).size()-1)); + + Scoreboard.WriteBlank(); + + Scoreboard.Write(C.cYellow + C.Bold + "Debug Avg"); + Scoreboard.Write(UtilMath.trim(2, _viewData.getScore()) + ""); + + Scoreboard.WriteBlank(); + + Scoreboard.Write(C.cYellow + C.Bold + "Debug Rating"); + Scoreboard.Write(BuildQuality.getQuality(_viewData.getScore()) + ""); } } @@ -639,6 +922,13 @@ public class Build extends SoloGame Scoreboard.Draw(); } + @EventHandler + public void disableInteraction(PlayerInteractEvent event) + { + if (_buildGameState != 0 && IsLive()) + event.setCancelled(true); + } + @EventHandler public void openShop(PlayerInteractEvent event) { @@ -659,7 +949,8 @@ public class Build extends SoloGame @EventHandler public void giveItem(UpdateEvent event) { - if (event.getType() != UpdateType.TWOSEC) return; + if (event.getType() != UpdateType.FAST) + return; if (IsLive() && _buildGameState == 0) for (Player player : GetPlayers(true)) @@ -683,18 +974,25 @@ public class Build extends SoloGame @EventHandler public void placeParticles(PlayerInteractEvent event) { - if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; + if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; ItemStack itemInHand = event.getPlayer().getItemInHand(); - if (itemInHand != null && itemInHand.getItemMeta().getDisplayName().startsWith(ChatColor.GREEN + "Place ")) + + if (itemInHand != null && + itemInHand.getItemMeta() != null && + itemInHand.getItemMeta().getDisplayName() != null && + itemInHand.getItemMeta().getDisplayName().startsWith(ChatColor.GREEN + "Place ")) { ParticleType particleType = ParticleType.getFromFriendlyName(itemInHand.getItemMeta().getDisplayName().substring(8)); + if (particleType != null) { BuildData data = _data.get(event.getPlayer()); + if (data != null) { - data.Particles.put(event.getPlayer().getLocation(), particleType); + data.addParticles(particleType); } event.setCancelled(true); @@ -705,4 +1003,54 @@ public class Build extends SoloGame } } } + + @EventHandler + public void playParticles(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + if (_viewData != null) + { + _viewData.playParticles(true); + } + else + { + for (BuildData data : _data.values()) + { + data.playParticles(false); + } + } + } + + @EventHandler + public void setWeather(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + if (_viewData != null) + { + _viewData.playWeather(true); + } + else + { + for (BuildData data : _data.values()) + { + data.playWeather(false); + } + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void explode(ExplosionEvent event) + { + event.GetBlocks().clear(); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void explode(EntityExplodeEvent event) + { + event.blockList().clear(); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index b169ef50d..981d35c08 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -2,19 +2,25 @@ package nautilus.game.arcade.game.games.build; import java.util.ArrayList; import java.util.HashSet; +import java.util.Iterator; import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import org.bukkit.Location; +import org.bukkit.WeatherType; import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.entity.Entity; +import org.bukkit.entity.Ghast; +import org.bukkit.entity.Item; import org.bukkit.entity.Player; +import org.bukkit.inventory.meta.ItemMeta; public class BuildData { @@ -31,6 +37,8 @@ public class BuildData public HashSet Entities = new HashSet(); + public HashSet Items = new HashSet(); + public NautHashMap Particles = new NautHashMap(); public int Time = 6000; @@ -50,6 +58,79 @@ public class BuildData buildBorders.remove(CornerB); } + public boolean addItem(Item item) + { + if (Items.size() >= 16) + { + UtilPlayer.message(Player, F.main("Game", "You cannot drop more than 16 Items!")); + item.remove(); + return false; + } + + Items.add(item); + + ItemMeta meta = item.getItemStack().getItemMeta(); + meta.setDisplayName(item.getUniqueId() + " NoStack"); + item.getItemStack().setItemMeta(meta); + return true; + } + + public boolean addParticles(ParticleType particleType) + { + if (Particles.size() >= 24) + { + UtilPlayer.message(Player, F.main("Game", "You cannot spawn more than 24 Particles!")); + return false; + } + + Particles.put(Player.getEyeLocation().add(Player.getLocation().getDirection()), particleType); + + UtilPlayer.message(Player, F.main("Game", "You placed " + particleType.getFriendlyName() + "!")); + + return true; + } + + public void resetParticles() + { + Particles.clear(); + + UtilPlayer.message(Player, F.main("Game", "You cleared your Particles!")); + } + + public boolean addEntity(Entity entity) + { + if (entity instanceof Ghast) + { + UtilPlayer.message(Player, F.main("Game", "You cannot spawn Ghasts!")); + + entity.remove(); + return false; + } + + if (Entities.size() >= 16) + { + UtilPlayer.message(Player, F.main("Game", "You cannot spawn more than 16 Entities!")); + + entity.remove(); + return false; + } + + Entities.add(entity); + UtilEnt.Vegetate(entity, true); + UtilEnt.ghost(entity, true, false); + return true; + } + + public void removeEntity(Entity entity) + { + if (Entities.remove(entity)) + { + entity.remove(); + + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, entity.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1); + } + } + public void addBlock(Block block) { Blocks.add(block); @@ -67,6 +148,9 @@ public class BuildData public double getScore() { + if (Score.isEmpty()) + return -1; + double score = 0; for (int i : Score.values()) @@ -102,4 +186,75 @@ public class BuildData { SUNNY, RAINING, STORMING; } + + public void clean() + { + //Clean Ents + Iterator entIter = Entities.iterator(); + + while (entIter.hasNext()) + { + Entity ent = entIter.next(); + if (!ent.isValid() || !inBuildArea(ent.getLocation().getBlock())) + { + entIter.remove(); + ent.remove(); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, ent.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1); + } + + } + + //Clean Items + Iterator itemIter = Items.iterator(); + + while (itemIter.hasNext()) + { + Entity ent = itemIter.next(); + if (!ent.isValid() || !inBuildArea(ent.getLocation().getBlock())) + { + itemIter.remove(); + ent.remove(); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, ent.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1); + } + } + } + + public void playParticles(boolean all) + { + for (Location loc : Particles.keySet()) + { + int amount = 8; + + ParticleType type = Particles.get(loc); + + if (type == ParticleType.HUGE_EXPLOSION || + type == ParticleType.LARGE_EXPLODE || + type == ParticleType.NOTE) + amount = 1; + + if (all) + UtilParticle.PlayParticle(type, loc, 0.4f, 0.4f, 0.4f, 0, amount); + else + UtilParticle.PlayParticle(Player, type, loc, 0.4f, 0.4f, 0.4f, 0, amount); + } + } + + public void playWeather(boolean b) + { + org.bukkit.WeatherType type = org.bukkit.WeatherType.CLEAR; + if (Weather == WeatherType.STORMING || Weather == WeatherType.RAINING) + type = org.bukkit.WeatherType.DOWNFALL; + + if (b) + { + for (Player player : UtilServer.getPlayers()) + player.setPlayerWeather(type); + + } + else + { + Player.setPlayerWeather(type); + } + } + } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java index 7b5d2b218..3cb6e5715 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java @@ -4,6 +4,8 @@ import mineplex.core.common.util.C; public enum BuildQuality { + NoVotes(C.cGray + "No Votes"), + Mindblowing(C.cAqua + "Mindblowing"), Amazing(C.cGreen + "Amazing"), Good(C.cYellow + "Good"), @@ -22,12 +24,13 @@ public enum BuildQuality return _text; } - public static BuildQuality getQuality(double score) + public static BuildQuality getQuality(double avgScore) { - if (score <= 0.25) return Failure; - if (score <= 0.50) return Satisfactory; - if (score <= 0.70) return Good; - if (score <= 0.95) return Amazing; + if (avgScore < 0) return NoVotes; + if (avgScore <= 1) return Failure; + if (avgScore <= 2) return Satisfactory; + if (avgScore <= 3) return Good; + if (avgScore <= 4) return Amazing; return Mindblowing; } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java index 4afc50e15..ed4d99a2b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java @@ -48,7 +48,7 @@ public class ParticlesPage extends ShopPageBase { if (particleType.hasFriendlyData()) { - ShopItem shopItem = new ShopItem(particleType.getMaterial(), particleType.getFriendlyName(), null, 0, false); + ShopItem shopItem = new ShopItem(particleType.getMaterial(), particleType.getData(), particleType.getFriendlyName(), null, 0, false, false); addButton(index, shopItem, new IButton() { @Override @@ -70,7 +70,7 @@ public class ParticlesPage extends ShopPageBase @Override public void onClick(Player player, ClickType clickType) { - buildData.Particles.clear(); + buildData.resetParticles(); } }); From 122dbad45c67bcf5471a32759c692ca6ff621ddf Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sat, 2 May 2015 22:26:03 -0500 Subject: [PATCH 058/104] added time setting and framework for lightning strikes --- .../arcade/game/games/build/BuildData.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index 981d35c08..dc1c5c25b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -7,6 +7,7 @@ import java.util.Iterator; import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; @@ -14,6 +15,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import org.bukkit.Location; +import org.bukkit.Sound; import org.bukkit.WeatherType; import org.bukkit.block.Block; import org.bukkit.entity.Entity; @@ -248,8 +250,9 @@ public class BuildData if (b) { for (Player player : UtilServer.getPlayers()) - player.setPlayerWeather(type); - + { + playWeather(player, type); + } } else { @@ -257,4 +260,22 @@ public class BuildData } } + public void playWeather(Player player, org.bukkit.WeatherType type) + { + player.setPlayerWeather(type); + player.setPlayerTime(Time, false); + + if (Weather == WeatherType.STORMING) + { + if (Math.random() > 0.7) + player.playSound(player.getLocation(), Sound.AMBIENCE_THUNDER, 4f, 1f); + + //Strike Lightning Here + if (Math.random() > 0.9) + UtilBlock.getHighest(player.getWorld(), + (int)(Spawn.getX() + Math.random() * 200 - 100), + (int)(Spawn.getX() + Math.random() * 200 - 100)); + } + } + } From 9c08e5760246a976147d74394be63f40c0704ae6 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sat, 2 May 2015 22:45:14 -0500 Subject: [PATCH 059/104] fixed NPE --- .../src/nautilus/game/arcade/game/games/build/Build.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index 03d8080cb..adea58b07 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -629,6 +629,9 @@ public class Build extends SoloGame @EventHandler public void itemClean(UpdateEvent event) { + if (!InProgress()) + return; + if (event.getType() != UpdateType.FAST) return; From 11b36e6b4418fa9002a15c4983ee5d9f388b5361 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sat, 2 May 2015 22:50:27 -0500 Subject: [PATCH 060/104] [Build] Show message to players to open inventory until they click something in their inventory --- .../game/arcade/game/games/build/Build.java | 33 ++++++++++++++++++- .../arcade/game/games/build/BuildData.java | 3 ++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index adea58b07..be21d3839 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -37,7 +37,6 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.entity.ItemDespawnEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.event.inventory.InventoryClickEvent; @@ -65,6 +64,7 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTextBottom; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.explosion.ExplosionEvent; @@ -1044,6 +1044,37 @@ public class Build extends SoloGame } } } + + @EventHandler + public void clickInventory(InventoryClickEvent event) + { + if (event.getWhoClicked() instanceof Player) + { + Player player = ((Player) event.getWhoClicked()); + + if (IsLive() && IsAlive(player)) + { + BuildData buildData = _data.get(player); + if (buildData != null) + buildData.ClickedInventory = true; + } + } + } + + @EventHandler + public void showOpenInventory(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) return; + + for (Player player : GetPlayers(true)) + { + BuildData buildData = _data.get(player); + if (buildData != null && !buildData.ClickedInventory) + { + UtilTextBottom.display(C.cYellow + "Open Inventory to get Blocks!", player); + } + } + } @EventHandler(priority = EventPriority.LOWEST) public void explode(ExplosionEvent event) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index dc1c5c25b..6d659046e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -44,6 +44,9 @@ public class BuildData public NautHashMap Particles = new NautHashMap(); public int Time = 6000; + + // This is used to show the player to use their inventory to grab items + public boolean ClickedInventory = false; public WeatherType Weather = WeatherType.SUNNY; From 3fcec13e68f1b120ce07cde30f53e87d18066b2a Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Mon, 4 May 2015 04:09:49 +1200 Subject: [PATCH 061/104] Wizards: Melee with wands should say it was wands that did it --- .../arcade/game/games/wizards/Wizards.java | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 28c2c6ec0..26827c851 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -35,7 +35,6 @@ import mineplex.core.packethandler.IPacketHandler; import mineplex.core.packethandler.PacketInfo; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import mineplex.minecraft.game.core.combat.CombatManager.AttackReason; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.explosion.CustomExplosion; import nautilus.game.arcade.ArcadeManager; @@ -178,7 +177,7 @@ public class Wizards extends SoloGame } Manager.getCosmeticManager().setHideParticles(true); - Manager.GetDamage().GetCombatManager().setUseWeaponName(AttackReason.DefaultWeaponName); + // Manager.GetDamage().GetCombatManager().setUseWeaponName(AttackReason.DefaultWeaponName); createLoot(); @@ -307,6 +306,31 @@ public class Wizards extends SoloGame } } + @EventHandler + public void onWandHit(CustomDamageEvent event) + { + // Damager is ENTITY + if (event.GetDamagerEntity(true) != null) + { + if (event.GetReason() == null) + { + if (event.GetDamagerPlayer(false) != null) + { + Player damager = event.GetDamagerPlayer(false); + + if (damager.getInventory().getHeldItemSlot() < 5) + { + Wizard wizard = getWizard(damager); + + String reason = damager.getInventory().getHeldItemSlot() < wizard.getWandsOwned() ? "Wand" : "Fist"; + + event.AddMod(reason, reason, 0, true); + } + } + } + } + } + @EventHandler public void onDamage(CustomDamageEvent event) { @@ -1587,7 +1611,7 @@ public class Wizards extends SoloGame UtilPlayer.message(event.getViewers().get(0), C.cRed + "You may not craft weapons"); } - else if (mat == Material.STICK || mat.name().contains("_HOE")) + else if (mat == Material.STICK || mat == Material.BUCKET || mat.name().contains("_HOE")) { event.getInventory().setResult(new ItemStack(Material.AIR)); From b58bef1bd8b12c9c1c7a264a7e1526ba9bf40d0e Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Mon, 4 May 2015 04:13:23 +1200 Subject: [PATCH 062/104] ResourcePack: Lengthen timeout from 10 seconds to 20 seconds --- .../src/nautilus/game/arcade/ArcadeManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 8d8355415..8c69eddb5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -1337,7 +1337,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation { Entry entry = itel.next(); - if (UtilTime.elapsed(entry.getValue(), 10000)) + if (UtilTime.elapsed(entry.getValue(), 20000)) { Player player = Bukkit.getPlayerExact(entry.getKey()); From ff6da92fb7723ea6aef2aeda89608cbbfeb96517 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 3 May 2015 14:41:09 -0500 Subject: [PATCH 063/104] Some Build world, support for far rendered particles --- .../v1_7_R4/PacketPlayOutWorldParticles.java | 175 ++++++++++++++++++ .../core/common/util/UtilParticle.java | 68 ++----- .../game/arcade/game/games/build/Build.java | 30 ++- .../arcade/game/games/build/gui/MobShop.java | 54 ++++++ .../game/games/build/gui/OptionsShop.java | 4 +- .../game/games/build/gui/page/MobPage.java | 32 ++++ .../{OptionsMenu.java => OptionsPage.java} | 4 +- .../games/build/gui/page/ParticlesPage.java | 2 +- .../game/games/build/gui/page/TimePage.java | 2 +- .../games/build/gui/page/WeatherPage.java | 2 +- 10 files changed, 313 insertions(+), 60 deletions(-) create mode 100644 Plugins/Classpath.Dummy/src/net/minecraft/server/v1_7_R4/PacketPlayOutWorldParticles.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/MobShop.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/{OptionsMenu.java => OptionsPage.java} (93%) diff --git a/Plugins/Classpath.Dummy/src/net/minecraft/server/v1_7_R4/PacketPlayOutWorldParticles.java b/Plugins/Classpath.Dummy/src/net/minecraft/server/v1_7_R4/PacketPlayOutWorldParticles.java new file mode 100644 index 000000000..7feb8c60b --- /dev/null +++ b/Plugins/Classpath.Dummy/src/net/minecraft/server/v1_7_R4/PacketPlayOutWorldParticles.java @@ -0,0 +1,175 @@ +package net.minecraft.server.v1_7_R4; + +import java.io.IOException; +import java.util.HashMap; +import net.minecraft.server.v1_7_R4.Packet; +import net.minecraft.server.v1_7_R4.PacketDataSerializer; +import net.minecraft.server.v1_7_R4.PacketListener; +import net.minecraft.server.v1_7_R4.PacketPlayOutListener; + +public class PacketPlayOutWorldParticles extends Packet { + private String a; + private float b; + private float c; + private float d; + private float e; + private float f; + private float g; + private float h; + private int i; + private boolean _displayFar; + + public PacketPlayOutWorldParticles() { + } + + public PacketPlayOutWorldParticles(String s, float f, float f1, float f2, float f3, float f4, float f5, float f6, int i, boolean displayFar) { + this.a = s; + this.b = f; + this.c = f1; + this.d = f2; + this.e = f3; + this.f = f4; + this.g = f5; + this.h = f6; + this.i = i; + + _displayFar = displayFar; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(64); + this.b = packetdataserializer.readFloat(); + this.c = packetdataserializer.readFloat(); + this.d = packetdataserializer.readFloat(); + this.e = packetdataserializer.readFloat(); + this.f = packetdataserializer.readFloat(); + this.g = packetdataserializer.readFloat(); + this.h = packetdataserializer.readFloat(); + this.i = packetdataserializer.readInt(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + String[] parts = this.a.split("_"); + PacketPlayOutWorldParticles.Particle particle = PacketPlayOutWorldParticles.Particle.find(parts[0]); + if(particle == null) { + particle = PacketPlayOutWorldParticles.Particle.CRIT; + } + + if(packetdataserializer.version < 17) { + packetdataserializer.a(this.a); + } else { + packetdataserializer.writeInt(particle.ordinal()); + packetdataserializer.writeBoolean(_displayFar); + } + + packetdataserializer.writeFloat(this.b); + packetdataserializer.writeFloat(this.c); + packetdataserializer.writeFloat(this.d); + packetdataserializer.writeFloat(this.e); + packetdataserializer.writeFloat(this.f); + packetdataserializer.writeFloat(this.g); + packetdataserializer.writeFloat(this.h); + packetdataserializer.writeInt(this.i); + if(packetdataserializer.version >= 17) { + for(int i = 0; i < particle.extra; ++i) { + int toWrite = 0; + if(parts.length - 1 > i) { + try { + toWrite = Integer.parseInt(parts[i + 1]); + if(particle.extra == 1 && parts.length == 3) { + ++i; + toWrite |= Integer.parseInt(parts[i + 1]) << 12; + } + } catch (NumberFormatException var7) { + ; + } + } + + packetdataserializer.b(toWrite); + } + } + + } + + public void a(PacketPlayOutListener packetplayoutlistener) { + packetplayoutlistener.a(this); + } + + public void handle(PacketListener packetlistener) { + this.a((PacketPlayOutListener)packetlistener); + } + + private static enum Particle { + EXPLOSION_NORMAL("explode"), + EXPLOSION_LARGE("largeexplode"), + EXPLOSION_HUGE("hugeexplosion"), + FIREWORKS_SPARK("fireworksSpark"), + WATER_BUBBLE("bubble"), + WATER_SPLASH("splash"), + WATER_WAKE("wake"), + SUSPENDED("suspended"), + SUSPENDED_DEPTH("depthsuspend"), + CRIT("crit"), + CRIT_MAGIC("magicCrit"), + SMOKE_NORMAL("smoke"), + SMOKE_LARGE("largesmoke"), + SPELL("spell"), + SPELL_INSTANT("instantSpell"), + SPELL_MOB("mobSpell"), + SPELL_MOB_AMBIENT("mobSpellAmbient"), + SPELL_WITCH("witchMagic"), + DRIP_WATER("dripWater"), + DRIP_LAVA("dripLava"), + VILLAGER_ANGRY("angryVillager"), + VILLAGER_HAPPY("happyVillager"), + TOWN_AURA("townaura"), + NOTE("note"), + PORTAL("portal"), + ENCHANTMENT_TABLE("enchantmenttable"), + FLAME("flame"), + LAVA("lava"), + FOOTSTEP("footstep"), + CLOUD("cloud"), + REDSTONE("reddust"), + SNOWBALL("snowballpoof"), + SNOW_SHOVEL("snowshovel"), + SLIME("slime"), + HEART("heart"), + BARRIER("barrier"), + ICON_CRACK("iconcrack", 2), + BLOCK_CRACK("blockcrack", 1), + BLOCK_DUST("blockdust", 1), + WATER_DROP("droplet"), + ITEM_TAKE("take"), + MOB_APPEARANCE("mobappearance"); + + public final String name; + public final int extra; + private static final HashMap particleMap; + + private Particle(String name) { + this(name, 0); + } + + private Particle(String name, int extra) { + this.name = name; + this.extra = extra; + } + + public static PacketPlayOutWorldParticles.Particle find(String part) { + return (PacketPlayOutWorldParticles.Particle)particleMap.get(part); + } + + static { + particleMap = new HashMap(); + PacketPlayOutWorldParticles.Particle[] var0 = values(); + int var1 = var0.length; + + for(int var2 = 0; var2 < var1; ++var2) { + PacketPlayOutWorldParticles.Particle particle = var0[var2]; + particleMap.put(particle.name, particle); + } + + } + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index 644b58e31..9fa2394b2 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -179,54 +179,10 @@ public class UtilParticle } private static PacketPlayOutWorldParticles getPacket(String particleName, Location location, float offsetX, float offsetY, - float offsetZ, float speed, int count) + float offsetZ, float speed, int count, boolean displayFar) { - PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(); - - for (Field field : packet.getClass().getDeclaredFields()) - { - try - { - field.setAccessible(true); - String fieldName = field.getName(); - switch (fieldName) - { - case "a": - field.set(packet, particleName); // Particle name - break; - case "b": - field.setFloat(packet, (float) location.getX()); // Block X - break; - case "c": - field.setFloat(packet, (float) location.getY()); // Block Y - break; - case "d": - field.setFloat(packet, (float) location.getZ()); // Block Z - break; - case "e": - field.setFloat(packet, offsetX); // Random X Offset - break; - case "f": - field.setFloat(packet, offsetY); // Random Y Offset - break; - case "g": - field.setFloat(packet, offsetZ); // Random Z Offset - break; - case "h": - field.setFloat(packet, speed); // Speed/data of particles - break; - case "i": - field.setInt(packet, count); // Amount of particles - break; - } - } - catch (Exception e) - { - System.out.println(e.getMessage()); - } - } - + PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(particleName, (float) location.getX(), (float) location.getY(), (float) location.getZ(), offsetX, offsetY, offsetZ, speed, count, displayFar); return packet; } @@ -242,10 +198,22 @@ public class UtilParticle PlayParticle(player, type.particleName, location, offsetX, offsetY, offsetZ, speed, count); } - public static void PlayParticle(Player player, String particleName, Location location, float offsetX, float offsetY, - float offsetZ, float speed, int count) + public static void PlayParticle(Player player, ParticleType type, Location location, float offsetX, float offsetY, + float offsetZ, float speed, int count, boolean displayFar) { - PacketPlayOutWorldParticles packet = getPacket(particleName, location, offsetX, offsetY, offsetZ, speed, count); + PlayParticle(player, type.particleName, location, offsetX, offsetY, offsetZ, speed, count, displayFar); + } + + public static void PlayParticle(Player player, String particleName, Location location, float offsetX, float offsetY, + float offsetZ, float speed, int count) + { + PlayParticle(player, particleName, location, offsetX, offsetY, offsetZ, speed, count, false); + } + + public static void PlayParticle(Player player, String particleName, Location location, float offsetX, float offsetY, + float offsetZ, float speed, int count, boolean displayFar) + { + PacketPlayOutWorldParticles packet = getPacket(particleName, location, offsetX, offsetY, offsetZ, speed, count, false); UtilPlayer.sendPacket(player, packet); } @@ -253,7 +221,7 @@ public class UtilParticle public static void PlayParticle(String particleName, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count) { - PacketPlayOutWorldParticles packet = getPacket(particleName, location, offsetX, offsetY, offsetZ, speed, count); + PacketPlayOutWorldParticles packet = getPacket(particleName, location, offsetX, offsetY, offsetZ, speed, count, true); for (Player player : UtilServer.getPlayers()) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index be21d3839..b09552558 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -78,6 +78,7 @@ import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.events.PlayerPrepareTeleportEvent; import nautilus.game.arcade.game.SoloGame; +import nautilus.game.arcade.game.games.build.gui.MobShop; import nautilus.game.arcade.game.games.build.gui.OptionsShop; import nautilus.game.arcade.game.games.draw.kits.*; import nautilus.game.arcade.kit.Kit; @@ -97,7 +98,8 @@ public class Build extends SoloGame private String _word = "?"; - private OptionsShop _shop; + private OptionsShop _optionsShop; + private MobShop _mobShop; private ItemStack _shopItem; public Build(ArcadeManager manager) @@ -140,7 +142,8 @@ public class Build extends SoloGame "Pirate Ship", "Mineshaft", "Archers Tower", "Dinner Table", "Pokemon" }; - _shop = new OptionsShop(this, getArcadeManager(), getArcadeManager().GetClients(), getArcadeManager().GetDonation()); + _mobShop = new MobShop(getArcadeManager(), getArcadeManager().GetClients(), getArcadeManager().GetDonation()); + _optionsShop = new OptionsShop(this, getArcadeManager(), getArcadeManager().GetClients(), getArcadeManager().GetDonation()); _shopItem = ItemStackFactory.Instance.CreateStack(Material.DIAMOND, (byte) 0, 1, C.cGreen + "Options"); } @@ -936,7 +939,7 @@ public class Build extends SoloGame public void openShop(PlayerInteractEvent event) { if (IsAlive(event.getPlayer()) && _shopItem.equals(event.getPlayer().getItemInHand())) - _shop.attemptShopOpen(event.getPlayer()); + _optionsShop.attemptShopOpen(event.getPlayer()); } @EventHandler @@ -1087,4 +1090,25 @@ public class Build extends SoloGame { event.blockList().clear(); } + + @EventHandler + public void openMobGui(PlayerInteractEntityEvent event) + { + if (!IsLive() || !IsAlive(event.getPlayer())) return; + + Player player = event.getPlayer(); + BuildData buildData = _data.get(player); + + if (buildData != null) + { + for (Entity e : buildData.Entities) + { + if (e.equals(event.getRightClicked())) + { + _mobShop.attemptShopOpen(player, buildData, e); + return; + } + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/MobShop.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/MobShop.java new file mode 100644 index 000000000..812e90336 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/MobShop.java @@ -0,0 +1,54 @@ +package nautilus.game.arcade.game.games.build.gui; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.ShopBase; +import mineplex.core.shop.page.ShopPageBase; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.build.BuildData; +import nautilus.game.arcade.game.games.build.gui.page.MobPage; + +public class MobShop extends ShopBase +{ + public MobShop(ArcadeManager plugin, CoreClientManager clientManager, DonationManager donationManager) + { + super(plugin, clientManager, donationManager, "Mob Options"); + } + + protected ShopPageBase> buildPagesFor(Player player, BuildData data, Entity entity) + { + return new MobPage(getPlugin(), this, getClientManager(), getDonationManager(), player, data, entity); + } + + public boolean attemptShopOpen(Player player, BuildData data, Entity entity) + { + if (!getOpenedShop().contains(player.getName())) + { + if (!canOpenShop(player)) + return false; + + getOpenedShop().add(player.getName()); + + openShopForPlayer(player); + if (!getPlayerPageMap().containsKey(player.getName())) + { + getPlayerPageMap().put(player.getName(), buildPagesFor(player, data, entity)); + } + + openPageForPlayer(player, getOpeningPageForPlayer(player)); + + return true; + } + + return false; + } + + @Override + protected ShopPageBase> buildPagesFor(Player player) + { + return null; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/OptionsShop.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/OptionsShop.java index f1d9e43e1..7c83eeb84 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/OptionsShop.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/OptionsShop.java @@ -8,7 +8,7 @@ import mineplex.core.shop.ShopBase; import mineplex.core.shop.page.ShopPageBase; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.build.Build; -import nautilus.game.arcade.game.games.build.gui.page.OptionsMenu; +import nautilus.game.arcade.game.games.build.gui.page.OptionsPage; public class OptionsShop extends ShopBase { @@ -23,6 +23,6 @@ public class OptionsShop extends ShopBase @Override protected ShopPageBase> buildPagesFor(Player player) { - return new OptionsMenu(_game, getPlugin(), this, getClientManager(), getDonationManager(), player); + return new OptionsPage(_game, getPlugin(), this, getClientManager(), getDonationManager(), player); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java new file mode 100644 index 000000000..dd8c4cc91 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java @@ -0,0 +1,32 @@ +package nautilus.game.arcade.game.games.build.gui.page; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.page.ShopPageBase; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.build.BuildData; +import nautilus.game.arcade.game.games.build.gui.MobShop; + +public class MobPage extends ShopPageBase +{ + private BuildData _buildData; + private Entity _entity; + + + public MobPage(ArcadeManager plugin, MobShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player, BuildData buildData, Entity entity) + { + super(plugin, shop, clientManager, donationManager, "Mob Options", player); + + _buildData = buildData; + _entity = entity; + } + + @Override + protected void buildPage() + { + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsMenu.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java similarity index 93% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsMenu.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java index 4025b12ad..da19e4e89 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsMenu.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java @@ -13,11 +13,11 @@ import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.build.Build; import nautilus.game.arcade.game.games.build.gui.OptionsShop; -public class OptionsMenu extends ShopPageBase +public class OptionsPage extends ShopPageBase { private Build _game; - public OptionsMenu(Build game, ArcadeManager plugin, OptionsShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + public OptionsPage(Build game, ArcadeManager plugin, OptionsShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) { super(plugin, shop, clientManager, donationManager, "Options", player, 9); _game = game; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java index ed4d99a2b..c670ed4d5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/ParticlesPage.java @@ -79,7 +79,7 @@ public class ParticlesPage extends ShopPageBase @Override public void onClick(Player player, ClickType clickType) { - getShop().openPageForPlayer(player, new OptionsMenu(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + getShop().openPageForPlayer(player, new OptionsPage(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); } }); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java index 981d50e2e..d0cb3ef86 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java @@ -62,7 +62,7 @@ public class TimePage extends ShopPageBase @Override public void onClick(Player player, ClickType clickType) { - getShop().openPageForPlayer(player, new OptionsMenu(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + getShop().openPageForPlayer(player, new OptionsPage(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); } }); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java index 484b3c896..5f34ad97c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java @@ -93,7 +93,7 @@ public class WeatherPage extends ShopPageBase @Override public void onClick(Player player, ClickType clickType) { - getShop().openPageForPlayer(player, new OptionsMenu(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + getShop().openPageForPlayer(player, new OptionsPage(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); } }); } From 17cbcc37719d4d853706e5c228c8494aa6c0f27f Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 3 May 2015 14:42:31 -0500 Subject: [PATCH 064/104] Craftbukkit changes for UtilParticle update, and UtilParticle fix --- Plugins/Libraries/craftbukkit.jar | Bin 21005637 -> 20821956 bytes .../core/common/util/UtilParticle.java | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Libraries/craftbukkit.jar b/Plugins/Libraries/craftbukkit.jar index 8936962120684038bdc5038f28c0ff486dee0306..16cea00f23a0930c8827f68affbb3acb02ef2398 100644 GIT binary patch delta 822869 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


ecN@HbXZDP=#R)|idB`* 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%0A671?$i|{vskJ+U(~N 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

)GYWn+=+(OotX# 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 z

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 N)VP*+9NfcN{{y9VZ5{vs delta 1028742 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

hd)Iv2PJV7)?6 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�o@$ucF9F>T!x@$Nt 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 z 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

LV4Qi67APCW@3J2bO4^eLKhCq~ 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 From 97a86fde902fb813b497359e9566e4f47a6ac794 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 15:39:15 -0500 Subject: [PATCH 068/104] builds! --- .../game/arcade/game/games/build/Build.java | 50 +++++++++++++------ .../game/arcade/managers/MiscManager.java | 2 +- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index d3e68a898..9d3b7a50e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -32,6 +32,8 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; @@ -80,6 +82,7 @@ import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.events.PlayerPrepareTeleportEvent; +import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.SoloGame; import nautilus.game.arcade.game.games.build.gui.MobShop; import nautilus.game.arcade.game.games.build.gui.OptionsShop; @@ -159,10 +162,13 @@ public class Build extends SoloGame this.PrepareFreeze = false; this.CreatureAllow = true; + + this.WorldFireSpread = true; _words = new String[] { - "Rollercoaster", "Archery Range", "Pokemon", "Pirates", "Vikings", "Dinosaur", "Dragon", "Toilet", "Farm", "Tree House", "Snail", "Burger", "Cat", "Truck", "Bicycle", "Soda", "Music Instrument", "Squid", "Statue", "Cannon", "Catapult", "Sailing Boat", "Grim Reaper", "Star Wars", "Elephant", "Penguin", "Ninja", "Pot of Gold", "Shrek", "Fruit", "Breakfast", "Toaster", "Robot", "Camping", "Spaceship" + "Rollercoaster", "Archery Range", "Pokemon", "Pirates", "Vikings", "Dinosaur", "Dragon", "Toilet", "Farm", "Tree House", "Burger", "Cat", "Truck", "Bicycle", "Soda", "Music Instrument", "Statue", "Cannon", "Catapult", "Sailing Boat", "Grim Reaper", "Star Wars", "Elephant", "Penguin", "Ninja", "Pot of Gold", "Shrek", "Fruit", "Breakfast", "Toaster", "Robot", "Camping", "Rocket", "Aliens", "Shipwreck", "Cannibals", "Flying Creature", "Beach Creature", "Sea Creature", + }; _mobShop = new MobShop(getArcadeManager(), getArcadeManager().GetClients(), getArcadeManager().GetDonation()); @@ -227,54 +233,54 @@ public class Build extends SoloGame UtilTextMiddle.display(null, C.cYellow + "4 Minutes Remaining", 0, 60, 5); _countdownTimerState++; } - else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 120000)) + else if (_countdownTimerState == 1 && UtilTime.elapsed(GetStateTime(), 120000)) { UtilTextMiddle.display(null, C.cYellow + "3 Minutes Remaining", 0, 60, 5); _countdownTimerState++; } - else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 180000)) + else if (_countdownTimerState == 2 && UtilTime.elapsed(GetStateTime(), 180000)) { UtilTextMiddle.display(null, C.cYellow + "2 Minutes Remaining", 0, 60, 5); _countdownTimerState++; } - else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 240000)) + else if (_countdownTimerState == 3 && UtilTime.elapsed(GetStateTime(), 240000)) { - UtilTextMiddle.display(null, C.cYellow + "1 Minutes Remaining", 0, 60, 5); + UtilTextMiddle.display(null, C.cYellow + "1 Minute Remaining", 0, 60, 5); _countdownTimerState++; } - else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 270000)) + else if (_countdownTimerState == 4 && UtilTime.elapsed(GetStateTime(), 270000)) { UtilTextMiddle.display(null, C.cYellow + "30 Seconds Remaining", 0, 60, 5); _countdownTimerState++; } - else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 285000)) + else if (_countdownTimerState == 5 && UtilTime.elapsed(GetStateTime(), 285000)) { UtilTextMiddle.display(null, C.cYellow + "15 Seconds Remaining", 0, 60, 5); _countdownTimerState++; } - else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 295000)) + else if (_countdownTimerState == 6 && UtilTime.elapsed(GetStateTime(), 295000)) { UtilTextMiddle.display(null, C.cYellow + "5 Seconds Remaining", 0, 60, 5); _countdownTimerState++; } - else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 296000)) + else if (_countdownTimerState == 7 && UtilTime.elapsed(GetStateTime(), 296000)) { UtilTextMiddle.display(null, C.cYellow + "4 Seconds Remaining", 0, 60, 5); _countdownTimerState++; } - else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 297000)) + else if (_countdownTimerState == 8 && UtilTime.elapsed(GetStateTime(), 297000)) { UtilTextMiddle.display(null, C.cYellow + "3 Seconds Remaining", 0, 60, 5); _countdownTimerState++; } - else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 298000)) + else if (_countdownTimerState == 9 && UtilTime.elapsed(GetStateTime(), 298000)) { UtilTextMiddle.display(null, C.cYellow + "2 Seconds Remaining", 0, 60, 5); _countdownTimerState++; } - else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 299000)) + else if (_countdownTimerState == 10 && UtilTime.elapsed(GetStateTime(), 299000)) { - UtilTextMiddle.display(null, C.cYellow + "1 Seconds Remaining", 0, 60, 5); + UtilTextMiddle.display(null, C.cYellow + "1 Second Remaining", 0, 60, 5); _countdownTimerState++; } @@ -379,10 +385,10 @@ public class Build extends SoloGame player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)5, 1, C.Bold + "+3 " + C.cGreen + C.Bold + "Good")); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)3, 1, C.Bold + "+4 " + C.cAqua + C.Bold + "Amazing")); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)10, 1, C.Bold + "+5 " + C.cPurple + C.Bold + "WOW! EVERYTHING IS AWESOME!")); - } + } //Text - UtilTextMiddle.display(null, C.cGreen + "Right-Click" + C.cYellow + " to Vote!", 0, 60, 5); + UtilTextMiddle.display(null, C.cYellow + "Click to Vote", 0, 60, 5); _buildStateTime = System.currentTimeMillis(); } @@ -428,7 +434,6 @@ public class Build extends SoloGame if (first) { teleportPlayers(data); - first = false; } @@ -754,6 +759,9 @@ public class Build extends SoloGame @EventHandler public void itemDrop(PlayerDropItemEvent event) { + if (_buildGameState != 0) + return; + BuildData data = _data.get(event.getPlayer()); if (data == null) @@ -768,6 +776,9 @@ public class Build extends SoloGame @EventHandler public void itemPickup(PlayerPickupItemEvent event) { + if (_buildGameState != 0) + return; + event.setCancelled(true); BuildData data = _data.get(event.getPlayer()); @@ -963,6 +974,13 @@ public class Build extends SoloGame data.removeEntity(event.getVehicle()); } + @EventHandler + public void fireAllow(BlockIgniteEvent event) + { + if (event.getCause() != IgniteCause.FLINT_AND_STEEL && event.getCause() != IgniteCause.FIREBALL) + event.setCancelled(true); + } + @Override @EventHandler public void ScoreboardUpdate(UpdateEvent event) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java index 1929aaeba..400e46a4a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java @@ -52,7 +52,7 @@ public class MiscManager implements Listener //BoneMeal if (event.getPlayer().getItemInHand().getType() == Material.INK_SACK && event.getPlayer().getItemInHand().getData().getData() == (byte)15) { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Manager.GetGame().GetType() != GameType.UHC) + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Manager.GetGame().GetType() != GameType.UHC && Manager.GetGame().GetType() != GameType.Build) event.setCancelled(true); } else if (Manager.GetGame().GetState() != GameState.Live) From 40d56c3500218441a190d4d762c2848148ab947c Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 16:37:00 -0500 Subject: [PATCH 069/104] Converted all code to updated UtilParticle methods /suicide --- .../core/common/util/UtilParticle.java | 77 ++++++++----------- .../core/gadget/gadgets/ItemBatGun.java | 7 +- .../core/gadget/gadgets/MorphBlaze.java | 10 ++- .../core/gadget/gadgets/MorphBunny.java | 4 +- .../core/gadget/gadgets/MorphCreeper.java | 5 +- .../core/gadget/gadgets/MorphWither.java | 5 +- .../core/gadget/gadgets/ParticleBlizzard.java | 20 +++-- .../core/gadget/gadgets/ParticleEnchant.java | 8 +- .../gadget/gadgets/ParticleFairyData.java | 8 +- .../gadget/gadgets/ParticleFireRings.java | 11 ++- .../core/gadget/gadgets/ParticleFoot.java | 8 +- .../core/gadget/gadgets/ParticleGreen.java | 5 +- .../core/gadget/gadgets/ParticleHeart.java | 10 ++- .../core/gadget/gadgets/ParticleHelix.java | 8 +- .../core/gadget/gadgets/ParticleRain.java | 13 +++- .../core/gadget/gadgets/SongData.java | 5 +- .../core/mount/types/MountDragon.java | 17 ++-- .../mineplex/core/mount/types/MountFrost.java | 6 +- .../core/mount/types/MountUndead.java | 9 ++- .../core/projectile/ProjectileUser.java | 5 +- .../src/mineplex/core/treasure/Treasure.java | 16 ++-- .../animation/ChestSpawnAnimation.java | 15 ++-- .../animation/LootLegendaryAnimation.java | 5 +- .../treasure/animation/LootRareAnimation.java | 8 +- .../animation/LootUncommonAnimation.java | 5 +- .../treasure/animation/ParticleAnimation.java | 5 +- .../hub/modules/HubVisibilityManager.java | 53 ++++++------- .../classcombat/Skill/Assassin/Blink.java | 8 +- .../classcombat/Skill/Assassin/Evade.java | 5 +- .../classcombat/Skill/Assassin/Flash.java | 5 +- .../classcombat/Skill/Assassin/Illusion.java | 4 +- .../Skill/Assassin/MarkedForDeath.java | 5 +- .../classcombat/Skill/Assassin/Recall.java | 5 +- .../classcombat/Skill/Assassin/RecallOld.java | 8 +- .../Skill/Assassin/SilencingArrow.java | 5 +- .../Skill/Assassin/SmokeArrow.java | 8 +- .../classcombat/Skill/Assassin/SmokeBomb.java | 5 +- .../classcombat/Skill/Assassin/Stealth.java | 7 +- .../classcombat/Skill/Brute/Bloodlust.java | 4 +- .../classcombat/Skill/Brute/Stampede.java | 4 +- .../classcombat/Skill/Brute/Takedown.java | 5 +- .../game/classcombat/Skill/Brute/Taunt.java | 5 +- .../classcombat/Skill/Brute/WhirlwindAxe.java | 8 +- .../classcombat/Skill/Knight/BullsCharge.java | 5 +- .../classcombat/Skill/Knight/Fortitude.java | 5 +- .../Skill/Knight/HoldPosition.java | 5 +- .../classcombat/Skill/Knight/ShieldSmash.java | 8 +- .../classcombat/Skill/Mage/ArcticArmor.java | 4 +- .../classcombat/Skill/Mage/LifeBondsData.java | 5 +- .../classcombat/Skill/Mage/StaticLazer.java | 8 +- .../classcombat/Skill/Ranger/Agility.java | 5 +- .../classcombat/Skill/Ranger/Barrage.java | 5 +- .../classcombat/Skill/Ranger/Disengage.java | 5 +- .../Skill/Ranger/ExplosiveShot.java | 9 ++- .../classcombat/Skill/Ranger/HealingShot.java | 9 ++- .../classcombat/Skill/Ranger/HeavyArrows.java | 5 +- .../Skill/Ranger/IncendiaryShot.java | 5 +- .../classcombat/Skill/Ranger/NapalmShot.java | 5 +- .../classcombat/Skill/Ranger/Overcharge.java | 5 +- .../Skill/Ranger/VitalitySpores.java | 5 +- .../classcombat/Skill/Ranger/WolfsFury.java | 5 +- .../item/Throwable/ProximityExplosive.java | 5 +- .../item/Throwable/ProximityZapper.java | 5 +- .../game/arcade/game/games/build/Build.java | 7 +- .../arcade/game/games/build/BuildData.java | 16 ++-- .../game/games/castlesiege/CastleSiege.java | 4 +- .../games/christmas/content/PumpkinKing.java | 8 +- .../game/games/christmas/parts/Part1.java | 7 +- .../arcade/game/games/gravity/Gravity.java | 9 ++- .../game/games/gravity/GravityObject.java | 8 +- .../games/gravity/objects/GravityBomb.java | 5 +- .../games/gravity/objects/GravityDebris.java | 5 +- .../games/gravity/objects/GravityPlayer.java | 5 +- .../halloween/creatures/PumpkinKing.java | 14 ++-- .../arcade/game/games/hideseek/HideSeek.java | 7 +- .../game/games/minestrike/MineStrike.java | 16 ++-- .../game/games/minestrike/data/Bomb.java | 11 ++- .../items/grenades/FireGrenadeBase.java | 4 +- .../items/grenades/HighExplosive.java | 5 +- .../minestrike/items/grenades/Smoke.java | 5 +- .../game/games/minestrike/items/guns/Gun.java | 5 +- .../games/minestrike/items/guns/Shotgun.java | 5 +- .../game/games/smash/kits/KitSlime.java | 5 +- .../game/arcade/game/games/snake/Snake.java | 7 +- .../sneakyassassins/SneakyAssassins.java | 4 +- .../games/sneakyassassins/npc/NpcManager.java | 4 +- .../sneakyassassins/powerups/PowerUpItem.java | 5 +- .../games/survivalgames/SurvivalGames.java | 7 +- .../survivalgames/SurvivalGamesTeams.java | 4 +- .../game/arcade/game/games/uhc/UHC.java | 10 ++- .../arcade/game/games/wizards/Wizards.java | 9 ++- .../games/wizards/spells/SpellAnvilDrop.java | 5 +- .../game/games/wizards/spells/SpellFlash.java | 5 +- .../games/wizards/spells/SpellIceShards.java | 8 +- .../games/wizards/spells/SpellImplode.java | 5 +- .../wizards/spells/SpellLightningStrike.java | 5 +- .../games/wizards/spells/SpellManaBolt.java | 8 +- .../games/wizards/spells/SpellNapalm.java | 23 +++--- .../wizards/spells/SpellSpectralArrow.java | 5 +- .../wizards/spells/SpellSummonWolves.java | 5 +- .../wizards/spells/SpellWizardsCompass.java | 8 +- .../wizards/spells/subclasses/TrapRune.java | 5 +- .../game/arcade/kit/perks/PerkBatForm.java | 8 +- .../game/arcade/kit/perks/PerkBatWave.java | 7 +- .../arcade/kit/perks/PerkBladeVortex.java | 8 +- .../arcade/kit/perks/PerkBullsCharge.java | 5 +- .../arcade/kit/perks/PerkChickenRocket.java | 5 +- .../arcade/kit/perks/PerkCreeperExplode.java | 8 +- .../kit/perks/PerkCreeperSulphurBomb.java | 5 +- .../arcade/kit/perks/PerkDeadlyBones.java | 5 +- .../arcade/kit/perks/PerkDeathsGrasp.java | 8 +- .../game/arcade/kit/perks/PerkDestructor.java | 4 +- .../arcade/kit/perks/PerkEndermanDragon.java | 5 +- .../game/arcade/kit/perks/PerkEvade.java | 5 +- .../game/arcade/kit/perks/PerkExplode.java | 5 +- .../game/arcade/kit/perks/PerkFlameDash.java | 11 ++- .../game/arcade/kit/perks/PerkFlameSlam.java | 11 ++- .../game/arcade/kit/perks/PerkFlash.java | 5 +- .../game/arcade/kit/perks/PerkHorseKick.java | 5 +- .../arcade/kit/perks/PerkInfernalHorror.java | 8 +- .../game/arcade/kit/perks/PerkLazer.java | 8 +- .../game/arcade/kit/perks/PerkMagmaBlast.java | 5 +- .../game/arcade/kit/perks/PerkMagmaBoost.java | 14 ++-- .../game/arcade/kit/perks/PerkOvercharge.java | 4 +- .../arcade/kit/perks/PerkPigBaconBomb.java | 5 +- .../arcade/kit/perks/PerkPigBaconBounce.java | 5 +- .../game/arcade/kit/perks/PerkRewind.java | 5 +- .../arcade/kit/perks/PerkSheepHoming.java | 5 +- .../arcade/kit/perks/PerkSlimeRocket.java | 6 +- .../game/arcade/kit/perks/PerkSmokebomb.java | 4 +- .../game/arcade/kit/perks/PerkSnowTurret.java | 5 +- .../arcade/kit/perks/PerkSpidersNest.java | 8 +- .../game/arcade/kit/perks/PerkStormSquid.java | 8 +- .../game/arcade/kit/perks/PerkTNTArrow.java | 7 +- .../arcade/kit/perks/PerkWitchPotion.java | 5 +- .../kit/perks/PerkWitherArrowBlind.java | 11 ++- .../arcade/kit/perks/PerkWitherArrows.java | 9 ++- .../arcade/kit/perks/PerkWitherAttack.java | 5 +- .../arcade/kit/perks/PerkWitherSkull.java | 5 +- .../game/arcade/kit/perks/PerkWoolBomb.java | 5 +- .../game/arcade/kit/perks/PerkWoolCloud.java | 11 ++- .../game/arcade/kit/perks/PerkWraith.java | 5 +- .../game/arcade/managers/HolidayManager.java | 7 +- 143 files changed, 781 insertions(+), 324 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index 972d761e4..33d33f950 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -2,6 +2,7 @@ package mineplex.core.common.util; import java.lang.reflect.Field; +import mineplex.core.common.util.UtilParticle.ViewDist; import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; import org.bukkit.Location; @@ -10,6 +11,27 @@ import org.bukkit.entity.Player; public class UtilParticle { + public enum ViewDist + { + SHORT(8), + NORMAL(24), + LONG(48), + LONGER(96), + MAX(256); + + private int _dist; + + ViewDist(int dist) + { + _dist = dist; + } + + public int getDist() + { + return _dist; + } + } + public enum ParticleType { ANGRY_VILLAGER("angryVillager", "Lightning Cloud", Material.INK_SACK, (byte) 11), @@ -186,56 +208,23 @@ public class UtilParticle return packet; } - public static void PlayParticle(ParticleType type, Location location, float offsetX, float offsetY, float offsetZ, - float speed, int count) + public static void PlayParticle(ParticleType type,Location location, float offsetX, float offsetY, float offsetZ, + float speed, int count, ViewDist dist, Player... players) { - PlayParticle(type.particleName, location, offsetX, offsetY, offsetZ, speed, count); + PlayParticle(type.particleName, location, offsetX, offsetY, offsetZ, speed, count, dist, players); } - public static void PlayParticle(Player player, ParticleType type, Location location, float offsetX, float offsetY, - float offsetZ, float speed, int count) + public static void PlayParticle(String particle, Location location, float offsetX, float offsetY, float offsetZ, + float speed, int count, ViewDist dist, Player... players) { - PlayParticle(player, type.particleName, location, offsetX, offsetY, offsetZ, speed, count); - } + PacketPlayOutWorldParticles packet = getPacket(particle, location, offsetX, offsetY, offsetZ, speed, count, true); - public static void PlayParticle(Player player, ParticleType type, Location location, float offsetX, float offsetY, - float offsetZ, float speed, int count, boolean displayFar) - { - PlayParticle(player, type.particleName, location, offsetX, offsetY, offsetZ, speed, count, displayFar); - } - - public static void PlayParticle(Player player, String particleName, Location location, float offsetX, float offsetY, - float offsetZ, float speed, int count) - { - PlayParticle(player, particleName, location, offsetX, offsetY, offsetZ, speed, count, false); - } - - public static void PlayParticle(Player player, String particleName, Location location, float offsetX, float offsetY, - float offsetZ, float speed, int count, boolean displayFar) - { - PacketPlayOutWorldParticles packet = getPacket(particleName, location, offsetX, offsetY, offsetZ, speed, count, displayFar); - - UtilPlayer.sendPacket(player, packet); - } - - public static void PlayParticle(String particleName, Location location, float offsetX, float offsetY, float offsetZ, - float speed, int count) - { - PacketPlayOutWorldParticles packet = getPacket(particleName, location, offsetX, offsetY, offsetZ, speed, count, true); - - for (Player player : UtilServer.getPlayers()) + for (Player player : players) { - // Dont send to players who cannot see it! - if (!particleName.equals(ParticleType.FIREWORKS_SPARK.particleName) - && !particleName.equals(ParticleType.LARGE_EXPLODE.particleName) - && !particleName.equals(ParticleType.HUGE_EXPLOSION.particleName)) - { - if (UtilMath.offset(player.getLocation(), location) > 24) - { - continue; - } - } - + //Out of range for player + if (UtilMath.offset(player.getLocation(), location) > dist.getDist()) + continue; + UtilPlayer.sendPacket(player, packet); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemBatGun.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemBatGun.java index 24e3bbd85..990221e3c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemBatGun.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemBatGun.java @@ -21,6 +21,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.recharge.Recharge; @@ -117,7 +118,8 @@ public class ItemBatGun extends ItemGadget //Effect bat.getWorld().playSound(bat.getLocation(), Sound.BAT_HURT, 1f, 1f); - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3, + ViewDist.NORMAL, UtilServer.getPlayers()); bat.remove(); @@ -138,7 +140,8 @@ public class ItemBatGun extends ItemGadget for (Bat bat : _bats.get(player)) { if (bat.isValid()) - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3, + ViewDist.NORMAL, UtilServer.getPlayers()); bat.remove(); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBlaze.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBlaze.java index 541acc959..c93152737 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBlaze.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBlaze.java @@ -11,7 +11,9 @@ import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBlaze; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.types.MorphGadget; @@ -65,8 +67,12 @@ public class MorphBlaze extends MorphGadget player.eject(); player.getWorld().playSound(player.getLocation(), Sound.FIZZ, 0.2f, (float)(Math.random())); - UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(0, 1, 0), 0.25f, 0.25f, 0.25f, 0f, 3); - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, player.getLocation().add(0, 1, 0), 0.1f, 0.1f, 0.1f, 0f, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(0, 1, 0), + 0.25f, 0.25f, 0.25f, 0f, 3, + ViewDist.NORMAL, UtilServer.getPlayers()); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, player.getLocation().add(0, 1, 0), + 0.1f, 0.1f, 0.1f, 0f, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); UtilAction.velocity(player, 0.8, 0.1, 1, true); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBunny.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBunny.java index 5026ebbd7..7d84e2457 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBunny.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBunny.java @@ -31,6 +31,7 @@ import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilServer; @@ -239,7 +240,8 @@ public class MorphBunny extends MorphGadget } else { - UtilParticle.PlayParticle(ParticleType.SPELL, egg.getLocation().add(0, 0.1, 0), 0.1f, 0.1f, 0.1f, 0, 1); + UtilParticle.PlayParticle(ParticleType.SPELL, egg.getLocation().add(0, 0.1, 0), 0.1f, 0.1f, 0.1f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphCreeper.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphCreeper.java index 5a22b0fa7..965207894 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphCreeper.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphCreeper.java @@ -17,7 +17,9 @@ import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseCreeper; import mineplex.core.updater.UpdateType; @@ -98,7 +100,8 @@ public class MorphCreeper extends MorphGadget continue; //Explode - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0.5f, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0.5f, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 1f, 0.8f); player.playEffect(EntityEffect.HURT); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java index b77c840ff..62ff23a36 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java @@ -23,8 +23,10 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseWither; import mineplex.core.recharge.Recharge; @@ -115,7 +117,8 @@ public class MorphWither extends MorphGadget WitherSkull skull = (WitherSkull)event.getEntity(); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, skull.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, skull.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); skull.getWorld().playSound(skull.getLocation(), Sound.EXPLODE, 2f, 1f); HashMap players = UtilPlayer.getInRadius(event.getLocation(), 6); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleBlizzard.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleBlizzard.java index f20373576..22732373a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleBlizzard.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleBlizzard.java @@ -15,7 +15,9 @@ import org.bukkit.event.player.PlayerToggleFlightEvent; import mineplex.core.blood.BloodEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; @@ -53,7 +55,8 @@ public class ParticleBlizzard extends ParticleGadget if (Manager.isMoving(player)) { - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4); + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4, + ViewDist.NORMAL, UtilServer.getPlayers()); } else { @@ -68,11 +71,13 @@ public class ParticleBlizzard extends ParticleGadget double x = Math.sin(r + (i * (Math.PI/4))) * (r%(Math.PI * 4)) * 0.4; double z = Math.cos(r + (i * (Math.PI/4))) * (r%(Math.PI * 4)) * 0.4; - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(x, scale * 3, z), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(x, scale * 3, z), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); if (scale > 0.95 && Recharge.Instance.use(player, GetName(), 1000, false, false)) { - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(0, scale * 3.5, 0), 0f, 0f, 0f, 0.2f, 60); + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(0, scale * 3.5, 0), 0f, 0f, 0f, 0.2f, 60, + ViewDist.NORMAL, UtilServer.getPlayers()); player.getWorld().playSound(player.getLocation(), Sound.STEP_SNOW, 1f, 1.5f); } } @@ -88,7 +93,8 @@ public class ParticleBlizzard extends ParticleGadget if (!event.getPlayer().isFlying()) if (IsActive(event.getPlayer())) - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, event.getPlayer().getLocation(), 0f, 0f, 0f, 0.6f, 100); + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, event.getPlayer().getLocation(), 0f, 0f, 0f, 0.6f, 100, + ViewDist.NORMAL, UtilServer.getPlayers()); } @EventHandler @@ -115,7 +121,8 @@ public class ParticleBlizzard extends ParticleGadget if (!_arrows.remove(event.getEntity())) return; - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, event.getEntity().getLocation(), 0f, 0f, 0f, 0.4f, 12); + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, event.getEntity().getLocation(), 0f, 0f, 0f, 0.4f, 12, + ViewDist.NORMAL, UtilServer.getPlayers()); } @EventHandler @@ -134,7 +141,8 @@ public class ParticleBlizzard extends ParticleGadget } else { - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, arrow.getLocation(), 0f, 0f, 0f, 0f, 1); + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, arrow.getLocation(), 0f, 0f, 0f, 0f, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleEnchant.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleEnchant.java index 6de447af5..1225728a4 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleEnchant.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleEnchant.java @@ -7,7 +7,9 @@ import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -41,11 +43,13 @@ public class ParticleEnchant extends ParticleGadget if (Manager.isMoving(player)) { - UtilParticle.PlayParticle(ParticleType.ENCHANTMENT_TABLE, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4); + UtilParticle.PlayParticle(ParticleType.ENCHANTMENT_TABLE, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4, + ViewDist.NORMAL, UtilServer.getPlayers()); } else { - UtilParticle.PlayParticle(ParticleType.ENCHANTMENT_TABLE, player.getLocation().add(0, 1.4, 0), 0f, 0f, 0f, 1, 4); + UtilParticle.PlayParticle(ParticleType.ENCHANTMENT_TABLE, player.getLocation().add(0, 1.4, 0), 0f, 0f, 0f, 1, 4, + ViewDist.NORMAL, UtilServer.getPlayers()); } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFairyData.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFairyData.java index ee7c601b9..00d4cd895 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFairyData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFairyData.java @@ -3,7 +3,9 @@ package mineplex.core.gadget.gadgets; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import org.bukkit.Location; import org.bukkit.Sound; @@ -72,8 +74,10 @@ public class ParticleFairyData Fairy.add(Direction.clone().multiply(Speed)); //Particle - UtilParticle.PlayParticle(ParticleType.FLAME, Fairy, 0, 0, 0, 0, 1); - UtilParticle.PlayParticle(ParticleType.LAVA, Fairy, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, Fairy, 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); + UtilParticle.PlayParticle(ParticleType.LAVA, Fairy, 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); //Sound Fairy.getWorld().playSound(Fairy, Sound.CAT_PURREOW, 0.1f, 3f); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFireRings.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFireRings.java index bba47592d..3537558d2 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFireRings.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFireRings.java @@ -8,7 +8,9 @@ import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -42,7 +44,8 @@ public class ParticleFireRings extends ParticleGadget if (Manager.isMoving(player)) { - UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(0, 1f, 0), 0.2f, 0.2f, 0.2f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(0, 1f, 0), 0.2f, 0.2f, 0.2f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } else { @@ -55,7 +58,8 @@ public class ParticleFireRings extends ParticleGadget float y = (float) (Math.sin(player.getTicksLived()/5d + lead) + 1f); - UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(x, y, z), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(x, y, z), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } for (int i=0 ; i < 1 ; i++) @@ -67,7 +71,8 @@ public class ParticleFireRings extends ParticleGadget float y = (float) (Math.sin(player.getTicksLived()/5d + lead) + 1f); - UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(x, y, z), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(x, y, z), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } //Sound diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFoot.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFoot.java index e89548b0e..1e68a3d93 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFoot.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFoot.java @@ -18,8 +18,10 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -90,9 +92,11 @@ public class ParticleFoot extends ParticleGadget _steps.put(loc, System.currentTimeMillis()); - UtilParticle.PlayParticle(ParticleType.FOOTSTEP, loc, 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FOOTSTEP, loc, 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, loc.clone().add(0, 0.1, 0), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, loc.clone().add(0, 0.1, 0), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleGreen.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleGreen.java index cc8ec0128..9a370fad1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleGreen.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleGreen.java @@ -8,7 +8,9 @@ import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -44,7 +46,8 @@ public class ParticleGreen extends ParticleGadget float z = (float) (Math.cos(player.getTicksLived()/7d) * 1f); float y = (float) (Math.cos(player.getTicksLived()/17d) * 1f + 1f); - UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, player.getLocation().add(x, y, z), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, player.getLocation().add(x, y, z), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); // if (Manager.isMoving(player)) // { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java index 4418644cc..61d602440 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java @@ -19,6 +19,7 @@ import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; @@ -79,9 +80,11 @@ public class ParticleHeart extends ParticleGadget { } if (Manager.isMoving(player)) - UtilParticle.PlayParticle(ParticleType.HEART, player.getLocation().add(0, 1, 0), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.HEART, player.getLocation().add(0, 1, 0), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); else - UtilParticle.PlayParticle(ParticleType.HEART, player.getLocation().add(0, 1, 0), 0.5f, 0.5f, 0.5f, 0, 1); + UtilParticle.PlayParticle(ParticleType.HEART, player.getLocation().add(0, 1, 0), 0.5f, 0.5f, 0.5f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } @@ -96,7 +99,8 @@ public class ParticleHeart extends ParticleGadget { entry.getValue().add(UtilAlg.getTrajectory(entry.getValue(), entry.getKey().getEyeLocation()).multiply(0.6)); - UtilParticle.PlayParticle(ParticleType.HEART, entry.getValue(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HEART, entry.getValue(), 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); if (UtilMath.offset(entry.getValue(), entry.getKey().getEyeLocation()) < 0.6) heartIterator.remove(); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHelix.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHelix.java index c9f615e7d..f573629ee 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHelix.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHelix.java @@ -8,7 +8,9 @@ import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -42,7 +44,8 @@ public class ParticleHelix extends ParticleGadget if (Manager.isMoving(player)) { - UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4); + UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4, + ViewDist.NORMAL, UtilServer.getPlayers()); } else { @@ -59,7 +62,8 @@ public class ParticleHelix extends ParticleGadget float y = 0.15f * height; - UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation().add(x * (1d - height/22d), y, z * (1d - height/22d)), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation().add(x * (1d - height/22d), y, z * (1d - height/22d)), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleRain.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleRain.java index 42da0ef93..4300b5369 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleRain.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleRain.java @@ -10,6 +10,7 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -43,17 +44,21 @@ public class ParticleRain extends ParticleGadget if (Manager.isMoving(player)) { - UtilParticle.PlayParticle(ParticleType.SPLASH, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4); + UtilParticle.PlayParticle(ParticleType.SPLASH, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4, + ViewDist.NORMAL, UtilServer.getPlayers()); } else { - UtilParticle.PlayParticle(player, ParticleType.EXPLODE, player.getLocation().add(0, 3.5, 0), 0.6f, 0f, 0.6f, 0, 8); + UtilParticle.PlayParticle(ParticleType.EXPLODE, player.getLocation().add(0, 3.5, 0), 0.6f, 0f, 0.6f, 0, 8, + ViewDist.NORMAL, player); for (Player other : UtilServer.getPlayers()) if (!player.equals(other)) - UtilParticle.PlayParticle(other, ParticleType.CLOUD, player.getLocation().add(0, 3.5, 0), 0.6f, 0.1f, 0.6f, 0, 8); + UtilParticle.PlayParticle(ParticleType.CLOUD, player.getLocation().add(0, 3.5, 0), 0.6f, 0.1f, 0.6f, 0, 8, + ViewDist.NORMAL, other); - UtilParticle.PlayParticle(ParticleType.DRIP_WATER, player.getLocation().add(0, 3.5, 0), 0.4f, 0.1f, 0.4f, 0, 2); + UtilParticle.PlayParticle(ParticleType.DRIP_WATER, player.getLocation().add(0, 3.5, 0), 0.4f, 0.1f, 0.4f, 0, 2, + ViewDist.NORMAL, UtilServer.getPlayers()); //Sound player.getWorld().playSound(player.getLocation(), Sound.AMBIENCE_RAIN, 0.1f, 1f); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/SongData.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/SongData.java index de334ad2a..c8751e8c6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/SongData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/SongData.java @@ -1,7 +1,9 @@ package mineplex.core.gadget.gadgets; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import org.bukkit.Material; import org.bukkit.block.Block; @@ -29,7 +31,8 @@ public class SongData return true; } - UtilParticle.PlayParticle(ParticleType.NOTE, Block.getLocation().add(0.5, 1, 0.5), 0.5f, 0.5f, 0.5f, 0f, 2); + UtilParticle.PlayParticle(ParticleType.NOTE, Block.getLocation().add(0.5, 1, 0.5), 0.5f, 0.5f, 0.5f, 0f, 2, + ViewDist.NORMAL, UtilServer.getPlayers()); return false; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountDragon.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountDragon.java index 5841acb1d..bf8d15f97 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountDragon.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountDragon.java @@ -11,6 +11,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.mount.DragonData; @@ -42,17 +43,11 @@ public class MountDragon extends DragonMount if (event.getType() == UpdateType.TICK) { for (DragonData data : GetActive().values()) - for (Player player : UtilServer.getPlayers()) - { - try - { - UtilParticle.PlayParticle(player, ParticleType.WITCH_MAGIC, data.Dragon.getLocation().add(0, 1, 0), 1f, 1f, 1f, 0f, 20); - } - catch (Exception e) - { - e.printStackTrace(); - } - } + { + UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, data.Dragon.getLocation().add(0, 1, 0), + 1f, 1f, 1f, 0f, 20, + ViewDist.NORMAL, UtilServer.getPlayers()); + } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountFrost.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountFrost.java index b34feedfb..e5b2d2bf8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountFrost.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountFrost.java @@ -9,7 +9,9 @@ import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.mount.HorseMount; import mineplex.core.mount.MountManager; import mineplex.core.updater.UpdateType; @@ -37,7 +39,9 @@ public class MountFrost extends HorseMount { if (event.getType() == UpdateType.TICK) for (Horse horse : GetActive().values()) - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, horse.getLocation().add(0, 1, 0), 0.25f, 0.25f, 0.25f, 0.1f, 4); + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, horse.getLocation().add(0, 1, 0), + 0.25f, 0.25f, 0.25f, 0.1f, 4, + ViewDist.NORMAL, UtilServer.getPlayers()); } // @EventHandler diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountUndead.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountUndead.java index 50601382c..20a398d80 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountUndead.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountUndead.java @@ -12,6 +12,7 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.mount.HorseMount; import mineplex.core.mount.MountManager; import mineplex.core.updater.UpdateType; @@ -38,11 +39,15 @@ public class MountUndead extends HorseMount { if (event.getType() == UpdateType.TICK) for (Horse horse : GetActive().values()) - UtilParticle.PlayParticle(ParticleType.FLAME, horse.getLocation().add(0, 1, 0), 0.25f, 0.25f, 0.25f, 0, 2); + UtilParticle.PlayParticle(ParticleType.FLAME, horse.getLocation().add(0, 1, 0), + 0.25f, 0.25f, 0.25f, 0, 2, + ViewDist.NORMAL, UtilServer.getPlayers()); if (event.getType() == UpdateType.FAST) for (Horse horse : GetActive().values()) - UtilParticle.PlayParticle(ParticleType.LAVA, horse.getLocation().add(0, 1, 0), 0.25f, 0.25f, 0.25f, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, horse.getLocation().add(0, 1, 0), + 0.25f, 0.25f, 0.25f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java index 251022932..a19cf5caa 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java @@ -6,7 +6,9 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.DisguiseManager; import mineplex.core.disguise.disguises.DisguiseSquid; import net.minecraft.server.v1_7_R4.AxisAlignedBB; @@ -93,7 +95,8 @@ public class ProjectileUser _thrown.getWorld().playEffect(_thrown.getLocation(), _effect, _effectData); if (_particle != null) - UtilParticle.PlayParticle(_particle, _thrown.getLocation(), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(_particle, _thrown.getLocation(), 0f, 0f, 0f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java index 3f5b9d4ef..08680f868 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java @@ -13,12 +13,14 @@ import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_7_R4.util.CraftMagicNumbers; import org.bukkit.entity.Player; -import net.minecraft.server.v1_7_R4.PacketPlayOutBlockAction; +import net.minecraft.server.v1_7_R4.PacketPlayOutBlockAction; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.hologram.HologramManager; import mineplex.core.reward.Reward; import mineplex.core.reward.RewardData; @@ -133,7 +135,8 @@ public class Treasure if (_treasureType == TreasureType.OLD) { - UtilParticle.PlayParticle(type, block.getLocation().add(0.5, 0.5, 0.5), 0F, 0F, 0F, 1, 4); + UtilParticle.PlayParticle(type, block.getLocation().add(0.5, 0.5, 0.5), 0F, 0F, 0F, 1, 4, + ViewDist.NORMAL, UtilServer.getPlayers()); } else if (_treasureType == TreasureType.ANCIENT) { @@ -141,11 +144,13 @@ public class Treasure double xDif = 0.7 * Math.sin(Math.PI * (_tickCount / 5.0)); double zDif = 0.7 * Math.cos(Math.PI * (_tickCount / 5.0)); float red = 0.1F + (float)( 0.4 * (1 + Math.cos(Math.PI * (_tickCount / 20.0)))); - UtilParticle.PlayParticle(type, block.getLocation().add(0.5 + xDif, 0.5 + yDif, 0.5 + zDif), red, 0.2F, 0.2F, 1F, 0); + UtilParticle.PlayParticle(type, block.getLocation().add(0.5 + xDif, 0.5 + yDif, 0.5 + zDif), red, 0.2F, 0.2F, 1F, 0, + ViewDist.NORMAL, UtilServer.getPlayers()); } else { - UtilParticle.PlayParticle(type, block.getLocation().add(0.5, 0.5, 0.5), 0.5F, 0.5F, 0.5F, 0.2F, 0); + UtilParticle.PlayParticle(type, block.getLocation().add(0.5, 0.5, 0.5), 0.5F, 0.5F, 0.5F, 0.2F, 0, + ViewDist.NORMAL, UtilServer.getPlayers()); } } } @@ -327,7 +332,8 @@ public class Treasure if (block.getType().equals(Material.CHEST)) { - UtilParticle.PlayParticle(UtilParticle.ParticleType.LARGE_SMOKE, block.getLocation().add(0.5, 0.5, 0.5), 0.5F, 0.5F, 0.5F, 0.1F, 10); + UtilParticle.PlayParticle(UtilParticle.ParticleType.LARGE_SMOKE, block.getLocation().add(0.5, 0.5, 0.5), 0.5F, 0.5F, 0.5F, 0.1F, 10, + ViewDist.NORMAL, UtilServer.getPlayers()); // block.getLocation().getWorld().createExplosion(block.getLocation().add(0.5, 0.5, 0.5), 0F); } block.getLocation().getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestSpawnAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestSpawnAnimation.java index cc12d2eb0..545bc55e0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestSpawnAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestSpawnAnimation.java @@ -12,10 +12,11 @@ import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; import org.bukkit.util.Vector; import net.minecraft.server.v1_7_R4.MathHelper; - import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.treasure.BlockInfo; import mineplex.core.treasure.Treasure; import mineplex.core.treasure.TreasureType; @@ -82,7 +83,8 @@ public class ChestSpawnAnimation extends Animation //Play Particels if (getTreasure().getTreasureType() == TreasureType.OLD) { - UtilParticle.PlayParticle(getTreasure().getTreasureType().getStyle().getSecondaryParticle(), _centerLocation, 0.1f, 0.1f, 0.1f, 0, 1); + UtilParticle.PlayParticle(getTreasure().getTreasureType().getStyle().getSecondaryParticle(), _centerLocation, 0.1f, 0.1f, 0.1f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } else if (getTreasure().getTreasureType() == TreasureType.ANCIENT) { @@ -93,7 +95,8 @@ public class ChestSpawnAnimation extends Animation newLoc.add(UtilAlg.getLeft(_particleDirection).multiply(x * scale)); newLoc.add(UtilAlg.getUp(_particleDirection).multiply(z * scale)); - UtilParticle.PlayParticle(getTreasure().getTreasureType().getStyle().getSecondaryParticle(), newLoc, 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(getTreasure().getTreasureType().getStyle().getSecondaryParticle(), newLoc, 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } else if (getTreasure().getTreasureType() == TreasureType.MYTHICAL) { @@ -107,7 +110,8 @@ public class ChestSpawnAnimation extends Animation float x = (float) (Math.sin(getTicks()/4D + lead)); float z = (float) (Math.cos(getTicks()/4D + lead)); - UtilParticle.PlayParticle(getTreasure().getTreasureType().getStyle().getSecondaryParticle(), _centerLocation.clone().add(x * width, y, z * width), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(getTreasure().getTreasureType().getStyle().getSecondaryParticle(), _centerLocation.clone().add(x * width, y, z * width), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } @@ -122,7 +126,8 @@ public class ChestSpawnAnimation extends Animation if (particleType != null) { - UtilParticle.PlayParticle(particleType, _centerLocation, 0.2f, 0.2f, 0.2f, 0, 50); + UtilParticle.PlayParticle(particleType, _centerLocation, 0.2f, 0.2f, 0.2f, 0, 50, + ViewDist.NORMAL, UtilServer.getPlayers()); } else { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootLegendaryAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootLegendaryAnimation.java index 7cd5e4742..aa2b224de 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootLegendaryAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootLegendaryAnimation.java @@ -11,6 +11,8 @@ import org.bukkit.block.Block; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.treasure.Treasure; /** @@ -55,7 +57,8 @@ public class LootLegendaryAnimation extends Animation double zDiff = Math.cos(i/(double)particleAmount * 2 * Math.PI) * radius; Location location = _centerLocation.clone().add(xDiff, 0, zDiff); - UtilParticle.PlayParticle(UtilParticle.ParticleType.HAPPY_VILLAGER, location, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(UtilParticle.ParticleType.HAPPY_VILLAGER, location, 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } else if (getTicks() < 40) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootRareAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootRareAnimation.java index 33aadf2f0..5824c2db3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootRareAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootRareAnimation.java @@ -8,6 +8,8 @@ import org.bukkit.FireworkEffect.Type; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.treasure.Treasure; /** @@ -52,7 +54,8 @@ public class LootRareAnimation extends Animation Location location = _centerLocation.clone().add(xDiff, yDiff, zDiff); - UtilParticle.PlayParticle(UtilParticle.ParticleType.WITCH_MAGIC, location, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(UtilParticle.ParticleType.WITCH_MAGIC, location, 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } //Particle Spiral Up @@ -64,7 +67,8 @@ public class LootRareAnimation extends Animation double zDiff = Math.cos(i/(double)particleAmount * 2 * Math.PI) * radius; Location location = _centerLocation.clone().add(xDiff, -1.3, zDiff); - UtilParticle.PlayParticle(UtilParticle.ParticleType.WITCH_MAGIC, location, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(UtilParticle.ParticleType.WITCH_MAGIC, location, 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootUncommonAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootUncommonAnimation.java index 3c3fdec93..c294d4840 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootUncommonAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/LootUncommonAnimation.java @@ -9,6 +9,8 @@ import org.bukkit.block.Block; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.treasure.Treasure; /** @@ -42,7 +44,8 @@ public class LootUncommonAnimation extends Animation } else if (getTicks() % 2 == 0) { - UtilParticle.PlayParticle(UtilParticle.ParticleType.HEART, _block.getLocation().add(0.5, 1.2, 0.5), 0.5F, 0.2F, 0.5F, 0, 1); + UtilParticle.PlayParticle(UtilParticle.ParticleType.HEART, _block.getLocation().add(0.5, 1.2, 0.5), 0.5F, 0.2F, 0.5F, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ParticleAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ParticleAnimation.java index 7c600900d..b717b39a6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ParticleAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ParticleAnimation.java @@ -5,6 +5,8 @@ import java.util.ArrayList; import org.bukkit.util.Vector; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.treasure.Treasure; /** @@ -54,7 +56,8 @@ public class ParticleAnimation extends Animation { Vector position = PATH.get(pathPosition); - UtilParticle.PlayParticle(getTreasure().getTreasureType().getStyle().getSecondaryParticle(), getTreasure().getCenterBlock().getLocation().add(0.5, 0, 0.5).add(position), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(getTreasure().getTreasureType().getStyle().getSecondaryParticle(), getTreasure().getCenterBlock().getLocation().add(0.5, 0, 0.5).add(position), 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); pathPosition = (pathPosition + 1) % PATH.size(); } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/HubVisibilityManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/HubVisibilityManager.java index f7ce210aa..7c43be8c9 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/HubVisibilityManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/HubVisibilityManager.java @@ -17,6 +17,7 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilServer; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -26,34 +27,34 @@ import mineplex.hub.HubManager; public class HubVisibilityManager extends MiniPlugin { public HubManager Manager; - + private HashMap _particle = new HashMap(); private HashSet _hiddenPlayers = new HashSet(); - + public HubVisibilityManager(HubManager manager) { super("Visibility Manager", manager.getPlugin()); - + Manager = manager; } public void addHiddenPlayer(Player player) { _hiddenPlayers.add(player); - + } - + public void removeHiddenPlayer(Player player) { _hiddenPlayers.remove(player); } - + @EventHandler public void removeHiddenPlayerOnQuit(PlayerQuitEvent event) { _hiddenPlayers.remove(event.getPlayer()); } - + @EventHandler public void updateVisibility(UpdateEvent event) { @@ -63,18 +64,18 @@ public class HubVisibilityManager extends MiniPlugin for (Player player : UtilServer.getPlayers()) { boolean hideMe = Manager.GetTutorial().InTutorial(player) || - UtilMath.offset2d(player.getLocation(), Manager.GetSpawn()) == 0 || - Manager.getPreferences().Get(player).Invisibility || - _hiddenPlayers.contains(player); - + UtilMath.offset2d(player.getLocation(), Manager.GetSpawn()) == 0 || + Manager.getPreferences().Get(player).Invisibility || + _hiddenPlayers.contains(player); + for (Player other : UtilServer.getPlayers()) { if (player.equals(other)) continue; if (hideMe || - !Manager.getPreferences().Get(other).ShowPlayers || - Manager.GetTutorial().InTutorial(other)) + !Manager.getPreferences().Get(other).ShowPlayers || + Manager.GetTutorial().InTutorial(other)) { VisibilityManager.Instance.setVisibility(player, false, other); } @@ -85,22 +86,22 @@ public class HubVisibilityManager extends MiniPlugin } } } - + @EventHandler public void ParticleSwap(PlayerInteractEvent event) { Player player = event.getPlayer(); - + if (!player.isOp()) return; - + if (!UtilGear.isMat(player.getItemInHand(), Material.GOLD_NUGGET)) return; - + int past = 0; if (_particle.containsKey(player)) past = _particle.get(player); - + if (UtilEvent.isAction(event, ActionType.R)) { past = (past+1)%ParticleType.values().length; @@ -111,24 +112,24 @@ public class HubVisibilityManager extends MiniPlugin if (past < 0) past = ParticleType.values().length - 1; } - + _particle.put(player, past); - + player.sendMessage("Particle: " + ParticleType.values()[past]); } - + @EventHandler public void Particles(UpdateEvent event) { if (event.getType() != UpdateType.FAST) return; - + for (Player player : _particle.keySet()) { - for (Player other : UtilServer.getPlayers()) - { - UtilParticle.PlayParticle(other, ParticleType.values()[_particle.get(player)], player.getLocation().add(1, 1, 0), 0f, 0f, 0f, 0, 1); - } + + UtilParticle.PlayParticle(ParticleType.values()[_particle.get(player)], player.getLocation().add(1, 1, 0), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); + } } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java index 66b2682dd..d4e2ffb3d 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java @@ -19,9 +19,11 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -124,7 +126,8 @@ public class Blink extends SkillActive curRange += 0.2; //Smoke Trail - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.LONGER, UtilServer.getPlayers()); lastSmoke = newTarget.getBlock(); } @@ -180,7 +183,8 @@ public class Blink extends SkillActive curRange += 0.2; //Smoke Trail - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.LONGER, UtilServer.getPlayers()); lastSmoke = newTarget.getBlock(); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Evade.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Evade.java index 5b4d9d855..4bbff3d67 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Evade.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Evade.java @@ -23,7 +23,9 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -155,7 +157,8 @@ public class Evade extends SkillActive //Effect UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, damagee.getLocation(), - (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 10); + (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 10, + ViewDist.NORMAL, UtilServer.getPlayers()); //Action damagee.teleport(target); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Flash.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Flash.java index 58f2a0046..f250c0839 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Flash.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Flash.java @@ -20,7 +20,9 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -132,7 +134,8 @@ public class Flash extends SkillActive curRange += 0.2; //Smoke Trail - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.LONGER, UtilServer.getPlayers()); } //Modify Range diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java index dc0d6aef1..f8be1c8c7 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java @@ -33,6 +33,7 @@ import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilWorld; import mineplex.core.disguise.disguises.DisguisePig; import mineplex.core.disguise.disguises.DisguisePlayer; @@ -204,7 +205,8 @@ public class Illusion extends SkillActive } //Effect - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, skel.getLocation().add(0, 1, 0), 0.3f, 0.3f, 0.3f, 0.06f, 30); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, skel.getLocation().add(0, 1, 0), 0.3f, 0.3f, 0.3f, 0.06f, 30, + ViewDist.LONGER, UtilServer.getPlayers()); for (int i=0 ; i<2 ; i++) skel.getWorld().playSound(skel.getLocation(), Sound.FIZZ, 2f, 0.4f); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/MarkedForDeath.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/MarkedForDeath.java index b8c48c011..615508a77 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/MarkedForDeath.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/MarkedForDeath.java @@ -25,7 +25,9 @@ import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -177,7 +179,8 @@ public class MarkedForDeath extends SkillActive for (Entity ent : _arrows) { - UtilParticle.PlayParticle(ParticleType.MOB_SPELL, ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.MOB_SPELL, ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Recall.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Recall.java index b15f4756c..518cb9969 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Recall.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Recall.java @@ -14,7 +14,9 @@ import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.Skill; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; @@ -93,7 +95,8 @@ public class Recall extends Skill while (UtilMath.offset(current, target) > 0.5) { - UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, current, 0, 1f, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, current, 0, 1f, 0, 0, 1, + ViewDist.LONGER, UtilServer.getPlayers()); current = current.add(UtilAlg.getTrajectory(current, target).multiply(0.1)); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/RecallOld.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/RecallOld.java index 703602986..a52083c7c 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/RecallOld.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/RecallOld.java @@ -23,8 +23,10 @@ import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.minecraft.game.classcombat.Skill.Skill; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -109,7 +111,8 @@ public class RecallOld extends Skill player.getWorld().playEffect(player.getLocation(), Effect.STEP_SOUND, 133); player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 2f, 2f); UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, player.getLocation(), - (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 20); + (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 20, + ViewDist.LONGER, UtilServer.getPlayers()); //Return Item item = _items.remove(player); @@ -122,7 +125,8 @@ public class RecallOld extends Skill //Effect player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 2f, 2f); UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, player.getLocation(), - (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 20); + (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 20, + ViewDist.LONGER, UtilServer.getPlayers()); Reset(player); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java index 2a9b18a2f..059dec01d 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java @@ -24,7 +24,9 @@ import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -153,7 +155,8 @@ public class SilencingArrow extends SkillActive for (Entity ent : _arrows) { - UtilParticle.PlayParticle(ParticleType.SPELL, ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.SPELL, ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeArrow.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeArrow.java index 9327aafa9..58465104e 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeArrow.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeArrow.java @@ -23,7 +23,9 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -140,7 +142,8 @@ public class SmokeArrow extends SkillActive event.AddMod(damager.getName(), GetName(), 0, true); //Effect - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, projectile.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, projectile.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); //Remove projectile.remove(); @@ -154,7 +157,8 @@ public class SmokeArrow extends SkillActive for (Entity ent : _arrows) { - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeBomb.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeBomb.java index 96de20042..41f70572b 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeBomb.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeBomb.java @@ -8,7 +8,9 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.minecraft.game.core.condition.Condition; import mineplex.minecraft.game.core.condition.Condition.ConditionType; @@ -82,7 +84,8 @@ public class SmokeBomb extends Skill Factory.Condition().Factory().Cloak(GetName(), player, player, 1 + 2 * level, false, true); //Effect - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); for (Player other : UtilPlayer.getNearby(player.getLocation(), 2 + level)) { diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Stealth.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Stealth.java index 30b98a300..e1e285ae8 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Stealth.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Stealth.java @@ -23,6 +23,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.core.condition.Condition.ConditionType; import mineplex.minecraft.game.classcombat.Skill.Skill; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -113,7 +114,8 @@ public class Stealth extends Skill //Effect UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, player.getLocation(), - (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 10); + (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 10, + ViewDist.MAX, UtilServer.getPlayers()); } public void Remove(Player player, LivingEntity source) @@ -128,7 +130,8 @@ public class Stealth extends Skill //Effect UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, player.getLocation(), - (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 10); + (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 10, + ViewDist.MAX, UtilServer.getPlayers()); } @EventHandler diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java index 1101d4d65..d4e0fd75b 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java @@ -19,6 +19,7 @@ import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.Skill; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; @@ -135,7 +136,8 @@ public class Bloodlust extends Skill for (Entity ent : _str.keySet()) { UtilParticle.PlayParticle(ParticleType.RED_DUST, ent.getLocation(), - (float)(Math.random() - 0.5), 0.2f + (float)Math.random(), (float)(Math.random() - 0.5), 0, _str.get(ent) * 2); + (float)(Math.random() - 0.5), 0.2f + (float)Math.random(), (float)(Math.random() - 0.5), 0, _str.get(ent) * 2, + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Stampede.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Stampede.java index 134ebae0a..a4512e929 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Stampede.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Stampede.java @@ -15,6 +15,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.Skill; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; import mineplex.minecraft.game.classcombat.Skill.event.SkillEvent; @@ -120,7 +121,8 @@ public class Stampede extends Skill for (Entity ent : _sprintStr.keySet()) { UtilParticle.PlayParticle(ParticleType.CRIT, ent.getLocation(), - (float)(Math.random() - 0.5), 0.2f + (float)Math.random(), (float)(Math.random() - 0.5), 0, _sprintStr.get(ent) * 2); + (float)(Math.random() - 0.5), 0.2f + (float)Math.random(), (float)(Math.random() - 0.5), 0, _sprintStr.get(ent) * 2, + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java index 7c02a07ed..dde2e6a1b 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java @@ -23,8 +23,10 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -195,7 +197,8 @@ public class Takedown extends SkillActive for (Entity ent : _live.keySet()) { UtilParticle.PlayParticle(ParticleType.CRIT, ent.getLocation(), - (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 4); + (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 4, + ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java index 982616076..9ac75a47a 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java @@ -20,8 +20,10 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -121,7 +123,8 @@ public class Taunt extends SkillActive for (Entity ent : _live.keySet()) { UtilParticle.PlayParticle(ParticleType.ENCHANTMENT_TABLE, ent.getLocation().add(0, 2, 0), - 0, 0, 0, 6f, 8); + 0, 0, 0, 6f, 8, + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/WhirlwindAxe.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/WhirlwindAxe.java index ec172fd73..6f9282477 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/WhirlwindAxe.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/WhirlwindAxe.java @@ -19,7 +19,9 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -109,12 +111,14 @@ public class WhirlwindAxe extends SkillActive double x = Math.sin(j + (ticksLived/50d)) * (j%(Math.PI/2d)) * 3; double z = Math.cos(j + (ticksLived/50d)) * (j%(Math.PI/2d)) * 3; - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(x, 1, z), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(x, 1, z), 0f, 0f, 0f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); x = Math.sin(j + (ticksLived/50d) + Math.PI/4) * (j%(Math.PI/2d)) * 3; z = Math.cos(j + (ticksLived/50d) + Math.PI/4) * (j%(Math.PI/2d)) * 3; - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(x, 1, z), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(x, 1, z), 0f, 0f, 0f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); //Sound player.getWorld().playSound(player.getLocation(), Sound.STEP_WOOL, 2f, 1f + (float)((j%(Math.PI/2d))/(Math.PI/2))); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/BullsCharge.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/BullsCharge.java index 3845764e4..e74fee18b 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/BullsCharge.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/BullsCharge.java @@ -18,7 +18,9 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.core.condition.Condition.ConditionType; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -129,7 +131,8 @@ public class BullsCharge extends SkillActive { if (player.hasPotionEffect(PotionEffectType.SPEED)) UtilParticle.PlayParticle(ParticleType.CRIT, player.getLocation(), - (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 3); + (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 3, + ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Fortitude.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Fortitude.java index 94c55cc50..1ad84ca2b 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Fortitude.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Fortitude.java @@ -15,8 +15,10 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.Skill; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -107,7 +109,8 @@ public class Fortitude extends Skill UtilPlayer.health(entry.getKey(), toHeal); //Effect - UtilParticle.PlayParticle(ParticleType.HEART, entry.getKey().getEyeLocation(), 0, 0.2f, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HEART, entry.getKey().getEyeLocation(), 0, 0.2f, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); //Finished if (entry.getValue() <= 0) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java index 274a9f4e0..c6456547f 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java @@ -15,7 +15,9 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.core.condition.Condition; import mineplex.minecraft.game.core.condition.Condition.ConditionType; import mineplex.core.updater.UpdateType; @@ -114,7 +116,8 @@ public class HoldPosition extends SkillActive continue; UtilParticle.PlayParticle(ParticleType.MOB_SPELL, player.getLocation(), - (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 3 + getLevel(player)); + (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 3 + getLevel(player), + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/ShieldSmash.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/ShieldSmash.java index 4ad7c9264..74c32eca4 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/ShieldSmash.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/ShieldSmash.java @@ -14,7 +14,9 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -66,8 +68,10 @@ public class ShieldSmash extends SkillActive loc.add(0, 0.8, 0); //Particle - UtilParticle.PlayParticle(ParticleType.CLOUD, loc, 0, 0, 0, 0.05f, 6); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.CLOUD, loc, 0, 0, 0, 0.05f, 6, + ViewDist.LONG, UtilServer.getPlayers()); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc, 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); boolean hit = false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java index 954680e46..dcd433766 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java @@ -26,6 +26,7 @@ import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.core.condition.Condition.ConditionType; import mineplex.minecraft.game.classcombat.Skill.Skill; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -267,7 +268,8 @@ public class ArcticArmor extends Skill for (Entity ent : _active) { UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, ent.getLocation(), - (float)(Math.random() - 0.5), 0.2f + (float)Math.random(), (float)(Math.random() - 0.5), 0, 3); + (float)(Math.random() - 0.5), 0.2f + (float)Math.random(), (float)(Math.random() - 0.5), 0, 3, + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBondsData.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBondsData.java index a2a54c0fa..c1afd55b2 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBondsData.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBondsData.java @@ -4,7 +4,9 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -34,7 +36,8 @@ public class LifeBondsData } _loc.add(UtilAlg.getTrajectory(_loc, _target.getLocation().add(0, 0.8, 0)).multiply(0.9)); - UtilParticle.PlayParticle(ParticleType.HEART, _loc, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HEART, _loc, 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); return false; } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/StaticLazer.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/StaticLazer.java index 4d3250ef9..7765eb633 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/StaticLazer.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/StaticLazer.java @@ -11,7 +11,9 @@ import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillChargeSword; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -93,13 +95,15 @@ public class StaticLazer extends SkillChargeSword curRange += 0.2; //Smoke Trail - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget, 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } //Destination Location target = player.getLocation().add(player.getLocation().getDirection().multiply(curRange)); - UtilParticle.PlayParticle(ParticleType.EXPLODE, target, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.EXPLODE, target, 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); //Firework UtilFirework.playFirework(player.getLocation().add(player.getLocation().getDirection().multiply(Math.max(0, curRange - 0.6))), Type.BURST, Color.WHITE, false, false); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java index aff5b5bc0..c02bd39f6 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java @@ -16,11 +16,13 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -148,7 +150,8 @@ public class Agility extends SkillActive { if (player.isSprinting()) UtilParticle.PlayParticle(ParticleType.SPELL, player.getLocation(), - (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 4); + (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 4, + ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Barrage.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Barrage.java index 2fda02997..3df193e1f 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Barrage.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Barrage.java @@ -9,7 +9,9 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillChargeBow; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -81,7 +83,8 @@ public class Barrage extends SkillChargeBow _arrows.add(arrow); cur.getWorld().playSound(cur.getLocation(), Sound.SHOOT_ARROW, 1f, 1f); - UtilParticle.PlayParticle(ParticleType.CRIT, arrow.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.CRIT, arrow.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Disengage.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Disengage.java index a5e872bcb..327bfa27a 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Disengage.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Disengage.java @@ -21,8 +21,10 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -126,7 +128,8 @@ public class Disengage extends SkillActive //Effect damagee.getWorld().playSound(damager.getLocation(), Sound.ZOMBIE_METAL, 0.5f, 1.6f); - UtilParticle.PlayParticle(ParticleType.ANGRY_VILLAGER, damager.getEyeLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.ANGRY_VILLAGER, damager.getEyeLocation(), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); //Inform UtilPlayer.message(damagee, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + ".")); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/ExplosiveShot.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/ExplosiveShot.java index 293025f4d..b265a710d 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/ExplosiveShot.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/ExplosiveShot.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Iterator; + import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -24,10 +25,12 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -232,7 +235,8 @@ public class ExplosiveShot extends SkillActive UtilPlayer.message((Player)cur, F.main(GetClassType().name(), F.name(player.getName()) +" hit you with " + F.skill(GetName(level)) + ".")); } - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, loc, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, loc, 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); loc.getWorld().playSound(loc, Sound.EXPLODE, 2f, 0.75f); } @@ -243,7 +247,8 @@ public class ExplosiveShot extends SkillActive return; for (Entity ent : _arrows) - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HealingShot.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HealingShot.java index 571880344..43178e1bc 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HealingShot.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HealingShot.java @@ -28,7 +28,9 @@ import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -170,7 +172,9 @@ public class HealingShot extends SkillActive "You hit " + F.name(UtilEnt.getName(damagee)) +" with " + F.skill(GetName(level)) + ".")); //Particles - UtilParticle.PlayParticle(ParticleType.HEART, damagee.getLocation(), (float)(Math.random() - 0.5), (float)(Math.random() + 0.5), (float)(Math.random() - 0.5), 2f, 12); + UtilParticle.PlayParticle(ParticleType.HEART, damagee.getLocation(), + (float)(Math.random() - 0.5), (float)(Math.random() + 0.5), (float)(Math.random() - 0.5), 2f, 12, + ViewDist.MAX, UtilServer.getPlayers()); //Remove projectile.remove(); @@ -184,7 +188,8 @@ public class HealingShot extends SkillActive for (Entity ent : _arrows) { - UtilParticle.PlayParticle(ParticleType.HEART, ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HEART, ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java index 9848193ed..429d86e16 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java @@ -15,7 +15,9 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -110,7 +112,8 @@ public class HeavyArrows extends Skill for (Entity ent : _arrows) { - UtilParticle.PlayParticle(ParticleType.CRIT, ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.CRIT, ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/IncendiaryShot.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/IncendiaryShot.java index 4b2206cd6..91bb49867 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/IncendiaryShot.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/IncendiaryShot.java @@ -20,10 +20,12 @@ import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -146,7 +148,8 @@ public class IncendiaryShot extends SkillActive for (Entity ent : _arrows) { - UtilParticle.PlayParticle(ParticleType.FLAME, ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/NapalmShot.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/NapalmShot.java index 9f2fb7378..90f4d217d 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/NapalmShot.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/NapalmShot.java @@ -22,11 +22,13 @@ import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -147,7 +149,8 @@ public class NapalmShot extends SkillActive for (Entity ent : _arrows) { - UtilParticle.PlayParticle(ParticleType.LAVA, ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java index 88412d922..c2895fc66 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java @@ -7,7 +7,9 @@ import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.minecraft.game.classcombat.Skill.SkillChargeBow; @@ -93,7 +95,8 @@ public class Overcharge extends SkillChargeBow for (Entity ent : _arrows.keySet()) { - UtilParticle.PlayParticle(ParticleType.RED_DUST, ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.RED_DUST, ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java index fa39af241..97ce042c5 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java @@ -9,8 +9,10 @@ import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.Skill.Skill; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; @@ -46,7 +48,8 @@ public class VitalitySpores extends Skill //Factory.Condition().Factory().Regen(GetName(), cur, cur, 3.9 + 2*level, 0, false, true, true); UtilPlayer.health(cur, 1); - UtilParticle.PlayParticle(ParticleType.HEART, cur.getEyeLocation().add(UtilAlg.getBehind(cur.getLocation().getDirection().multiply(0.5))), 0, 0.2f, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HEART, cur.getEyeLocation().add(UtilAlg.getBehind(cur.getLocation().getDirection().multiply(0.5))), 0, 0.2f, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsFury.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsFury.java index c501014b5..87f98a7f8 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsFury.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsFury.java @@ -18,11 +18,13 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.minecraft.game.core.condition.Condition.ConditionType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; @@ -197,7 +199,8 @@ public class WolfsFury extends SkillActive for (Player player : _active.keySet()) { UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation(), - (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 4); + (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 4, + ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java index b8d2f31ab..520e9597a 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java @@ -28,8 +28,10 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.item.ItemFactory; import mineplex.minecraft.game.classcombat.item.ItemUsable; @@ -139,7 +141,8 @@ public class ProximityExplosive extends ItemUsable //Effect ent.getWorld().playSound(ent.getLocation(), Sound.NOTE_PLING, 0.5f, 0.5f); ent.getWorld().playSound(ent.getLocation(), Sound.EXPLODE, 4f, 0.8f); - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, ent.getLocation(), 0, 0.5f, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, ent.getLocation(), 0, 0.5f, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } @EventHandler diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java index 33da5e43d..07d787b27 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java @@ -24,7 +24,9 @@ import mineplex.core.updater.UpdateType; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.minecraft.game.classcombat.item.ItemFactory; @@ -132,7 +134,8 @@ public class ProximityZapper extends ItemUsable //Effect ent.getWorld().playSound(ent.getLocation(), Sound.NOTE_PLING, 0.5f, 0.5f); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, ent.getLocation(), 0, 0.5f, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, ent.getLocation(), 0, 0.5f, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index 9d3b7a50e..5e147a023 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -63,6 +63,7 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; @@ -334,7 +335,8 @@ public class Build extends SoloGame //Effects _viewData.Spawn.getWorld().playSound(_viewData.Spawn, Sound.EXPLODE, 3f, 1f); - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, _viewData.Spawn, 4f, 4f, 4f, 0, 10); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, _viewData.Spawn, 4f, 4f, 4f, 0, 10, + ViewDist.MAX, UtilServer.getPlayers()); } //Announce Builder @@ -789,7 +791,8 @@ public class Build extends SoloGame if (data.Player.equals(event.getPlayer())) { event.getItem().remove(); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.getItem().getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.getItem().getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index a47892d94..abda7b4f3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -13,6 +13,7 @@ import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import org.bukkit.Location; import org.bukkit.Sound; @@ -132,7 +133,8 @@ public class BuildData { entity.remove(); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, entity.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, entity.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } @@ -204,7 +206,8 @@ public class BuildData { entIter.remove(); ent.remove(); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, ent.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, ent.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } @@ -219,7 +222,8 @@ public class BuildData { itemIter.remove(); ent.remove(); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, ent.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, ent.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } } @@ -238,9 +242,11 @@ public class BuildData amount = 1; if (all) - UtilParticle.PlayParticle(type, loc, 0.4f, 0.4f, 0.4f, 0, amount); + UtilParticle.PlayParticle(type, loc, 0.4f, 0.4f, 0.4f, 0, amount, + ViewDist.LONGER, UtilServer.getPlayers()); else - UtilParticle.PlayParticle(Player, type, loc, 0.4f, 0.4f, 0.4f, 0, amount, true); + UtilParticle.PlayParticle(type, loc, 0.4f, 0.4f, 0.4f, 0, amount, + ViewDist.LONGER, Player); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/castlesiege/CastleSiege.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/castlesiege/CastleSiege.java index 0713e43d4..74f919373 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/castlesiege/CastleSiege.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/castlesiege/CastleSiege.java @@ -48,6 +48,7 @@ import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; @@ -880,7 +881,8 @@ public class CastleSiege extends TeamGame if (event.getClickedBlock() == null || event.getClickedBlock().getTypeId() != 85) return; - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, event.getClickedBlock().getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, event.getClickedBlock().getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); event.getClickedBlock().getWorld().playSound(event.getClickedBlock().getLocation(), Sound.NOTE_STICKS, 2f, 1f); Manager.GetBlockRestore().Add(event.getClickedBlock(), 0, (byte)0, 1000); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/PumpkinKing.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/PumpkinKing.java index 67fe0adf5..1397465e1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/PumpkinKing.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/PumpkinKing.java @@ -7,7 +7,9 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilTime; import nautilus.game.arcade.game.games.christmas.ChristmasAudio; import nautilus.game.arcade.game.games.christmas.parts.Part5; @@ -129,8 +131,10 @@ public class PumpkinKing public void Die() { - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, _ent.getLocation(), 0, 1, 0, 0, 1); - UtilParticle.PlayParticle(ParticleType.LAVA, _ent.getLocation(), 0.25f, 1, 0.25f, 0, 50); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, _ent.getLocation(), 0, 1, 0, 0, 1, + ViewDist.LONGER, UtilServer.getPlayers()); + UtilParticle.PlayParticle(ParticleType.LAVA, _ent.getLocation(), 0.25f, 1, 0.25f, 0, 50, + ViewDist.LONGER, UtilServer.getPlayers()); _ent.getWorld().playSound(_ent.getLocation(), Sound.ENDERDRAGON_DEATH, 4f, 0.5f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part1.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part1.java index cb1ec9741..c37047bce 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part1.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part1.java @@ -11,6 +11,7 @@ import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -100,7 +101,8 @@ public class Part1 extends Part event.setCancelled(true); event.getEntity().getWorld().playSound(event.getLocation(), Sound.EXPLODE, 4f, 1f); - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, event.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, event.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } @EventHandler(priority = EventPriority.LOWEST) @@ -109,7 +111,8 @@ public class Part1 extends Part event.setCancelled(true); event.getEntity().getWorld().playSound(event.getEntity().getLocation(), Sound.EXPLODE, 4f, 1f); - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, event.getEntity().getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, event.getEntity().getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } private void UpdateSkeleton() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java index 6e4350f2a..8d3e0071b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java @@ -39,9 +39,11 @@ import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -583,8 +585,8 @@ public class Gravity extends SoloGame else { arrow.setVelocity(_arrows.get(arrow)); - UtilParticle.PlayParticle(ParticleType.FLAME, arrow.getLocation(), 0, 0, 0, 0, 1); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, arrow.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, arrow.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); arrow.getWorld().playSound(arrow.getLocation(), Sound.FIZZ, 0.3f, 0.5f); } } @@ -650,7 +652,8 @@ public class Gravity extends SoloGame } //Effect - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, proj.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, proj.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); proj.getWorld().playSound(proj.getLocation(), Sound.EXPLODE, 0.6f, 1.5f); //Remove diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java index 03fcfaa87..1df5889d9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java @@ -3,7 +3,9 @@ package nautilus.game.arcade.game.games.gravity; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBat; import nautilus.game.arcade.game.games.gravity.objects.*; @@ -93,11 +95,13 @@ public abstract class GravityObject } else if (this instanceof GravityBomb) { - UtilParticle.PlayParticle(ParticleType.FLAME, Ent.getLocation().add(0, -0.1, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, Ent.getLocation().add(0, -0.1, 0), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } else if (this instanceof GravityHook) { - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, Ent.getLocation().add(0, 0.1, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, Ent.getLocation().add(0, 0.1, 0), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityBomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityBomb.java index de2f0adfb..ee9204abf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityBomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityBomb.java @@ -6,8 +6,10 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import nautilus.game.arcade.game.games.gravity.Gravity; import nautilus.game.arcade.game.games.gravity.GravityObject; @@ -172,7 +174,8 @@ public class GravityBomb extends GravityObject public void CustomCollide(GravityObject other) { - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, Ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, Ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); Ent.getWorld().playSound(Ent.getLocation(), Sound.EXPLODE, 0.3f, 1f); Ent.remove(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityDebris.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityDebris.java index 8dc9dbc26..674ac04fd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityDebris.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityDebris.java @@ -1,7 +1,9 @@ package nautilus.game.arcade.game.games.gravity.objects; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import nautilus.game.arcade.game.games.gravity.Gravity; import nautilus.game.arcade.game.games.gravity.GravityObject; @@ -21,7 +23,8 @@ public class GravityDebris extends GravityObject public void CustomCollide(GravityObject other) { Ent.remove(); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, Ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, Ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } public boolean CanCollide(GravityObject other) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java index 3ed9accdb..98fc47ef3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java @@ -7,8 +7,10 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import nautilus.game.arcade.game.games.gravity.Gravity; import nautilus.game.arcade.game.games.gravity.GravityObject; @@ -150,7 +152,8 @@ public class GravityPlayer extends GravityObject Ent.getWorld().playSound(Ent.getLocation(), Sound.GHAST_FIREBALL, 0.3f, 2f); //Effect - UtilParticle.PlayParticle(ParticleType.FLAME, Ent.getLocation().add(0, 0.5, 0), 0.1f, 0.1f, 0.1f, 0, 2); + UtilParticle.PlayParticle(ParticleType.FLAME, Ent.getLocation().add(0, 0.5, 0), 0.1f, 0.1f, 0.1f, 0, 2, + ViewDist.MAX, UtilServer.getPlayers()); } public void Oxygen() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/creatures/PumpkinKing.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/creatures/PumpkinKing.java index bdd1fc7b7..5ee19efdd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/creatures/PumpkinKing.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/creatures/PumpkinKing.java @@ -11,7 +11,6 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; - import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; @@ -20,6 +19,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextTop; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -257,7 +257,8 @@ public class PumpkinKing extends CreatureBase if (GetState() >= 4) { //Particles - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, GetEntity().getLocation().add(0, 1.5, 0), 0.2f, 0.4f, 0.2f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, GetEntity().getLocation().add(0, 1.5, 0), 0.2f, 0.4f, 0.2f, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } @@ -404,7 +405,8 @@ public class PumpkinKing extends CreatureBase { Skeleton minion = _minions.get(i); - UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, minion.getEyeLocation(), 0.1f, 0.1f, 0.1f, 0, 1); + UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, minion.getEyeLocation(), 0.1f, 0.1f, 0.1f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); minion.setTarget(null); @@ -465,7 +467,8 @@ public class PumpkinKing extends CreatureBase { final Skeleton minion = _minions.get(i); - UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, minion.getEyeLocation(), 0.1f, 0.1f, 0.1f, 0, 1); + UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, minion.getEyeLocation(), 0.1f, 0.1f, 0.1f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); LivingEntity target = _minionTargets.get(minion); if (target == null) @@ -657,7 +660,8 @@ public class PumpkinKing extends CreatureBase { Entity shield = _shields.get(i); - UtilParticle.PlayParticle(ParticleType.FLAME, shield.getLocation(), 0.1f, 0.1f, 0.1f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, shield.getLocation(), 0.1f, 0.1f, 0.1f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); double lead = i * ((2d * Math.PI)/_shields.size()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/hideseek/HideSeek.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/hideseek/HideSeek.java index 31c333ead..28bc955d8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/hideseek/HideSeek.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/hideseek/HideSeek.java @@ -58,6 +58,7 @@ import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilFirework; @@ -917,7 +918,8 @@ public class HideSeek extends TeamGame this.AddGems(player, 0.25, "Meows", true, true); - UtilParticle.PlayParticle(ParticleType.NOTE, player.getLocation().add(0, 0.75, 0), 0.4f, 0.4f, 0.4f, 0, 6); + UtilParticle.PlayParticle(ParticleType.NOTE, player.getLocation().add(0, 0.75, 0), 0.4f, 0.4f, 0.4f, 0, 6, + ViewDist.MAX, UtilServer.getPlayers()); Bukkit.getPluginManager().callEvent(new MeowEvent(event.getPlayer())); } @@ -1524,7 +1526,8 @@ public class HideSeek extends TeamGame public void InfestStart(LivingEntity ent) { - UtilParticle.PlayParticle(ParticleType.SLIME, ent.getLocation().add(0, 0.6, 0), 0.3f, 0.3f, 0.3f, 0, 24); + UtilParticle.PlayParticle(ParticleType.SLIME, ent.getLocation().add(0, 0.6, 0), 0.3f, 0.3f, 0.3f, 0, 24, + ViewDist.MAX, UtilServer.getPlayers()); ent.getWorld().playSound(ent.getLocation(), Sound.SLIME_ATTACK, 2f, 1f); ent.getWorld().playSound(ent.getLocation(), Sound.SLIME_ATTACK, 2f, 1f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java index 8a05509f2..0c7ae915e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java @@ -74,6 +74,7 @@ import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilTime; import mineplex.core.disguise.disguises.DisguisePlayer; import mineplex.core.itemstack.ItemStackFactory; @@ -966,7 +967,8 @@ public class MineStrike extends TeamGame //Particle if (bullet != null && bullet.Shooter != null) - UtilParticle.PlayParticle(bullet.Shooter, ParticleType.FIREWORKS_SPARK, event.getEntity().getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, event.getEntity().getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, bullet.Shooter); //Hit Block Sound event.getEntity().getWorld().playSound(event.getEntity().getLocation(), Sound.ENDERMAN_HIT, 1f, 1f); @@ -1049,7 +1051,8 @@ public class MineStrike extends TeamGame //Particle if (bullet != null && bullet.Shooter != null) - UtilParticle.PlayParticle(bullet.Shooter, ParticleType.FIREWORKS_SPARK, arrow.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, arrow.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, bullet.Shooter); //Hit Block Sound arrow.getWorld().playSound(arrow.getLocation(), Sound.ENDERMAN_HIT, 1f, 1f); @@ -1063,7 +1066,8 @@ public class MineStrike extends TeamGame { loc.add(UtilAlg.getTrajectory(loc, arrow.getLocation()).multiply(1)); - UtilParticle.PlayParticle(ParticleType.CRIT, loc, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.CRIT, loc, 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } //Block Particle @@ -1459,7 +1463,8 @@ public class MineStrike extends TeamGame { Entity grenadeItem = grenadeIterator.next(); - UtilParticle.PlayParticle(ParticleType.CRIT, grenadeItem.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.CRIT, grenadeItem.getLocation(), 0, 0, 0, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); //Expired if (!grenadeItem.isValid() || grenadeItem.getTicksLived() > 400) @@ -1763,7 +1768,8 @@ public class MineStrike extends TeamGame if (_bombItem == null) return; - UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, _bombItem.getLocation().add(0.0, 0.2, 0.0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, _bombItem.getLocation().add(0.0, 0.2, 0.0), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } public int getScore(GameTeam team) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/data/Bomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/data/Bomb.java index a37485eed..65dee38f0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/data/Bomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/data/Bomb.java @@ -1,8 +1,10 @@ package nautilus.game.arcade.game.games.minestrike.data; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import org.bukkit.Material; import org.bukkit.Sound; @@ -53,7 +55,8 @@ public class Bomb if (UtilTime.elapsed(LastBeep, beepDuration)) { Block.getWorld().playSound(Block.getLocation(), Sound.ANVIL_BREAK, volume, 1f); - UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, Block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, Block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); LastBeep = System.currentTimeMillis(); } @@ -63,7 +66,8 @@ public class Bomb clean(); //Effect - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, Block.getLocation(), 10f, 10f, 10f, 0, 30); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, Block.getLocation(), 10f, 10f, 10f, 0, 30, + ViewDist.MAX, UtilServer.getPlayers()); for (int i=0 ; i<3 ; i++) Block.getWorld().playSound(Block.getLocation(), Sound.ANVIL_LAND, 20f, (float)(Math.random() * 0.5 + 0.5)); @@ -87,7 +91,8 @@ public class Bomb clean(); //Effect - UtilParticle.PlayParticle(ParticleType.CLOUD, Block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.CLOUD, Block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } public void clean() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/FireGrenadeBase.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/FireGrenadeBase.java index 2b85418c7..a94e0ee44 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/FireGrenadeBase.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/FireGrenadeBase.java @@ -7,6 +7,7 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.games.minestrike.MineStrike; import nautilus.game.arcade.game.games.minestrike.Radio; @@ -54,7 +55,8 @@ public abstract class FireGrenadeBase extends Grenade loc.getWorld().playSound(loc, Sound.IRONGOLEM_THROW, 1f, 1f); //Particle - UtilParticle.PlayParticle(ParticleType.LAVA, loc.add(0, 0.2, 0), 0.3f, 0f, 0.3f, 0, 30); + UtilParticle.PlayParticle(ParticleType.LAVA, loc.add(0, 0.2, 0), 0.3f, 0f, 0.3f, 0, 30, + ViewDist.LONG, UtilServer.getPlayers()); //Fire Blocks final HashMap blocks = UtilBlock.getInRadius(loc, 3.5d); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/HighExplosive.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/HighExplosive.java index 1bcd4e483..cf422687b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/HighExplosive.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/HighExplosive.java @@ -5,7 +5,9 @@ import java.util.HashMap; import java.util.List; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.games.minestrike.MineStrike; @@ -36,7 +38,8 @@ public class HighExplosive extends Grenade if (ent.getTicksLived() > 40) { UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, - ent.getLocation(), 0, 0, 0, 0, 1); + ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); ent.getWorld().playSound(ent.getLocation(), Sound.EXPLODE, 3f, 0.8f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/Smoke.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/Smoke.java index 0537384b8..1857f7a30 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/Smoke.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/Smoke.java @@ -1,7 +1,9 @@ package nautilus.game.arcade.game.games.minestrike.items.grenades; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.games.minestrike.MineStrike; import nautilus.game.arcade.game.games.minestrike.Radio; @@ -29,7 +31,8 @@ public class Smoke extends Grenade { if (ent.getTicksLived() > 60) { - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, ent.getLocation(), 0.3f, 0.3f, 0.3f, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, ent.getLocation(), 0.3f, 0.3f, 0.3f, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); ent.getWorld().playSound(ent.getLocation(), Sound.FIZZ, 0.1f, 0.1f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java index cc2111290..0a70ee22a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java @@ -3,7 +3,6 @@ package nautilus.game.arcade.game.games.minestrike.items.guns; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAlg; - import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilMath; @@ -12,6 +11,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTextBottom; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilServer; import mineplex.core.recharge.Recharge; import mineplex.core.recharge.RechargedEvent; @@ -131,7 +131,8 @@ public class Gun extends StrikeItem Location loc = player.getEyeLocation().add(player.getLocation().getDirection().multiply(1.2)); loc.add(UtilAlg.getRight(player.getLocation().getDirection()).multiply(0.5)); loc.add(UtilAlg.getDown(player.getLocation().getDirection()).multiply(0.3)); - UtilParticle.PlayParticle(ParticleType.EXPLODE, loc, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.EXPLODE, loc, 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); game.registerBullet(fireBullet(player, game)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Shotgun.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Shotgun.java index e71a46c68..579843cc3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Shotgun.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Shotgun.java @@ -1,7 +1,9 @@ package nautilus.game.arcade.game.games.minestrike.items.guns; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import nautilus.game.arcade.game.games.minestrike.MineStrike; import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType; @@ -45,7 +47,8 @@ public class Shotgun extends Gun //Effect soundFire(player.getLocation()); - UtilParticle.PlayParticle(ParticleType.CLOUD, player.getEyeLocation().add(player.getLocation().getDirection().multiply(1.5)), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.CLOUD, player.getEyeLocation().add(player.getLocation().getDirection().multiply(1.5)), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); for (int i=0 ; i<_pellets ; i++) game.registerBullet(fireBullet(player, game)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java index e1b22e1b2..2d319f847 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java @@ -15,7 +15,9 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseSlime; import mineplex.core.itemstack.ItemStackFactory; @@ -190,7 +192,8 @@ public class KitSlime extends SmashKit DamageCause.CUSTOM, 8, true, false, false, player.getName(), GetName()); - UtilParticle.PlayParticle(ParticleType.SLIME, other.getLocation().add(0, 0.6, 0), 1f, 1f, 1f, 0, 20); + UtilParticle.PlayParticle(ParticleType.SLIME, other.getLocation().add(0, 0.6, 0), 1f, 1f, 1f, 0, 20, + ViewDist.LONG, UtilServer.getPlayers()); player.getWorld().playSound(other.getLocation(), Sound.SLIME_ATTACK, 3f, 1f); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/snake/Snake.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/snake/Snake.java index 699c3ae15..25e4cb3f9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/snake/Snake.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/snake/Snake.java @@ -26,9 +26,9 @@ import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.util.Vector; + import net.minecraft.server.v1_7_R4.EntityCreature; import net.minecraft.server.v1_7_R4.Navigation; - import mineplex.core.common.util.C; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; @@ -37,8 +37,10 @@ import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseSheep; import mineplex.core.recharge.Recharge; @@ -349,7 +351,8 @@ public class Snake extends SoloGame if (UtilMath.offset(_tail.get(player).get(0), tail) < 1.2) { - UtilParticle.PlayParticle(ParticleType.EXPLODE, tail.getLocation().add(0, 1, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.EXPLODE, tail.getLocation().add(0, 1, 0), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); KillPlayer(player, other, null); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/SneakyAssassins.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/SneakyAssassins.java index 73d1b3702..474567032 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/SneakyAssassins.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/SneakyAssassins.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.sneakyassassins; import mineplex.core.common.util.*; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.*; import mineplex.core.recharge.Recharge; import mineplex.core.updater.*; @@ -305,7 +306,8 @@ public class SneakyAssassins extends SoloGame event.getPlayer().playSound(event.getPlayer().getLocation(), Sound.VILLAGER_YES, 1f, 1f); - UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, event.getRightClicked().getLocation().add(0, 1, 0), 0.3f, 0.5f, 0.3f, 0, 10); + UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, event.getRightClicked().getLocation().add(0, 1, 0), 0.3f, 0.5f, 0.3f, 0, 10, + ViewDist.NORMAL, UtilServer.getPlayers()); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java index 6d03c3644..f491bfa88 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java @@ -1,6 +1,7 @@ package nautilus.game.arcade.game.games.sneakyassassins.npc; import mineplex.core.common.util.*; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.*; import mineplex.core.updater.event.*; import mineplex.minecraft.game.core.condition.Condition.ConditionType; @@ -83,7 +84,8 @@ public class NpcManager implements Listener { LivingEntity npc = UtilAlg.Random(npcs); - UtilParticle.PlayParticle(UtilParticle.ParticleType.LARGE_SMOKE, npc.getLocation(), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(UtilParticle.ParticleType.LARGE_SMOKE, npc.getLocation(), 0f, 0f, 0f, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); npc.remove(); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/powerups/PowerUpItem.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/powerups/PowerUpItem.java index 83ead7777..70cce7b1c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/powerups/PowerUpItem.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/powerups/PowerUpItem.java @@ -2,8 +2,10 @@ package nautilus.game.arcade.game.games.sneakyassassins.powerups; import mineplex.core.common.util.*; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.*; import mineplex.core.updater.event.*; + import org.bukkit.*; import org.bukkit.block.*; import org.bukkit.entity.*; @@ -149,6 +151,7 @@ public class PowerUpItem float z = (float) (Math.cos(getNPC().getTicksLived()/4d) * 1f); float y = (float) (Math.cos(getNPC().getTicksLived()/7d) * 1f + 1f); - UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, getNPC().getLocation().add(x, y, z), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, getNPC().getLocation().add(x, y, z), 0f, 0f, 0f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java index dfc4a6ab2..0ab7d530c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java @@ -74,6 +74,7 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; @@ -1471,7 +1472,8 @@ public class SurvivalGames extends SoloGame eFireball.dirY = traj.getY() * 0.1; eFireball.dirZ = traj.getZ() * 0.1; - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, spawn, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, spawn, 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); player.getWorld().playSound(attackSource, Sound.GHAST_FIREBALL, 2f, 2f); } } @@ -2102,7 +2104,8 @@ public class SurvivalGames extends SoloGame continue; } - UtilParticle.PlayParticle(ParticleType.SPELL, block.getLocation().add(0.5, 0.5, 0.5), 0.3f, 0.3f, 0.3f, 0, 1); + UtilParticle.PlayParticle(ParticleType.SPELL, block.getLocation().add(0.5, 0.5, 0.5), 0.3f, 0.3f, 0.3f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesTeams.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesTeams.java index 969e404b4..f37c1564b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesTeams.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesTeams.java @@ -54,6 +54,7 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; @@ -1176,7 +1177,8 @@ public class SurvivalGamesTeams extends TeamGame continue; } - UtilParticle.PlayParticle(ParticleType.SPELL, block.getLocation().add(0.5, 0.5, 0.5), 0.3f, 0.3f, 0.3f, 0, 1); + UtilParticle.PlayParticle(ParticleType.SPELL, block.getLocation().add(0.5, 0.5, 0.5), 0.3f, 0.3f, 0.3f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java index ea663bbe2..603f1c2bf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java @@ -60,6 +60,7 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; @@ -339,7 +340,8 @@ public class UHC extends TeamGame if (UtilMath.offset(player.getLocation(), newLoc) > 16) continue; - UtilParticle.PlayParticle(player, ParticleType.FLAME, newLoc, 0.5f, 0.5f, 0.5f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, newLoc, 0.5f, 0.5f, 0.5f, 0, 1, + ViewDist.NORMAL, player); if (_borderSize > 16) player.playSound(newLoc, Sound.FIZZ, 0.1f, 0.1f); @@ -365,7 +367,8 @@ public class UHC extends TeamGame if (UtilMath.offset(player.getLocation(), newLoc) > 16) continue; - UtilParticle.PlayParticle(player, ParticleType.FLAME, newLoc, 0.5f, 0.5f, 0.5f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, newLoc, 0.5f, 0.5f, 0.5f, 0, 1, + ViewDist.NORMAL, player); if (_borderSize > 16) player.playSound(newLoc, Sound.FIZZ, 0.1f, 0.1f); @@ -391,7 +394,8 @@ public class UHC extends TeamGame if (!UtilBlock.airFoliage(block)) continue; - UtilParticle.PlayParticle(player, ParticleType.LAVA, block.getLocation().add(0.5, 0.5, 0.5), 0.5f, 0.5f, 0.5f, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, block.getLocation().add(0.5, 0.5, 0.5), 0.5f, 0.5f, 0.5f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 26827c851..dd2016ca5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -21,6 +21,7 @@ import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextBottom; @@ -1185,8 +1186,9 @@ public class Wizards extends SoloGame if (event.getEntity() instanceof Player) { - UtilParticle.PlayParticle((Player) event.getDamager(), ParticleType.HEART, - ((LivingEntity) event.getEntity()).getEyeLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HEART, + ((LivingEntity) event.getEntity()).getEyeLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, (Player) event.getDamager()); } } } @@ -1943,7 +1945,8 @@ public class Wizards extends SoloGame { if (fireball.isValid() && IsLive()) { - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, fireball.getLocation(), 0.3F, 0.3F, 0.3F, 0, 3); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, fireball.getLocation(), 0.3F, 0.3F, 0.3F, 0, 3, + ViewDist.MAX, UtilServer.getPlayers()); if (i++ % 6 == 0) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellAnvilDrop.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellAnvilDrop.java index 26486168e..2b4ae19f6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellAnvilDrop.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellAnvilDrop.java @@ -4,7 +4,9 @@ import java.util.ArrayList; import java.util.Iterator; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.core.explosion.CustomExplosion; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -43,7 +45,8 @@ public class SpellAnvilDrop extends Spell implements SpellClick for (Player p : players) { - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, p.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, p.getLocation(), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); Location loc = p.getLocation().clone().add(0, 15 + (getSpellLevel(player) * 3), 0); int lowered = 0; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java index f20eec657..847c840be 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFlash.java @@ -2,7 +2,9 @@ package nautilus.game.arcade.game.games.wizards.spells; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -35,7 +37,8 @@ public class SpellFlash extends Spell implements SpellClick curRange += 0.2; // Smoke Trail - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } // Modify Range diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java index f293d3c25..94181f076 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellIceShards.java @@ -4,7 +4,9 @@ import java.util.HashMap; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilShapes; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; @@ -96,7 +98,8 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown data.GetThrown().remove(); Location loc = data.GetThrown().getLocation(); - UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.PACKED_ICE, 0), loc, 0.3F, 0.3F, 0.3F, 0, 12); + UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.PACKED_ICE, 0), loc, 0.3F, 0.3F, 0.3F, 0, 12, + ViewDist.LONG, UtilServer.getPlayers()); loc.getWorld().playSound(loc, Sound.GLASS, 1.2F, 1); for (int x = -1; x <= 1; x++) @@ -130,7 +133,8 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown { for (Location loc : UtilShapes.getLinesDistancedPoints(_lastParticles.get(entity), entity.getLocation(), 0.3)) { - UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.PACKED_ICE, 0), loc, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.PACKED_ICE, 0), loc, 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } _lastParticles.put(entity, entity.getLocation()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java index 9408397d4..854ffb045 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java @@ -9,7 +9,9 @@ import java.util.Random; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -124,7 +126,8 @@ public class SpellImplode extends Spell implements SpellClick 0.5 + (face.getModZ() * 0.6D)), - face.getModX() / 2F, face.getModX() / 2F, face.getModX() / 2F, 0, 6); + face.getModX() / 2F, face.getModX() / 2F, face.getModX() / 2F, 0, 6, + ViewDist.LONG, UtilServer.getPlayers()); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java index cf3b15a7a..51dd9e9cf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLightningStrike.java @@ -5,7 +5,9 @@ import java.util.ArrayList; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -57,7 +59,8 @@ public class SpellLightningStrike extends Spell implements SpellClick loc.add(0, 1, 0); } - UtilParticle.PlayParticle(ParticleType.ANGRY_VILLAGER, loc.clone().add(0, 1.3, 0), 0.5F, 0.3F, 0.5F, 0, 7); + UtilParticle.PlayParticle(ParticleType.ANGRY_VILLAGER, loc.clone().add(0, 1.3, 0), 0.5F, 0.3F, 0.5F, 0, 7, + ViewDist.LONG, UtilServer.getPlayers()); Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable() { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellManaBolt.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellManaBolt.java index 361a0fdcc..cccbbdcfd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellManaBolt.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellManaBolt.java @@ -5,7 +5,9 @@ import java.util.Random; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilShapes; import nautilus.game.arcade.game.games.wizards.Spell; @@ -83,7 +85,8 @@ public class SpellManaBolt extends Spell implements SpellClick loc.add(vector.multiply(2)); - UtilParticle.PlayParticle(ParticleType.RED_DUST, loc, -1, 1, 1, 1, 0); + UtilParticle.PlayParticle(ParticleType.RED_DUST, loc, -1, 1, 1, 1, 0, + ViewDist.LONG, UtilServer.getPlayers()); } missileLocation.getWorld().playSound(missileLocation, Sound.BAT_TAKEOFF, 1.2F, 1); @@ -200,7 +203,8 @@ public class SpellManaBolt extends Spell implements SpellClick { for (Location loc : locations) { - UtilParticle.PlayParticle(ParticleType.RED_DUST, loc, -1, 1, 1, 1, 0); + UtilParticle.PlayParticle(ParticleType.RED_DUST, loc, -1, 1, 1, 1, 0, + ViewDist.LONG, UtilServer.getPlayers()); } if (timesRan++ > 1) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java index c56787d0e..01fbc81ec 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellNapalm.java @@ -7,7 +7,9 @@ import java.util.Random; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -89,19 +91,20 @@ public class SpellNapalm extends Spell implements SpellClick UtilParticle.PlayParticle(ParticleType.RED_DUST, - napalmLoc.clone().add( + napalmLoc.clone().add( - (size * (x - 0.5)) / 5, + (size * (x - 0.5)) / 5, - (size * (y - 0.5)) / 5, + (size * (y - 0.5)) / 5, - (size * (z - 0.5)) / 5), + (size * (z - 0.5)) / 5), - -0.3F, + -0.3F, - 0.35F + (r.nextFloat() / 8), + 0.35F + (r.nextFloat() / 8), - 0.1F, 1, 0); + 0.1F, 1, 0, + ViewDist.LONG, UtilServer.getPlayers()); } if (lastTick % 3 == 0) @@ -119,9 +122,9 @@ public class SpellNapalm extends Spell implements SpellClick if (entity instanceof LivingEntity) { Wizards.getArcadeManager() - .GetDamage() - .NewDamageEvent((LivingEntity) entity, player, null, DamageCause.FIRE, - heat / 1.5, false, true, true, "Napalm", "Napalm"); + .GetDamage() + .NewDamageEvent((LivingEntity) entity, player, null, DamageCause.FIRE, + heat / 1.5, false, true, true, "Napalm", "Napalm"); } else { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java index 7636ab883..5aa7748c2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSpectralArrow.java @@ -5,7 +5,9 @@ import java.util.Iterator; import java.util.Map.Entry; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilShapes; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -58,7 +60,8 @@ public class SpellSpectralArrow extends Spell implements SpellClick for (Location loc : UtilShapes.getLinesDistancedPoints(entry.getValue()[1], entry.getKey().getLocation(), 0.7D)) { - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc, 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } entry.getValue()[1] = entry.getKey().getLocation(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSummonWolves.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSummonWolves.java index d1805417a..cdfbe7b97 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSummonWolves.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellSummonWolves.java @@ -6,7 +6,9 @@ import java.util.Random; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -65,7 +67,8 @@ public class SpellSummonWolves extends Spell implements SpellClick, SpellClickBl _summonedWolves.put(wolf, System.currentTimeMillis() + (30L * 1000L)); } - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc, 0.8F, 0, 0.8F, 0, 4); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc, 0.8F, 0, 0.8F, 0, 4, + ViewDist.LONG, UtilServer.getPlayers()); player.getWorld().playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1.2F, 1); charge(player); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java index d68fb677f..7f6e91210 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellWizardsCompass.java @@ -9,7 +9,9 @@ import java.util.Map.Entry; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.hologram.Hologram; import mineplex.core.hologram.Hologram.HologramTarget; import nautilus.game.arcade.game.games.wizards.Spell; @@ -90,7 +92,8 @@ public class SpellWizardsCompass extends Spell implements SpellClick if ((entry.getValue() + tick) % 3 == 0) { // Colored redstone dust - UtilParticle.PlayParticle(ParticleType.RED_DUST, entry.getKey(), ints[0], ints[1], ints[2], 1, 0); + UtilParticle.PlayParticle(ParticleType.RED_DUST, entry.getKey(), ints[0], ints[1], ints[2], 1, 0, + ViewDist.LONG, UtilServer.getPlayers()); } if (entry.getValue() < tick) @@ -104,7 +107,8 @@ public class SpellWizardsCompass extends Spell implements SpellClick for (int a = 0; a < 2; a++) { // Colored redstone dust - UtilParticle.PlayParticle(ParticleType.RED_DUST, location, ints[0], ints[1], ints[2], 1, 0); + UtilParticle.PlayParticle(ParticleType.RED_DUST, location, ints[0], ints[1], ints[2], 1, 0, + ViewDist.LONG, UtilServer.getPlayers()); locations.put(location.clone(), tick + 50); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java index 73abced3d..96b6f0af8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TrapRune.java @@ -5,8 +5,10 @@ import java.util.ArrayList; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilShapes; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.core.explosion.CustomExplosion; import nautilus.game.arcade.game.games.wizards.Wizards; @@ -49,7 +51,8 @@ public class TrapRune if (_ticksLived == 100) { UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, _runeLocation, 0, _runeSize / 4, 0, _runeSize / 4, - (int) (_runeSize * 10)); + (int) (_runeSize * 10), + ViewDist.LONG, UtilServer.getPlayers()); } } else diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java index 4b550b3c6..e5a3216e0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java @@ -22,8 +22,10 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBat; import mineplex.core.disguise.disguises.DisguiseWitch; import mineplex.core.recharge.Recharge; @@ -167,7 +169,8 @@ public class PerkBatForm extends SmashPerk data.Location.add(data.Direction.clone().multiply(0.75)); //Effect - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.Location, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.Location, 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); data.Location.getWorld().playSound(data.Location, Sound.FIZZ, 1f, 2f); } } @@ -175,7 +178,8 @@ public class PerkBatForm extends SmashPerk private void explode(SonicBoomData data) { //Effect - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Location, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Location, 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); data.Location.getWorld().playSound(data.Location, Sound.EXPLODE, 1f, 1.5f); //Damage diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatWave.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatWave.java index fbb37a302..b0366e539 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatWave.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatWave.java @@ -24,6 +24,7 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; @@ -188,7 +189,8 @@ public class PerkBatWave extends SmashPerk //Effect bat.getWorld().playSound(bat.getLocation(), Sound.BAT_HURT, 1f, 1f); - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3, + ViewDist.LONG, UtilServer.getPlayers()); bat.remove(); @@ -232,7 +234,8 @@ public class PerkBatWave extends SmashPerk for (Bat bat : _bats.get(player)) { if (bat.isValid()) - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3, + ViewDist.LONG, UtilServer.getPlayers()); bat.remove(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBladeVortex.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBladeVortex.java index 32cfe31cc..66292d9d7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBladeVortex.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBladeVortex.java @@ -21,8 +21,10 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import nautilus.game.arcade.kit.Perk; @@ -102,12 +104,14 @@ public class PerkBladeVortex extends Perk double x = Math.sin(j + (ticksLived/50d)) * (j%(Math.PI/2d)) * 3; double z = Math.cos(j + (ticksLived/50d)) * (j%(Math.PI/2d)) * 3; - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(x, 1, z), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(x, 1, z), 0f, 0f, 0f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); x = Math.sin(j + (ticksLived/50d) + Math.PI/4) * (j%(Math.PI/2d)) * 3; z = Math.cos(j + (ticksLived/50d) + Math.PI/4) * (j%(Math.PI/2d)) * 3; - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(x, 1, z), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(x, 1, z), 0f, 0f, 0f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); //Sound player.getWorld().playSound(player.getLocation(), Sound.STEP_WOOL, 2f, 1f + (float)((j%(Math.PI/2d))/(Math.PI/2))); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBullsCharge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBullsCharge.java index d42fa4b71..45fb0049d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBullsCharge.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBullsCharge.java @@ -18,7 +18,9 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -121,7 +123,8 @@ public class PerkBullsCharge extends Perk if (player.hasPotionEffect(PotionEffectType.SPEED)) UtilParticle.PlayParticle(ParticleType.CRIT, player.getLocation(), - (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 2); + (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 2, + ViewDist.LONG, UtilServer.getPlayers()); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkChickenRocket.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkChickenRocket.java index 8934cae7e..5b34be0b8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkChickenRocket.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkChickenRocket.java @@ -27,8 +27,10 @@ import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -184,7 +186,8 @@ public class PerkChickenRocket extends SmashPerk } //Effect - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Chicken.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Chicken.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); data.Chicken.getWorld().playSound(data.Chicken.getLocation(), Sound.EXPLODE, 2f, 1.2f); //Firework diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperExplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperExplode.java index b500a7c39..4e1c99624 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperExplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperExplode.java @@ -23,7 +23,9 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseCreeper; import mineplex.core.recharge.Recharge; @@ -127,13 +129,15 @@ public class PerkCreeperExplode extends SmashPerk if (!isSuper) { //Effect - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 2f, 1f); } else { //Particles - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 5f, 5f, 5f, 0, 20); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 5f, 5f, 5f, 0, 20, + ViewDist.MAX, UtilServer.getPlayers()); //Sound for (int i=0 ; i<4 ; i++) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperSulphurBomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperSulphurBomb.java index 7fc965819..e5dc574de 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperSulphurBomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperSulphurBomb.java @@ -18,7 +18,9 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; @@ -116,7 +118,8 @@ public class PerkCreeperSulphurBomb extends SmashPerk implements IThrown public void Explode(ProjectileUser data) { - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.GetThrown().getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.GetThrown().getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); data.GetThrown().getWorld().playSound(data.GetThrown().getLocation(), Sound.EXPLODE, 1f, 1.5f); data.GetThrown().remove(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java index d8f23c155..d8ea85b93 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java @@ -17,7 +17,9 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; @@ -74,7 +76,8 @@ public class PerkDeadlyBones extends SmashPerk continue; //Effect - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, item.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, item.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); item.getWorld().playSound(item.getLocation(), Sound.EXPLODE, 0.8f, 1.4f); Player player = _active.get(item); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java index 15bab2b60..4ceaaee33 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java @@ -25,8 +25,10 @@ import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -179,8 +181,10 @@ public class PerkDeathsGrasp extends Perk event.AddMult(GetName(), GetName() + " Combo", 2, true); - UtilParticle.PlayParticle(ParticleType.RED_DUST, event.GetDamageeEntity().getLocation(), 0.5f, 0.5f, 0.5f, 0, 20); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.GetDamageeEntity().getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.RED_DUST, event.GetDamageeEntity().getLocation(), 0.5f, 0.5f, 0.5f, 0, 20, + ViewDist.MAX, UtilServer.getPlayers()); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.GetDamageeEntity().getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); damager.getWorld().playSound(damager.getLocation(), Sound.ZOMBIE_HURT, 1f, 2f); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDestructor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDestructor.java index 93fbdc12e..f56226073 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDestructor.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDestructor.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.kit.perks; import mineplex.core.common.util.*; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.itemstack.*; import mineplex.core.recharge.*; import mineplex.core.updater.*; @@ -151,7 +152,8 @@ public class PerkDestructor extends Perk } } - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.getTo(), 0f, 0f, 0f, 0f, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.getTo(), 0f, 0f, 0f, 0f, 1, + ViewDist.MAX, UtilServer.getPlayers()); event.getTo().getWorld().playSound(event.getTo(), Sound.EXPLODE, 1f, 0.5f); event.getTo().getWorld().playSound(event.getTo(), Sound.FIREWORK_TWINKLE, 2f, 0.5f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java index 4f8c1f86b..4d0a133e5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java @@ -18,7 +18,9 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -136,7 +138,8 @@ public class PerkEndermanDragon extends SmashPerk { EnderDragon dragon = _dragons.get(player); - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, dragon.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, dragon.getLocation(), 0, 0, 0, 0, 1, + ViewDist.LONGER, UtilServer.getPlayers()); for (Player other : Manager.GetGame().GetPlayers(true)) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEvade.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEvade.java index 79d5401a3..2aee1af11 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEvade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEvade.java @@ -22,8 +22,10 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -135,7 +137,8 @@ public class PerkEvade extends Perk //Effect UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, damagee.getLocation(), - (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 10); + (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 10, + ViewDist.NORMAL, UtilServer.getPlayers()); //Action damagee.teleport(target); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkExplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkExplode.java index d054f503d..f561a62ee 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkExplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkExplode.java @@ -18,7 +18,9 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import nautilus.game.arcade.kit.Perk; @@ -83,7 +85,8 @@ public class PerkExplode extends Perk } //Effect - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 2f, 1f); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlameDash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlameDash.java index d5ff6f514..fd0222205 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlameDash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlameDash.java @@ -17,8 +17,10 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -127,7 +129,8 @@ public class PerkFlameDash extends Perk data.Player.getWorld().playSound(data.Player.getLocation(), Sound.FIZZ, 0.6f, 1.2f); //Particles - UtilParticle.PlayParticle(ParticleType.FLAME, data.Player.getLocation().add(0, 0.4, 0), 0.2f, 0.2f, 0.2f, 0f, 3); + UtilParticle.PlayParticle(ParticleType.FLAME, data.Player.getLocation().add(0, 0.4, 0), 0.2f, 0.2f, 0.2f, 0f, 3, + ViewDist.LONGER, UtilServer.getPlayers()); } //End else @@ -157,8 +160,10 @@ public class PerkFlameDash extends Perk data.Player.getWorld().playSound(data.Player.getLocation(), Sound.EXPLODE, 1f, 1.2f); //Particles - UtilParticle.PlayParticle(ParticleType.FLAME, data.Player.getLocation(), 0.1f, 0.1f, 0.1f, 0.3f, 100); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.Player.getLocation().add(0, 0.4, 0), 0.2f, 0.2f, 0.2f, 0f, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, data.Player.getLocation(), 0.1f, 0.1f, 0.1f, 0.3f, 100, + ViewDist.MAX, UtilServer.getPlayers()); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.Player.getLocation().add(0, 0.4, 0), 0.2f, 0.2f, 0.2f, 0f, 1, + ViewDist.MAX, UtilServer.getPlayers()); dataIterator.remove(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlameSlam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlameSlam.java index e3baf43d6..5c17248c1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlameSlam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlameSlam.java @@ -23,8 +23,10 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -101,7 +103,8 @@ public class PerkFlameSlam extends Perk player.setVelocity(vel.multiply(0.8)); //Particle - UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 5); + UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 5, + ViewDist.LONGER, UtilServer.getPlayers()); for (Entity other : player.getWorld().getEntities()) { @@ -160,8 +163,10 @@ public class PerkFlameSlam extends Perk DamageCause.CUSTOM, 24, true, true, false, damager.getName(), GetName()); - UtilParticle.PlayParticle(ParticleType.LAVA, damagee.getLocation().add(0, 1, 0), 0.5f, 0.5f, 0.5f, 0, 30); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, damagee.getLocation().add(0, 1, 0), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, damagee.getLocation().add(0, 1, 0), 0.5f, 0.5f, 0.5f, 0, 30, + ViewDist.MAX, UtilServer.getPlayers()); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, damagee.getLocation().add(0, 1, 0), 0f, 0f, 0f, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); damager.getWorld().playSound(damagee.getLocation(), Sound.EXPLODE, 1f, 1f); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlash.java index 6de0c5225..72ca1f21a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlash.java @@ -22,7 +22,9 @@ import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.kit.Perk; @@ -136,7 +138,8 @@ public class PerkFlash extends Perk curRange += 0.2; // Smoke Trail - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.LONGER, UtilServer.getPlayers()); } // Modify Range diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorseKick.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorseKick.java index 6c1176f42..8339b3b3c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorseKick.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorseKick.java @@ -18,7 +18,9 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; import mineplex.core.disguise.disguises.DisguiseBase; @@ -152,7 +154,8 @@ public class PerkHorseKick extends SmashPerk loc.add(player.getLocation().getDirection().setY(0).normalize().multiply(1.5)); loc.add(0, 0.8, 0); - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, loc, 0.3f, 0.3f, 0.3f, 0, 2); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, loc, 0.3f, 0.3f, 0.3f, 0, 2, + ViewDist.LONG, UtilServer.getPlayers()); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java index 5570c57d9..5e67dbcec 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java @@ -12,7 +12,9 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -144,10 +146,12 @@ public class PerkInfernalHorror extends SmashPerk Manager.GetCondition().Factory().Speed(GetName(), player, player, 0.9, 1, false, false, false); //Particles - UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(0, 1, 0), 0.25f, 0.25f, 0.25f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation().add(0, 1, 0), 0.25f, 0.25f, 0.25f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); if (Math.random() > 0.9) - UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0, 1, 0), 0.25f, 0.25f, 0.25f, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0, 1, 0), 0.25f, 0.25f, 0.25f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } else { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLazer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLazer.java index 12bc8c2bf..e1cf6acf9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLazer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLazer.java @@ -24,7 +24,9 @@ import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseSheep; import mineplex.core.recharge.Recharge; @@ -168,13 +170,15 @@ public class PerkLazer extends Perk curRange += 0.2; //Smoke Trail - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, newTarget, 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } //Destination Location target = player.getLocation().add(player.getLocation().getDirection().multiply(curRange)); - UtilParticle.PlayParticle(ParticleType.EXPLODE, target, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.EXPLODE, target, 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); //Firework UtilFirework.playFirework(player.getLocation().add(player.getLocation().getDirection().multiply(Math.max(0, curRange - 0.6))), Type.BURST, Color.YELLOW, false, false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBlast.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBlast.java index 256ddd79f..0d1c147f2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBlast.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBlast.java @@ -21,7 +21,9 @@ import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; @@ -150,6 +152,7 @@ public class PerkMagmaBlast extends Perk } //Particles - UtilParticle.PlayParticle(ParticleType.LAVA, proj.getLocation(), 0.1f, 0.1f, 0.1f, 0.1f, 50); + UtilParticle.PlayParticle(ParticleType.LAVA, proj.getLocation(), 0.1f, 0.1f, 0.1f, 0.1f, 50, + ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBoost.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBoost.java index a15af4b4e..0b8edda31 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBoost.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBoost.java @@ -12,12 +12,12 @@ import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseMagmaCube; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; - import nautilus.game.arcade.kit.Perk; public class PerkMagmaBoost extends Perk @@ -128,13 +128,17 @@ public class PerkMagmaBoost extends Perk size += _kills.get(player); if (size == 0 && event.getType() == UpdateType.SEC) - UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0,0.4,0), 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0,0.4,0), 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); else if (size == 1 && event.getType() == UpdateType.FAST) - UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0,0.4,0), 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0,0.4,0), 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); else if (size == 2 && event.getType() == UpdateType.FASTER) - UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0,0.4,0), 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0,0.4,0), 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); else if (size == 3 && event.getType() == UpdateType.FASTEST) - UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0,0.4,0), 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0,0.4,0), 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0.15f + 0.15f * size, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkOvercharge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkOvercharge.java index 39a8dd93c..80813cbf7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkOvercharge.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkOvercharge.java @@ -21,6 +21,7 @@ import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -187,7 +188,8 @@ public class PerkOvercharge extends SmashPerk if (arrow.isDead() || !arrow.isValid() || arrow.isOnGround() || arrow.getTicksLived() > 120) arrowIterator.remove(); else - UtilParticle.PlayParticle(ParticleType.RED_DUST, arrow.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.RED_DUST, arrow.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBomb.java index 72a756cc7..c4d4511c2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBomb.java @@ -23,7 +23,9 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguisePigZombie; import mineplex.core.recharge.Recharge; @@ -149,7 +151,8 @@ public class PerkPigBaconBomb extends SmashPerk public void PigExplode(Iterator pigIterator, Pig pig, Player owner) { //Effect - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, pig.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, pig.getLocation().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); //Sound pig.getWorld().playSound(pig.getLocation(), Sound.EXPLODE, 0.6f, 2f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBounce.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBounce.java index c9ffc78d5..934899998 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBounce.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBounce.java @@ -23,8 +23,10 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilServer; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguisePigZombie; import mineplex.core.itemstack.ItemStackFactory; @@ -164,7 +166,8 @@ public class PerkPigBaconBounce extends SmashPerk implements IThrown if (event.getItem().getItemStack().getType() == Material.GRILLED_PORK) { UtilPlayer.health(event.getPlayer(), 1); - UtilParticle.PlayParticle(ParticleType.HEART, event.getPlayer().getLocation().add(0, 0.5, 0), 0.2f, 0.2f, 0.2f, 0, 4); + UtilParticle.PlayParticle(ParticleType.HEART, event.getPlayer().getLocation().add(0, 0.5, 0), 0.2f, 0.2f, 0.2f, 0, 4, + ViewDist.LONG, UtilServer.getPlayers()); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkRewind.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkRewind.java index 76bae73ac..4a1f12568 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkRewind.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkRewind.java @@ -19,7 +19,9 @@ import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -82,7 +84,8 @@ public class PerkRewind extends Perk while (UtilMath.offset(current, target) > 0.5) { - UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, current, 0, 1f, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, current, 0, 1f, 0, 0, 1, + ViewDist.LONGER, UtilServer.getPlayers()); current = current.add(UtilAlg.getTrajectory(current, target).multiply(0.1)); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java index 20ce38db4..8e7ee1331 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java @@ -13,7 +13,9 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -87,7 +89,8 @@ public class PerkSheepHoming extends SmashPerk data.Shooter.getName(), GetName()); } - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Sheep.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Sheep.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); data.Sheep.getWorld().playSound(data.Sheep.getLocation(), Sound.EXPLODE, 2f, 1f); data.Sheep.remove(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeRocket.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeRocket.java index 376276d17..a0f5a5529 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeRocket.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeRocket.java @@ -22,8 +22,10 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseSlime; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; @@ -31,7 +33,6 @@ import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; - import nautilus.game.arcade.kit.SmashPerk; public class PerkSlimeRocket extends SmashPerk implements IThrown @@ -155,7 +156,8 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown //Effect player.getWorld().playSound(player.getLocation(), Sound.SLIME_WALK, 0.5f, (float)(0.5 + 1.5*(elapsed/3d))); UtilParticle.PlayParticle(ParticleType.SLIME, player.getLocation().add(0, 1, 0), - (float)(elapsed/6d), (float)(elapsed/6d), (float)(elapsed/6d), 0, (int)(elapsed * 5)); + (float)(elapsed/6d), (float)(elapsed/6d), (float)(elapsed/6d), 0, (int)(elapsed * 5), + ViewDist.LONGER, UtilServer.getPlayers()); } } //Release diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSmokebomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSmokebomb.java index 7845b2ae7..cabf76c7d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSmokebomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSmokebomb.java @@ -11,6 +11,7 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.minecraft.game.core.condition.Condition; @@ -114,7 +115,8 @@ public class PerkSmokebomb extends Perk //Effects player.getWorld().playSound(player.getLocation(), Sound.FIZZ, 2f, 0.5f); - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0f, 0f, 0f, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } @EventHandler(priority = EventPriority.HIGH) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java index 182864956..8a52c396c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java @@ -24,7 +24,9 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -78,7 +80,8 @@ public class PerkSnowTurret extends SmashPerk if (snowman.getTicksLived() > 400) { - UtilParticle.PlayParticle(ParticleType.SNOWBALL_POOF, snowman.getLocation().add(0, 1, 0), 0.4f, 0.4f, 0.4f, 0, 12); + UtilParticle.PlayParticle(ParticleType.SNOWBALL_POOF, snowman.getLocation().add(0, 1, 0), 0.4f, 0.4f, 0.4f, 0, 12, + ViewDist.LONG, UtilServer.getPlayers()); turretIter.remove(); snowman.remove(); continue; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSpidersNest.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSpidersNest.java index 32670cacb..7f72477ce 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSpidersNest.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSpidersNest.java @@ -13,7 +13,9 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.kit.SmashPerk; @@ -106,9 +108,11 @@ public class PerkSpidersNest extends SmashPerk damager.setMaxHealth(Math.min(60, damager.getMaxHealth() + diff)); damager.setHealth(damager.getHealth() + diff); - UtilParticle.PlayParticle(ParticleType.HEART, damager.getLocation().add(0, 1, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HEART, damager.getLocation().add(0, 1, 0), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); - UtilParticle.PlayParticle(ParticleType.RED_DUST, damagee.getLocation().add(0, 1, 0), 0.4f, 0.4f, 0.4f, 0, 12); + UtilParticle.PlayParticle(ParticleType.RED_DUST, damagee.getLocation().add(0, 1, 0), 0.4f, 0.4f, 0.4f, 0, 12, + ViewDist.LONG, UtilServer.getPlayers()); if (event.GetCause() == DamageCause.ENTITY_ATTACK) damager.getWorld().playSound(damager.getLocation(), Sound.SPIDER_IDLE, 1.5f, 1f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java index 137d49ba3..fd5f576e7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java @@ -20,7 +20,9 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -70,8 +72,10 @@ public class PerkStormSquid extends SmashPerk return; //Warning - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(0, 0.5, 0), 1f, 1f, 1f, 0.1f, 40); - UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(0, 0.5, 0), 1f, 1f, 1f, 0.1f, 40, + ViewDist.MAX, UtilServer.getPlayers()); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); Bukkit.getScheduler().runTaskLater(Manager.getPlugin(), new Runnable() { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTNTArrow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTNTArrow.java index f53110ffa..c4eff1e87 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTNTArrow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTNTArrow.java @@ -29,6 +29,7 @@ import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilServer; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -227,7 +228,8 @@ public class PerkTNTArrow extends Perk UtilPlayer.message((Player)cur, F.main("Game", F.name(player.getName()) +" hit you with " + F.skill(GetName()) + ".")); } - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, loc, 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, loc, 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); loc.getWorld().playSound(loc, Sound.EXPLODE, 2f, 0.75f); } @@ -238,6 +240,7 @@ public class PerkTNTArrow extends Perk return; for (Entity ent : _arrows) - UtilParticle.PlayParticle(ParticleType.LAVA, ent.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, ent.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitchPotion.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitchPotion.java index e664f1d21..d6d70875b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitchPotion.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitchPotion.java @@ -20,7 +20,9 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; @@ -142,7 +144,8 @@ public class PerkWitchPotion extends SmashPerk continue; } - UtilParticle.PlayParticle(ParticleType.MOB_SPELL, proj.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.MOB_SPELL, proj.getLocation(), 0, 0, 0, 0, 1, + ViewDist.LONGER, UtilServer.getPlayers()); //Super if (!(proj.getShooter() instanceof Player)) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherArrowBlind.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherArrowBlind.java index 0349b6fb5..9569bcad6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherArrowBlind.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherArrowBlind.java @@ -12,7 +12,9 @@ import org.bukkit.event.entity.EntityShootBowEvent; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -75,7 +77,8 @@ public class PerkWitherArrowBlind extends Perk Manager.GetCondition().Factory().Blind(GetName(), event.GetDamageeEntity(), null, 4, 0, false, false, false); - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, arrow.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, arrow.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); event.SetCancelled("Smoke Arrow"); } @@ -105,7 +108,8 @@ public class PerkWitherArrowBlind extends Perk if (hit) { - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, arrow.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, arrow.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); arrowIterator.remove(); arrow.remove(); continue; @@ -122,7 +126,8 @@ public class PerkWitherArrowBlind extends Perk //Particle else { - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, arrow.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, arrow.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherArrows.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherArrows.java index bf21b8aff..07249f73d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherArrows.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherArrows.java @@ -10,10 +10,11 @@ import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; - import nautilus.game.arcade.kit.Perk; public class PerkWitherArrows extends Perk @@ -81,11 +82,13 @@ public class PerkWitherArrows extends Perk arrow.remove(); arrowIter.remove(); - UtilParticle.PlayParticle(ParticleType.LAVA, arrow.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.LAVA, arrow.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } else if (arrow.getTicksLived() > 1) { - UtilParticle.PlayParticle(ParticleType.FLAME, arrow.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FLAME, arrow.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherAttack.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherAttack.java index e8e02149d..06a5c5b47 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherAttack.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherAttack.java @@ -32,8 +32,10 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.recharge.Recharge; @@ -96,7 +98,8 @@ public class PerkWitherAttack extends Perk WitherSkull skull = (WitherSkull)event.getEntity(); - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, skull.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, skull.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); explode(skull); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java index f718319c9..f03f12567 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java @@ -27,7 +27,9 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -143,7 +145,8 @@ public class PerkWitherSkull extends SmashPerk WitherSkull skull = (WitherSkull)event.getEntity(); - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, skull.getLocation(), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, skull.getLocation(), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); explode(skull, event.getLocation(), (LivingEntity)skull.getShooter()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolBomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolBomb.java index 0c97eb42b..8615521fb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolBomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolBomb.java @@ -25,8 +25,10 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseSheep; import mineplex.core.itemstack.ItemStackFactory; @@ -199,7 +201,8 @@ public class PerkWoolBomb extends Perk implements IThrown data.restore(); //Explode - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); data.Block.getWorld().playSound(data.Block.getLocation(), Sound.EXPLODE, 3f, 0.8f); //Damage diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolCloud.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolCloud.java index fdac5e907..76b51ee71 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolCloud.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolCloud.java @@ -21,8 +21,10 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseSheep; import mineplex.core.recharge.Recharge; @@ -95,7 +97,8 @@ public class PerkWoolCloud extends Perk { Player player = playerIterator.next(); - UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation(), 0.2f, 0.2f, 0.2f, 0, 4); + UtilParticle.PlayParticle(ParticleType.FLAME, player.getLocation(), 0.2f, 0.2f, 0.2f, 0, 4, + ViewDist.LONGER, UtilServer.getPlayers()); if (!UtilTime.elapsed(_active.get(player), 200)) continue; @@ -112,8 +115,10 @@ public class PerkWoolCloud extends Perk DamageCause.CUSTOM, 8, true, false, false, player.getName(), GetName()); - UtilParticle.PlayParticle(ParticleType.EXPLODE, other.getLocation(), 0f, 0f, 0f, 0, 1); - UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation(), 0.2f, 0.2f, 0.2f, 0, 10); + UtilParticle.PlayParticle(ParticleType.EXPLODE, other.getLocation(), 0f, 0f, 0f, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); + UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation(), 0.2f, 0.2f, 0.2f, 0, 10, + ViewDist.MAX, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWraith.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWraith.java index 79c9ea98d..a1f76deda 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWraith.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWraith.java @@ -15,8 +15,10 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.kit.Perk; @@ -99,7 +101,8 @@ public class PerkWraith extends Perk _steps.put(loc, System.currentTimeMillis()); - UtilParticle.PlayParticle(ParticleType.FOOTSTEP, loc, 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(ParticleType.FOOTSTEP, loc, 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/HolidayManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/HolidayManager.java index f2bba323b..a53b9aa5e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/HolidayManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/HolidayManager.java @@ -11,6 +11,7 @@ import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilWorld; import mineplex.core.itemstack.ItemStackFactory; @@ -128,7 +129,8 @@ public class HolidayManager implements Listener if (type == HolidayType.Halloween) { - UtilParticle.PlayParticle(ParticleType.FLAME, block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0.06f, 4); + UtilParticle.PlayParticle(ParticleType.FLAME, block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0.06f, 4, + ViewDist.LONG, UtilServer.getPlayers()); if (Math.random() > 0.90) { if (block.getType() == Material.PUMPKIN) @@ -143,7 +145,8 @@ public class HolidayManager implements Listener } else if (type == HolidayType.Easter) { - UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, block.getLocation().add(0.5, 0.2, 0.5), 0.3f, 0.2f, 0.3f, 0, 1); + UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, block.getLocation().add(0.5, 0.2, 0.5), 0.3f, 0.2f, 0.3f, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); if (Math.random() > 0.90) { From bd8bd2dfd633a20808cddf081be1a3d76015c56a Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 16:51:13 -0500 Subject: [PATCH 070/104] Abstracted kicking non-1.8 players Abstracted resource pack msg --- .../src/nautilus/game/arcade/game/Game.java | 2 + .../arcade/game/games/gravity/Gravity.java | 5 +- .../game/games/minestrike/MineStrike.java | 35 +----------- .../arcade/game/games/wizards/Wizards.java | 31 +---------- .../game/arcade/managers/GameFlagManager.java | 55 +++++++++++++++++++ 5 files changed, 65 insertions(+), 63 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 647de8bc1..318e93d47 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -255,6 +255,8 @@ public abstract class Game implements Listener public boolean CanAddStats = true; public boolean CanGiveLoot = true; + public boolean VersionRequire1_8 = false; + public ArrayList GemBoosters = new ArrayList(); private final Set> _statTrackers = new HashSet<>(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java index 8d3e0071b..c9d1929e3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java @@ -28,6 +28,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.util.Vector; import mineplex.core.common.util.C; @@ -112,6 +113,8 @@ public class Gravity extends SoloGame this.CompassEnabled = true; this.WorldBoundaryKill = false; + + this.VersionRequire1_8 = true; } @Override @@ -706,5 +709,5 @@ public class Gravity extends SoloGame break; } } - } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java index 0c7ae915e..c4f5a47ed 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java @@ -260,6 +260,8 @@ public class MineStrike extends TeamGame this.InventoryClick = true; this.JoinInProgress = true; + + this.VersionRequire1_8 = true; _scoreObj = Scoreboard.GetScoreboard().registerNewObjective("HP", "dummy"); _scoreObj.setDisplaySlot(DisplaySlot.BELOW_NAME); @@ -2707,40 +2709,7 @@ public class MineStrike extends TeamGame other.playSound(player.getLocation(), radio.getSound(), 1.5f, 1f); } } - - @EventHandler - public void joinMessage(PlayerJoinEvent event) - { - if (!UtilPlayer.is1_8(event.getPlayer())) - returnToHub(event.getPlayer()); - - else - UtilTextMiddle.display(C.cGold + C.Bold + "MineStrike", "Make sure you accept the Resource Pack", 20, 120, 20, event.getPlayer()); - } - @EventHandler - public void outdatedVersion(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC) - return; - - for (Player player : UtilServer.getPlayers()) - { - if (!UtilPlayer.is1_8(player)) - returnToHub(player); - } - } - - public void returnToHub(Player player) - { - UtilPlayer.message(player, " "); - UtilPlayer.message(player, C.cGold + C.Bold + "Mine-Strike requires you to be using Minecraft 1.8!"); - UtilPlayer.message(player, " "); - - player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - Manager.GetPortal().sendPlayerToServer(player, "Lobby"); - } - @EventHandler public void debug(PlayerCommandPreprocessEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index dd2016ca5..c08e4f539 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -20,6 +20,7 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; @@ -166,6 +167,7 @@ public class Wizards extends SoloGame DisableKillCommand = false; SoupEnabled = false; DamageTeamSelf = true; + VersionRequire1_8 = true; try { @@ -1030,13 +1032,6 @@ public class Wizards extends SoloGame } } - @EventHandler - public void joinMessage(PlayerJoinEvent event) - { - if (!UtilPlayer.is1_8(event.getPlayer())) - returnToHub(event.getPlayer()); - } - public ItemStack makeBlankWand() { ItemBuilder builder = new ItemBuilder(Material.BLAZE_ROD); @@ -1635,18 +1630,6 @@ public class Wizards extends SoloGame } } - @EventHandler - public void outdatedVersion(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC) - return; - - for (Player player : UtilServer.getPlayers()) - { - if (!UtilPlayer.is1_8(player)) - returnToHub(player); - } - } @Override public void ParseData() @@ -1657,16 +1640,6 @@ public class Wizards extends SoloGame System.out.print("Endgame event: " + (_endGameEvent == 0 ? "Meteors" : "Lightning")); } - public void returnToHub(Player player) - { - UtilPlayer.message(player, " "); - UtilPlayer.message(player, C.cGold + C.Bold + "Wizards requires you to be using Minecraft 1.8!"); - UtilPlayer.message(player, " "); - - player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - Manager.GetPortal().sendPlayerToServer(player, "Lobby"); - } - @EventHandler public void ScoreboardUpdate(UpdateEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java index a964681ea..05c7703be 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java @@ -53,6 +53,7 @@ import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -1127,4 +1128,58 @@ public class GameFlagManager implements Listener event.setCancelled(true); } } + + @EventHandler + public void versionUpdateCheck(UpdateEvent event) + { + if (Manager.GetGame() == null) + return; + + if (!Manager.GetGame().DisableKillCommand) + return; + + if (event.getType() != UpdateType.SEC) + return; + + for (Player player : UtilServer.getPlayers()) + { + if (!UtilPlayer.is1_8(player)) + versionKick(player); + } + } + + @EventHandler + public void versionJoinCheck(PlayerJoinEvent event) + { + if (Manager.GetGame() == null) + return; + + if (!Manager.GetGame().VersionRequire1_8) + return; + + if (!UtilPlayer.is1_8(event.getPlayer())) + versionKick(event.getPlayer()); + } + + public void versionKick(Player player) + { + UtilPlayer.message(player, " "); + UtilPlayer.message(player, C.cGold + C.Bold + "Gravity requires you to be using Minecraft 1.8!"); + UtilPlayer.message(player, " "); + + player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); + Manager.GetPortal().sendPlayerToServer(player, "Lobby"); + } + + @EventHandler + public void resourceInform(PlayerJoinEvent event) + { + if (Manager.GetGame() == null) + return; + + if (Manager.GetGame().GetType().getResourcePackUrl() == null) + return; + + UtilTextMiddle.display(C.cGold + C.Bold + Manager.GetGame().GetType().GetName(), "Make sure you accept the Resource Pack", 20, 120, 20, event.getPlayer()); + } } From a42c71ebb84c0a19f2c725d0998a4d581af5d71d Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 16:54:02 -0500 Subject: [PATCH 071/104] more 1.8 stuff --- .../games/survivalgames/SurvivalGames.java | 36 ++----------------- .../arcade/game/games/wizards/Wizards.java | 14 ++------ 2 files changed, 4 insertions(+), 46 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java index 0ab7d530c..c7ca00602 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java @@ -243,6 +243,8 @@ public class SurvivalGames extends SoloGame PlaySoundGameStart = false; PrepareTime = 15000; + + VersionRequire1_8 = true; BlockBreakAllow.add(Material.WEB.getId()); // Web BlockPlaceAllow.add(Material.WEB.getId()); @@ -1103,13 +1105,6 @@ public class SurvivalGames extends SoloGame event.setCancelled(true); } - @EventHandler - public void joinMessage(PlayerJoinEvent event) - { - if (!UtilPlayer.is1_8(event.getPlayer())) - returnToHub(event.getPlayer()); - } - @EventHandler public void onGameEnd(GameStateChangeEvent event) { @@ -1166,13 +1161,6 @@ public class SurvivalGames extends SoloGame return; } - for (Player player : Bukkit.getOnlinePlayers()) - { - if (!UtilPlayer.is1_8(player)) - { - returnToHub(player); - } - } if (!IsLive()) { @@ -1333,16 +1321,6 @@ public class SurvivalGames extends SoloGame } } - @EventHandler - public void outdatedVersion(GameStateChangeEvent event) - { - for (Player player : UtilServer.getPlayers()) - { - if (!UtilPlayer.is1_8(player)) - returnToHub(player); - } - } - @EventHandler public void outsideBorder(UpdateEvent event) { @@ -1682,16 +1660,6 @@ public class SurvivalGames extends SoloGame } - public void returnToHub(Player player) - { - UtilPlayer.message(player, " "); - UtilPlayer.message(player, C.cGold + C.Bold + "SurvivalGames requires you to be using Minecraft 1.8!"); - UtilPlayer.message(player, " "); - - player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - Manager.GetPortal().sendPlayerToServer(player, "Lobby"); - } - @Override @EventHandler public void ScoreboardUpdate(UpdateEvent event) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index c08e4f539..1998bcfa6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -755,18 +755,8 @@ public class Wizards extends SoloGame // Send to Player for (Player player : players) { - // 1.7 - Add Color - if (!UtilPlayer.is1_8(player)) - { - UtilTextTop.displayProgress((prefix == null ? "" : C.cYellow + C.Bold + prefix) - + (suffix == null ? "" : ChatColor.RESET + C.Bold + " - " + C.cGreen + C.Bold + suffix), amount, player); - } - // 1.8 - else - { - UtilTextBottom.display((prefix == null ? "" : prefix + ChatColor.RESET + " ") + progressBar - + (suffix == null ? "" : ChatColor.RESET + " " + suffix), players); - } + UtilTextBottom.display((prefix == null ? "" : prefix + ChatColor.RESET + " ") + progressBar + + (suffix == null ? "" : ChatColor.RESET + " " + suffix), players); } } From fbfb5e637eac232103a2c7def55b339d0521982a Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 3 May 2015 18:18:16 -0500 Subject: [PATCH 072/104] Mob Gui + Ground Change Gui + UtilSkull for special mob skulls --- .../mineplex/core/common/util/UtilSkull.java | 80 +++++++++++ .../game/arcade/game/games/build/Build.java | 16 +-- .../arcade/game/games/build/BuildData.java | 14 ++ .../arcade/game/games/build/GroundData.java | 30 ++++ .../game/games/build/gui/page/GroundPage.java | 81 +++++++++++ .../game/games/build/gui/page/MobPage.java | 133 +++++++++++++++++- .../games/build/gui/page/OptionsPage.java | 15 +- 7 files changed, 354 insertions(+), 15 deletions(-) create mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/GroundData.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java new file mode 100644 index 000000000..75f37c33b --- /dev/null +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java @@ -0,0 +1,80 @@ +package mineplex.core.common.util; + +import org.bukkit.entity.*; + +public class UtilSkull +{ + public static byte getSkullData(Entity entity) + { + if (entity instanceof Skeleton) + { + Skeleton sk = ((Skeleton) entity); + if (sk.getSkeletonType() == Skeleton.SkeletonType.WITHER) + return 1; + else return 0; + } + else if (entity instanceof Zombie || entity instanceof Giant) + { + return 2; + } + else if (entity instanceof Creeper) + { + return 4; + } + else + return 3; + } + + public static boolean isPlayerHead(byte data) + { + return data == 3; + } + + public static String getPlayerHeadName(Entity entity) + { + String name = "MHF_Alex"; + + // order is important for some of these + if (entity instanceof Blaze) + name = "MHF_Blaze"; + else if (entity instanceof CaveSpider) + name = "MHF_CaveSpider"; + else if (entity instanceof Chicken) + name = "MHF_Chicken"; + else if (entity instanceof MushroomCow) + name = "MHF_MushroomCow"; + else if (entity instanceof Cow) + name = "MHF_Cow"; + else if (entity instanceof Creeper) + name = "MHF_Creeper"; + else if (entity instanceof Enderman) + name = "MHF_Enderman"; + else if (entity instanceof Ghast) + name = "MHF_Ghast"; + else if (entity instanceof Golem) + name = "MHF_Golem"; + else if (entity instanceof PigZombie) + name = "MHF_PigZombie"; + else if (entity instanceof MagmaCube) + name = "MHF_LavaSlime"; + else if (entity instanceof Slime) + name = "MHF_Slime"; + else if (entity instanceof Ocelot) + name = "MHF_Ocelot"; + else if (entity instanceof PigZombie) + name = "MHF_PigZombie"; + else if (entity instanceof Pig) + name = "MHF_Pig"; + else if (entity instanceof Sheep) + name = "MHF_Pig"; + else if (entity instanceof Squid) + name = "MHF_Squid"; + else if (entity instanceof HumanEntity) + name = "MHF_Steve"; + else if (entity instanceof Villager) + name = "MHF_Villager"; + + return name; + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index b09552558..f95313ed9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -375,6 +375,11 @@ public class Build extends SoloGame } } + public boolean isBuildTime() + { + return _buildStateTime == 0; + } + private void teleportPlayers(BuildData data) { //Teleport @@ -784,17 +789,6 @@ public class Build extends SoloGame data.removeEntity(event.GetDamageeEntity()); } - @EventHandler - public void entKill(PlayerInteractEntityEvent event) - { - BuildData data = _data.get(event.getPlayer()); - - if (data == null) - return; - - data.removeEntity(event.getRightClicked()); - } - @EventHandler public void vehicleSpawn(VehicleCreateEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index 0241912b6..c1663b356 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -15,6 +15,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.WeatherType; import org.bukkit.block.Block; @@ -280,5 +281,18 @@ public class BuildData (int)(Spawn.getX() + Math.random() * 200 - 100)); } } + + public void setGround(GroundData ground) + { + // TODO chiss + + Material mat = ground.getMaterial(); + byte data = ground.getData(); + + if (mat == Material.LAVA_BUCKET) mat = Material.LAVA; + else if (mat == Material.WATER_BUCKET) mat = Material.WATER; + + } + } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/GroundData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/GroundData.java new file mode 100644 index 000000000..ffaab207e --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/GroundData.java @@ -0,0 +1,30 @@ +package nautilus.game.arcade.game.games.build; + +import org.bukkit.Material; + +public class GroundData +{ + public final Material _material; + public final byte _data; + + public GroundData(Material material) + { + this(material, (byte) 0); + } + + public GroundData(Material material, byte data) + { + _material = material; + _data = data; + } + + public byte getData() + { + return _data; + } + + public Material getMaterial() + { + return _material; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java new file mode 100644 index 000000000..dcfc6e7d8 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java @@ -0,0 +1,81 @@ +package nautilus.game.arcade.game.games.build.gui.page; + +import java.util.Arrays; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.donation.DonationManager; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; +import mineplex.core.shop.page.ShopPageBase; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.build.Build; +import nautilus.game.arcade.game.games.build.BuildData; +import nautilus.game.arcade.game.games.build.GroundData; +import nautilus.game.arcade.game.games.build.gui.OptionsShop; + +public class GroundPage extends ShopPageBase +{ + private static GroundData[] GROUNDS = { + new GroundData(Material.STONE), new GroundData(Material.GRASS), new GroundData(Material.DIRT), + new GroundData(Material.SAND), new GroundData(Material.WATER_BUCKET), new GroundData(Material.LAVA_BUCKET), + new GroundData(Material.WOOD), new GroundData(Material.COBBLESTONE), new GroundData(Material.NETHERRACK), + new GroundData(Material.SMOOTH_BRICK), new GroundData(Material.ENDER_STONE), new GroundData(Material.MYCEL), + new GroundData(Material.STAINED_CLAY, (byte) 0), new GroundData(Material.STAINED_CLAY, (byte) 15), + new GroundData(Material.STAINED_CLAY, (byte) 4), new GroundData(Material.STAINED_CLAY, (byte) 3), + new GroundData(Material.STAINED_CLAY, (byte) 5), new GroundData(Material.STAINED_CLAY, (byte) 6), + new GroundData(Material.QUARTZ_BLOCK)}; + + private Build _game; + + public GroundPage(Build game, ArcadeManager plugin, OptionsShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Change Ground", player); + _game = game; + buildPage(); + } + + @Override + protected void buildPage() + { + final BuildData buildData = _game.getBuildData(getPlayer()); + + if (buildData == null) + { + getPlayer().closeInventory(); + return; + } + + int index = 0; + for (final GroundData data : GROUNDS) + { + ShopItem shopItem = new ShopItem(data.getMaterial(), data.getData(), data.getMaterial().name().toLowerCase().replace('_', ' '), null, 0, false, false); + addButton(index, shopItem, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + buildData.setGround(data); + } + }); + index++; + } + + addButton((9 * 5) + 4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(player, new OptionsPage(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java index dd8c4cc91..fc3087961 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java @@ -1,10 +1,23 @@ package nautilus.game.arcade.game.games.build.gui.page; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftLivingEntity; +import org.bukkit.entity.Ageable; import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.entity.Slime; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.meta.SkullMeta; import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilSkull; import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; import mineplex.core.shop.page.ShopPageBase; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.build.BuildData; @@ -18,15 +31,133 @@ public class MobPage extends ShopPageBase public MobPage(ArcadeManager plugin, MobShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player, BuildData buildData, Entity entity) { - super(plugin, shop, clientManager, donationManager, "Mob Options", player); + super(plugin, shop, clientManager, donationManager, "Mob Options", player, 18); _buildData = buildData; _entity = entity; + buildPage(); } @Override protected void buildPage() { + byte entityData = UtilSkull.getSkullData(_entity); + + // Add Skull delete button + final String entityName = _entity.getType().getName(); + ShopItem head = new ShopItem(Material.SKULL_ITEM, entityData, entityName, new String[] {C.cGray + "Right Click to Delete Entity" }, 0, false, false); + if (UtilSkull.isPlayerHead(entityData)) + { + SkullMeta meta = ((SkullMeta) head.getItemMeta()); + meta.setOwner(UtilSkull.getPlayerHeadName(_entity)); + head.setItemMeta(meta); + } + + addButton(4, head, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + if (clickType == ClickType.RIGHT) + { + _buildData.removeEntity(_entity); + UtilPlayer.message(player, F.main("Game", "Entity Deleted")); + player.closeInventory(); + } + } + }); + + + int buttonSlot = 11; + if (_entity instanceof Ageable) + { + final Ageable ageable = ((Ageable) _entity); + ShopItem item = new ShopItem(Material.BLAZE_ROD, "Make " + (ageable.isAdult() ? "Baby" : "Adult"), null, 0, false, false); + + addButton(buttonSlot, item, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + if (ageable.isAdult()) + ageable.setBaby(); + else + ageable.setAdult(); + + UtilPlayer.message(player, F.main("Game", entityName + " is now a " + (ageable.isAdult() ? "Adult" : "Baby"))); + buildPage(); + } + }); + + buttonSlot+= 2; + } + + if (_entity instanceof LivingEntity) + { + final LivingEntity livingEntity = ((LivingEntity) _entity); + final boolean ghost = ((CraftLivingEntity) livingEntity).getHandle().ghost; + + ShopItem item = new ShopItem(Material.FEATHER, (ghost ? "Allow " : "Disable ") + "Pushing " + entityName, null, 0, false, false); + addButton(buttonSlot, item, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + ((CraftLivingEntity) livingEntity).getHandle().ghost = !ghost; + UtilPlayer.message(player, F.main("Game", "Pushing " + (ghost ? "Enabled" : "Disabled") + " for " + entityName)); + buildPage(); + } + }); + + + buttonSlot += 2; + } + + if (_entity instanceof Slime) + { + final Slime slime = ((Slime) _entity); + + ShopItem decreaseSize = new ShopItem(Material.CLAY_BALL, "Decrease Size", null, 0, false, false); + + ShopItem increaseSize = new ShopItem(Material.CLAY, "Increase Size", null, 0, false, false); + + addButton(buttonSlot, decreaseSize, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + if (slime.getSize() <= 1) + { + UtilPlayer.message(player, F.main("Game", "Slime is already smallest size")); + } + else + { + slime.setSize(slime.getSize() - 1); + } + } + }); + + buttonSlot += 2; + + addButton(buttonSlot, increaseSize, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + if (slime.getSize() >= 10) + { + UtilPlayer.message(player, F.main("Game", "Slime is already largest size")); + } + else + { + slime.setSize(slime.getSize() + 1); + } + } + }); + + + + } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java index da19e4e89..03e3bf28c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java @@ -28,11 +28,20 @@ public class OptionsPage extends ShopPageBase protected void buildPage() { + ShopItem ground = new ShopItem(Material.STAINED_CLAY, "Change Ground", 0, false); ShopItem particles = new ShopItem(Material.NETHER_STAR, "Particles", 0, false); ShopItem weather = new ShopItem(Material.FEATHER, "Weather", 0, false); ShopItem time = new ShopItem(Material.WATCH, "Time of Day", 0, false); - addButton(2, particles, new IButton() + addButton(1, ground, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(player, new GroundPage(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + addButton(3, particles, new IButton() { @Override public void onClick(Player player, ClickType clickType) @@ -41,7 +50,7 @@ public class OptionsPage extends ShopPageBase } }); - addButton(4, weather, new IButton() + addButton(5, weather, new IButton() { @Override public void onClick(Player player, ClickType clickType) @@ -50,7 +59,7 @@ public class OptionsPage extends ShopPageBase } }); - addButton(6, time, new IButton() + addButton(7, time, new IButton() { @Override public void onClick(Player player, ClickType clickType) From 83ff3c96aa97b1710a5f397258f2a4f6c061a03e Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 3 May 2015 18:21:59 -0500 Subject: [PATCH 073/104] Close inventory when game starts --- .../src/nautilus/game/arcade/game/games/build/Build.java | 3 +++ .../game/arcade/game/games/build/gui/page/OptionsPage.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index f95313ed9..bf8de3885 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -211,7 +211,10 @@ public class Build extends SoloGame UtilTextMiddle.display(null, C.cYellow + "Time Up!", 0, 60, 5); for (Player player : GetPlayers(true)) + { player.getInventory().clear(8); + player.closeInventory(); + } } } //Pause diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java index 03e3bf28c..caad3e78a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java @@ -28,7 +28,7 @@ public class OptionsPage extends ShopPageBase protected void buildPage() { - ShopItem ground = new ShopItem(Material.STAINED_CLAY, "Change Ground", 0, false); + ShopItem ground = new ShopItem(Material.CLAY, "Change Ground", 0, false); ShopItem particles = new ShopItem(Material.NETHER_STAR, "Particles", 0, false); ShopItem weather = new ShopItem(Material.FEATHER, "Weather", 0, false); ShopItem time = new ShopItem(Material.WATCH, "Time of Day", 0, false); From 74474c62272d5e87d5751c274fc05e9694842621 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 3 May 2015 18:26:20 -0500 Subject: [PATCH 074/104] Use itemstackfactory for formatted name --- .../game/arcade/game/games/build/gui/page/GroundPage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java index dcfc6e7d8..f9e55a23c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java @@ -57,7 +57,7 @@ public class GroundPage extends ShopPageBase int index = 0; for (final GroundData data : GROUNDS) { - ShopItem shopItem = new ShopItem(data.getMaterial(), data.getData(), data.getMaterial().name().toLowerCase().replace('_', ' '), null, 0, false, false); + ShopItem shopItem = new ShopItem(data.getMaterial(), data.getData(), ItemStackFactory.Instance.GetName(data.getMaterial(), data.getData(), true), null, 0, false, false); addButton(index, shopItem, new IButton() { @Override From de1f432be404f9e21bb0cb324e5b5fa7c88b0a38 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 3 May 2015 18:31:56 -0500 Subject: [PATCH 075/104] Build bug fixes --- .../src/nautilus/game/arcade/game/games/build/Build.java | 1 + .../game/arcade/game/games/build/gui/page/GroundPage.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index 66c7c9a95..f69a34e64 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -1255,6 +1255,7 @@ public class Build extends SoloGame if (e.equals(event.getRightClicked())) { _mobShop.attemptShopOpen(player, buildData, e); + event.setCancelled(true); return; } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java index f9e55a23c..bd4a56350 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/GroundPage.java @@ -38,7 +38,7 @@ public class GroundPage extends ShopPageBase public GroundPage(Build game, ArcadeManager plugin, OptionsShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) { - super(plugin, shop, clientManager, donationManager, "Change Ground", player); + super(plugin, shop, clientManager, donationManager, "Change Ground", player, 9 * 4); _game = game; buildPage(); } @@ -69,7 +69,7 @@ public class GroundPage extends ShopPageBase index++; } - addButton((9 * 5) + 4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + addButton((9 * 3) + 4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() { @Override public void onClick(Player player, ClickType clickType) From f36d7774cc2ab3add45f4f67cf9f378068c7af34 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 18:32:57 -0500 Subject: [PATCH 076/104] Gravity update --- .../game/arcade/game/games/build/Build.java | 2 +- .../arcade/game/games/gravity/Gravity.java | 28 +++++++++++++------ .../game/games/gravity/GravityObject.java | 12 ++++++-- .../games/gravity/objects/GravityDebris.java | 1 + .../games/gravity/objects/GravityPlayer.java | 13 ++++++--- 5 files changed, 41 insertions(+), 15 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index 66c7c9a95..89c9fe45c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -90,7 +90,7 @@ import nautilus.game.arcade.game.games.build.gui.OptionsShop; import nautilus.game.arcade.game.games.draw.kits.*; import nautilus.game.arcade.kit.Kit; -public class Build extends SoloGame +public class Build extends SoloGame { private NautHashMap _data = new NautHashMap(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java index c9d1929e3..8de4e68fc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.FireworkEffect; import org.bukkit.Location; @@ -41,6 +42,7 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilParticle.ParticleType; @@ -95,7 +97,7 @@ public class Gravity extends SoloGame _help = new String[] { - "Push DROP to launch yourself off platforms.", + "Drop Item to launch yourself off platforms.", "You automatically grab onto nearby platforms.", "Hold Block to use your Jetpack", "Your Experience Bar is your Jetpack Fuel", @@ -137,10 +139,20 @@ public class Gravity extends SoloGame @EventHandler public void AnnounceBoost(GameStateChangeEvent event) { - if (event.GetState() != GameState.Live) - return; - - Announce(C.Bold + C.cPurple + "Press " + C.Bold + C.cWhite + "DROP WEAPON" + C.Bold + C.cPurple + " to boost yourself off platforms!"); + if (event.GetState() == GameState.Prepare) + { + UtilTextMiddle.display(null, C.cGreen + "Drop Weapon" + C.cWhite + " to boost off Platforms", 0, 120, 0); + + Bukkit.getScheduler().runTaskLater(Manager.getPlugin(), new Runnable() + { + @Override + public void run() + { + UtilTextMiddle.display(null, C.cGreen + "Hold Block" + C.cWhite + " to use Jetpack", 0, 80, 5); + } + }, 120); + } + } @EventHandler @@ -161,8 +173,7 @@ public class Gravity extends SoloGame if (!isInsideMap(o.Base.getLocation())) { - o.Base.remove(); - oIter.remove(); + o.remove(); } } @@ -698,7 +709,8 @@ public class Gravity extends SoloGame { if (UtilMath.offset(player.getLocation(), _powerup) < 3) { - UtilPlayer.message(player, F.main("Game", "You collected " + F.skill("Jetpack Fuel") + "!")); + UtilTextMiddle.display(null, "Collected Jetpack Fuel", 0, 80, 5, player); + player.setExp(Math.min(0.9999f, player.getExp() + 0.25f)); player.getWorld().playSound(player.getLocation(), Sound.DRINK, 1f, 0.5f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java index 1df5889d9..34c83e330 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java @@ -90,8 +90,8 @@ public abstract class GravityObject { if (this instanceof GravityPlayer) { - Base.getWorld().playEffect(Ent.getLocation().subtract(0, 0.5, 0), Effect.FIREWORKS_SPARK, 0, 100); - //UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, Ent.getLocation().subtract(0, 0.5, 0), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, Ent.getLocation().subtract(0, 0.5, 0), 0, 0, 0, 0, 1, + ViewDist.MAX, UtilServer.getPlayers()); } else if (this instanceof GravityBomb) { @@ -221,4 +221,12 @@ public abstract class GravityObject Bat.setSitting(!moving); //Host.Manager.GetDisguise().updateDisguise(Bat); } + + public void remove() + { + if (Base.getPassenger() != null) + Base.getPassenger().remove(); + + Base.remove(); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityDebris.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityDebris.java index 674ac04fd..68cd2a333 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityDebris.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityDebris.java @@ -17,6 +17,7 @@ public class GravityDebris extends GravityObject super(host, ent, mass, 2, vel); CollideDelay = System.currentTimeMillis() + 500; + SetMovingBat(true); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java index 98fc47ef3..f2d05569b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java @@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.gravity.objects; import java.util.Collection; import java.util.HashSet; +import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; @@ -10,6 +11,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; import nautilus.game.arcade.game.games.gravity.Gravity; @@ -140,7 +142,10 @@ public class GravityPlayer extends GravityObject if (player.getExp() <= 0) { if (Recharge.Instance.use(player, "Fuel", 1000, false, false)) - UtilPlayer.message(Ent, F.main("Skill", "You have no more " + F.skill("Jetpack Fuel") + ".")); + { + UtilTextMiddle.display(C.cRed + "Jetpack Empty", "Collect Fuel at Gold Blocks with Fireworks", 0, 80, 5, (Player)Ent); + } + return; } @@ -171,7 +176,8 @@ public class GravityPlayer extends GravityObject //Restore if (near) { - UtilPlayer.message(Ent, F.main("Game", "Restoring Oxygen...")); + UtilTextMiddle.display(null, "Refilling Oxygen...", 0, 60, 5, (Player)Ent); + Ent.getWorld().playSound(Ent.getLocation(), Sound.CAT_HISS, 0.2f, 0.5f); Base.setHealth(Math.min(60, Base.getHealth() + 10)); @@ -189,8 +195,7 @@ public class GravityPlayer extends GravityObject DamageCause.CUSTOM, 2, false, true, false, "Oxygen Depleted", "Oxygen Depleted"); - UtilPlayer.message(Ent, F.main("Game", "You are suffocating!")); - UtilPlayer.message(Ent, F.main("Game", "Get more Oxygen from the Emerald Blocks!")); + UtilTextMiddle.display(C.cRed + "Suffocating", "Refill Oxygen at Emerald Blocks", 0, 60, 5, (Player)Ent); } } From 1576085d8740f683c685e20129993b743d22a82b Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 18:33:31 -0500 Subject: [PATCH 077/104] more words --- .../src/nautilus/game/arcade/game/games/build/Build.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index 5d2c937d2..15c49b1dd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -168,7 +168,7 @@ public class Build extends SoloGame _words = new String[] { - "Rollercoaster", "Archery Range", "Pokemon", "Pirates", "Vikings", "Dinosaur", "Dragon", "Toilet", "Farm", "Tree House", "Burger", "Cat", "Truck", "Bicycle", "Soda", "Music Instrument", "Statue", "Cannon", "Catapult", "Sailing Boat", "Grim Reaper", "Star Wars", "Elephant", "Penguin", "Ninja", "Pot of Gold", "Shrek", "Fruit", "Breakfast", "Toaster", "Robot", "Camping", "Rocket", "Aliens", "Shipwreck", "Cannibals", "Flying Creature", "Beach Creature", "Sea Creature", + "Rollercoaster", "Archery Range", "Pokemon", "Pirates", "Vikings", "Dinosaur", "Dragon", "Toilet", "Farm", "Tree House", "Burger", "Cat", "Truck", "Bicycle", "Soda", "Music Instrument", "Statue", "Cannon", "Catapult", "Sailing Boat", "Grim Reaper", "Star Wars", "Elephant", "Penguin", "Ninja", "Pot of Gold", "Shrek", "Fruit", "Breakfast", "Toaster", "Robot", "Camping", "Rocket", "Aliens", "Shipwreck", "Cannibals", "Flying Creature", "Beach Creature", "Sea Creature", "Spongebob", "Car", "Pot Plant", "Weapons", "Christmas", "King", "Queen", "Angel", "Demon" }; From a435ed5bae308c9107a8e9d5bc7d315d86803161 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 3 May 2015 19:10:13 -0500 Subject: [PATCH 078/104] More build changes --- .../mineplex/core/common/util/UtilSkull.java | 2 + .../game/arcade/game/games/build/Build.java | 12 ++-- .../game/games/build/gui/page/MobPage.java | 64 +++++++++++-------- .../games/build/gui/page/OptionsPage.java | 2 +- 4 files changed, 49 insertions(+), 31 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java index 75f37c33b..14925bf49 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java @@ -39,6 +39,8 @@ public class UtilSkull name = "MHF_Blaze"; else if (entity instanceof CaveSpider) name = "MHF_CaveSpider"; + else if (entity instanceof Spider) + name = "MHF_Spider"; else if (entity instanceof Chicken) name = "MHF_Chicken"; else if (entity instanceof MushroomCow) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index f69a34e64..884b957ad 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -15,6 +15,7 @@ import org.bukkit.entity.Boat; import org.bukkit.entity.Entity; import org.bukkit.entity.Item; import org.bukkit.entity.ItemFrame; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Minecart; import org.bukkit.entity.Painting; import org.bukkit.entity.Player; @@ -1252,11 +1253,14 @@ public class Build extends SoloGame { for (Entity e : buildData.Entities) { - if (e.equals(event.getRightClicked())) + if (e instanceof LivingEntity || e instanceof Minecart || e instanceof Boat) { - _mobShop.attemptShopOpen(player, buildData, e); - event.setCancelled(true); - return; + if (e.equals(event.getRightClicked())) + { + _mobShop.attemptShopOpen(player, buildData, e); + event.setCancelled(true); + return; + } } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java index fc3087961..8c3c0c3ab 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/MobPage.java @@ -31,7 +31,7 @@ public class MobPage extends ShopPageBase public MobPage(ArcadeManager plugin, MobShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player, BuildData buildData, Entity entity) { - super(plugin, shop, clientManager, donationManager, "Mob Options", player, 18); + super(plugin, shop, clientManager, donationManager, "Mob Options", player, 9); _buildData = buildData; _entity = entity; @@ -41,34 +41,34 @@ public class MobPage extends ShopPageBase @Override protected void buildPage() { - byte entityData = UtilSkull.getSkullData(_entity); +// byte entityData = UtilSkull.getSkullData(_entity); // Add Skull delete button final String entityName = _entity.getType().getName(); - ShopItem head = new ShopItem(Material.SKULL_ITEM, entityData, entityName, new String[] {C.cGray + "Right Click to Delete Entity" }, 0, false, false); - if (UtilSkull.isPlayerHead(entityData)) - { - SkullMeta meta = ((SkullMeta) head.getItemMeta()); - meta.setOwner(UtilSkull.getPlayerHeadName(_entity)); - head.setItemMeta(meta); - } +// ShopItem head = new ShopItem(Material.SKULL_ITEM, entityData, entityName, new String[] {C.cGray + "Right Click to Delete Entity" }, 0, false, false); +// if (UtilSkull.isPlayerHead(entityData)) +// { +// SkullMeta meta = ((SkullMeta) head.getItemMeta()); +// meta.setOwner(UtilSkull.getPlayerHeadName(_entity)); +// head.setItemMeta(meta); +// } - addButton(4, head, new IButton() - { - @Override - public void onClick(Player player, ClickType clickType) - { - if (clickType == ClickType.RIGHT) - { - _buildData.removeEntity(_entity); - UtilPlayer.message(player, F.main("Game", "Entity Deleted")); - player.closeInventory(); - } - } - }); +// addButton(4, head, new IButton() +// { +// @Override +// public void onClick(Player player, ClickType clickType) +// { +// if (clickType == ClickType.RIGHT) +// { +// _buildData.removeEntity(_entity); +// UtilPlayer.message(player, F.main("Game", "Entity Deleted")); +// player.closeInventory(); +// } +// } +// }); - int buttonSlot = 11; + int buttonSlot = 1; if (_entity instanceof Ageable) { final Ageable ageable = ((Ageable) _entity); @@ -154,10 +154,22 @@ public class MobPage extends ShopPageBase } } }); - - - } + ShopItem deleteButton = new ShopItem(Material.TNT, "Delete " + entityName, null, 0, false); + addButton(8, deleteButton, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + if (clickType == ClickType.RIGHT) + { + _buildData.removeEntity(_entity); + UtilPlayer.message(player, F.main("Game", "Entity Deleted")); + player.closeInventory(); + } + } + }); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java index caad3e78a..8e5a396b3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java @@ -28,7 +28,7 @@ public class OptionsPage extends ShopPageBase protected void buildPage() { - ShopItem ground = new ShopItem(Material.CLAY, "Change Ground", 0, false); + ShopItem ground = new ShopItem(Material.GRASS, "Change Ground", 0, false); ShopItem particles = new ShopItem(Material.NETHER_STAR, "Particles", 0, false); ShopItem weather = new ShopItem(Material.FEATHER, "Weather", 0, false); ShopItem time = new ShopItem(Material.WATCH, "Time of Day", 0, false); From 7f0e175ba100a94a7a0b89bf9772f0eabd1d3650 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 19:10:49 -0500 Subject: [PATCH 079/104] build update --- .../game/arcade/game/games/build/Build.java | 22 +++++++++------ .../arcade/game/games/build/BuildData.java | 28 +++++++++++++++---- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index 15c49b1dd..a8185897b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -83,11 +83,10 @@ import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.events.PlayerPrepareTeleportEvent; -import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.SoloGame; import nautilus.game.arcade.game.games.build.gui.MobShop; import nautilus.game.arcade.game.games.build.gui.OptionsShop; -import nautilus.game.arcade.game.games.draw.kits.*; +import nautilus.game.arcade.game.games.build.kits.KitBuilder; import nautilus.game.arcade.kit.Kit; public class Build extends SoloGame @@ -134,9 +133,7 @@ public class Build extends SoloGame new Kit[] { - new KitSlowAndSteady(manager), - new KitSelector(manager), - new KitTools(manager), + new KitBuilder(manager), }, new String[] @@ -390,10 +387,10 @@ public class Build extends SoloGame player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)5, 1, C.Bold + "+3 " + C.cGreen + C.Bold + "Good")); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)3, 1, C.Bold + "+4 " + C.cAqua + C.Bold + "Amazing")); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(160, (byte)10, 1, C.Bold + "+5 " + C.cPurple + C.Bold + "WOW! EVERYTHING IS AWESOME!")); + + UtilTextMiddle.display(null, C.cYellow + "Click to Vote", 0, 60, 5, player); } - - //Text - UtilTextMiddle.display(null, C.cYellow + "Click to Vote", 0, 60, 5); + _buildStateTime = System.currentTimeMillis(); } @@ -1261,4 +1258,13 @@ public class Build extends SoloGame } } } + + @Override + public Location GetSpectatorLocation() + { + if (GetPlayers(true).size() > 0) + return UtilAlg.Random(GetPlayers(true)).getLocation().add(0, 1, 0); + + return GetTeamList().get(0).GetSpawn(); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index 9cbf1f198..2da9a4a64 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Iterator; import mineplex.core.common.util.F; +import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; @@ -14,6 +15,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.recharge.Recharge; import org.bukkit.Location; import org.bukkit.Material; @@ -23,6 +25,7 @@ import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.Ghast; import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.meta.ItemMeta; @@ -122,6 +125,13 @@ public class BuildData return false; } + if (entity instanceof LivingEntity) + { + ((LivingEntity)entity).setRemoveWhenFarAway(false); + ((LivingEntity)entity).setCustomName(UtilEnt.getName(entity)); + + } + Entities.add(entity); UtilEnt.Vegetate(entity, true); UtilEnt.ghost(entity, true, false); @@ -289,16 +299,24 @@ public class BuildData } public void setGround(GroundData ground) - { - // TODO chiss - + { + if (!Recharge.Instance.use(Player, "Change Ground", 2000, true, false)) + { + Player.playSound(Player.getLocation(), Sound.NOTE_BASS_GUITAR, 1f, 0.1f); + return; + } + Material mat = ground.getMaterial(); byte data = ground.getData(); if (mat == Material.LAVA_BUCKET) mat = Material.LAVA; else if (mat == Material.WATER_BUCKET) mat = Material.WATER; + int y = Math.min(CornerA.getBlockY(), CornerB.getBlockY()) - 1; + for (int x= Math.min(CornerA.getBlockX(), CornerB.getBlockX()) ; x <= Math.max(CornerA.getBlockX(), CornerB.getBlockX()) ; x++) + for (int z= Math.min(CornerA.getBlockZ(), CornerB.getBlockZ()) ; z <= Math.max(CornerA.getBlockZ(), CornerB.getBlockZ()) ; z++) + { + MapUtil.QuickChangeBlockAt(Player.getWorld(), x, y, z, mat, data); + } } - - } From 58671fa22908ca0cd70851ab03413b61a912979f Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 19:36:50 -0500 Subject: [PATCH 080/104] more words --- .../src/nautilus/game/arcade/game/games/build/Build.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index ca425ffa2..db8d93e7b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -166,7 +166,7 @@ public class Build extends SoloGame _words = new String[] { - "Rollercoaster", "Archery Range", "Pokemon", "Pirates", "Vikings", "Dinosaur", "Dragon", "Toilet", "Farm", "Tree House", "Burger", "Cat", "Truck", "Bicycle", "Soda", "Music Instrument", "Statue", "Cannon", "Catapult", "Sailing Boat", "Grim Reaper", "Star Wars", "Elephant", "Penguin", "Ninja", "Pot of Gold", "Shrek", "Fruit", "Breakfast", "Toaster", "Robot", "Camping", "Rocket", "Aliens", "Shipwreck", "Cannibals", "Flying Creature", "Beach Creature", "Sea Creature", "Spongebob", "Car", "Pot Plant", "Weapons", "Christmas", "King", "Queen", "Angel", "Demon" + "Rollercoaster", "Archery Range", "Pokemon", "Pirates", "Vikings", "Dinosaur", "Dragon", "Toilet", "Farm", "Tree House", "Burger", "Cat", "Truck", "Bicycle", "Soda", "Music Instrument", "Statue", "Cannon", "Catapult", "Sailing Boat", "Grim Reaper", "Star Wars", "Elephant", "Penguin", "Ninja", "Pot of Gold", "Shrek", "Fruit", "Breakfast", "Toaster", "Robot", "Camping", "Rocket", "Aliens", "Shipwreck", "Cannibals", "Flying Creature", "Beach Creature", "Sea Creature", "Spongebob", "Car", "Pot Plant", "Weapons", "Christmas", "King", "Queen", "Angel", "Demon", "Halloween", "Tank", "Aeroplane" }; From e013f8af8ad2dd9fc6c97efff136c25c26434600 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 19:49:16 -0500 Subject: [PATCH 081/104] sky text for hub change --- .../Mineplex.Hub/src/mineplex/hub/modules/TextManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TextManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TextManager.java index 870943f65..3ae0241d0 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TextManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TextManager.java @@ -97,8 +97,8 @@ public class TextManager extends MiniPlugin UtilBlockText.MakeText("SUPER SMASH MOBS", locClassics.clone().add(0, 14, -15), faceOther, 159, (byte)4, TextAlign.CENTER); UtilBlockText.MakeText("SUPER SMASH MOBS", locClassics.clone().add(0, 14, -16), faceOther, (Manager.Type == HubType.Halloween) ? 89 : 159, (Manager.Type == HubType.Halloween) ? (byte)0 : (byte)15, TextAlign.CENTER); - UtilBlockText.MakeText("MINE STRIKE", locClassics.clone().add(0, 21, -15), faceOther, 159, (byte)1, TextAlign.CENTER); - UtilBlockText.MakeText("MINE STRIKE", locClassics.clone().add(0, 21, -16), faceOther, (Manager.Type == HubType.Halloween) ? 89 : 159, (Manager.Type == HubType.Halloween) ? (byte)0 : (byte)15, TextAlign.CENTER); + UtilBlockText.MakeText("MASTER BUILERS", locClassics.clone().add(0, 21, -15), faceOther, 159, (byte)1, TextAlign.CENTER); + UtilBlockText.MakeText("MASTER BUILERS", locClassics.clone().add(0, 21, -16), faceOther, (Manager.Type == HubType.Halloween) ? 89 : 159, (Manager.Type == HubType.Halloween) ? (byte)0 : (byte)15, TextAlign.CENTER); UtilBlockText.MakeText("BLOCK HUNT", locClassics.clone().add(0, 28, -15), faceOther, 159, (byte)14, TextAlign.CENTER); UtilBlockText.MakeText("BLOCK HUNT", locClassics.clone().add(0, 28, -16), faceOther, (Manager.Type == HubType.Halloween) ? 89 : 159, (Manager.Type == HubType.Halloween) ? (byte)0 : (byte)15, TextAlign.CENTER); From af1f735a43006d84295defd5fba8cdf18a609478 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 3 May 2015 20:06:10 -0500 Subject: [PATCH 082/104] Add lightning packets, various gui improvements --- .../arcade/game/games/build/BuildData.java | 16 ++++++-- .../games/build/gui/page/OptionsPage.java | 37 ++++++++++++++++--- .../game/games/build/gui/page/TimePage.java | 5 ++- .../games/build/gui/page/WeatherPage.java | 2 +- 4 files changed, 48 insertions(+), 12 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index 9cbf1f198..b082caebf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -18,13 +18,15 @@ import mineplex.core.common.util.UtilParticle.ViewDist; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.WeatherType; import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; import org.bukkit.entity.Entity; import org.bukkit.entity.Ghast; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.inventory.meta.ItemMeta; +import net.minecraft.server.v1_7_R4.EntityLightning; +import net.minecraft.server.v1_7_R4.PacketPlayOutSpawnEntityWeather; public class BuildData { @@ -282,9 +284,15 @@ public class BuildData //Strike Lightning Here if (Math.random() > 0.9) - UtilBlock.getHighest(player.getWorld(), - (int)(Spawn.getX() + Math.random() * 200 - 100), - (int)(Spawn.getX() + Math.random() * 200 - 100)); + { + Location loc = UtilBlock.getHighest(player.getWorld(), + (int) (Spawn.getX() + Math.random() * 200 - 100), + (int) (Spawn.getX() + Math.random() * 200 - 100)).getLocation(); + + EntityLightning entity = new EntityLightning(((CraftWorld) loc.getWorld()).getHandle(), loc.getX(), loc.getY(), loc.getZ(), true); + PacketPlayOutSpawnEntityWeather packet = new PacketPlayOutSpawnEntityWeather(entity); + UtilPlayer.sendPacket(player, packet); + } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java index 8e5a396b3..fa4eeacb9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/OptionsPage.java @@ -5,6 +5,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; import mineplex.core.donation.DonationManager; import mineplex.core.shop.item.IButton; import mineplex.core.shop.item.ShopItem; @@ -29,11 +30,12 @@ public class OptionsPage extends ShopPageBase { ShopItem ground = new ShopItem(Material.GRASS, "Change Ground", 0, false); + final ShopItem flightSpeed = new ShopItem(Material.FEATHER, "Flight Speed", new String[] {C.cWhite + "Left-Click to Increase Speed", C.cWhite + "Shift Left-Click to Decrease Speed" } , 0, false); ShopItem particles = new ShopItem(Material.NETHER_STAR, "Particles", 0, false); - ShopItem weather = new ShopItem(Material.FEATHER, "Weather", 0, false); + ShopItem weather = new ShopItem(Material.SAPLING, "Weather", 0, false); ShopItem time = new ShopItem(Material.WATCH, "Time of Day", 0, false); - addButton(1, ground, new IButton() + addButton(0, ground, new IButton() { @Override public void onClick(Player player, ClickType clickType) @@ -41,7 +43,32 @@ public class OptionsPage extends ShopPageBase getShop().openPageForPlayer(player, new GroundPage(_game, getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); } }); - addButton(3, particles, new IButton() + + final int maxLevel = 8; + final float minLevel = 0.1F; + final float perLevel = (1F - minLevel) / (maxLevel - 1); + flightSpeed.setAmount((int)((getPlayer().getFlySpeed() - minLevel) / perLevel) + 1); + addButton(2, flightSpeed, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + if (clickType == ClickType.SHIFT_LEFT) + { + int newLevel = Math.max(1, flightSpeed.getAmount() - 1); + player.setFlySpeed(minLevel + ((newLevel - 1) * perLevel)); + } + else if (clickType == ClickType.LEFT) + { + int newLevel = Math.min(maxLevel, flightSpeed.getAmount() + 1); + player.setFlySpeed(minLevel + ((newLevel - 1) * perLevel)); + } + + buildPage(); + } + }); + + addButton(4, particles, new IButton() { @Override public void onClick(Player player, ClickType clickType) @@ -50,7 +77,7 @@ public class OptionsPage extends ShopPageBase } }); - addButton(5, weather, new IButton() + addButton(6, weather, new IButton() { @Override public void onClick(Player player, ClickType clickType) @@ -59,7 +86,7 @@ public class OptionsPage extends ShopPageBase } }); - addButton(7, time, new IButton() + addButton(8, time, new IButton() { @Override public void onClick(Player player, ClickType clickType) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java index 814726d84..f80cac336 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java @@ -44,8 +44,9 @@ public class TimePage extends ShopPageBase int time = (6 + (ticks / 1000)) % 12; if (time == 0) time = 12; - byte data = (byte) (buildData.Time == ticks ? 5 : 14); - ShopItem item = new ShopItem(Material.STAINED_CLAY, data, time + (am ? "am" : "pm"), null, 0, false, false); + Material material = buildData.Time == ticks ? Material.WATCH : Material.INK_SACK; + byte data = (byte) (buildData.Time == ticks ? 0 : 8); + ShopItem item = new ShopItem(material, data, time + (am ? "am" : "pm"), null, 0, false, false); addButton(i, item, new IButton() { @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java index 5f34ad97c..7c2ef6376 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/WeatherPage.java @@ -44,7 +44,7 @@ public class WeatherPage extends ShopPageBase ShopItem sunny = new ShopItem(Material.DOUBLE_PLANT, "Sunny", 1, false); ShopItem raining = new ShopItem(Material.WATER_BUCKET, "Raining", 1, false); - ShopItem storming = new ShopItem(Material.BLAZE_ROD, "Storming", 1, false); + ShopItem storming = new ShopItem(Material.GOLD_NUGGET, "Storming", 1, false); addButton(sunnySlot, sunny, new IButton() { From 95c9be47b659ed8f5f23d7847859f2d3993d5350 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 20:12:06 -0500 Subject: [PATCH 083/104] missing kit --- .../game/games/build/kits/KitBuilder.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/kits/KitBuilder.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/kits/KitBuilder.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/kits/KitBuilder.java new file mode 100644 index 000000000..a00f1e7f8 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/kits/KitBuilder.java @@ -0,0 +1,37 @@ +package nautilus.game.arcade.game.games.build.kits; + +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.KitAvailability; +import nautilus.game.arcade.kit.Perk; + +public class KitBuilder extends Kit +{ + public KitBuilder(ArcadeManager manager) + { + super(manager, "Builder", KitAvailability.Free, + + new String[] + { + "Can I build it!? Yes I can!" + }, + + new Perk[] + { + }, + EntityType.SKELETON, + new ItemStack(Material.WOOD)); + + } + + @Override + public void GiveItems(Player player) + { + + } +} \ No newline at end of file From fa1ac52f780aa13b35e1bbb45c426973835ae207 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 20:21:00 -0500 Subject: [PATCH 084/104] grav balance --- .../nautilus/game/arcade/game/games/gravity/Gravity.java | 2 +- .../arcade/game/games/gravity/objects/GravityPlayer.java | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java index 8de4e68fc..bdfa6c075 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java @@ -709,7 +709,7 @@ public class Gravity extends SoloGame { if (UtilMath.offset(player.getLocation(), _powerup) < 3) { - UtilTextMiddle.display(null, "Collected Jetpack Fuel", 0, 80, 5, player); + UtilTextMiddle.display(null, C.cGreen + "Collected Jetpack Fuel", 0, 80, 5, player); player.setExp(Math.min(0.9999f, player.getExp() + 0.25f)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java index f2d05569b..f12b93d62 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java @@ -149,7 +149,7 @@ public class GravityPlayer extends GravityObject return; } - player.setExp((float) Math.max(0, player.getExp()-0.004)); + player.setExp((float) Math.max(0, player.getExp()-0.005)); AddVelocity(player.getLocation().getDirection().multiply(0.025), 0.5); @@ -176,7 +176,10 @@ public class GravityPlayer extends GravityObject //Restore if (near) { - UtilTextMiddle.display(null, "Refilling Oxygen...", 0, 60, 5, (Player)Ent); + if (Base.getHealth() < 58) + UtilTextMiddle.display(null, "Refilling Oxygen...", 0, 60, 5, (Player)Ent); + else + UtilTextMiddle.display(null, C.cGreen + "Oxygen Full", 0, 60, 5, (Player)Ent); Ent.getWorld().playSound(Ent.getLocation(), Sound.CAT_HISS, 0.2f, 0.5f); From 4f4aeac12ce57d35a2136797ea11a99669023828 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sun, 3 May 2015 23:34:09 -0500 Subject: [PATCH 085/104] fixed typo --- .../Mineplex.Hub/src/mineplex/hub/modules/TextManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TextManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TextManager.java index 3ae0241d0..f69d45a1e 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TextManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TextManager.java @@ -97,8 +97,8 @@ public class TextManager extends MiniPlugin UtilBlockText.MakeText("SUPER SMASH MOBS", locClassics.clone().add(0, 14, -15), faceOther, 159, (byte)4, TextAlign.CENTER); UtilBlockText.MakeText("SUPER SMASH MOBS", locClassics.clone().add(0, 14, -16), faceOther, (Manager.Type == HubType.Halloween) ? 89 : 159, (Manager.Type == HubType.Halloween) ? (byte)0 : (byte)15, TextAlign.CENTER); - UtilBlockText.MakeText("MASTER BUILERS", locClassics.clone().add(0, 21, -15), faceOther, 159, (byte)1, TextAlign.CENTER); - UtilBlockText.MakeText("MASTER BUILERS", locClassics.clone().add(0, 21, -16), faceOther, (Manager.Type == HubType.Halloween) ? 89 : 159, (Manager.Type == HubType.Halloween) ? (byte)0 : (byte)15, TextAlign.CENTER); + UtilBlockText.MakeText("MASTER BUILDERS", locClassics.clone().add(0, 21, -15), faceOther, 159, (byte)1, TextAlign.CENTER); + UtilBlockText.MakeText("MASTER BUILDERS", locClassics.clone().add(0, 21, -16), faceOther, (Manager.Type == HubType.Halloween) ? 89 : 159, (Manager.Type == HubType.Halloween) ? (byte)0 : (byte)15, TextAlign.CENTER); UtilBlockText.MakeText("BLOCK HUNT", locClassics.clone().add(0, 28, -15), faceOther, 159, (byte)14, TextAlign.CENTER); UtilBlockText.MakeText("BLOCK HUNT", locClassics.clone().add(0, 28, -16), faceOther, (Manager.Type == HubType.Halloween) ? 89 : 159, (Manager.Type == HubType.Halloween) ? (byte)0 : (byte)15, TextAlign.CENTER); From 50cd692c629488ee305d27a14b97be4c71991a69 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Mon, 4 May 2015 00:34:03 -0500 Subject: [PATCH 086/104] fixed wither morph damaging blocks in grav lobby --- .../src/nautilus/game/arcade/game/games/gravity/Gravity.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java index bdfa6c075..61ba6ca2c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java @@ -609,6 +609,9 @@ public class Gravity extends SoloGame @EventHandler public void BowHit(ProjectileHitEvent event) { + if (!IsLive()) + return; + BowExplode(event.getEntity()); } From c8b5c84aa68338ad382e548e4cf3f1ec2f060d0d Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Mon, 4 May 2015 00:42:49 -0500 Subject: [PATCH 087/104] Added Master Builder quick game menu option. Added player counts to quick game menu --- .../mineplex/hub/server/ServerManager.java | 21 +++++ .../hub/server/ui/ServerGameMenu.java | 85 ++++++++++++++++--- .../hub/server/ui/button/SelectBLDButton.java | 23 +++++ 3 files changed, 116 insertions(+), 13 deletions(-) create mode 100644 Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/button/SelectBLDButton.java diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java index a0c85fa2d..bf9cf43eb 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java @@ -76,6 +76,7 @@ public class ServerManager extends MiniPlugin private NautHashMap> _serverKeyInfoMap = new NautHashMap>(); private NautHashMap _serverKeyTagMap = new NautHashMap(); + private NautHashMap _serverPlayerCounts = new NautHashMap(); private NautHashMap _serverNpcShopMap = new NautHashMap(); private NautHashMap _serverInfoMap = new NautHashMap(); private NautHashMap _serverUpdate = new NautHashMap(); @@ -411,6 +412,8 @@ public class ServerManager extends MiniPlugin { public void run(Collection serverStatusList) { + _serverPlayerCounts.clear(); + for (MinecraftServer serverStatus : serverStatusList) { if (!_serverInfoMap.containsKey(serverStatus.getName())) @@ -451,6 +454,11 @@ public class ServerManager extends MiniPlugin if (_serverKeyTagMap.containsKey(tag)) { _serverKeyInfoMap.get(_serverKeyTagMap.get(tag)).add(serverInfo); + + if (!_serverPlayerCounts.containsKey(tag)) + _serverPlayerCounts.put(tag, 0); + + _serverPlayerCounts.put(tag, _serverPlayerCounts.get(tag) + serverInfo.CurrentPlayers); } } @@ -749,4 +757,17 @@ public class ServerManager extends MiniPlugin { return _serverNpcShopMap.get("Wizards"); } + + public int getGroupTagPlayerCount(String tag) + { + if (_serverPlayerCounts.containsKey(tag)) + return _serverPlayerCounts.get(tag); + else + return 0; + } + + public ShopBase getBuildShop() + { + return _serverNpcShopMap.get("Build"); + } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java index 2cf8cb46b..332aa4985 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java @@ -15,6 +15,7 @@ import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.shop.page.ShopPageBase; import mineplex.hub.server.ServerManager; import mineplex.hub.server.ui.button.SelectBHButton; +import mineplex.hub.server.ui.button.SelectBLDButton; import mineplex.hub.server.ui.button.SelectBRButton; import mineplex.hub.server.ui.button.SelectCSButton; import mineplex.hub.server.ui.button.SelectDMTButton; @@ -48,82 +49,110 @@ public class ServerGameMenu extends ShopPageBase @Override protected void buildPage() { - this.setItem(0, ItemStackFactory.Instance.CreateStack(Material.IRON_PICKAXE.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "The Bridges " + C.cGray + "4 Team Survival", new String[] + setItem(0, ItemStackFactory.Instance.CreateStack(Material.IRON_PICKAXE.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "The Bridges " + C.cGray + "4 Team Survival", new String[] { ChatColor.RESET + "", ChatColor.RESET + "4 Teams get 10 minutes to prepare.", ChatColor.RESET + "Then the bridges drop, and all hell", ChatColor.RESET + "breaks loose as you battle to the", ChatColor.RESET + "death with the other teams.", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("BR") + ChatColor.RESET + " other players!", })); - this.setItem(2, ItemStackFactory.Instance.CreateStack(Material.DIAMOND_SWORD.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Survival Games " + C.cGray + "Last Man Standing", new String[] + setItem(2, ItemStackFactory.Instance.CreateStack(Material.DIAMOND_SWORD.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Survival Games " + C.cGray + "Last Man Standing", new String[] { ChatColor.RESET + "", ChatColor.RESET + "Search for chests to find loot and ", ChatColor.RESET + "fight others to be the last man standing. ", ChatColor.RESET + "Beware of the deep freeze!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("HG") + ChatColor.RESET + " other players!", })); - this.setItem(4, ItemStackFactory.Instance.CreateStack(Material.TNT.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Mine-Strike " + C.cGray + "Team Survival", new String[] + setItem(4, ItemStackFactory.Instance.CreateStack(Material.TNT.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Mine-Strike " + C.cGray + "Team Survival", new String[] { ChatColor.RESET + "", ChatColor.RESET + "One team must defend two bomb sites from", ChatColor.RESET + "the other team, who are trying to plant a bomb", ChatColor.RESET + "and blow them up!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MS") + ChatColor.RESET + " other players!", })); - this.setItem(6, _superSmashCycle.get(_ssmIndex)); + setItem(6, _superSmashCycle.get(_ssmIndex)); - this.setItem(8, ItemStackFactory.Instance.CreateStack(Material.BLAZE_ROD.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Wizards " + C.cGray + "Last Man Standing", new String[] + setItem(8, ItemStackFactory.Instance.CreateStack(Material.BLAZE_ROD.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Wizards " + C.cGray + "Last Man Standing", new String[] { ChatColor.RESET + "", ChatColor.RESET + "Wield powerful spells to fight", ChatColor.RESET + "against other players in this", ChatColor.RESET + "exciting free-for-all brawl!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("WIZ") + ChatColor.RESET + " other players!", })); - this.setItem(18, ItemStackFactory.Instance.CreateStack(Material.BOOK_AND_QUILL.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Draw My Thing " + C.cGray + "Pictionary!", new String[] + setItem(18, ItemStackFactory.Instance.CreateStack(Material.BOOK_AND_QUILL.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Draw My Thing " + C.cGray + "Pictionary!", new String[] { ChatColor.RESET + "", ChatColor.RESET + "Players take turns at drawing a random", ChatColor.RESET + "word. Whoever guesses it within the time", ChatColor.RESET + "limit gets some points!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("DMT") + ChatColor.RESET + " other players!", })); - this.setItem(20, ItemStackFactory.Instance.CreateStack(Material.DIAMOND_CHESTPLATE, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Castle Siege " + C.cGray + "Team Game", new String[] + setItem(20, ItemStackFactory.Instance.CreateStack(Material.DIAMOND_CHESTPLATE, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Castle Siege " + C.cGray + "Team Game", new String[] { ChatColor.RESET + "", ChatColor.RESET + "Defenders must protect King Sparklez", ChatColor.RESET + "from the endless waves of Undead", ChatColor.RESET + "until the sun rises!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("CS") + ChatColor.RESET + " other players!", })); - this.setItem(22, ItemStackFactory.Instance.CreateStack(Material.BEACON.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Dominate " + C.cGray + "Team Game", new String[] + setItem(22, ItemStackFactory.Instance.CreateStack(Material.BEACON.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Dominate " + C.cGray + "Team Game", new String[] { ChatColor.RESET + "", ChatColor.RESET + "Customize one of five exciting champions", ChatColor.RESET + "and battle with the opposing team for the", ChatColor.RESET + "control points on the map.", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("DOM") + ChatColor.RESET + " other players!", })); - this.setItem(24, ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Team Deathmatch " + C.cGray + "Team Game", new String[] + setItem(24, ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Team Deathmatch " + C.cGray + "Team Game", new String[] { ChatColor.RESET + "", ChatColor.RESET + "Customize one of five exciting champions", ChatColor.RESET + "and battle with the opposing team to the", ChatColor.RESET + "last man standing.", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("TDM") + ChatColor.RESET + " other players!", })); - this.setItem(26, ItemStackFactory.Instance.CreateStack(Material.GRASS.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Block Hunt " + C.cGray + "Cat and Mouse", new String[] + setItem(26, ItemStackFactory.Instance.CreateStack(Material.GRASS.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Block Hunt " + C.cGray + "Cat and Mouse", new String[] { ChatColor.RESET + "", ChatColor.RESET + "Hide as blocks/animals, upgrade your ", ChatColor.RESET + "weapon and fight to survive against", ChatColor.RESET + "the Hunters!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("BH") + ChatColor.RESET + " other players!", })); - this.setItem(40, _minigameCycle.get(_minigameIndex)); + setItem(36, ItemStackFactory.Instance.CreateStack(Material.WOOD.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Master Builders " + C.cGray + "Creative Build", new String[] + { + ChatColor.RESET + "", + ChatColor.RESET + "Players are given a Build Theme and ", + ChatColor.RESET + "must use blocks, monsters and more", + ChatColor.RESET + "to create a masterpiece!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("BLD") + ChatColor.RESET + " other players!", + })); + + setItem(44, _minigameCycle.get(_minigameIndex)); getButtonMap().put(0, new SelectBRButton(this)); getButtonMap().put(2, new SelectSGButton(this)); @@ -136,7 +165,8 @@ public class ServerGameMenu extends ShopPageBase getButtonMap().put(22, new SelectDOMButton(this)); getButtonMap().put(24, new SelectTDMButton(this)); getButtonMap().put(26, new SelectBHButton(this)); - getButtonMap().put(40, new SelectMINButton(this)); + getButtonMap().put(36, new SelectBLDButton(this)); + getButtonMap().put(44, new SelectMINButton(this)); } @SuppressWarnings("deprecation") @@ -158,6 +188,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Turf Wars", ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.GOLD_BOOTS.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -175,7 +207,9 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Super Paintball", ChatColor.RESET + "Turf Wars", ChatColor.RESET + "Death Tag", - ChatColor.RESET + "Bacon Brawl" + ChatColor.RESET + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(122, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -194,6 +228,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Turf Wars", ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.BOW, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -212,6 +248,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Turf Wars", ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.LEATHER_BOOTS.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -230,6 +268,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Turf Wars", ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.MILK_BUCKET.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -248,6 +288,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Turf Wars", ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.MILK_BUCKET.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -266,6 +308,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Turf Wars", ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_BARDING.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -284,6 +328,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Turf Wars", ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(159, (byte)14, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -302,6 +348,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + C.Bold + ChatColor.GREEN + "Turf Wars", ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(309, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -320,6 +368,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Turf Wars", ChatColor.RESET + C.Bold + ChatColor.GREEN + "Death Tag", ChatColor.RESET + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(319, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -338,6 +388,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Turf Wars", ChatColor.RESET + "Death Tag", ChatColor.RESET + C.Bold + ChatColor.GREEN + "Bacon Brawl", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", })); } @@ -349,6 +401,8 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Pick from a selection of monsters,", ChatColor.RESET + "then battle other players to the ", ChatColor.RESET + "death with your monsters skills!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("SSM") + ChatColor.RESET + " other players!", }; _superSmashCycle.add(ItemStackFactory.Instance.CreateStack(397, (byte)4, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Super Smash Mobs", desc)); @@ -422,4 +476,9 @@ public class ServerGameMenu extends ShopPageBase { getPlugin().getWizardShop().attemptShopOpen(player); } + + public void OpenBLD(Player player) + { + getPlugin().getBuildShop().attemptShopOpen(player); + } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/button/SelectBLDButton.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/button/SelectBLDButton.java new file mode 100644 index 000000000..38fdf404c --- /dev/null +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/button/SelectBLDButton.java @@ -0,0 +1,23 @@ +package mineplex.hub.server.ui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.shop.item.IButton; +import mineplex.hub.server.ui.ServerGameMenu; + +public class SelectBLDButton implements IButton +{ + private ServerGameMenu _menu; + + public SelectBLDButton(ServerGameMenu menu) + { + _menu = menu; + } + + @Override + public void onClick(Player player, ClickType clickType) + { + _menu.OpenBLD(player); + } +} From 677c8d1198f9d0255ab1610f2d1c6060833ee8af Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Mon, 4 May 2015 00:42:59 -0500 Subject: [PATCH 088/104] Updated default MOTD. --- .../src/mineplex/bungee/motd/MotdManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java index 68680211a..c1e19b5f8 100644 --- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java @@ -56,8 +56,8 @@ public class MotdManager implements Listener, Runnable // Add in default MOTD listing to database List lines = new ArrayList(); - lines.add(" §e§lNEW GAME §a§lWizards!"); - lines.add(" §d§lRank Sale §a§l40% Off"); + lines.add(" §d§lMaster Builders§f - §d§lWizards§f - §d§lGravity"); + //lines.add(" §d§lRank Sale §a§l40% Off"); updateMainMotd(" §b§l§m §8§l§m[ §r §9§lMineplex§r §f§lGames§r §8§l§m ]§b§l§m §r", lines); From b959bcaa90203e18b4315c8ab55df02503fe51f8 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Mon, 4 May 2015 00:56:12 -0500 Subject: [PATCH 089/104] fixed 1.8 req --- .../nautilus/game/arcade/managers/GameFlagManager.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java index 05c7703be..483462e20 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java @@ -1135,7 +1135,7 @@ public class GameFlagManager implements Listener if (Manager.GetGame() == null) return; - if (!Manager.GetGame().DisableKillCommand) + if (!Manager.GetGame().VersionRequire1_8) return; if (event.getType() != UpdateType.SEC) @@ -1163,8 +1163,14 @@ public class GameFlagManager implements Listener public void versionKick(Player player) { + if (Manager.GetGame() == null) + return; + + if (Manager.GetGame().GetType().getResourcePackUrl() == null) + return; + UtilPlayer.message(player, " "); - UtilPlayer.message(player, C.cGold + C.Bold + "Gravity requires you to be using Minecraft 1.8!"); + UtilPlayer.message(player, C.cGold + C.Bold + Manager.GetGame().GetType().GetName() + " requires you to be using Minecraft 1.8!"); UtilPlayer.message(player, " "); player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); From 4252bf70df6ffb70129acb43fc89f5cfc6bd49c0 Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Mon, 4 May 2015 01:40:57 -0500 Subject: [PATCH 090/104] Fix Master Builder game button in quick menu. --- Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java index bf9cf43eb..c1a058b9c 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java @@ -768,6 +768,6 @@ public class ServerManager extends MiniPlugin public ShopBase getBuildShop() { - return _serverNpcShopMap.get("Build"); + return _serverNpcShopMap.get("Master Builders"); } } From 3b518aec3fe638c381b7acef542b657dc65a6234 Mon Sep 17 00:00:00 2001 From: Peter Miller Date: Mon, 4 May 2015 04:14:19 -0400 Subject: [PATCH 091/104] More build changes for Bamboo. --- Plugins/BuildFiles/common.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Plugins/BuildFiles/common.xml b/Plugins/BuildFiles/common.xml index b260e2fe0..dcbbfa7f3 100644 --- a/Plugins/BuildFiles/common.xml +++ b/Plugins/BuildFiles/common.xml @@ -25,10 +25,19 @@ + + + + + + + + + + - From c93cd0d36c6c3c967b985da4fa9df9f286d7f4c1 Mon Sep 17 00:00:00 2001 From: Peter Miller Date: Mon, 4 May 2015 04:25:44 -0400 Subject: [PATCH 092/104] Moar Bamboo changes. --- Plugins/BuildFiles/common.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Plugins/BuildFiles/common.xml b/Plugins/BuildFiles/common.xml index dcbbfa7f3..7051d01ac 100644 --- a/Plugins/BuildFiles/common.xml +++ b/Plugins/BuildFiles/common.xml @@ -4,7 +4,7 @@ - + @@ -12,6 +12,8 @@ + + @@ -22,6 +24,8 @@ + + @@ -32,6 +36,10 @@ + + + + From 93656f7659fc0710931788f43d89665b8476f51c Mon Sep 17 00:00:00 2001 From: Peter Miller Date: Mon, 4 May 2015 04:28:34 -0400 Subject: [PATCH 093/104] Moarer Bamboo changes. --- Plugins/BuildFiles/common.xml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Plugins/BuildFiles/common.xml b/Plugins/BuildFiles/common.xml index 7051d01ac..fc98b5387 100644 --- a/Plugins/BuildFiles/common.xml +++ b/Plugins/BuildFiles/common.xml @@ -13,19 +13,7 @@ - - - - - - - - - - - - - + @@ -37,6 +25,18 @@ + + + + + + + + + + + + From ad82e9733ac5b6bdc07f5cfd78ca08afd9004dbf Mon Sep 17 00:00:00 2001 From: Peter Miller Date: Mon, 4 May 2015 04:33:28 -0400 Subject: [PATCH 094/104] Moarerer Bamboo changes. --- Plugins/BuildFiles/common.xml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Plugins/BuildFiles/common.xml b/Plugins/BuildFiles/common.xml index fc98b5387..7821c1fdb 100644 --- a/Plugins/BuildFiles/common.xml +++ b/Plugins/BuildFiles/common.xml @@ -13,7 +13,7 @@ - + @@ -26,6 +26,18 @@ + + + + + + + + + + + + @@ -37,7 +49,7 @@ - + From 4f54b9aa04c98f1dd535b48e979d329fae296bd3 Mon Sep 17 00:00:00 2001 From: Peter Miller Date: Mon, 4 May 2015 05:10:37 -0400 Subject: [PATCH 095/104] Bamboo... --- Plugins/BuildFiles/common.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/Plugins/BuildFiles/common.xml b/Plugins/BuildFiles/common.xml index 7821c1fdb..25c4be6ac 100644 --- a/Plugins/BuildFiles/common.xml +++ b/Plugins/BuildFiles/common.xml @@ -57,7 +57,6 @@ - From 7505bbc1a294ebb55f15cdd92177f1dbedf7d9a2 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Mon, 4 May 2015 15:34:57 -0500 Subject: [PATCH 096/104] gravity fix --- .../game/games/gravity/objects/GravityPlayer.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java index f12b93d62..7a391955e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java @@ -113,6 +113,20 @@ public class GravityPlayer extends GravityObject if (!Ent.equals(player)) return; + boolean nearBlock = false; + for (Block block : UtilBlock.getSurrounding(Base.getLocation().getBlock(), true)) + { + if (block.getType() != Material.AIR) + { + nearBlock = true; + break; + } + } + + //Requires near block OR batsit + if (!Bat.isSitting() && !nearBlock) + return; + GrabDelay = System.currentTimeMillis(); AddVelocity(player.getLocation().getDirection().multiply(0.5), 0.5); From a7407d8b8cb350b964e9bf89f1f3bf20a97471f5 Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Mon, 4 May 2015 22:51:21 -0500 Subject: [PATCH 097/104] Added all minigames standalones into mixed arcade player count. --- .../hub/server/ui/ServerGameMenu.java | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java index 332aa4985..6c8cbe089 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java @@ -172,6 +172,18 @@ public class ServerGameMenu extends ShopPageBase @SuppressWarnings("deprecation") private void createMinigameCycle() { + int playerCount = getPlugin().getGroupTagPlayerCount("MIN") + + getPlugin().getGroupTagPlayerCount("DR") + + getPlugin().getGroupTagPlayerCount("DE") + + getPlugin().getGroupTagPlayerCount("PB") + + getPlugin().getGroupTagPlayerCount("TF") + + getPlugin().getGroupTagPlayerCount("RUN") + + getPlugin().getGroupTagPlayerCount("SN") + + getPlugin().getGroupTagPlayerCount("DT") + + getPlugin().getGroupTagPlayerCount("SQ") + + getPlugin().getGroupTagPlayerCount("SA") + + getPlugin().getGroupTagPlayerCount("SS") + + getPlugin().getGroupTagPlayerCount("OITQ"); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(98, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] { ChatColor.RESET + "", @@ -189,7 +201,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.GOLD_BOOTS.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -209,7 +221,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(122, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -229,7 +241,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.BOW, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -249,7 +261,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.LEATHER_BOOTS.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -269,7 +281,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.MILK_BUCKET.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -289,7 +301,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.MILK_BUCKET.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -309,7 +321,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_BARDING.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -329,7 +341,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(159, (byte)14, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -349,7 +361,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Death Tag", ChatColor.RESET + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(309, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -369,7 +381,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + C.Bold + ChatColor.GREEN + "Death Tag", ChatColor.RESET + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); _minigameCycle.add(ItemStackFactory.Instance.CreateStack(319, (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Arcade " + C.cGray + "Mixed Games", new String [] @@ -389,7 +401,7 @@ public class ServerGameMenu extends ShopPageBase ChatColor.RESET + "Death Tag", ChatColor.RESET + C.Bold + ChatColor.GREEN + "Bacon Brawl", ChatColor.RESET + "", - ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MIN") + ChatColor.RESET + " other players!", + ChatColor.RESET + "Join " + ChatColor.GREEN + playerCount + ChatColor.RESET + " other players!", })); } From 75676483127b2c99dc3bc52a833b754183f28f04 Mon Sep 17 00:00:00 2001 From: Ty Sayers Date: Tue, 5 May 2015 15:33:42 -0400 Subject: [PATCH 098/104] Add CustomItem hierarchy for Clans project, introducing rare gear that can be decorated with various ItemAttributes for unique effects. --- .../mineplex/game/clans/items/CustomItem.java | 106 +++++++++++ .../game/clans/items/GearManager.java | 101 +++++++++++ .../game/clans/items/ItemListener.java | 65 +++++++ .../mineplex/game/clans/items/PlayerGear.java | 169 ++++++++++++++++++ .../items/attributes/AttackAttribute.java | 36 ++++ .../items/attributes/ConqueringAttribute.java | 28 +++ .../items/attributes/DamageAttribute.java | 25 +++ .../items/attributes/FlamingAttribute.java | 31 ++++ .../items/attributes/FrostedAttribute.java | 54 ++++++ .../items/attributes/HasteAttribute.java | 43 +++++ .../items/attributes/HeavyAttribute.java | 21 +++ .../clans/items/attributes/ItemAttribute.java | 44 +++++ .../items/attributes/JaggedAttribute.java | 28 +++ .../items/attributes/SharpAttribute.java | 27 +++ .../items/attributes/SmashingAttribute.java | 21 +++ .../items/attributes/SwiftAttribute.java | 21 +++ .../items/attributes/ValueDistribution.java | 56 ++++++ .../items/attributes/VampiricAttribute.java | 38 ++++ .../clans/items/commands/GearCommand.java | 42 +++++ .../game/clans/items/generation/Weight.java | 19 ++ .../clans/items/generation/WeightSet.java | 55 ++++++ Plugins/Mineplex.Queue.Core/.project | 17 ++ Plugins/Mineplex.ServerProcesses/.project | 17 ++ 23 files changed, 1064 insertions(+) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/AttackAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ConqueringAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/DamageAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FlamingAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FrostedAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HasteAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HeavyAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/JaggedAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SharpAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SmashingAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SwiftAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ValueDistribution.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/VampiricAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/Weight.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/WeightSet.java create mode 100644 Plugins/Mineplex.Queue.Core/.project create mode 100644 Plugins/Mineplex.ServerProcesses/.project diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java new file mode 100644 index 000000000..00eaaf444 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java @@ -0,0 +1,106 @@ +package mineplex.game.clans.items; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import mineplex.game.clans.items.attributes.ItemAttribute; + +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +/** + * Represents a customizable wrapper for an {@link ItemStack}, enabling the possession + * of special abilities, attributes, and triggers on item. + * @author MrTwiggy + * + */ +public class CustomItem +{ + + private ItemAttribute superPrefix; + private ItemAttribute prefix; + private ItemAttribute suffix; + + private String _displayName; + + /** + * @return the name displayed to players for the item. + */ + public String getDisplayName() + { + // Concatenate attribute prefixes/suffixes to display name. + String display = _displayName; + + if (prefix != null) + { + display = prefix.getDisplayName() + " " + display; + } + + if (superPrefix != null) + { + display = superPrefix.getDisplayName() + " " + display; + } + + if (suffix != null) + { + display += " of " + suffix.getDisplayName(); + } + + return display; + } + + public List getLore() + { + List lore = new ArrayList(); + + // TODO: Add decorative stat lore (and hidden json-encoding/uuid info) + lore.add("Custom stat lore string!"); + + return lore; + } + + public ItemStack toItemStack() + { + // TODO: Generate an item stack representing this CustomItem + return null; + } + + public void onInteract(PlayerInteractEvent event) + { + for (ItemAttribute attribute : getAttributes()) + { + attribute.onInteract(event); + } + } + + public void onAttack(EntityDamageByEntityEvent event) + { + for (ItemAttribute attribute : getAttributes()) + { + attribute.onAttack(event); + } + } + + public void onAttacked(EntityDamageByEntityEvent event) + { + for (ItemAttribute attribute : getAttributes()) + { + attribute.onAttacked(event); + } + } + + /** + * @return the (possibly empty) set of {@link ItemAttribute}s attached to this item. + */ + public Set getAttributes() + { + Set attributes = new HashSet(); + attributes.add(superPrefix); + attributes.add(prefix); + attributes.add(suffix); + return attributes; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java new file mode 100644 index 000000000..7260fb095 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java @@ -0,0 +1,101 @@ +package mineplex.game.clans.items; + +import java.util.HashMap; +import java.util.Map; + +import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClientManager; +import mineplex.core.portal.TransferHandler; +import mineplex.core.portal.Commands.SendCommand; +import mineplex.core.portal.Commands.ServerCommand; +import mineplex.game.clans.items.commands.GearCommand; +import mineplex.game.clans.items.generation.Weight; +import mineplex.game.clans.items.generation.WeightSet; +import mineplex.serverdata.Region; +import mineplex.serverdata.commands.ServerCommandManager; +import mineplex.serverdata.commands.TransferCommand; +import mineplex.serverdata.servers.ServerManager; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; + +/** + * Manages creation and retrieval of associated {@link PlayerGear}s with online players, as well + * as offering methods for parsing and handling {@link CustomItem}s. + * @author MrTwiggy + * + */ +public class GearManager extends MiniPlugin +{ + private static GearManager _instance; // Singleton instance + + private Map playerGears; // Mapping of player names (key) to cached gear set (value). + private WeightSet _attributeWeights; // Weightings for randomly selecting number of attributes (1, 2, 3) + private WeightSet _itemWeights; // Weightings for randomly selecting item type (legendary/rare) + private WeightSet _gearWeights; // Weightings for randomly selecting gear type (armour/weapon) + + public GearManager(JavaPlugin plugin) + { + super("CustomGear", plugin); + + _instance = this; + + playerGears = new HashMap(); + _attributeWeights = new WeightSet(new Weight(3, 3), new Weight(20, 2), new Weight(77, 1)); + _itemWeights = new WeightSet(new Weight(90, true), new Weight(10, false)); + _itemWeights = new WeightSet(new Weight(50, true), new Weight(50, false)); + } + + @Override + public void addCommands() + { + addCommand(new GearCommand(this)); + } + + /** + * @param player - the player whose {@link PlayerGear} set is to be fetched. + * @return the cached or newly instantiated {@link PlayerGear} associated with {@code player}. + */ + public PlayerGear getPlayerGear(Player player) + { + String playerName = player.getName(); + if (!playerGears.containsKey(playerName)) + { + PlayerGear gear = new PlayerGear(playerName); + playerGears.put(playerName, gear); + } + + return playerGears.get(playerName); + } + + public CustomItem generateItem() + { + int attributeCount = _attributeWeights.generateRandom(); + boolean isLegendary = _itemWeights.generateRandom(); + boolean isArmour = _gearWeights.generateRandom(); + + // TODO: Generate custom item randomly using generated values above + + return null; + } + + public static CustomItem parseItem(ItemStack item) + { + return null; // TODO: Parse CustomItem from hidden JSON-encoded lore string in item passed in + } + + public static boolean isCustomItem(ItemStack item) + { + return parseItem(item) != null; // TODO: Check for JSON-encoded lore string instead of deserializing? + } + + /** + * @return singleton instance of {@link GearManager}. + */ + public static GearManager getInstane() + { + return _instance; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java new file mode 100644 index 000000000..4a619b961 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java @@ -0,0 +1,65 @@ +package mineplex.game.clans.items; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerInteractEvent; + +/** + * Listens for item-related trigger events and accordingly triggers appropriate + * {@link PlayerGear} events for {@link CustomItem} abilities and attributes. + * @author MrTwiggy + * + */ +public class ItemListener implements Listener +{ + + + /** + * Handle the trigger of custom gear related effects and abilities. + * @param event + */ + @EventHandler + public void onPlayerAttack(EntityDamageByEntityEvent event) + { + // Trigger custom gear effects for attacker + if (event.getDamager() instanceof Player) + { + Player attacker = (Player) event.getDamager(); + PlayerGear attackerGear = getGear(attacker); + attackerGear.onAttack(event); + } + + // Trigger custom gear effects for defender + if (event.getEntity() instanceof Player) + { + Player defender = (Player) event.getEntity(); + PlayerGear defenderGear = getGear(defender); + defenderGear.onAttacked(event); + } + } + + /** + * Handle weapon ability activation of custom gear. + * @param event + */ + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) + { + // Activate weapon interact abilities + PlayerGear playerGear = getGear(event.getPlayer()); + playerGear.onInteract(event); + } + + /** + * @param player - the player whose gear is to be fetched + * @return the {@link PlayerGear} associated with {@code player}. + */ + private PlayerGear getGear(Player player) + { + return GearManager.getInstane().getPlayerGear(player); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java new file mode 100644 index 000000000..033b811f1 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java @@ -0,0 +1,169 @@ +package mineplex.game.clans.items; + +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +/** + * PlayerGear caches and manages a players set of {@link CustomItem}s that + * they currently wield. + * @author MrTwiggy + * + */ +public class PlayerGear +{ + + private String _playerName; // Name of player who owns the gear + + // Cached custom item information for player's gear + private CustomItem weapon; + private CustomItem helmet; + private CustomItem chestplate; + private CustomItem leggings; + private CustomItem boots; + + /** + * Class constructor + * @param playerName + */ + public PlayerGear(String playerName) + { + _playerName = playerName; + } + + /** + * @return the {@link Player} that owns this gear set. + */ + public Player getPlayer() + { + return Bukkit.getPlayer(_playerName); + } + + /** + * Trigger interact events for the set of equipped {@link CustomItem}s in gear set. + * @param event - the triggering interact event + */ + public void onInteract(PlayerInteractEvent event) + { + for (CustomItem item : getGear()) + { + item.onInteract(event); + } + } + + /** + * Trigger on-attack events for the set of equipped {@link CustomItem}s in gear set. + * @param event - the triggering on-attack event + */ + public void onAttack(EntityDamageByEntityEvent event) + { + for (CustomItem item : getGear()) + { + item.onAttack(event); + } + } + + /** + * Trigger attacked events for the set of equipped {@link CustomItem}s in gear set. + * @param event - the triggering attacked event + */ + public void onAttacked(EntityDamageByEntityEvent event) + { + for (CustomItem item : getGear()) + { + item.onAttacked(event); + } + } + + public CustomItem getWeapon() + { + ItemStack weaponItem = getPlayer().getInventory().getItemInHand(); + + if (!itemsMatch(weapon, weaponItem)) + { + weapon = parseItem(weaponItem); + } + + return weapon; + } + + public CustomItem getHelmet() + { + ItemStack helmetItem = getPlayer().getInventory().getHelmet(); + + if (!itemsMatch(helmet, helmetItem)) + { + helmet = parseItem(helmetItem); + } + + return helmet; + } + + public CustomItem getChestplate() + { + ItemStack chestplateItem = getPlayer().getInventory().getChestplate(); + + if (!itemsMatch(chestplate, chestplateItem)) + { + chestplate = parseItem(chestplateItem); + } + + return chestplate; + } + + public CustomItem getLeggings() + { + ItemStack leggingsItem = getPlayer().getInventory().getLeggings(); + + if (!itemsMatch(leggings, leggingsItem)) + { + leggings = parseItem(leggingsItem); + } + + return leggings; + } + + public CustomItem getBoots() + { + ItemStack bootsItem = getPlayer().getInventory().getBoots(); + + if (!itemsMatch(boots, bootsItem)) + { + boots = parseItem(bootsItem); + } + + return boots; + } + + /** + * @return set of currently equipped {@link CustomItem}s in the gear set. + */ + public Set getGear() + { + Set items = new HashSet(); + items.add(getWeapon()); + items.add(getHelmet()); + items.add(getChestplate()); + items.add(getLeggings()); + items.add(getBoots()); + return items; + } + + private boolean itemsMatch(CustomItem customItem, ItemStack item) + { + if (customItem == null || item == null) return false; + + // TODO: Implement more sophisticated match-checking that checks hidden UUID + return customItem.getDisplayName().equals(item.getItemMeta().getDisplayName()); + } + + private CustomItem parseItem(ItemStack item) + { + return GearManager.parseItem(item); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/AttackAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/AttackAttribute.java new file mode 100644 index 000000000..057fad619 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/AttackAttribute.java @@ -0,0 +1,36 @@ +package mineplex.game.clans.items.attributes; + +import org.bukkit.entity.Entity; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +/** + * Represents an attribute that triggers a special ability after a specified number + * of attacks with a weapon possessing the attribute. + * @author MrTwiggy + * + */ +public abstract class AttackAttribute extends ItemAttribute +{ + + private int _attackLimit; + private int _attackCount; + + public AttackAttribute(int attackLimit) + { + _attackLimit = attackLimit; + _attackCount = 0; + } + + public void onAttack(EntityDamageByEntityEvent event) + { + _attackCount++; + + if (_attackCount >= _attackLimit) + { + _attackCount = 0; + triggerAttack(event.getDamager(), event.getEntity()); + } + } + + public abstract void triggerAttack(Entity attacker, Entity defender); +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ConqueringAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ConqueringAttribute.java new file mode 100644 index 000000000..56b8710ef --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ConqueringAttribute.java @@ -0,0 +1,28 @@ +package mineplex.game.clans.items.attributes; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +public class ConqueringAttribute extends DamageAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution damageGen = generateDistribution(1.0d, 6.0d); // Value generator for heal amount + + public ConqueringAttribute() + { + super(damageGen); + } + + @Override + public String getDisplayName() + { + return "Conquering"; // TODO: Fill in name + } + + @Override + public boolean grantBonusDamage(Entity entity) + { + return !(entity instanceof Player); // TODO: Check to see if entity is mob and/or a boss! + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/DamageAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/DamageAttribute.java new file mode 100644 index 000000000..0346b26eb --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/DamageAttribute.java @@ -0,0 +1,25 @@ +package mineplex.game.clans.items.attributes; + +import org.bukkit.entity.Entity; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public abstract class DamageAttribute extends ItemAttribute +{ + private double _bonusDamage; + + public DamageAttribute(ValueDistribution damageGen) + { + _bonusDamage = damageGen.generateValue(); + } + + @Override + public void onAttack(EntityDamageByEntityEvent event) + { + if (grantBonusDamage(event.getEntity())) + { + event.setDamage(event.getDamage() + _bonusDamage); + } + } + + public abstract boolean grantBonusDamage(Entity defender); +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FlamingAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FlamingAttribute.java new file mode 100644 index 000000000..04d34e56d --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FlamingAttribute.java @@ -0,0 +1,31 @@ +package mineplex.game.clans.items.attributes; + +import org.bukkit.entity.Entity; + +public class FlamingAttribute extends AttackAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution attackGen = generateDistribution(2, 4); // Value generator for heal amount + private static ValueDistribution fireGen = generateDistribution(60, 120); // Value generator for heal amount + + private int _fireDuration; + + public FlamingAttribute() + { + super(attackGen.generateIntValue()); + _fireDuration = fireGen.generateIntValue(); + } + + @Override + public String getDisplayName() + { + return "Flaming"; // TODO: Fill in name + } + + @Override + public void triggerAttack(Entity attacker, Entity defender) + { + defender.setFireTicks(_fireDuration); + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FrostedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FrostedAttribute.java new file mode 100644 index 000000000..99e4685a7 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FrostedAttribute.java @@ -0,0 +1,54 @@ +package mineplex.game.clans.items.attributes; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +/** + * Frosted attribute to be added onto custom armour. Applies a slowing effect to players that + * attack the wearer of a Frosted {@link CustomItem}. + * @author MrTwiggy + * + */ +public class FrostedAttribute extends ItemAttribute +{ + public final int TICKS_PER_SECOND = 20; // Number of ticks per second for in-game logic. + private static ValueDistribution amountGen = generateDistribution(0, 3); // Value generator for slow amount range + private static ValueDistribution durationGen = generateDistribution(1, 3); // Value generator for slow duration range + + private int _slowAmount; // The slowness level/amplifier + private double _slowDuration; // The duration (in seconds) of slow effect + + /** + * Class constructor + */ + public FrostedAttribute() + { + _slowAmount = amountGen.generateIntValue(); + _slowDuration = durationGen.generateValue(); + } + + @Override + public String getDisplayName() + { + return "Frosted"; + } + + @Override + public void onAttacked(EntityDamageByEntityEvent event) + { + if (event.getDamager() instanceof Player) + { + Player player = (Player) event.getDamager(); + + player.addPotionEffect(generateSlowEffect()); // Slow attacking player + } + } + + private PotionEffect generateSlowEffect() + { + int duration = (int) (_slowDuration / TICKS_PER_SECOND); + return new PotionEffect(PotionEffectType.SLOW, duration, _slowAmount); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HasteAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HasteAttribute.java new file mode 100644 index 000000000..d8844bf50 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HasteAttribute.java @@ -0,0 +1,43 @@ +package mineplex.game.clans.items.attributes; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; + +public class HasteAttribute extends AttackAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution attackGen = generateDistribution(2, 4); // Value generator for heal amount + private static ValueDistribution speedGen = generateDistribution(0, 2); // Value generator for heal amount + private static ValueDistribution durationGen = generateDistribution(60, 120); // Value generator for heal amount + + private int _speedAmount; + private int _speedDuration; + + public HasteAttribute() + { + super(attackGen.generateIntValue()); + + _speedAmount = speedGen.generateIntValue(); + _speedDuration = durationGen.generateIntValue(); + } + + @Override + public String getDisplayName() + { + return "Haste"; // TODO: Fill in name + } + + @Override + public void triggerAttack(Entity attacker, Entity defender) + { + if (attacker instanceof Player) + { + Player player = (Player) attacker; + player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, _speedDuration, _speedAmount)); + } + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HeavyAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HeavyAttribute.java new file mode 100644 index 000000000..78e7ccdeb --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HeavyAttribute.java @@ -0,0 +1,21 @@ +package mineplex.game.clans.items.attributes; + +public class HeavyAttribute extends ItemAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution healGen = generateDistribution(4, 12); // Value generator for heal amount + + private int _healPercent; + + public HeavyAttribute() + { + _healPercent = healGen.generateIntValue(); + } + + @Override + public String getDisplayName() + { + return ""; // TODO: Fill in name + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java new file mode 100644 index 000000000..3ef33e372 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java @@ -0,0 +1,44 @@ +package mineplex.game.clans.items.attributes; + +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; + +/** + * Represents an attribute that can be attached to {@link CustomItem} to augment their abilities + * and special effects on trigger. + * @author MrTwiggy + * + */ +public abstract class ItemAttribute +{ + + /** + * @return the attribute name display to players. + */ + public abstract String getDisplayName(); + + public void onInteract(PlayerInteractEvent event) + { + // Implementation left to subclasses. + } + + public void onAttack(EntityDamageByEntityEvent event) + { + // Implementation left to subclasses. + } + + public void onAttacked(EntityDamageByEntityEvent event) + { + // Implementation left to subclasses. + } + + /** + * @param minValue - the minimum value for attribute value range + * @param maxValue - the maximum value for attribute value range + * @return newly instantiated {@link ValueDistribution} for attribute values in range [{@code minValue}. {@code maxValue}]. + */ + public static ValueDistribution generateDistribution(double minValue, double maxValue) + { + return new ValueDistribution(minValue, maxValue); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/JaggedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/JaggedAttribute.java new file mode 100644 index 000000000..45ce2a6d0 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/JaggedAttribute.java @@ -0,0 +1,28 @@ +package mineplex.game.clans.items.attributes; + +import org.bukkit.entity.Entity; +import org.bukkit.util.Vector; + +public class JaggedAttribute extends AttackAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution attackGen = generateDistribution(2, 4); // Value generator for heal amount + + public JaggedAttribute() + { + super(attackGen.generateIntValue()); + } + + @Override + public String getDisplayName() + { + return "Jagged"; // TODO: Fill in name + } + + @Override + public void triggerAttack(Entity attacker, Entity defender) + { + defender.setVelocity(new Vector(0, 0, 0)); + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SharpAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SharpAttribute.java new file mode 100644 index 000000000..e01089477 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SharpAttribute.java @@ -0,0 +1,27 @@ +package mineplex.game.clans.items.attributes; + +import org.bukkit.entity.Entity; + +public class SharpAttribute extends DamageAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution damageGen = generateDistribution(0.5d, 1.5d); // Value generator for heal amount\ + + public SharpAttribute() + { + super(damageGen); + } + + @Override + public String getDisplayName() + { + return "Sharp"; // TODO: Fill in name + } + + @Override + public boolean grantBonusDamage(Entity defender) + { + return true; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SmashingAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SmashingAttribute.java new file mode 100644 index 000000000..4d823fd01 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SmashingAttribute.java @@ -0,0 +1,21 @@ +package mineplex.game.clans.items.attributes; + +public class SmashingAttribute extends ItemAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution healGen = generateDistribution(4, 12); // Value generator for heal amount + + private int _healPercent; + + public SmashingAttribute() + { + _healPercent = healGen.generateIntValue(); + } + + @Override + public String getDisplayName() + { + return ""; // TODO: Fill in name + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SwiftAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SwiftAttribute.java new file mode 100644 index 000000000..1ea2a236d --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SwiftAttribute.java @@ -0,0 +1,21 @@ +package mineplex.game.clans.items.attributes; + +public class SwiftAttribute extends ItemAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution healGen = generateDistribution(4, 12); // Value generator for heal amount + + private int _healPercent; + + public SwiftAttribute() + { + _healPercent = healGen.generateIntValue(); + } + + @Override + public String getDisplayName() + { + return ""; // TODO: Fill in name + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ValueDistribution.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ValueDistribution.java new file mode 100644 index 000000000..242f21427 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ValueDistribution.java @@ -0,0 +1,56 @@ +package mineplex.game.clans.items.attributes; + +import java.util.Random; + +/** + * Handles the random generation of attribute values in specified value range + * and probability distribution. + * @author MrTwiggy + * + */ +public class ValueDistribution +{ + private static Random random = new Random(); // Used for RNG of value generation + + private double _min; // Minimum value range available for distribution + private double _max; // Maximum value range available for distribution + private double _lambdaScaler; // Scales exponential probability distribution to skew range values + + /** + * Class constructor for distribution of range [min, max] + * @param min - the minimum value for generation range + * @param max - the maximum value for generation range + */ + public ValueDistribution(double min, double max) + { + _min = min; + _max = max; + } + + /** + * @return randomly generated value conforming to the range and value distribution. + */ + public double generateValue() + { + double roll = random.nextDouble() * random.nextDouble(); + + double delta = getRange() * roll; + return _min + delta; + } + + /** + * @return randomly generated distribution value, rounding to nearest integer. + */ + public int generateIntValue() + { + return (int) Math.round(generateValue()); + } + + /** + * @return the value range associated with this distribution. + */ + public double getRange() + { + return _max - _min; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/VampiricAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/VampiricAttribute.java new file mode 100644 index 000000000..2246429ad --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/VampiricAttribute.java @@ -0,0 +1,38 @@ +package mineplex.game.clans.items.attributes; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class VampiricAttribute extends ItemAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution healGen = generateDistribution(4, 12); // Value generator for heal amount + + private int _healPercent; + + public VampiricAttribute() + { + _healPercent = healGen.generateIntValue(); + } + + @Override + public String getDisplayName() + { + return "Vampiric"; // TODO: Fill in name + } + + @Override + public void onAttack(EntityDamageByEntityEvent event) + { + if (event.getDamager() instanceof Player) + { + Player attacker = (Player) event.getDamager(); + + double damage = event.getDamage(); + double healAmount = damage * (_healPercent / 100d); + double currentHealth = attacker.getHealth(); + attacker.setHealth(currentHealth + healAmount); + } + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java new file mode 100644 index 000000000..a15577860 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java @@ -0,0 +1,42 @@ +package mineplex.game.clans.items.commands; + +import java.util.ArrayList; + +import org.bukkit.Chunk; +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilInput; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilTime.TimeUnit; +import mineplex.core.common.util.UtilWorld; +import mineplex.core.recharge.Recharge; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.ClansUtility.ClanRelation; +import mineplex.game.clans.clans.ClientClan; +import mineplex.game.clans.items.GearManager; + +public class GearCommand extends CommandBase +{ + public GearCommand(GearManager plugin) + { + super(plugin, Rank.ALL, "gear", "custom-gear"); + } + + @Override + public void Execute(Player caller, String[] args) + { + UtilPlayer.message(caller, F.main("Gear", "Opening custom gear GUI!")); + + // TODO: Open custom gear GUI here + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/Weight.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/Weight.java new file mode 100644 index 000000000..108347832 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/Weight.java @@ -0,0 +1,19 @@ +package mineplex.game.clans.items.generation; + +public class Weight +{ + + private int _weight; + public int getWeight() { return _weight; } + + private T _value; + public T getValue() { return _value; } + + public Weight(int weight, T value) + { + _weight = weight; + _value = value; + } + + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/WeightSet.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/WeightSet.java new file mode 100644 index 000000000..80c402c84 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/WeightSet.java @@ -0,0 +1,55 @@ +package mineplex.game.clans.items.generation; + +import java.util.HashSet; +import java.util.Random; +import java.util.Set; + +public class WeightSet +{ + + private static Random random = new Random(); + + private Set> _weights; + + @SafeVarargs + public WeightSet(Weight... weights) + { + _weights = new HashSet>(); + + for (Weight weight : weights) + { + _weights.add(weight); + } + } + + private int getTotalWeight() + { + int total = 0; + + for (Weight weight : _weights) + { + total += weight.getWeight(); + } + + return total; + } + + public T generateRandom() + { + int totalWeight = getTotalWeight(); + int roll = random.nextInt(totalWeight); + + for (Weight weight : _weights) + { + roll -= weight.getWeight(); + + if (roll <= 0) + { + return weight.getValue(); + } + } + + // Should never reach here. + return null; + } +} diff --git a/Plugins/Mineplex.Queue.Core/.project b/Plugins/Mineplex.Queue.Core/.project new file mode 100644 index 000000000..669fb734b --- /dev/null +++ b/Plugins/Mineplex.Queue.Core/.project @@ -0,0 +1,17 @@ + + + Mineplex.Queue.Core + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Plugins/Mineplex.ServerProcesses/.project b/Plugins/Mineplex.ServerProcesses/.project new file mode 100644 index 000000000..66b31cde0 --- /dev/null +++ b/Plugins/Mineplex.ServerProcesses/.project @@ -0,0 +1,17 @@ + + + Mineplex.ServerProcesses + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + From 66c9fefc6e8a3ea8eb541d9056422866928e9e5f Mon Sep 17 00:00:00 2001 From: Ty Sayers Date: Tue, 5 May 2015 15:34:32 -0400 Subject: [PATCH 099/104] Add leftover Clans commit to introduce GearManager. --- .../src/mineplex/game/clans/Clans.java | 5 +- .../src/mineplex/queuer/Queuer.java | 514 +++++++++++------- .../mineplex/servermonitor/ServerMonitor.java | 74 +-- 3 files changed, 344 insertions(+), 249 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index 6c61713e8..25e4af9a7 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -1,8 +1,8 @@ package mineplex.game.clans; import org.bukkit.plugin.java.JavaPlugin; -import net.minecraft.server.v1_7_R4.MinecraftServer; +import net.minecraft.server.v1_7_R4.MinecraftServer; import mineplex.core.account.CoreClientManager; import mineplex.core.antihack.AntiHack; import mineplex.core.blockrestore.BlockRestore; @@ -27,6 +27,7 @@ import mineplex.core.teleport.Teleport; import mineplex.core.updater.FileUpdater; import mineplex.core.updater.Updater; import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.items.GearManager; import mineplex.game.clans.shop.building.BuildingShop; import mineplex.game.clans.shop.pvp.PvpShop; @@ -91,6 +92,8 @@ public class Clans extends JavaPlugin new BuildingShop(clans, _clientManager, _donationManager); new PvpShop(clans, _clientManager, _donationManager); + GearManager customGear = new GearManager(this); + //Updates getServer().getScheduler().scheduleSyncRepeatingTask(this, new Updater(this), 1, 1); diff --git a/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java b/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java index 331d025a2..09fee8b15 100644 --- a/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java +++ b/Plugins/Mineplex.Queuer/src/mineplex/queuer/Queuer.java @@ -9,208 +9,55 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; +import java.util.UUID; import mineplex.serverdata.Region; +import mineplex.serverdata.commands.ServerTransfer; +import mineplex.serverdata.commands.TransferCommand; +import mineplex.serverdata.data.DedicatedServer; +import mineplex.serverdata.data.ServerGroup; +import mineplex.serverdata.servers.ConnectionData; +import mineplex.serverdata.servers.ServerManager; +import mineplex.serverdata.servers.ServerRepository; +import mineplex.serverprocesses.GenericRunnable; +import mineplex.serverprocesses.ProcessManager; +import mineplex.serverprocesses.ProcessRunner; public class Queuer { + public static final int MIN_QUEUE_WAIT = 0; // The number of seconds required in queue before creating a new match for a party. + private static QueueRepository _repo; + private static ServerRepository _serverRepository; + private static Set _pendingMatches; // Set of all matches awaiting players + private static int _matchId = 0; + private static int _matchesMade = 0; + private static int _updates = 0; + private static int _partyId = 0; + private static int _serverId = 0; public static void main (String args[]) { Region region = (!new File("eu.dat").exists()) ? Region.US : Region.EU; - + _serverRepository = ServerManager.getServerRepository(region); _repo = new QueueRepository(region); - - HashMap playerVarianceMap = new HashMap(); - HashMap playerPrepMatchMap = new HashMap(); - Set matches = new HashSet(); - - QueuePartySorter partySorter = new QueuePartySorter(); - - int matchId = 1; + _pendingMatches = new HashSet(); while (true) - { - int matchesMade = 0; - matchId %= 1500; + { + _updates++; + updateQueuer(); + ProcessManager.getInstance().updateProcesses(); - List assignedMatchIdChecked = new ArrayList(); - Map queueParties = _repo.getMappedQueueParties(); - - int matchPlayerCount = 2; - - System.out.println("Checking " + queueParties.size() + " queues..."); - for (QueueParty queueParty : queueParties.values()) - { - int partyId = queueParty.getId(); - int variance = playerVarianceMap.containsKey(partyId) ? playerVarianceMap.get(partyId) : 0; - variance += 25; - playerVarianceMap.put(partyId, variance); - - if (queueParty.hasAssignedMatch()) - { - for (Match match : matches) - { - if (Math.abs(match.getAverageElo() - queueParty.getAverageElo()) <= variance) - { - if (playerPrepMatchMap.containsKey(partyId)) - { - if (playerPrepMatchMap.get(partyId) == match) - break; - - playerPrepMatchMap.get(partyId).quitQueueParty(queueParty); - } - - match.joinQueueParty(queueParty); - playerPrepMatchMap.put(partyId, match); - - log("Found prep match for '" + queueParty.getId() + "'"); - break; - } - } - - if (!playerPrepMatchMap.containsKey(partyId)) - { - Match match = new Match(matchId++, queueParty.getAverageElo(), queueParty); - - playerPrepMatchMap.put(partyId, match); - matches.add(match); - } - } - else if (!assignedMatchIdChecked.contains(queueParty.getAssignedMatch())) - { - int assignedMatchId = queueParty.getAssignedMatch(); - log("Checking if match '" + assignedMatchId + "' is ready."); - //List matchStatuses = _repo.getMatchStatuses(queueRecord.AssignedMatch); - Collection joinedParties = _repo.getJoinedQueueParties(assignedMatchId); - boolean matchReady = true; - boolean matchDeny = false; - - for (QueueParty joinedParty : joinedParties) - { - String partyState = joinedParty.getState(); - if (partyState.equalsIgnoreCase("Deny")) - { - matchDeny = true; - matchReady = false; - break; - } - else if (!partyState.equalsIgnoreCase("Ready")) - { - matchReady = false; - } - } - - if (matchReady) - { - _repo.startMatch(assignedMatchId); - _repo.deleteAssignedParties(assignedMatchId); - - System.out.println("Starting match '" + assignedMatchId + "'"); - } - else if (matchDeny) - { - _repo.deleteMatch(assignedMatchId); - } - - assignedMatchIdChecked.add(assignedMatchId); - } - } - - System.out.println("Checking " + matches.size() + " matches..."); - - // Check for and kick off invites for ready matches - for (Iterator matchIterator = matches.iterator(); matchIterator.hasNext();) - { - Match match = matchIterator.next(); - - // Don't give me crap about not using iterator...can't cuz of stupid thing. - Set partiesToRemove = new HashSet(); - - for (QueueParty queueParty : match.getParties()) - { - if (!queueParties.containsKey(queueParty.getId())) - { - log("Removing matchStatus : " + queueParty.getId()); - partiesToRemove.add(queueParty); - - if (match.isWaitingForInvites()) - { - _repo.deleteMatch(match.getId()); - match.setWaitingForInvites(false); - } - } - } - - for (QueueParty party : partiesToRemove) - { - match.quitQueueParty(party); - } - - if (match.isWaitingForInvites()) - { - if ((match.getWaitDuration()) > 15000) - { - for (QueueParty queueParty : match.getParties()) - { - if (!queueParty.getState().equalsIgnoreCase("Ready")) - { - _repo.deleteQueueParty(queueParty.getId()); - } - } - - _repo.deleteMatch(match.getId()); - match.setWaitingForInvites(false); - } - - continue; - } - - if (match.getPlayerCount() >= matchPlayerCount) - { - List partyList = new ArrayList(match.getParties()); - Collections.sort(partyList, partySorter); - - int playerCount = 0; - for (QueueParty party : partyList) - { - if (playerCount + party.getPlayerCount() > matchPlayerCount) - { - match.quitQueueParty(party); - playerPrepMatchMap.remove(party.getId()); - log("Oops hit player cap, can't fit you in this match."); - continue; - } - - playerCount += party.getPlayerCount(); - } - - if (playerCount == matchPlayerCount) - { - log("Sent match invites for '" + match.getId() + "'"); - - for (QueueParty party : match.getParties()) - { - playerPrepMatchMap.remove(party.getId()); - _repo.assignMatch(party, match); - } - - match.setWaitingForInvites(true); - matchesMade++; - } - } - else if (match.getPlayerCount() == 0) - { - matchIterator.remove(); - } - } + log("Total pending matches after update: " + _pendingMatches.size()); + log("Total queued parties after update: " + _repo.getQueueParties().size()); try { - if (matchesMade > 0) - System.out.println("Made " + matchesMade + " matches."); + if (_matchesMade > 0) + System.out.println("Made " + _matchesMade + " matches."); Thread.sleep(1000); } @@ -222,6 +69,305 @@ public class Queuer } + + /** + * Tick & update the Queuer as a whole, making one whole pass through all queued players and pending matches to + * assign matches to parties and start matches. + */ + private static void updateQueuer() + { + // Update the status of each queue party, searching for best matchings and assigning matches to parties. + for (QueueParty queueParty : _repo.getQueueParties()) + { + updateParty(queueParty); + } + + // Update all matches, and remove pending matches if they are finished. + Iterator iterator = _pendingMatches.iterator(); + while (iterator.hasNext()) + { + Match match = iterator.next(); + boolean matchFinished = updateMatch(match); + + // Remove match if it is completed/finished + if (matchFinished) iterator.remove(); + } + } + + /** + * Update the status of a {@link QueueParty} by attempting to locate the best resulting + * {@code Match} available, or creating a new one if required. + * @param queueParty - the queue party to be updated for matchmaking purposes. + */ + private static void updateParty(QueueParty queueParty) + { + int queueDuration = (int) queueParty.getQueueDuration() / 1000; // Queue duration in seconds + Match bestMatch = getBestMatch(queueParty); + + if (queueParty.hasAssignedMatch()) + { + // TODO: If player has been waiting too long in current game and there is a better match, join that! + } + else + { + if (bestMatch != null) // Assign party into best match! + { + bestMatch.joinQueueParty(queueParty); + _repo.assignMatch(queueParty, bestMatch); + } + else if (queueDuration >= MIN_QUEUE_WAIT) // Create a new match for others to join! + { + Match match = new Match(_matchId++, queueParty.getServerGroup(), queueParty); + _pendingMatches.add(match); + _repo.assignMatch(queueParty, match); + } + } + } + + /** + * Update a {@link Match} by verifying it's player statuses, sending out invites + * and managing a Match from creation to deletion. + * @param match - the match to be updated. + * @return true, if the match is no longer required (successful or otherwise) and should be removed, false otherwise. + */ + private static boolean updateMatch(Match match) + { + // Remove queued parties that have left queue/match + // Don't give me crap about not using iterator...can't cuz of stupid thing. + Set partiesToRemove = new HashSet(); + for (QueueParty queueParty : match.getParties()) + { + int partyId = queueParty.getId(); + if (!_repo.queuePartyExists(partyId)) + { + log("Removing matchStatus : " + queueParty.getId()); + partiesToRemove.add(queueParty); + + if (match.isWaitingForInvites()) + { + _repo.deleteMatch(match.getId()); + match.setWaitingForInvites(false); + } + } + } + for (QueueParty party : partiesToRemove) + { + match.quitQueueParty(party); + } + + // If match took too long to find players, or is empty, quit match. + if (match.getPlayerCount() == 0) + { + return true; // Match is empty, remove from pending matches. + } + + // If match sent invites and is waiting for too long (15 seconds), kick players who didn't + // accept and keep looking + // Otherwise if everyone accepted, start game! + if (match.isWaitingForInvites()) + { + boolean matchReady = true; + for (QueueParty party : _repo.getJoinedQueueParties(match.getId())) + { + if (!party.isReady()) + { + matchReady = false; + } + } + + if (!matchReady && match.getWaitDuration() > 500) + { + matchReady = true; + } + + if (match.isReady()) // Invites accepted, MinecraftServer started, and players transferred. + { + return true; + } + else if (matchReady) // Players accepted invites, start match! + { + startMatch(match); + return false; + } + else if (match.getWaitDuration() > 15000) + { + for (QueueParty queueParty : match.getParties()) + { + if (!queueParty.isReady()) + { + _repo.deleteQueueParty(queueParty.getId()); + } + } + + _repo.deleteMatch(match.getId()); + match.setWaitingForInvites(false); + } + + return false; + } + + // Match has filled up, send out invites! + if (match.getOpenSlots() == 0) + { + for (QueueParty party : match.getParties()) + { + _repo.sendInvite(party); + } + + match.setWaitingForInvites(true); + } + + return false; + } + + /** + * @param queueParty - the party for whom a match is being searched. + * @return the best matching {@link Match} for the {@code queueParty}, if an acceptable {@link Match} + * could be found, null otherwise. + */ + private static Match getBestMatch(QueueParty queueParty) + { + Match best = null; + int minEloDelta = 0; + int variance = getSearchVariance(queueParty); + + for (Match match : _pendingMatches) + { + if (match.getOpenSlots() >= queueParty.getPlayerCount()) + { + int eloDelta = getEloDelta(queueParty, match); + if (eloDelta <= variance && (eloDelta < minEloDelta || best == null)) + { + best = match; + minEloDelta = eloDelta; + } + } + } + + return best; + } + + /** + * @param r1 + * @param r2 + * @return the ELO point delta (difference) between two {@link Ranked} objects. + */ + private static int getEloDelta(Ranked r1, Ranked r2) + { + return Math.abs(r1.getElo() - r2.getElo()); + } + + public static boolean startMatch(Match match) + { + ServerGroup group = match.getServerGroup(); + DedicatedServer bestServer = getBestDedicatedServer(group); + startServer(bestServer, group, match); + return true; + } + + /** + * Transfer all players queue'd into a {@link Match} to one server. + * @param match - the match whose queue'd players are to be transferred + * @param serverName - the name of the server to transfer the players to + */ + public static void transferPlayers(Match match, String serverName) + { + // Transfer players to the server + for (QueueParty queueParty : _repo.getJoinedQueueParties(match.getId())) + { + for (String playerName : queueParty.getPlayers()) + { + // Execute a transfer command + ServerTransfer serverTransfer = new ServerTransfer(playerName, serverName); + TransferCommand transferCommand = new TransferCommand(serverTransfer); + transferCommand.publish(); + } + } + + // Server transfers sent out, match has started! + _matchesMade++; + + // Delete queue parties for players who've been matched + for (QueueParty queueParty : match.getParties()) + { + if (!queueParty.isReady()) + { + _repo.deleteQueueParty(queueParty.getId()); + } + } + match.setReady(true); // Ready to be deleted/removed + } + + /** + * @return newly generated unique server id. + */ + public static int generateServerId() + { + return _serverId++; + } + + private static void startServer(final DedicatedServer serverSpace, final ServerGroup serverGroup, final Match match) + { + String cmd = "/home/mineplex/easyRemoteStartServerCustom.sh"; + final String groupPrefix = serverGroup.getPrefix(); + final String serverName = serverSpace.getName(); + final String serverAddress = serverSpace.getPublicAddress(); + final int serverId = generateServerId(); + + ProcessRunner pr = new ProcessRunner(new String[] {"/bin/sh", cmd, serverAddress, serverSpace.getPrivateAddress(), (serverGroup.getPortSection() + serverId) + "", serverGroup.getRequiredRam() + "", serverGroup.getWorldZip(), serverGroup.getPlugin(), serverGroup.getConfigPath(), serverGroup.getName(), serverGroup.getPrefix() + "-" + serverId, serverSpace.isUsRegion() ? "true" : "false", serverGroup.getAddNoCheat() + "" }); + pr.start(new GenericRunnable() + { + public void run(Boolean error) + { + if (!error) + { + // Successfully started server, now transfer players + transferPlayers(match, serverName); + } + else + { + // TODO: Error in starting server for ELO match, try again or disband queued match? + log("[" + serverName + ":" + serverAddress + " Free Resources; CPU " + serverSpace.getAvailableCpu() + " RAM " + serverSpace.getAvailableRam() + "MB] Errored " + serverName + "(" + groupPrefix+ "-" + serverId + ")"); + } + + } + }); + + ProcessManager.getInstance().addProcess(pr); + serverSpace.incrementServerCount(serverGroup); + } + + private static DedicatedServer getBestDedicatedServer(ServerGroup serverGroup) + { + Collection dedicatedServers = _serverRepository.getDedicatedServers(); + DedicatedServer bestServer = null; + + for (DedicatedServer serverData : dedicatedServers) + { + if (serverData.getAvailableRam() > serverGroup.getRequiredRam() + && serverData.getAvailableCpu() > serverGroup.getRequiredCpu()) + { + if (bestServer == null || serverData.getServerCount(serverGroup) < bestServer.getServerCount(serverGroup)) + { + bestServer = serverData; + } + } + } + + return bestServer; + } + + /** + * @param party - the party whose ELO search variance is being fetched. + * @return the variance in ELO search parameters for {@code party}. + * I.E: Queuer searches for potential matches in [party.elo - variance, party.elo + variance] ELO range. + */ + private static int getSearchVariance(QueueParty party) + { + int seconds = (int) party.getQueueDuration() / 1000; // Duration of queue in seconds + + return seconds * 10; // 5 ELO variance for every second in queue + } private static void log(String message) { diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java index 441cfe60b..e7d4c3fdf 100644 --- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java +++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java @@ -29,13 +29,15 @@ import mineplex.serverdata.data.ServerGroup; import mineplex.serverdata.servers.DedicatedServerSorter; import mineplex.serverdata.servers.ServerManager; import mineplex.serverdata.servers.ServerRepository; +import mineplex.serverprocesses.GenericRunnable; +import mineplex.serverprocesses.ProcessManager; +import mineplex.serverprocesses.ProcessRunner; public class ServerMonitor { private static ServerRepository _repository = null; private static StatusHistoryRepository _historyRepository = null; private static int _count = 0; - private static HashSet _processes = new HashSet(); private static HashMap _badServers = new HashMap(); private static Collection _serverStatuses = null; private static Collection _serverGroups = null; @@ -54,18 +56,6 @@ public class ServerMonitor public static void main (String args[]) { - /* - MinecraftPingReply data = null; - try - { - data = new MinecraftPing().getPing(new MinecraftPingOptions().setHostname("127.0.0.1").setPort(25565)); - } - catch (IOException e2) - { - e2.printStackTrace(); - } - System.out.println(data.getDescription() + " " + data.getPlayers().getOnline()); - */ _region = !new File("eu.dat").exists() ? Region.US : Region.EU; _debug = new File("debug.dat").exists(); _repository = ServerManager.getServerRepository(_region); // Fetches and connects to server repo @@ -283,55 +273,7 @@ public class ServerMonitor } } - int processWaits = 0; - - while (_processes.size() > 0) - { - for (Iterator iterator = _processes.iterator(); iterator.hasNext();) - { - ProcessRunner pr = iterator.next(); - - try - { - pr.join(100); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - - if (pr.isDone()) - iterator.remove(); - } - - if (_processes.size() > 0) - { - try - { - log("Sleeping while processes run..."); - Thread.sleep(6000); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - if (processWaits >= 10) - { - log("Killing stale processes."); - - for (Iterator iterator = _processes.iterator(); iterator.hasNext();) - { - iterator.next().abort(); - iterator.remove(); - } - } - - processWaits++; - } - - processWaits = 0; + ProcessManager.getInstance().updateProcesses(); try { @@ -565,7 +507,9 @@ public class ServerMonitor if (!pr.isDone()) - _processes.add(pr); + { + ProcessManager.getInstance().addProcess(pr); + } } private static boolean isServerOffline(DedicatedServer serverData) @@ -666,7 +610,9 @@ public class ServerMonitor serverSpace.incrementServerCount(serverGroup); if (!pr.isDone()) - _processes.add(pr); + { + ProcessManager.getInstance().addProcess(pr); + } } private static void log(String message) From a8a8d4961a5187fdcdca69d8fa4dbb6631d5935c Mon Sep 17 00:00:00 2001 From: Ty Sayers Date: Sat, 16 May 2015 12:58:58 -0400 Subject: [PATCH 100/104] Add remaining bow and armor based attributes, include base implementation of Legendary weapons. Fix smelting bug. --- .../game/clans/clans/ClansManager.java | 4 +- .../game/clans/items/GearManager.java | 5 + .../clans/items/attributes/ItemAttribute.java | 2 + .../attributes/armor/EscapeAttribute.java | 24 +++++ .../armor/FlatReductionAttribute.java | 23 +++++ .../items/attributes/armor/LavaAttribute.java | 26 ++++++ .../attributes/armor/PaddedAttribute.java | 25 +++++ .../armor/PercentReductionAttribute.java | 22 +++++ .../attributes/armor/ProtectionAttribute.java | 27 ++++++ .../attributes/armor/ReductionAttribute.java | 41 +++++++++ .../attributes/armor/ReductionConfig.java | 46 ++++++++++ .../attributes/armor/ReinforcedAttribute.java | 24 +++++ .../items/attributes/armor/SeaAttribute.java | 24 +++++ .../attributes/armor/SlantedAttribute.java | 25 +++++ .../{ => weapon}/AttackAttribute.java | 4 +- .../{ => weapon}/ConqueringAttribute.java | 4 +- .../{ => weapon}/DamageAttribute.java | 5 +- .../{ => weapon}/FlamingAttribute.java | 4 +- .../{ => weapon}/FrostedAttribute.java | 5 +- .../{ => weapon}/HasteAttribute.java | 4 +- .../{ => weapon}/HeavyAttribute.java | 5 +- .../{ => weapon}/JaggedAttribute.java | 4 +- .../{ => weapon}/SharpAttribute.java | 4 +- .../{ => weapon}/SmashingAttribute.java | 5 +- .../{ => weapon}/SwiftAttribute.java | 5 +- .../{ => weapon}/VampiricAttribute.java | 5 +- .../ValueDistribution.java | 2 +- .../items/legendaries/AlligatorsTooth.java | 51 ++++++++++ .../items/legendaries/GiantsBroadsword.java | 44 +++++++++ .../clans/items/legendaries/HyperBlade.java | 49 ++++++++++ .../items/legendaries/LegendaryItem.java | 74 +++++++++++++++ .../items/legendaries/MagneticBlade.java | 38 ++++++++ .../clans/items/legendaries/MeteorBow.java | 40 ++++++++ .../clans/items/legendaries/WindBlade.java | 40 ++++++++ .../game/clans/items/smelting/Smelter.java | 92 +++++++++++++++++++ .../items/smelting/SmeltingListener.java | 34 +++++++ 36 files changed, 822 insertions(+), 14 deletions(-) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/EscapeAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SeaAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/AttackAttribute.java (87%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/ConqueringAttribute.java (83%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/DamageAttribute.java (75%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/FlamingAttribute.java (85%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/FrostedAttribute.java (89%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/HasteAttribute.java (91%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/HeavyAttribute.java (69%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/JaggedAttribute.java (82%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/SharpAttribute.java (80%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/SmashingAttribute.java (69%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/SwiftAttribute.java (69%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/VampiricAttribute.java (83%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/{attributes => generation}/ValueDistribution.java (96%) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/SmeltingListener.java diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 61753ea16..96191b126 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -101,6 +101,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat _clientManager = clientManager; _combatManager = new CombatManager(plugin); + _blockRestore = blockRestore; _teleport = teleport; @@ -113,7 +114,8 @@ public class ClansManager extends MiniClientPlugin implements IRelat Energy energy = new Energy(plugin); PacketHandler packetHandler = new PacketHandler(plugin); - new CustomTagFix(plugin, packetHandler); + // TODO: Re-enable customtagfix with NCP update? + //new CustomTagFix(plugin, packetHandler); DisguiseManager disguiseManager = new DisguiseManager(plugin, packetHandler); _condition = new SkillConditionManager(plugin); Creature creature = new Creature(plugin); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java index 7260fb095..267288b11 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java @@ -12,6 +12,7 @@ import mineplex.game.clans.items.commands.GearCommand; import mineplex.game.clans.items.generation.Weight; import mineplex.game.clans.items.generation.WeightSet; import mineplex.serverdata.Region; +import mineplex.serverdata.Utility; import mineplex.serverdata.commands.ServerCommandManager; import mineplex.serverdata.commands.TransferCommand; import mineplex.serverdata.servers.ServerManager; @@ -29,6 +30,7 @@ import org.bukkit.plugin.java.JavaPlugin; */ public class GearManager extends MiniPlugin { + private static GearManager _instance; // Singleton instance private Map playerGears; // Mapping of player names (key) to cached gear set (value). @@ -46,6 +48,9 @@ public class GearManager extends MiniPlugin _attributeWeights = new WeightSet(new Weight(3, 3), new Weight(20, 2), new Weight(77, 1)); _itemWeights = new WeightSet(new Weight(90, true), new Weight(10, false)); _itemWeights = new WeightSet(new Weight(50, true), new Weight(50, false)); + + System.out.println("-Testting-testing"); + System.out.println(Utility.currentTimeSeconds()); } @Override diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java index 3ef33e372..e44ce1dd0 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java @@ -1,5 +1,7 @@ package mineplex.game.clans.items.attributes; +import mineplex.game.clans.items.generation.ValueDistribution; + import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/EscapeAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/EscapeAttribute.java new file mode 100644 index 000000000..5e79f4679 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/EscapeAttribute.java @@ -0,0 +1,24 @@ +package mineplex.game.clans.items.attributes.armor; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class EscapeAttribute extends ItemAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution healGen = generateDistribution(4, 12); // Value generator for heal amount + + private int _healPercent; + + public EscapeAttribute() + { + _healPercent = healGen.generateIntValue(); + } + + @Override + public String getDisplayName() + { + return ""; // TODO: Fill in name + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java new file mode 100644 index 000000000..f9b05e295 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java @@ -0,0 +1,23 @@ +package mineplex.game.clans.items.attributes.armor; + +import mineplex.game.clans.items.generation.ValueDistribution; + +public abstract class FlatReductionAttribute extends ReductionAttribute +{ + + private double _reduction; + + public FlatReductionAttribute(ValueDistribution reductionGen, ReductionConfig config) + { + super(config); + + _reduction = reductionGen.generateValue(); + } + + @Override + public double getDamageReduction(double originalDamage) + { + return _reduction; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java new file mode 100644 index 000000000..bdeb36575 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java @@ -0,0 +1,26 @@ +package mineplex.game.clans.items.attributes.armor; + +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class LavaAttribute extends PercentReductionAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution reductionGen = generateDistribution(0.2d, 1.0d); // Value generator for heal amount + private static ReductionConfig lavaConfig = new ReductionConfig(DamageCause.FIRE, DamageCause.LAVA, DamageCause.FIRE_TICK); + + public LavaAttribute() + { + + super(reductionGen, lavaConfig); + } + + @Override + public String getDisplayName() + { + return "Lava Forged"; + } + +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java new file mode 100644 index 000000000..7f05bbcea --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java @@ -0,0 +1,25 @@ +package mineplex.game.clans.items.attributes.armor; + +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class PaddedAttribute extends FlatReductionAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution reductionGen = generateDistribution(1.0d, 4.0d); + private static ReductionConfig config = new ReductionConfig(DamageCause.FALL); + + public PaddedAttribute() + { + super(reductionGen, config); + } + + @Override + public String getDisplayName() + { + return "Padded"; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java new file mode 100644 index 000000000..fdcc6ad61 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java @@ -0,0 +1,22 @@ +package mineplex.game.clans.items.attributes.armor; + +import mineplex.game.clans.items.generation.ValueDistribution; + +public abstract class PercentReductionAttribute extends ReductionAttribute +{ + + private double _reductionPercent; + + public PercentReductionAttribute(ValueDistribution reductionGen, ReductionConfig config) + { + super(config); + _reductionPercent = reductionGen.generateValue(); + } + + @Override + public double getDamageReduction(double originalDamage) + { + return originalDamage * _reductionPercent; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java new file mode 100644 index 000000000..ff3995157 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java @@ -0,0 +1,27 @@ +package mineplex.game.clans.items.attributes.armor; + +import org.bukkit.entity.EntityType; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +// A.K.A Conquering for Armor +public class ProtectionAttribute extends FlatReductionAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution reductionGen = generateDistribution(1.0d, 4.0d); + private static ReductionConfig config = new ReductionConfig(EntityType.values()); + + public ProtectionAttribute() + { + super(reductionGen, config); + } + + @Override + public String getDisplayName() + { + return "Protection"; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java new file mode 100644 index 000000000..897adb14b --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java @@ -0,0 +1,41 @@ +package mineplex.game.clans.items.attributes.armor; + +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public abstract class ReductionAttribute extends ItemAttribute +{ + + private ReductionConfig _config; + + public ReductionAttribute(ReductionConfig config) + { + _config = config; + } + + @Override + public void onAttacked(EntityDamageByEntityEvent event) + { + DamageCause cause = event.getCause(); + Entity attacker = event.getDamager(); + + if (_config.reducesDamage(cause, attacker)) + { + double damage = event.getDamage(); + double reduction = getDamageReduction(damage); + double reducedDamage = Math.max(0, damage - reduction); + + event.setDamage(reducedDamage); + } + } + + public abstract double getDamageReduction(double originalDamage); +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java new file mode 100644 index 000000000..629f70285 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java @@ -0,0 +1,46 @@ +package mineplex.game.clans.items.attributes.armor; + +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +public class ReductionConfig +{ + + private Set _reducedAttackers; // EntityTypes whose attacks are reduced by this attribute + private Set _reducedCauses; // DamageCauses that are reduced by this attribute + + public ReductionConfig() + { + _reducedAttackers = new HashSet(); + _reducedCauses = new HashSet(); + } + + public ReductionConfig(DamageCause... reducedCauses) + { + this(); + + for (DamageCause cause : reducedCauses) + { + _reducedCauses.add(cause); + } + } + + public ReductionConfig(EntityType... reducedAttackers) + { + this(); + + for (EntityType attacker : reducedAttackers) + { + _reducedAttackers.add(attacker); + } + } + + public boolean reducesDamage(DamageCause cause, Entity attacker) + { + return _reducedCauses.contains(cause) || _reducedAttackers.contains(attacker.getType()); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java new file mode 100644 index 000000000..177b9a42a --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java @@ -0,0 +1,24 @@ +package mineplex.game.clans.items.attributes.armor; + +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.generation.ValueDistribution; + +public class ReinforcedAttribute extends FlatReductionAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution reductionGen = generateDistribution(0.5d, 1.0d); + private static ReductionConfig config = new ReductionConfig(DamageCause.ENTITY_ATTACK); + + public ReinforcedAttribute() + { + super(reductionGen, config); + } + + @Override + public String getDisplayName() + { + return "Reinforced"; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SeaAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SeaAttribute.java new file mode 100644 index 000000000..3b90c71d6 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SeaAttribute.java @@ -0,0 +1,24 @@ +package mineplex.game.clans.items.attributes.armor; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class SeaAttribute extends ItemAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution healGen = generateDistribution(4, 12); // Value generator for heal amount + + private int _healPercent; + + public SeaAttribute() + { + _healPercent = healGen.generateIntValue(); + } + + @Override + public String getDisplayName() + { + return ""; // TODO: Fill in name + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java new file mode 100644 index 000000000..f3e93f4f3 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java @@ -0,0 +1,25 @@ +package mineplex.game.clans.items.attributes.armor; + +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class SlantedAttribute extends FlatReductionAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution reductionGen = generateDistribution(0.5d, 1.5d); + private static ReductionConfig config = new ReductionConfig(DamageCause.PROJECTILE); + + public SlantedAttribute() + { + super(reductionGen, config); + } + + @Override + public String getDisplayName() + { + return "Slanted"; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/AttackAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java similarity index 87% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/AttackAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java index 057fad619..3d98b1634 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/AttackAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; import org.bukkit.entity.Entity; import org.bukkit.event.entity.EntityDamageByEntityEvent; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ConqueringAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java similarity index 83% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ConqueringAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java index 56b8710ef..7e61aa5ef 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ConqueringAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/DamageAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java similarity index 75% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/DamageAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java index 0346b26eb..2387c206d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/DamageAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; import org.bukkit.event.entity.EntityDamageByEntityEvent; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FlamingAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java similarity index 85% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FlamingAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java index 04d34e56d..9a7b5f84c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FlamingAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FrostedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java similarity index 89% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FrostedAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java index 99e4685a7..a1a6a70e9 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FrostedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HasteAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java similarity index 91% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HasteAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java index d8844bf50..a23f7fe68 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HasteAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HeavyAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HeavyAttribute.java similarity index 69% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HeavyAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HeavyAttribute.java index 78e7ccdeb..04d8c9758 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HeavyAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HeavyAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; public class HeavyAttribute extends ItemAttribute { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/JaggedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java similarity index 82% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/JaggedAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java index 45ce2a6d0..51fc7c03b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/JaggedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; import org.bukkit.util.Vector; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SharpAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java similarity index 80% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SharpAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java index e01089477..c03aec7a1 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SharpAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SmashingAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SmashingAttribute.java similarity index 69% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SmashingAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SmashingAttribute.java index 4d823fd01..0a50290aa 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SmashingAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SmashingAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; public class SmashingAttribute extends ItemAttribute { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SwiftAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SwiftAttribute.java similarity index 69% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SwiftAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SwiftAttribute.java index 1ea2a236d..1cfce1379 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SwiftAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SwiftAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; public class SwiftAttribute extends ItemAttribute { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/VampiricAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java similarity index 83% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/VampiricAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java index 2246429ad..d8fabe2a2 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/VampiricAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ValueDistribution.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/ValueDistribution.java similarity index 96% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ValueDistribution.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/ValueDistribution.java index 242f21427..15d13691c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ValueDistribution.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/ValueDistribution.java @@ -1,4 +1,4 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.generation; import java.util.Random; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java new file mode 100644 index 000000000..c8767a955 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java @@ -0,0 +1,51 @@ +package mineplex.game.clans.items.legendaries; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class AlligatorsTooth extends LegendaryItem +{ + + private static ValueDistribution damageGen = generateDistribution(1.0d, 5.0d); + + private double _damageBonus; + + public AlligatorsTooth() + { + _damageBonus = damageGen.generateValue(); + } + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick() && isInWater(wielder)) + { + propelPlayer(wielder); + } + } + + @Override + public void onAttack(EntityDamageByEntityEvent event, Player wielder) + { + if (isInWater(wielder)) + { + double newDamage = event.getDamage() + _damageBonus; + event.setDamage(newDamage); + } + + super.onAttack(event); + } + + private void propelPlayer(Player player) + { + // TODO: Propel player forward with 0.6 to 1.2 velocity + } + + private boolean isInWater(Player player) + { + return true; // TODO: Determine whether player is submerged in water + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java new file mode 100644 index 000000000..33306ab82 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java @@ -0,0 +1,44 @@ +package mineplex.game.clans.items.legendaries; + +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class GiantsBroadsword extends LegendaryItem +{ + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick()) + { + buffPlayer(wielder); + } + } + + @Override + public void onAttack(EntityDamageByEntityEvent event, Player wielder) + { + // TODO: Buff knockback and damage values (What are specific values?) + } + + private void buffPlayer(Player player) + { + player.addPotionEffects(generateBlockBuff()); + } + + private Set generateBlockBuff() + { + Set potions = new HashSet(); + + // Slow 5 and Regen 1 for 5 ticks + potions.add(new PotionEffect(PotionEffectType.SLOW, 4, 5)); + potions.add(new PotionEffect(PotionEffectType.REGENERATION, 0, 5)); + + return potions; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java new file mode 100644 index 000000000..b7584c0ef --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java @@ -0,0 +1,49 @@ +package mineplex.game.clans.items.legendaries; + +import mineplex.game.clans.items.generation.ValueDistribution; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class HyperBlade extends LegendaryItem +{ + private static ValueDistribution amountGen = generateDistribution(0, 3); // [1, 4] speed amount + private static ValueDistribution durationGen = generateDistribution(80, 320); // [4, 16] seconds speed duration + + private int _speedAmount; + private int _speedDuration; + + public HyperBlade() + { + _speedAmount = amountGen.generateIntValue(); + _speedDuration = durationGen.generateIntValue(); + } + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick() && canBuff()) + { + buffPlayer(wielder); + } + } + + @Override + public void onAttack(EntityDamageByEntityEvent event, Player wielder) + { + // TODO: Reduce after-attack cooldown against players to 100ms (instead of 400ms) + } + + private void buffPlayer(Player wielder) + { + // Give player speed buff + wielder.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, _speedAmount, _speedDuration)); + } + + private boolean canBuff() + { + return true; // TODO: Implement cooldown? (None specified in docs, sounds OP) + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java new file mode 100644 index 000000000..559273ff4 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java @@ -0,0 +1,74 @@ +package mineplex.game.clans.items.legendaries; + +import org.bukkit.entity.Player; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; + +import mineplex.game.clans.items.CustomItem; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class LegendaryItem extends CustomItem +{ + + public final long BLOCK_COOLDOWN = 200l; // Right clicking activates right click for 200ms + + private long _lastBlock; // Timestamp of last block from wielder + public long timeSinceLastBlock() { return System.currentTimeMillis() - _lastBlock; } + + + public LegendaryItem() + { + _lastBlock = 0l; + } + + public void update(Player wielder) + { + // Leave implementation to potential subtypes + } + + public void onAttack(EntityDamageByEntityEvent event, Player wielder) + { + // Leave implementation to potential subtypes + } + + @Override + public void onAttack(EntityDamageByEntityEvent event) + { + if (event.getDamager() instanceof Player) + { + Player wielder = (Player) event.getDamager(); + + onAttack(event, wielder); + } + + super.onAttack(event); + } + + public void onInteract(PlayerInteractEvent event) + { + Action action = event.getAction(); + + if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) + { + _lastBlock = System.currentTimeMillis(); + } + + super.onInteract(event); + } + + public boolean isHoldingRightClick() + { + return timeSinceLastBlock() <= BLOCK_COOLDOWN; + } + + /** + * @param minValue - the minimum value for attribute value range + * @param maxValue - the maximum value for attribute value range + * @return newly instantiated {@link ValueDistribution} for attribute values in range [{@code minValue}. {@code maxValue}]. + */ + public static ValueDistribution generateDistribution(double minValue, double maxValue) + { + return new ValueDistribution(minValue, maxValue); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java new file mode 100644 index 000000000..5f7fca155 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java @@ -0,0 +1,38 @@ +package mineplex.game.clans.items.legendaries; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class MagneticBlade extends LegendaryItem +{ + + public MagneticBlade() + { + + } + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick() && canPull()) + { + pullPlayers(wielder); + } + } + + @Override + public void onAttack(EntityDamageByEntityEvent event, Player wielder) + { + // TODO: Apply negative knockback with [???] velocity/power to victims of attacks + } + + private void pullPlayers(Player player) + { + // TODO: Grab all players in line of sight and pull towards player with ??? velocity + } + + private boolean canPull() + { + return true; // TODO: Implement cooldown? (Sounds OP without one) + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java new file mode 100644 index 000000000..67c00cfe3 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java @@ -0,0 +1,40 @@ +package mineplex.game.clans.items.legendaries; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class MeteorBow extends LegendaryItem +{ + + public static final int MAX_FLIGHT_TIME = 80; // Max flight of 80 ticks + + private long _flightTime; // Time (in ticks) since last touching ground and flying + + public MeteorBow() + { + _flightTime = 0; + } + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick() && canPropel()) + { + propelPlayer(wielder); + } + } + + private void propelPlayer(Player player) + { + _flightTime++; + // TODO: Propel player forward with ??? velocity + } + + private boolean canPropel() + { + return _flightTime <= MAX_FLIGHT_TIME; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java new file mode 100644 index 000000000..16ef9ee7d --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java @@ -0,0 +1,40 @@ +package mineplex.game.clans.items.legendaries; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class WindBlade extends LegendaryItem +{ + + public static final int MAX_FLIGHT_TIME = 80; // Max flight of 80 ticks + + private long _flightTime; // Time (in ticks) since last touching ground and flying + + public WindBlade() + { + _flightTime = 0; + } + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick() && canPropel()) + { + propelPlayer(wielder); + } + } + + private void propelPlayer(Player player) + { + _flightTime++; + // TODO: Propel player forward with ??? velocity + } + + private boolean canPropel() + { + return _flightTime <= MAX_FLIGHT_TIME; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java new file mode 100644 index 000000000..92976abc6 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java @@ -0,0 +1,92 @@ +package mineplex.game.clans.items.smelting; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class Smelter +{ + + public static void smeltItemInHand(Player player) + { + // Smelt item in hand for player + ItemStack item = player.getInventory().getItemInHand(); + + if (item != null) + { + ItemStack returns = smeltItem(item); + player.getInventory().setItemInHand(returns); + } + } + + public static ItemStack smeltItem(ItemStack item) + { + Material material = getSmeltedType(item.getType()); + int maxAmount = getSmeltAmount(item.getType()); + int amount = maxAmount; // TODO: Determine proportional return on smelt depending on type/durability + return new ItemStack(material, amount); + } + + private static int getSmeltAmount(Material itemType) + { + switch (itemType) + { + case IRON_BOOTS: + case DIAMOND_BOOTS: + case GOLD_BOOTS: + return 4; + case IRON_HELMET: + case DIAMOND_HELMET: + case GOLD_HELMET: + return 5; + case IRON_LEGGINGS: + case DIAMOND_LEGGINGS: + case GOLD_LEGGINGS: + return 7; + case IRON_CHESTPLATE: + case DIAMOND_CHESTPLATE: + case GOLD_CHESTPLATE: + return 8; + case IRON_SWORD: + case DIAMOND_SWORD: + case GOLD_SWORD: + return 2; + case IRON_AXE: + case DIAMOND_AXE: + case GOLD_AXE: + return 3; + default: + return 0; + } + } + + private static Material getSmeltedType(Material itemType) + { + switch (itemType) + { + case IRON_BOOTS: + case IRON_LEGGINGS: + case IRON_CHESTPLATE: + case IRON_HELMET: + case IRON_SWORD: + case IRON_AXE: + return Material.IRON_ORE; + case DIAMOND_BOOTS: + case DIAMOND_LEGGINGS: + case DIAMOND_CHESTPLATE: + case DIAMOND_HELMET: + case DIAMOND_SWORD: + case DIAMOND_AXE: + return Material.DIAMOND_ORE; + case GOLD_BOOTS: + case GOLD_LEGGINGS: + case GOLD_CHESTPLATE: + case GOLD_HELMET: + case GOLD_SWORD: + case GOLD_AXE: + return Material.GOLD_ORE; + default: + return null; + } + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/SmeltingListener.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/SmeltingListener.java new file mode 100644 index 000000000..afa056e00 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/SmeltingListener.java @@ -0,0 +1,34 @@ +package mineplex.game.clans.items.smelting; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +/** + * Listens for smelting related events triggered by players to carry out + * item smelting for base resources and ores. + * @author MrTwiggy + * + */ +public class SmeltingListener implements Listener +{ + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) + { + if (event.getAction() == Action.LEFT_CLICK_BLOCK) + { + Block clicked = event.getClickedBlock(); + + if (clicked.getType() == Material.FURNACE) + { + Smelter.smeltItemInHand(event.getPlayer()); + } + } + } +} From 167549c9e8b15e3885a38162b7dfcdc3aeb73df0 Mon Sep 17 00:00:00 2001 From: Ty Sayers Date: Mon, 25 May 2015 14:22:06 -0400 Subject: [PATCH 101/104] Add implementation for variety of attribute and base attribute hierarchies, add in JSON encoding for itemstack-item pairing to hold stats and information about items without unintuitive print & parse methods. Temporarily disable donation related commands in DonationManager for testing, as it was presenting compilation issues. Introduce further implementation of LegendaryItems. Add various utility methods for JSON encoding (utilizes GSON). Fix various bugs seen in internal testing. --- .../core/donation/DonationManager.java | 7 +- Plugins/Mineplex.Game.Clans/.classpath | 1 + .../src/mineplex/game/clans/Clans.java | 5 +- .../mineplex/game/clans/clans/ChunkData.java | 28 ++ .../game/clans/clans/ClansUtility.java | 59 ++++- .../mineplex/game/clans/items/CustomItem.java | 113 +++++++-- .../game/clans/items/GearManager.java | 151 ++++++++++- .../game/clans/items/ItemListener.java | 27 ++ .../mineplex/game/clans/items/PlayerGear.java | 45 +++- .../clans/items/attributes/ItemAttribute.java | 6 + .../armor/FlatReductionAttribute.java | 1 + .../items/attributes/armor/LavaAttribute.java | 5 + .../attributes/armor/PaddedAttribute.java | 7 +- .../armor/PercentReductionAttribute.java | 2 +- .../attributes/armor/ProtectionAttribute.java | 5 + .../attributes/armor/ReinforcedAttribute.java | 5 + .../attributes/armor/SlantedAttribute.java | 5 + .../attributes/weapon/AttackAttribute.java | 2 + .../weapon/ConqueringAttribute.java | 6 + .../attributes/weapon/DamageAttribute.java | 1 + .../attributes/weapon/FlamingAttribute.java | 6 + .../attributes/weapon/FrostedAttribute.java | 16 +- .../attributes/weapon/HasteAttribute.java | 6 + .../attributes/weapon/HeavyAttribute.java | 1 + .../attributes/weapon/JaggedAttribute.java | 6 + .../attributes/weapon/SharpAttribute.java | 6 + .../attributes/weapon/VampiricAttribute.java | 6 + .../clans/items/commands/GearCommand.java | 34 +++ .../items/legendaries/AlligatorsTooth.java | 13 +- .../items/legendaries/GiantsBroadsword.java | 12 + .../items/legendaries/LegendaryItem.java | 8 + .../clans/items/legendaries/WindBlade.java | 20 +- .../game/clans/items/smelting/Smelter.java | 26 +- .../src/mineplex/serverdata/Utility.java | 2 + .../RuntimeTypeAdapterFactory.java | 240 ++++++++++++++++++ 35 files changed, 831 insertions(+), 52 deletions(-) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ChunkData.java create mode 100644 Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java index b8b2bf46b..fc4699c30 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java @@ -40,9 +40,10 @@ public class DonationManager extends MiniDbClientPlugin @Override public void addCommands() { - addCommand(new GemCommand(this)); - addCommand(new CoinCommand(this)); - addCommand(new GoldCommand(this)); + // TODO: Re-add commands? Where are command implementations, seen as missing at the moment. + //addCommand(new GemCommand(this)); + //addCommand(new CoinCommand(this)); + //addCommand(new GoldCommand(this)); } @EventHandler diff --git a/Plugins/Mineplex.Game.Clans/.classpath b/Plugins/Mineplex.Game.Clans/.classpath index 075cca472..d60d74d9e 100644 --- a/Plugins/Mineplex.Game.Clans/.classpath +++ b/Plugins/Mineplex.Game.Clans/.classpath @@ -8,5 +8,6 @@ + diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index d94fc39ae..24d34157c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -17,6 +17,7 @@ import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.memory.MemoryFix; import mineplex.core.message.MessageManager; import mineplex.core.monitor.LagMeter; +import mineplex.core.packethandler.PacketHandler; import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; import mineplex.core.punish.Punish; @@ -94,7 +95,9 @@ public class Clans extends JavaPlugin new BuildingShop(clans, _clientManager, _donationManager); new PvpShop(clans, _clientManager, _donationManager); - GearManager customGear = new GearManager(this); + // Enable custom-gear related managers + PacketHandler packetHandler = new PacketHandler(this); + GearManager customGear = new GearManager(this, packetHandler); //Updates getServer().getScheduler().scheduleSyncRepeatingTask(this, new Updater(this), 1, 1); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ChunkData.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ChunkData.java new file mode 100644 index 000000000..9eccb5170 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ChunkData.java @@ -0,0 +1,28 @@ +package mineplex.game.clans.clans; + +import org.bukkit.ChatColor; +import org.bukkit.Color; + +public class ChunkData +{ + + private int _x; + public int getX() { return _x; } + + private int _z; + public int getZ() { return _z; } + + private ChatColor _color; + public ChatColor getColor() { return _color; } + + private String _clanName; + public String getClanName() { return _clanName; } + + public ChunkData(int x, int z, ChatColor color, String clanName) + { + _x = x; + _z = z; + _color = color; + _clanName = clanName; + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java index a9ac01df5..d6fa99f06 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java @@ -1,11 +1,15 @@ package mineplex.game.clans.clans; +import java.awt.Color; +import java.util.ArrayList; import java.util.LinkedList; +import java.util.List; import java.util.Map.Entry; import org.bukkit.ChatColor; import org.bukkit.Chunk; import org.bukkit.Location; +import org.bukkit.World; import org.bukkit.entity.Player; import mineplex.core.common.util.C; @@ -33,7 +37,49 @@ public class ClansUtility ADMIN, SAFE } - + + /** + * + * @param location + * @param radius + * @return a 2D array of {@link ClanTerritory} with uniform dimension of ({@code radius} * 2 + 1). The region represented by + * the array of territories is centered on {@code location} chunk with a given chunk {@code radius}. + */ + public List getTerritory(Location location, int radius, ClanInfo surveyorClan) + { + World world = location.getWorld(); + Chunk chunk = location.getChunk(); + int chunkX = chunk.getX(); + int chunkZ = chunk.getZ(); + int width = radius*2 + 1; + + List chunks = new ArrayList(); + + for (int x = 0; x < width; x++) + { + for (int z = 0; z < width; z++) + { + int territoryX = chunkX - radius + x; + int territoryZ = chunkZ - radius + z; + ClanTerritory territory = getClaim(world.getChunkAt(territoryX, territoryZ)); + + if (territory != null) + { + ClanInfo clan = getOwner(territory); + String clanName = territory.Owner; + ClanRelation relationship = rel(surveyorClan, clan); + ChatColor color = relChatColor(relationship, false); + + ChunkData data = new ChunkData(territoryX, territoryZ, color, clanName); + + chunks.add(data); + } + } + } + + return chunks; + } + public ClanInfo searchClanPlayer(Player caller, String name, boolean inform) { //CLAN @@ -197,11 +243,16 @@ public class ClansUtility return clan.getHome().getChunk().equals(chunk); } - + + public ClanTerritory getClaim(Chunk chunk) + { + String chunkTag = UtilWorld.chunkToStr(chunk); + return Clans.getClaimMap().get(chunkTag); + } + public ClanTerritory getClaim(Location loc) { - String chunk = UtilWorld.chunkToStr(loc.getChunk()); - return Clans.getClaimMap().get(chunk); + return getClaim(loc.getChunk()); } public ClanTerritory getClaim(String chunk) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java index 00eaaf444..f8bc27309 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java @@ -4,12 +4,15 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.UUID; import mineplex.game.clans.items.attributes.ItemAttribute; +import org.bukkit.Material; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; /** * Represents a customizable wrapper for an {@link ItemStack}, enabling the possession @@ -20,11 +23,34 @@ import org.bukkit.inventory.ItemStack; public class CustomItem { - private ItemAttribute superPrefix; - private ItemAttribute prefix; - private ItemAttribute suffix; + private ItemAttribute _superPrefix; + public void setSuperPrefix(ItemAttribute attribute) { _superPrefix = attribute; } + + private ItemAttribute _prefix; + public void setPrefix(ItemAttribute attribute) { _prefix = attribute; } + + private ItemAttribute _suffix; + public void setSuffix(ItemAttribute attribute) { _suffix = attribute; } private String _displayName; + private String _description; + private Material _material; + + private String _uuid; + public String getUuid() { return _uuid; } + + public CustomItem(String displayName, String description, Material material) + { + _displayName = displayName; + _description = description; + _material = material; + _uuid = UUID.randomUUID().toString(); + } + + public CustomItem(Material material) + { + this(material.toString(), null, material); // TODO: Prettify item materal name + } /** * @return the name displayed to players for the item. @@ -34,19 +60,19 @@ public class CustomItem // Concatenate attribute prefixes/suffixes to display name. String display = _displayName; - if (prefix != null) + if (_prefix != null) { - display = prefix.getDisplayName() + " " + display; + display = _prefix.getDisplayName() + " " + display; } - if (superPrefix != null) + if (_superPrefix != null) { - display = superPrefix.getDisplayName() + " " + display; + display = _superPrefix.getDisplayName() + " " + display; } - if (suffix != null) + if (_suffix != null) { - display += " of " + suffix.getDisplayName(); + display += " of " + _suffix.getDisplayName(); } return display; @@ -54,22 +80,46 @@ public class CustomItem public List getLore() { + String serialization = GearManager.getItemSerialization(this); + List lore = new ArrayList(); - // TODO: Add decorative stat lore (and hidden json-encoding/uuid info) - lore.add("Custom stat lore string!"); + if (_description != null) + { + lore.add(_description); + } + + // Display attribute descriptions and stats in lore + for (ItemAttribute attribute : getAttributes()) + { + String attributeLine = attribute.getDisplayName() + " - " + attribute.getDescription(); + lore.add(attributeLine); + } + + // Tack on serialized JSON encoded line for utility purposes. (Not seen by user) + List serializedLines = new ArrayList(); + String[] seri = serialization.split("\n"); + for (String line : seri) + { + serializedLines.add(line); + } + lore.addAll(serializedLines); return lore; } - public ItemStack toItemStack() + public ItemStack toItemStack(int amount) { - // TODO: Generate an item stack representing this CustomItem - return null; + ItemStack item = new ItemStack(_material, amount); + update(item); + + // TODO: Add non-descript enchantment for glowing efect? + return item; } public void onInteract(PlayerInteractEvent event) { + System.out.println("Triggered interact!"); for (ItemAttribute attribute : getAttributes()) { attribute.onInteract(event); @@ -78,6 +128,7 @@ public class CustomItem public void onAttack(EntityDamageByEntityEvent event) { + System.out.println("Triggered attack!"); for (ItemAttribute attribute : getAttributes()) { attribute.onAttack(event); @@ -86,6 +137,7 @@ public class CustomItem public void onAttacked(EntityDamageByEntityEvent event) { + System.out.println("Triggered damage!"); for (ItemAttribute attribute : getAttributes()) { attribute.onAttacked(event); @@ -98,9 +150,36 @@ public class CustomItem public Set getAttributes() { Set attributes = new HashSet(); - attributes.add(superPrefix); - attributes.add(prefix); - attributes.add(suffix); + if (_superPrefix != null) attributes.add(_superPrefix); + if (_prefix != null) attributes.add(_prefix); + if (_suffix != null) attributes.add(_suffix); return attributes; } + + /** + * @param item - the item to check for a matching link + * @return true, if {@code item} matches this CustomItem via UUID, false otherwise. + */ + public boolean matches(CustomItem item) + { + return item.getUuid().equals(_uuid); + } + + /** + * Update {@code item} with the proper meta properties suited for this + * {@link CustomItem}. + * @param item - the item whose meta properties are being updated to become a version of this updated custom item. + */ + public void update(ItemStack item) + { + ItemMeta meta = item.getItemMeta(); + + String displayName = getDisplayName(); + List lore = getLore(); + + meta.setDisplayName(displayName); + meta.setLore(lore); + + item.setItemMeta(meta); + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java index 267288b11..30ce2a183 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java @@ -1,56 +1,101 @@ package mineplex.game.clans.items; import java.util.HashMap; +import java.util.List; import java.util.Map; import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.UtilServer; +import mineplex.core.packethandler.IPacketHandler; +import mineplex.core.packethandler.PacketHandler; +import mineplex.core.packethandler.PacketInfo; import mineplex.core.portal.TransferHandler; import mineplex.core.portal.Commands.SendCommand; import mineplex.core.portal.Commands.ServerCommand; +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.attributes.weapon.FlamingAttribute; +import mineplex.game.clans.items.attributes.weapon.FrostedAttribute; +import mineplex.game.clans.items.attributes.weapon.SharpAttribute; import mineplex.game.clans.items.commands.GearCommand; import mineplex.game.clans.items.generation.Weight; import mineplex.game.clans.items.generation.WeightSet; +import mineplex.game.clans.items.legendaries.AlligatorsTooth; +import mineplex.game.clans.items.legendaries.WindBlade; +import mineplex.game.clans.items.smelting.SmeltingListener; import mineplex.serverdata.Region; import mineplex.serverdata.Utility; import mineplex.serverdata.commands.ServerCommandManager; import mineplex.serverdata.commands.TransferCommand; +import mineplex.serverdata.serialization.RuntimeTypeAdapterFactory; import mineplex.serverdata.servers.ServerManager; +import net.minecraft.server.v1_7_R4.Packet; +import net.minecraft.server.v1_7_R4.PacketPlayOutSetSlot; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.java.JavaPlugin; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + /** * Manages creation and retrieval of associated {@link PlayerGear}s with online players, as well * as offering methods for parsing and handling {@link CustomItem}s. * @author MrTwiggy * */ -public class GearManager extends MiniPlugin +public class GearManager extends MiniPlugin implements IPacketHandler { - + private static final String ITEM_SERIALIZATION_TAG = "-JSON-"; private static GearManager _instance; // Singleton instance + private Map playerGears; // Mapping of player names (key) to cached gear set (value). private WeightSet _attributeWeights; // Weightings for randomly selecting number of attributes (1, 2, 3) private WeightSet _itemWeights; // Weightings for randomly selecting item type (legendary/rare) private WeightSet _gearWeights; // Weightings for randomly selecting gear type (armour/weapon) + private static Gson _gson; - public GearManager(JavaPlugin plugin) + public GearManager(JavaPlugin plugin, PacketHandler packetHandler) { super("CustomGear", plugin); _instance = this; playerGears = new HashMap(); + // TODO: Introduce configurable non-hardcoded values for generation weights? _attributeWeights = new WeightSet(new Weight(3, 3), new Weight(20, 2), new Weight(77, 1)); _itemWeights = new WeightSet(new Weight(90, true), new Weight(10, false)); _itemWeights = new WeightSet(new Weight(50, true), new Weight(50, false)); System.out.println("-Testting-testing"); System.out.println(Utility.currentTimeSeconds()); + + // Register listeners + UtilServer.getServer().getPluginManager().registerEvents(new ItemListener(), getPlugin()); + UtilServer.getServer().getPluginManager().registerEvents(new SmeltingListener(), getPlugin()); + + // adding all different container classes with their flag + RuntimeTypeAdapterFactory typeFactory = RuntimeTypeAdapterFactory + .of(ItemAttribute.class, "AttributeType") + .registerSubtype(SharpAttribute.class) + .registerSubtype(FrostedAttribute.class) + .registerSubtype(FlamingAttribute.class); // TODO: Register all item attributes automatically + + RuntimeTypeAdapterFactory customItemType = RuntimeTypeAdapterFactory + .of(CustomItem.class, "ItemType") + .registerSubtype(AlligatorsTooth.class) + .registerSubtype(WindBlade.class); // TODO: Register all legendary weapons automatically + + GsonBuilder builder = new GsonBuilder(); + builder.registerTypeAdapterFactory(typeFactory); + builder.registerTypeAdapterFactory(customItemType); + _gson = builder.create(); + + packetHandler.addPacketHandler(this); } @Override @@ -88,12 +133,94 @@ public class GearManager extends MiniPlugin public static CustomItem parseItem(ItemStack item) { - return null; // TODO: Parse CustomItem from hidden JSON-encoded lore string in item passed in + String serialization = getItemSerialization(item); + + if (serialization != null) + { + CustomItem customItem = deserialize(serialization); + return customItem; + } + + return null; // No serialization found in item's lore, not a custom item! } public static boolean isCustomItem(ItemStack item) { - return parseItem(item) != null; // TODO: Check for JSON-encoded lore string instead of deserializing? + return getItemSerialization(item) != null; + } + + public static String getItemSerialization(CustomItem customItem) + { + String tempSeri = serialize(customItem); + String serialization = ITEM_SERIALIZATION_TAG; + + for (int i = 0; i < tempSeri.length(); i++) + { + if (i % 40 == 39) + { + serialization += "\n"; + } + + serialization += tempSeri.charAt(i); + } + + return serialization; + } + + private static String getItemSerialization(ItemStack item) + { + if (item == null || item.getItemMeta() == null + || item.getItemMeta().getLore() == null) return null; + + ItemMeta meta = item.getItemMeta(); + + /*for (String lore : meta.getLore()) + { + if (lore.startsWith(ITEM_SERIALIZATION_TAG)) // Found serialization lore-line + { + int tagLength = ITEM_SERIALIZATION_TAG.length(); + String serialization = lore.substring(tagLength); + + return serialization; + } + }*/ + + // TODO: Implement packet intercepting to hide json encoded lore + List lore = meta.getLore(); + boolean serialized = false; + String serialization = ""; + for (int i = 0; i < lore.size(); i++) + { + String line = lore.get(i); + + if (line.startsWith(ITEM_SERIALIZATION_TAG)) + { + serialized = true; + serialization += line.substring(ITEM_SERIALIZATION_TAG.length()); + } + else if (serialized) + { + serialization += line; + } + } + + if (serialized) + { + return serialization; + } + + return null; // Unable to find any serialized lore lines, hence not a CustomItem. + } + + public static String serialize(CustomItem customItem) + { + return _gson.toJson(customItem); + } + + public static CustomItem deserialize(String serialization) + { + System.out.println("Serialization: " + serialization); + return _gson.fromJson(serialization, CustomItem.class); } /** @@ -103,4 +230,18 @@ public class GearManager extends MiniPlugin { return _instance; } + + @Override + public void handle(PacketInfo packetInfo) + { + Packet packet = packetInfo.getPacket(); + + if (packet instanceof PacketPlayOutSetSlot) + { + System.out.println("Item slot packet!"); + PacketPlayOutSetSlot slotPacket = (PacketPlayOutSetSlot) packet; + + + } + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java index 4a619b961..521974557 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java @@ -6,7 +6,9 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerItemHeldEvent; /** * Listens for item-related trigger events and accordingly triggers appropriate @@ -17,6 +19,31 @@ import org.bukkit.event.player.PlayerInteractEvent; public class ItemListener implements Listener { + /** + * Handle players shuffling CustomItems around by properly updating + * and managing their movement. + * @param event + */ + @EventHandler + public void onInventoryClick(InventoryClickEvent event) + { + // TODO: Update any custom-items that are selected/moved to save proper stats if they + // TODO: are active. (IE: PlayerGear possesses it as armor slot or weapon) + } + + /** + * Handle updated CustomItem stats and lore upon player + * switching items. + * @param event + */ + @EventHandler + public void onItemHeldChanged(PlayerItemHeldEvent event) + { + Player player = event.getPlayer(); + PlayerGear gear = getGear(player); + + gear.onItemHeldChanged(event); + } /** * Handle the trigger of custom gear related effects and abilities. diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java index 033b811f1..1ae4319ba 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java @@ -7,7 +7,9 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; /** * PlayerGear caches and manages a players set of {@link CustomItem}s that @@ -17,7 +19,6 @@ import org.bukkit.inventory.ItemStack; */ public class PlayerGear { - private String _playerName; // Name of player who owns the gear // Cached custom item information for player's gear @@ -44,6 +45,14 @@ public class PlayerGear return Bukkit.getPlayer(_playerName); } + /** + * @return the {@link PlayerInventory} associated with the owner of this {@link PlayerGear}. + */ + public PlayerInventory getInventory() + { + return getPlayer().getInventory(); + } + /** * Trigger interact events for the set of equipped {@link CustomItem}s in gear set. * @param event - the triggering interact event @@ -80,6 +89,21 @@ public class PlayerGear } } + /** + * Update appropriate gear status and item lores. + * @param event - the triggering item held change event. + */ + public void onItemHeldChanged(PlayerItemHeldEvent event) + { + ItemStack item = getPlayer().getItemInHand(); + CustomItem weapon = getWeapon(); + + if (weapon != null) + { + weapon.update(item); // Update held-item's stats. + } + } + public CustomItem getWeapon() { ItemStack weaponItem = getPlayer().getInventory().getItemInHand(); @@ -146,11 +170,11 @@ public class PlayerGear public Set getGear() { Set items = new HashSet(); - items.add(getWeapon()); - items.add(getHelmet()); - items.add(getChestplate()); - items.add(getLeggings()); - items.add(getBoots()); + if (getWeapon() != null) items.add(getWeapon()); + if (getHelmet() != null) items.add(getHelmet()); + if (getChestplate() != null) items.add(getChestplate()); + if (getLeggings() != null) items.add(getLeggings()); + if (getBoots() != null) items.add(getBoots()); return items; } @@ -158,8 +182,13 @@ public class PlayerGear { if (customItem == null || item == null) return false; - // TODO: Implement more sophisticated match-checking that checks hidden UUID - return customItem.getDisplayName().equals(item.getItemMeta().getDisplayName()); + if (GearManager.isCustomItem(item)) + { + CustomItem customItem2 = GearManager.parseItem(item); + return customItem2.matches(customItem); + } + + return false; } private CustomItem parseItem(ItemStack item) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java index e44ce1dd0..bf9443f7a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java @@ -18,6 +18,12 @@ public abstract class ItemAttribute * @return the attribute name display to players. */ public abstract String getDisplayName(); + + /** + * @return a user-friendly description of this attribute, entailing it's effects + * and current associated values. + */ + public String getDescription() { return "???IMPLEMENT"; } public void onInteract(PlayerInteractEvent event) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java index f9b05e295..7df8fe1c5 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java @@ -6,6 +6,7 @@ public abstract class FlatReductionAttribute extends ReductionAttribute { private double _reduction; + public double getFlatReduction() { return _reduction; } public FlatReductionAttribute(ValueDistribution reductionGen, ReductionConfig config) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java index bdeb36575..4e8f8dc1a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java @@ -23,4 +23,9 @@ public class LavaAttribute extends PercentReductionAttribute return "Lava Forged"; } + @Override + public String getDescription() + { + return String.format("Reduce fire-related damage by %.2f percent.", getReductionPercent()); + } } \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java index 7f05bbcea..5c255a918 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java @@ -21,5 +21,10 @@ public class PaddedAttribute extends FlatReductionAttribute { return "Padded"; } - + + @Override + public String getDescription() + { + return String.format("Reduce fall damage by %.2f half-hearts.", getFlatReduction()); + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java index fdcc6ad61..aeee83b22 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java @@ -4,8 +4,8 @@ import mineplex.game.clans.items.generation.ValueDistribution; public abstract class PercentReductionAttribute extends ReductionAttribute { - private double _reductionPercent; + public double getReductionPercent() { return _reductionPercent; } public PercentReductionAttribute(ValueDistribution reductionGen, ReductionConfig config) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java index ff3995157..8903beb8a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java @@ -24,4 +24,9 @@ public class ProtectionAttribute extends FlatReductionAttribute return "Protection"; } + @Override + public String getDescription() + { + return String.format("Reduce incoming attack damage by %.2f half-hearts.", getFlatReduction()); + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java index 177b9a42a..09cc76b99 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java @@ -21,4 +21,9 @@ public class ReinforcedAttribute extends FlatReductionAttribute return "Reinforced"; } + @Override + public String getDescription() + { + return String.format("Reduce incoming enemy attacks by %.2f half-hearts.", getFlatReduction()); + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java index f3e93f4f3..0618e473d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java @@ -22,4 +22,9 @@ public class SlantedAttribute extends FlatReductionAttribute return "Slanted"; } + @Override + public String getDescription() + { + return String.format("Reduce arrow damage by %.2f half-hearts.", getFlatReduction()); + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java index 3d98b1634..877dc6199 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java @@ -15,6 +15,8 @@ public abstract class AttackAttribute extends ItemAttribute { private int _attackLimit; + public int getAttackLimit() { return _attackLimit; } + private int _attackCount; public AttackAttribute(int attackLimit) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java index 7e61aa5ef..c3b57c04b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java @@ -21,6 +21,12 @@ public class ConqueringAttribute extends DamageAttribute return "Conquering"; // TODO: Fill in name } + @Override + public String getDescription() + { + return String.format("Deal an extra %.2f hearts of damage to mobs.", getBonusDamage()); + } + @Override public boolean grantBonusDamage(Entity entity) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java index 2387c206d..301008ca0 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java @@ -9,6 +9,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; public abstract class DamageAttribute extends ItemAttribute { private double _bonusDamage; + public double getBonusDamage() { return _bonusDamage; } public DamageAttribute(ValueDistribution damageGen) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java index 9a7b5f84c..c3b0f088d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java @@ -24,6 +24,12 @@ public class FlamingAttribute extends AttackAttribute return "Flaming"; // TODO: Fill in name } + @Override + public String getDescription() + { + return String.format("Enemies catch fire for %d ticks every %d attacks.", _fireDuration, getAttackLimit()); + } + @Override public void triggerAttack(Entity attacker, Entity defender) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java index a1a6a70e9..aa4484b4f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java @@ -16,12 +16,11 @@ import org.bukkit.potion.PotionEffectType; */ public class FrostedAttribute extends ItemAttribute { - public final int TICKS_PER_SECOND = 20; // Number of ticks per second for in-game logic. private static ValueDistribution amountGen = generateDistribution(0, 3); // Value generator for slow amount range - private static ValueDistribution durationGen = generateDistribution(1, 3); // Value generator for slow duration range + private static ValueDistribution durationGen = generateDistribution(20, 60); // Value generator for slow duration range private int _slowAmount; // The slowness level/amplifier - private double _slowDuration; // The duration (in seconds) of slow effect + private int _slowDuration; // The duration (in ticks) of slow effect /** * Class constructor @@ -29,7 +28,7 @@ public class FrostedAttribute extends ItemAttribute public FrostedAttribute() { _slowAmount = amountGen.generateIntValue(); - _slowDuration = durationGen.generateValue(); + _slowDuration = durationGen.generateIntValue(); } @Override @@ -38,6 +37,12 @@ public class FrostedAttribute extends ItemAttribute return "Frosted"; } + @Override + public String getDescription() + { + return String.format("Apply slowness %d for %d ticks to enemies.", _slowAmount, _slowDuration); + } + @Override public void onAttacked(EntityDamageByEntityEvent event) { @@ -51,7 +56,6 @@ public class FrostedAttribute extends ItemAttribute private PotionEffect generateSlowEffect() { - int duration = (int) (_slowDuration / TICKS_PER_SECOND); - return new PotionEffect(PotionEffectType.SLOW, duration, _slowAmount); + return new PotionEffect(PotionEffectType.SLOW, _slowDuration, _slowAmount); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java index a23f7fe68..c694957cc 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java @@ -32,6 +32,12 @@ public class HasteAttribute extends AttackAttribute return "Haste"; // TODO: Fill in name } + @Override + public String getDescription() + { + return String.format("Gain speed %d for %d ticks every %d attacks.", _speedAmount, _speedDuration, getAttackLimit()); + } + @Override public void triggerAttack(Entity attacker, Entity defender) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HeavyAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HeavyAttribute.java index 04d8c9758..338950352 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HeavyAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HeavyAttribute.java @@ -21,4 +21,5 @@ public class HeavyAttribute extends ItemAttribute return ""; // TODO: Fill in name } + } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java index 51fc7c03b..0b9fcbc74 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java @@ -21,6 +21,12 @@ public class JaggedAttribute extends AttackAttribute return "Jagged"; // TODO: Fill in name } + @Override + public String getDescription() + { + return String.format("Temporarily halt enemies every %d attacks.", getAttackLimit()); + } + @Override public void triggerAttack(Entity attacker, Entity defender) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java index c03aec7a1..9413b79a6 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java @@ -20,6 +20,12 @@ public class SharpAttribute extends DamageAttribute return "Sharp"; // TODO: Fill in name } + @Override + public String getDescription() + { + return String.format("Deal an extra %.2f damage.", getBonusDamage()); + } + @Override public boolean grantBonusDamage(Entity defender) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java index d8fabe2a2..0bca99aaf 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java @@ -24,6 +24,12 @@ public class VampiricAttribute extends ItemAttribute return "Vampiric"; // TODO: Fill in name } + @Override + public String getDescription() + { + return String.format("Heal yourself for %d percentage of damage dealt to enemy players.", _healPercent); + } + @Override public void onAttack(EntityDamageByEntityEvent event) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java index a15577860..3c22d4b79 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java @@ -1,9 +1,13 @@ package mineplex.game.clans.items.commands; import java.util.ArrayList; +import java.util.List; import org.bukkit.Chunk; +import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import mineplex.core.command.CommandBase; import mineplex.core.common.Rank; @@ -22,7 +26,13 @@ import mineplex.game.clans.clans.ClanRole; import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.ClansUtility.ClanRelation; import mineplex.game.clans.clans.ClientClan; +import mineplex.game.clans.items.CustomItem; import mineplex.game.clans.items.GearManager; +import mineplex.game.clans.items.attributes.weapon.FlamingAttribute; +import mineplex.game.clans.items.attributes.weapon.FrostedAttribute; +import mineplex.game.clans.items.attributes.weapon.SharpAttribute; +import mineplex.game.clans.items.legendaries.LegendaryItem; +import mineplex.game.clans.items.legendaries.WindBlade; public class GearCommand extends CommandBase { @@ -36,6 +46,30 @@ public class GearCommand extends CommandBase { UtilPlayer.message(caller, F.main("Gear", "Opening custom gear GUI!")); + if (caller.getItemInHand() != null && caller.getItemInHand().getType() != Material.AIR) + { + ItemStack item = caller.getItemInHand(); + ItemMeta meta = item.getItemMeta(); + List lore = meta.getLore(); + lore.set(0, "Test"); + meta.setLore(lore); + item.setItemMeta(meta); + System.out.println("aaaaaaa"); + return; + } + else + { + LegendaryItem legendary = new WindBlade(); + caller.setItemInHand(legendary.toItemStack(1)); + return; + } + + /*CustomItem customItem = new CustomItem(); + customItem.setPrefix(new FrostedAttribute()); + customItem.setSuperPrefix(new SharpAttribute()); + customItem.setSuffix(new FlamingAttribute()); + ItemStack sword = customItem.toItemStack(1); + caller.setItemInHand(sword);*/ // TODO: Open custom gear GUI here } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java index c8767a955..3ce29f6a6 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java @@ -3,19 +3,26 @@ package mineplex.game.clans.items.legendaries; import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.game.clans.items.generation.ValueDistribution; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.util.Vector; public class AlligatorsTooth extends LegendaryItem { - private static ValueDistribution damageGen = generateDistribution(1.0d, 5.0d); + private static ValueDistribution boostGen = generateDistribution(0.6d, 1.2d); + private static ValueDistribution damageGen = generateDistribution(1.0d, 6.0d); private double _damageBonus; + private double _swimSpeed; public AlligatorsTooth() { + super("Alligators Tooth", "Grants bonus damage in water and special ability to swim fast!", Material.RAW_FISH); + _damageBonus = damageGen.generateValue(); + _swimSpeed = boostGen.generateValue(); } @Override @@ -41,7 +48,9 @@ public class AlligatorsTooth extends LegendaryItem private void propelPlayer(Player player) { - // TODO: Propel player forward with 0.6 to 1.2 velocity + Vector direction = player.getLocation().getDirection().normalize(); + direction.multiply(_swimSpeed); + player.setVelocity(direction); } private boolean isInWater(Player player) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java index 33306ab82..9df21fdee 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java @@ -3,6 +3,7 @@ package mineplex.game.clans.items.legendaries; import java.util.HashSet; import java.util.Set; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.potion.PotionEffect; @@ -11,6 +12,11 @@ import org.bukkit.potion.PotionEffectType; public class GiantsBroadsword extends LegendaryItem { + public GiantsBroadsword() + { + super("Giants Broadsword", "Deal huge damage and block to gain defensive abilities!", Material.PAPER); + } + @Override public void update(Player wielder) { @@ -24,6 +30,12 @@ public class GiantsBroadsword extends LegendaryItem public void onAttack(EntityDamageByEntityEvent event, Player wielder) { // TODO: Buff knockback and damage values (What are specific values?) + // Chiss: Make 'em up + + double bonusDamage = 2.0d; // Too much? + event.setDamage(event.getDamage() + bonusDamage); + + // TODO: Apply knockback bonus using previous Clans Custom combat events } private void buffPlayer(Player player) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java index 559273ff4..60db32a47 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java @@ -1,5 +1,6 @@ package mineplex.game.clans.items.legendaries; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -19,6 +20,13 @@ public class LegendaryItem extends CustomItem public LegendaryItem() { + this(null, null, null); // TODO: Never used, just to skip base implementation for testing. + } + + public LegendaryItem(String name, String description, Material material) + { + super(name, description, material); + _lastBlock = 0l; } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java index 16ef9ee7d..c8d38f700 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java @@ -3,34 +3,52 @@ package mineplex.game.clans.items.legendaries; import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.game.clans.items.generation.ValueDistribution; +import org.bukkit.Material; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.util.Vector; public class WindBlade extends LegendaryItem { + public static final double FLIGHT_VELOCITY = 0.25d; public static final int MAX_FLIGHT_TIME = 80; // Max flight of 80 ticks private long _flightTime; // Time (in ticks) since last touching ground and flying public WindBlade() { + super("Wind Blade", "Activate flying ability to take flight for 80 ticks before landing!", Material.STICK); // TODO: Configurable? + _flightTime = 0; } @Override public void update(Player wielder) { + Entity entity = (Entity) wielder; + + // Check if player is attempting to fly and activate if (isHoldingRightClick() && canPropel()) { propelPlayer(wielder); } + + // Check if player has touched down + if (entity.isOnGround()) + { + _flightTime = 0; + } } private void propelPlayer(Player player) { _flightTime++; - // TODO: Propel player forward with ??? velocity + Vector direction = player.getLocation().getDirection().normalize(); + direction.multiply(FLIGHT_VELOCITY); // Set velocity magnitude + + player.setVelocity(direction); } private boolean canPropel() diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java index 92976abc6..7fb1195bc 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java @@ -1,5 +1,7 @@ package mineplex.game.clans.items.smelting; +import mineplex.game.clans.items.GearManager; + import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -9,21 +11,32 @@ public class Smelter public static void smeltItemInHand(Player player) { - // Smelt item in hand for player ItemStack item = player.getInventory().getItemInHand(); - if (item != null) + if (isSmeltable(item)) { ItemStack returns = smeltItem(item); player.getInventory().setItemInHand(returns); } + + // TODO: Notify player of smelt success/failure? } public static ItemStack smeltItem(ItemStack item) { Material material = getSmeltedType(item.getType()); int maxAmount = getSmeltAmount(item.getType()); - int amount = maxAmount; // TODO: Determine proportional return on smelt depending on type/durability + int amount = maxAmount; + + if (!GearManager.isCustomItem(item)) + { + short maxDurability = item.getType().getMaxDurability(); + int durability = maxDurability - item.getDurability(); + double percent = durability / (double) maxDurability; + System.out.println("Durability: " + item.getDurability() + " -- max: " + item.getType().getMaxDurability() + " --- percent: " + percent); + amount = Math.max(1, (int) (maxAmount * percent)); + } + return new ItemStack(material, amount); } @@ -60,6 +73,13 @@ public class Smelter } } + private static boolean isSmeltable(ItemStack item) + { + if (item == null) return false; + + return getSmeltedType(item.getType()) != null; + } + private static Material getSmeltedType(Material itemType) { switch (itemType) diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/Utility.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/Utility.java index b848f99cd..8c0af1c99 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/Utility.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/Utility.java @@ -41,6 +41,8 @@ public class Utility */ public static T deserialize(String serializedData, Class type) { + if (serializedData == null) return null; + return _gson.fromJson(serializedData, type); } diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java new file mode 100644 index 000000000..33dc2239e --- /dev/null +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java @@ -0,0 +1,240 @@ +/* + * Copyright (C) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package mineplex.serverdata.serialization; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.internal.Streams; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Adapts values whose runtime type may differ from their declaration type. This + * is necessary when a field's type is not the same type that GSON should create + * when deserializing that field. For example, consider these types: + *

   {@code
+ *   abstract class Shape {
+ *     int x;
+ *     int y;
+ *   }
+ *   class Circle extends Shape {
+ *     int radius;
+ *   }
+ *   class Rectangle extends Shape {
+ *     int width;
+ *     int height;
+ *   }
+ *   class Diamond extends Shape {
+ *     int width;
+ *     int height;
+ *   }
+ *   class Drawing {
+ *     Shape bottomShape;
+ *     Shape topShape;
+ *   }
+ * }
+ *

Without additional type information, the serialized JSON is ambiguous. Is + * the bottom shape in this drawing a rectangle or a diamond?

   {@code
+ *   {
+ *     "bottomShape": {
+ *       "width": 10,
+ *       "height": 5,
+ *       "x": 0,
+ *       "y": 0
+ *     },
+ *     "topShape": {
+ *       "radius": 2,
+ *       "x": 4,
+ *       "y": 1
+ *     }
+ *   }}
+ * This class addresses this problem by adding type information to the + * serialized JSON and honoring that type information when the JSON is + * deserialized:
   {@code
+ *   {
+ *     "bottomShape": {
+ *       "type": "Diamond",
+ *       "width": 10,
+ *       "height": 5,
+ *       "x": 0,
+ *       "y": 0
+ *     },
+ *     "topShape": {
+ *       "type": "Circle",
+ *       "radius": 2,
+ *       "x": 4,
+ *       "y": 1
+ *     }
+ *   }}
+ * Both the type field name ({@code "type"}) and the type labels ({@code + * "Rectangle"}) are configurable. + * + *

Registering Types

+ * Create a {@code RuntimeTypeAdapter} by passing the base type and type field + * name to the {@link #of} factory method. If you don't supply an explicit type + * field name, {@code "type"} will be used.
   {@code
+ *   RuntimeTypeAdapter shapeAdapter
+ *       = RuntimeTypeAdapter.of(Shape.class, "type");
+ * }
+ * Next register all of your subtypes. Every subtype must be explicitly + * registered. This protects your application from injection attacks. If you + * don't supply an explicit type label, the type's simple name will be used. + *
   {@code
+ *   shapeAdapter.registerSubtype(Rectangle.class, "Rectangle");
+ *   shapeAdapter.registerSubtype(Circle.class, "Circle");
+ *   shapeAdapter.registerSubtype(Diamond.class, "Diamond");
+ * }
+ * Finally, register the type adapter in your application's GSON builder: + *
   {@code
+ *   Gson gson = new GsonBuilder()
+ *       .registerTypeAdapter(Shape.class, shapeAdapter)
+ *       .create();
+ * }
+ * Like {@code GsonBuilder}, this API supports chaining:
   {@code
+ *   RuntimeTypeAdapter shapeAdapter = RuntimeTypeAdapterFactory.of(Shape.class)
+ *       .registerSubtype(Rectangle.class)
+ *       .registerSubtype(Circle.class)
+ *       .registerSubtype(Diamond.class);
+ * }
+ */ +public final class RuntimeTypeAdapterFactory implements TypeAdapterFactory { + private final Class baseType; + private final String typeFieldName; + private final Map> labelToSubtype = new LinkedHashMap>(); + private final Map, String> subtypeToLabel = new LinkedHashMap, String>(); + + private RuntimeTypeAdapterFactory(Class baseType, String typeFieldName) { + if (typeFieldName == null || baseType == null) { + throw new NullPointerException(); + } + this.baseType = baseType; + this.typeFieldName = typeFieldName; + } + + /** + * Creates a new runtime type adapter using for {@code baseType} using {@code + * typeFieldName} as the type field name. Type field names are case sensitive. + */ + public static RuntimeTypeAdapterFactory of(Class baseType, String typeFieldName) { + return new RuntimeTypeAdapterFactory(baseType, typeFieldName); + } + + /** + * Creates a new runtime type adapter for {@code baseType} using {@code "type"} as + * the type field name. + */ + public static RuntimeTypeAdapterFactory of(Class baseType) { + return new RuntimeTypeAdapterFactory(baseType, "type"); + } + + /** + * Registers {@code type} identified by {@code label}. Labels are case + * sensitive. + * + * @throws IllegalArgumentException if either {@code type} or {@code label} + * have already been registered on this type adapter. + */ + public RuntimeTypeAdapterFactory registerSubtype(Class type, String label) { + if (type == null || label == null) { + throw new NullPointerException(); + } + if (subtypeToLabel.containsKey(type) || labelToSubtype.containsKey(label)) { + throw new IllegalArgumentException("types and labels must be unique"); + } + labelToSubtype.put(label, type); + subtypeToLabel.put(type, label); + return this; + } + + /** + * Registers {@code type} identified by its {@link Class#getSimpleName simple + * name}. Labels are case sensitive. + * + * @throws IllegalArgumentException if either {@code type} or its simple name + * have already been registered on this type adapter. + */ + public RuntimeTypeAdapterFactory registerSubtype(Class type) { + return registerSubtype(type, type.getSimpleName()); + } + + public TypeAdapter create(Gson gson, TypeToken type) { + if (type.getRawType() != baseType) { + return null; + } + + final Map> labelToDelegate + = new LinkedHashMap>(); + final Map, TypeAdapter> subtypeToDelegate + = new LinkedHashMap, TypeAdapter>(); + for (Map.Entry> entry : labelToSubtype.entrySet()) { + TypeAdapter delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue())); + labelToDelegate.put(entry.getKey(), delegate); + subtypeToDelegate.put(entry.getValue(), delegate); + } + + return new TypeAdapter() { + @Override public R read(JsonReader in) throws IOException { + JsonElement jsonElement = Streams.parse(in); + JsonElement labelJsonElement = jsonElement.getAsJsonObject().remove(typeFieldName); + if (labelJsonElement == null) { + throw new JsonParseException("cannot deserialize " + baseType + + " because it does not define a field named " + typeFieldName); + } + String label = labelJsonElement.getAsString(); + @SuppressWarnings("unchecked") // registration requires that subtype extends T + TypeAdapter delegate = (TypeAdapter) labelToDelegate.get(label); + if (delegate == null) { + throw new JsonParseException("cannot deserialize " + baseType + " subtype named " + + label + "; did you forget to register a subtype?"); + } + return delegate.fromJsonTree(jsonElement); + } + + @Override public void write(JsonWriter out, R value) throws IOException { + Class srcType = value.getClass(); + String label = subtypeToLabel.get(srcType); + @SuppressWarnings("unchecked") // registration requires that subtype extends T + TypeAdapter delegate = (TypeAdapter) subtypeToDelegate.get(srcType); + if (delegate == null) { + throw new JsonParseException("cannot serialize " + srcType.getName() + + "; did you forget to register a subtype?"); + } + JsonObject jsonObject = delegate.toJsonTree(value).getAsJsonObject(); + if (jsonObject.has(typeFieldName)) { + throw new JsonParseException("cannot serialize " + srcType.getName() + + " because it already defines a field named " + typeFieldName); + } + JsonObject clone = new JsonObject(); + clone.add(typeFieldName, new JsonPrimitive(label)); + for (Map.Entry e : jsonObject.entrySet()) { + clone.add(e.getKey(), e.getValue()); + } + Streams.write(clone, out); + } + }; + } +} \ No newline at end of file From 2e19aabfa17acf57e88f66662e64f91ee66a14d1 Mon Sep 17 00:00:00 2001 From: Ty Sayers Date: Mon, 1 Jun 2015 12:25:20 -0400 Subject: [PATCH 102/104] Convert damage system to custom Mineplex damage events to enable legendary abilities. Fix NPE and hanging issue on ServerData's serialization adapter. Finalize item generation logic for instantiating CustomItem's based on specified random distribution of types, attribute counts, etc. Fix several Legendary bugs discovered during testing. Clean left-over template documentation and further clarify ambiguous methods. Add proper updating logic for custom items to track internal stats in hidden json lore. Add safe-logout system to prevent combat logging and enable players to safely log after a designated amount of time. Tweak WindBlade's flight speed to a more natural value. --- .../gameplay/safelog/LoggingManager.java | 251 ++++++++++++++++++ .../clans/gameplay/safelog/LogoutData.java | 46 ++++ .../clans/gameplay/safelog/QuitCommand.java | 62 +++++ .../mineplex/game/clans/items/CustomItem.java | 28 +- .../game/clans/items/GearManager.java | 224 +++++++++++++--- .../game/clans/items/ItemListener.java | 17 +- .../mineplex/game/clans/items/ItemType.java | 18 ++ .../mineplex/game/clans/items/PlayerGear.java | 31 ++- .../clans/items/attributes/ItemAttribute.java | 5 +- .../items/attributes/armor/LavaAttribute.java | 3 +- .../attributes/armor/PaddedAttribute.java | 3 +- .../attributes/armor/ProtectionAttribute.java | 1 - .../attributes/armor/ReductionAttribute.java | 13 +- .../attributes/armor/ReinforcedAttribute.java | 1 - .../attributes/armor/SlantedAttribute.java | 1 - .../weapon/ConqueringAttribute.java | 5 +- .../attributes/weapon/DamageAttribute.java | 7 +- .../attributes/weapon/FlamingAttribute.java | 5 +- .../attributes/weapon/FrostedAttribute.java | 11 +- .../attributes/weapon/HasteAttribute.java | 9 +- .../attributes/weapon/JaggedAttribute.java | 5 +- .../attributes/weapon/SharpAttribute.java | 5 +- .../attributes/weapon/VampiricAttribute.java | 26 +- .../clans/items/commands/GearCommand.java | 30 +-- .../clans/items/generation/WeightSet.java | 41 ++- .../items/legendaries/AlligatorsTooth.java | 9 +- .../items/legendaries/GiantsBroadsword.java | 12 +- .../clans/items/legendaries/HyperBlade.java | 19 +- .../items/legendaries/LegendaryItem.java | 22 +- .../items/legendaries/MagneticBlade.java | 36 ++- .../clans/items/legendaries/MeteorBow.java | 2 + .../clans/items/legendaries/WindBlade.java | 2 +- .../game/core/damage/CustomDamageEvent.java | 4 + .../RuntimeTypeAdapterFactory.java | 42 +-- 34 files changed, 819 insertions(+), 177 deletions(-) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LoggingManager.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LogoutData.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/QuitCommand.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemType.java diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LoggingManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LoggingManager.java new file mode 100644 index 000000000..52ba6fc3c --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LoggingManager.java @@ -0,0 +1,251 @@ +package mineplex.game.clans.gameplay.safelog; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import mineplex.core.MiniPlugin; +import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import mineplex.minecraft.game.core.damage.DamageManager; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.core.updater.UpdateType; +import mineplex.core.blockrestore.BlockRestore; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.items.commands.GearCommand; + +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Biome; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockDamageEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.plugin.java.JavaPlugin; + +public class LoggingManager extends MiniPlugin +{ + public static final double SAFE_LOG_RANGE = 32d; + public static final int LOGOUT_DURATION = 10000; // Duration of safe-log (in milliseconds) + public static final long REJOIN_TIME = 60000; + + //Track Offline Players + private HashMap _logouts = new HashMap(); + + public LoggingManager(JavaPlugin plugin) + { + super("Logout Manager", plugin); + + _logouts = new HashMap(); + } + + private Set getNearbyHostilePlayers(Location location, double radius) + { + Set nearbyPlayers = new HashSet(); + + for (Player player : location.getWorld().getPlayers()) + { + double radiusSquared = radius * radius; + + if (player.getLocation().distanceSquared(location) <= radiusSquared) // TODO: Check to see if they're in a clan? + { + nearbyPlayers.add(player); + } + } + + return nearbyPlayers; + } + + public void onPlayerQuit(Player player) + { + LogoutData logoutData = _logouts.remove(player); + + boolean isSafeLog = logoutData != null && logoutData.hasSafeLogout() && !player.isDead(); + + if (!isSafeLog && getNearbyHostilePlayers(player.getLocation(), 32d).size() == 1) // No other players within 32 blocks + { + isSafeLog = true; + } + + // TODO: Check to see if player was attacked or attacked another player within last 15 seconds and set isSafeLog=false... + if (!isSafeLog) + { + onCombatLog(player); + } + } + + public void onPlayerJoin(Player player) + { + // TODO: Check to see if the player has a combat-log bot in place + // and if so, remove/un-use it as they have logged back in. + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) + { + onPlayerQuit(event.getPlayer()); + } + + @EventHandler + public void onPlayerKicked(PlayerKickEvent event) + { + onPlayerQuit(event.getPlayer()); + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + onPlayerJoin(event.getPlayer()); + } + + @EventHandler + public void onUpdate(UpdateEvent event) + { + if (event.getType() == UpdateType.TICK) + tick(); + } + + @Override + public void addCommands() + { + addCommand(new QuitCommand(this)); + } + + private LogoutData getLogoutData(Player player) + { + return _logouts.get(player.getName()); + } + + public LogoutData insertLogoutData(Player player, long duration) + { + LogoutData data = new LogoutData(player, duration); + _logouts.put(player.getName(), data); + + return data; + } + + public LogoutData insertLogoutData(Player player) + { + return insertLogoutData(player, LOGOUT_DURATION); + } + + public boolean hasLogoutData(Player player) + { + return getLogoutData(player) != null; + } + + /** + * Tick the internal logic of this manager and update it's state. + * Intended to be ticked/updated every in-game tick. + */ + private void tick() + { + for (String playerName : _logouts.keySet()) + { + LogoutData data = _logouts.get(playerName); + + if (data.isOnline()) + { + double distance = data.getDistanceTravelled(); + + if (distance >= SAFE_LOG_RANGE) + { + cancelSafeLog(data.getPlayer()); + } + else if (data.hasSafeLogout()) + { + // TODO: Log out player safely. + } + } + else + { + _logouts.remove(playerName); + } + } + } + + private void cancelSafeLog(Player player) + { + _logouts.remove(player.getName()); + // TODO: Notify player that safe-log was cancelled + } + + public void onCombatLog(Player player) + { + UtilInv.drop(player, true); // Drop player's inventory belongigs to ground + } + + @EventHandler(ignoreCancelled = true) + public void onPlayerInteract(PlayerInteractEvent event) + { + Player player = event.getPlayer(); + + if (hasLogoutData(player)) + { + cancelSafeLog(player); + } + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onEntityDamaged(EntityDamageByEntityEvent event) + { + Entity victim = event.getEntity(); + + if (victim instanceof Player) + { + Player player = (Player) victim; + + if (hasLogoutData(player)) + { + cancelSafeLog(player); + } + } + } + + @EventHandler(ignoreCancelled = true) + public void onItemPickup(PlayerPickupItemEvent event) + { + if (hasLogoutData(event.getPlayer())) + { + event.setCancelled(true); // Prevent players that are safe-logging from picking up items. + } + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LogoutData.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LogoutData.java new file mode 100644 index 000000000..5f311f35a --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LogoutData.java @@ -0,0 +1,46 @@ +package mineplex.game.clans.gameplay.safelog; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public class LogoutData +{ + + private String _playerName; + public Player getPlayer() { return Bukkit.getPlayer(_playerName); } + + private long _endTime; + public boolean hasSafeLogout() { return System.currentTimeMillis() >= _endTime; } + + private long _startTime; + + private Location _location; + public Location getLocation() { return _location; } + + public LogoutData(Player player, long duration) + { + _startTime = System.currentTimeMillis(); + _endTime = _startTime + duration; + _location = player.getLocation(); + _playerName = player.getName(); + } + + public boolean isOnline() + { + Player player = getPlayer(); + return player != null && player.isOnline(); + } + + public double getDistanceTravelled() + { + if (isOnline()) + { + Player player = getPlayer(); + + return player.getLocation().distance(_location); + } + + return -1d; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/QuitCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/QuitCommand.java new file mode 100644 index 000000000..6b0d144c6 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/QuitCommand.java @@ -0,0 +1,62 @@ +package mineplex.game.clans.gameplay.safelog; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Chunk; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilInput; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilTime.TimeUnit; +import mineplex.core.common.util.UtilWorld; +import mineplex.core.recharge.Recharge; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.ClansUtility.ClanRelation; +import mineplex.game.clans.clans.ClientClan; +import mineplex.game.clans.items.CustomItem; +import mineplex.game.clans.items.GearManager; +import mineplex.game.clans.items.attributes.weapon.FlamingAttribute; +import mineplex.game.clans.items.attributes.weapon.FrostedAttribute; +import mineplex.game.clans.items.attributes.weapon.SharpAttribute; +import mineplex.game.clans.items.legendaries.LegendaryItem; +import mineplex.game.clans.items.legendaries.WindBlade; + +public class QuitCommand extends CommandBase +{ + + private LoggingManager _loggingManager; + + public QuitCommand(LoggingManager plugin) + { + super(plugin, Rank.ALL, "quit", "log", "logout"); + + _loggingManager = plugin; + } + + @Override + public void Execute(Player caller, String[] args) + { + if (_loggingManager.hasLogoutData(caller)) + { + UtilPlayer.message(caller, F.main("SafeLog", "You are already safe-logging!")); + } + else + { + _loggingManager.insertLogoutData(caller); + UtilPlayer.message(caller, F.main("SafeLog", "Successfully initiated safe-log!")); + } + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java index f8bc27309..7933da3ea 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java @@ -7,6 +7,7 @@ import java.util.Set; import java.util.UUID; import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import org.bukkit.Material; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -32,7 +33,7 @@ public class CustomItem private ItemAttribute _suffix; public void setSuffix(ItemAttribute attribute) { _suffix = attribute; } - private String _displayName; + protected String _displayName; private String _description; private Material _material; @@ -117,6 +118,11 @@ public class CustomItem return item; } + public ItemStack toItemStack() + { + return toItemStack(1); + } + public void onInteract(PlayerInteractEvent event) { System.out.println("Triggered interact!"); @@ -126,7 +132,7 @@ public class CustomItem } } - public void onAttack(EntityDamageByEntityEvent event) + public void onAttack(CustomDamageEvent event) { System.out.println("Triggered attack!"); for (ItemAttribute attribute : getAttributes()) @@ -135,7 +141,7 @@ public class CustomItem } } - public void onAttacked(EntityDamageByEntityEvent event) + public void onAttacked(CustomDamageEvent event) { System.out.println("Triggered damage!"); for (ItemAttribute attribute : getAttributes()) @@ -182,4 +188,20 @@ public class CustomItem item.setItemMeta(meta); } + + public void addAttribute(ItemAttribute attribute) + { + if (_superPrefix == null) + { + _superPrefix = attribute; + } + else if (_prefix == null) + { + _prefix = attribute; + } + else if (_suffix == null) + { + _suffix = attribute; + } + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java index 30ce2a183..b3979bee9 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java @@ -1,8 +1,12 @@ package mineplex.game.clans.items; +import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Random; +import java.util.Set; import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; @@ -14,14 +18,12 @@ import mineplex.core.portal.TransferHandler; import mineplex.core.portal.Commands.SendCommand; import mineplex.core.portal.Commands.ServerCommand; import mineplex.game.clans.items.attributes.ItemAttribute; -import mineplex.game.clans.items.attributes.weapon.FlamingAttribute; -import mineplex.game.clans.items.attributes.weapon.FrostedAttribute; -import mineplex.game.clans.items.attributes.weapon.SharpAttribute; +import mineplex.game.clans.items.attributes.weapon.*; +import mineplex.game.clans.items.attributes.armor.*; import mineplex.game.clans.items.commands.GearCommand; import mineplex.game.clans.items.generation.Weight; import mineplex.game.clans.items.generation.WeightSet; -import mineplex.game.clans.items.legendaries.AlligatorsTooth; -import mineplex.game.clans.items.legendaries.WindBlade; +import mineplex.game.clans.items.legendaries.*; import mineplex.game.clans.items.smelting.SmeltingListener; import mineplex.serverdata.Region; import mineplex.serverdata.Utility; @@ -31,8 +33,11 @@ import mineplex.serverdata.serialization.RuntimeTypeAdapterFactory; import mineplex.serverdata.servers.ServerManager; import net.minecraft.server.v1_7_R4.Packet; import net.minecraft.server.v1_7_R4.PacketPlayOutSetSlot; +import net.minecraft.util.com.google.common.collect.Sets; import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -47,17 +52,31 @@ import com.google.gson.GsonBuilder; * @author MrTwiggy * */ -public class GearManager extends MiniPlugin implements IPacketHandler +public class GearManager extends MiniPlugin implements IPacketHandler, Runnable { private static final String ITEM_SERIALIZATION_TAG = "-JSON-"; + private static Random random = new Random(); + private static Gson _gson; private static GearManager _instance; // Singleton instance - private Map playerGears; // Mapping of player names (key) to cached gear set (value). + private Map _playerGears; // Mapping of player names (key) to cached gear set (value). private WeightSet _attributeWeights; // Weightings for randomly selecting number of attributes (1, 2, 3) - private WeightSet _itemWeights; // Weightings for randomly selecting item type (legendary/rare) - private WeightSet _gearWeights; // Weightings for randomly selecting gear type (armour/weapon) - private static Gson _gson; + private WeightSet _typeWeights; // Weightings for randomly selecting item type (legendary/weapon/armour/bow) + + // Legendary generation + private WeightSet> _legendaryWeights; + + // Weapon generation + private WeightSet _weaponTypes; + + // Armour generation + private WeightSet _armourTypes; + + // Attribute generation + private WeightSet> _weaponAttributes; + private WeightSet> _armourAttributes; + private WeightSet> _bowAttributes; public GearManager(JavaPlugin plugin, PacketHandler packetHandler) { @@ -65,37 +84,77 @@ public class GearManager extends MiniPlugin implements IPacketHandler _instance = this; - playerGears = new HashMap(); + _playerGears = new HashMap(); // TODO: Introduce configurable non-hardcoded values for generation weights? - _attributeWeights = new WeightSet(new Weight(3, 3), new Weight(20, 2), new Weight(77, 1)); - _itemWeights = new WeightSet(new Weight(90, true), new Weight(10, false)); - _itemWeights = new WeightSet(new Weight(50, true), new Weight(50, false)); + _attributeWeights = new WeightSet(new Weight(3, 3), new Weight(20, 2), new Weight(77, 1), new Weight(80, 0)); + _typeWeights = new WeightSet(new Weight(1000, ItemType.LEGENDARY), + new Weight(45, ItemType.ARMOUR), + new Weight(22, ItemType.WEAPON), + new Weight(22, ItemType.BOW)); - System.out.println("-Testting-testing"); - System.out.println(Utility.currentTimeSeconds()); + // Weapon-based attributes + _weaponAttributes = new WeightSet>(FrostedAttribute.class, SharpAttribute.class, + JaggedAttribute.class, HasteAttribute.class, FlamingAttribute.class, ConqueringAttribute.class); + + // Armour-based attributes + _armourAttributes = new WeightSet>(SlantedAttribute.class, ReinforcedAttribute.class, + ProtectionAttribute.class, PaddedAttribute.class, LavaAttribute.class); + + // Bow-based attributes + //_bowAttributes = new WeightSet>(); // TODO: Add in bow-attributes + + // Weapon material types + _weaponTypes = new WeightSet(Material.DIAMOND_SWORD, Material.GOLD_SWORD, Material.IRON_SWORD, Material.STONE_SWORD, + Material.DIAMOND_AXE, Material.GOLD_AXE, Material.IRON_AXE, Material.STONE_AXE); + + // Armour material types + _armourTypes = new WeightSet(Material.DIAMOND_HELMET, Material.DIAMOND_CHESTPLATE, Material.DIAMOND_LEGGINGS, Material.DIAMOND_BOOTS, + Material.IRON_HELMET, Material.IRON_CHESTPLATE, Material.IRON_LEGGINGS, Material.IRON_BOOTS, + Material.GOLD_HELMET, Material.GOLD_CHESTPLATE, Material.GOLD_LEGGINGS, Material.GOLD_BOOTS); + + // TODO: Initialize list of attributes and types + + // Initialize various LegendaryItem types + _legendaryWeights = new WeightSet>(AlligatorsTooth.class, WindBlade.class, + GiantsBroadsword.class, HyperBlade.class, MagneticBlade.class); + // TODO: Add rest of legendaries, find better way? // Register listeners UtilServer.getServer().getPluginManager().registerEvents(new ItemListener(), getPlugin()); UtilServer.getServer().getPluginManager().registerEvents(new SmeltingListener(), getPlugin()); - // adding all different container classes with their flag - RuntimeTypeAdapterFactory typeFactory = RuntimeTypeAdapterFactory - .of(ItemAttribute.class, "AttributeType") - .registerSubtype(SharpAttribute.class) - .registerSubtype(FrostedAttribute.class) - .registerSubtype(FlamingAttribute.class); // TODO: Register all item attributes automatically + // Initialize attribute types factory for JSON handling of polymorphism. + RuntimeTypeAdapterFactory attributeFactory = RuntimeTypeAdapterFactory + .of(ItemAttribute.class); + for (Class attributeType : _armourAttributes.elements()) + { + attributeFactory.registerSubtype(attributeType); + } + for (Class attributeType : _weaponAttributes.elements()) + { + attributeFactory.registerSubtype(attributeType); + } + + // Initialize legendary item type factory for JSON handling of polymorphism. RuntimeTypeAdapterFactory customItemType = RuntimeTypeAdapterFactory - .of(CustomItem.class, "ItemType") - .registerSubtype(AlligatorsTooth.class) - .registerSubtype(WindBlade.class); // TODO: Register all legendary weapons automatically + .of(CustomItem.class); + customItemType.registerSubtype(CustomItem.class); + customItemType.registerSubtype(LegendaryItem.class); + for (Class itemType : _legendaryWeights.elements()) + { + customItemType.registerSubtype(itemType); + } - GsonBuilder builder = new GsonBuilder(); - builder.registerTypeAdapterFactory(typeFactory); - builder.registerTypeAdapterFactory(customItemType); - _gson = builder.create(); + // Build GSON instance off factories for future serialization of items. + _gson = new GsonBuilder() + .registerTypeAdapterFactory(attributeFactory) + .registerTypeAdapterFactory(customItemType) + .create(); packetHandler.addPacketHandler(this); + + plugin.getServer().getScheduler().runTaskTimer(plugin, this, 1l, 1l); } @Override @@ -104,6 +163,18 @@ public class GearManager extends MiniPlugin implements IPacketHandler addCommand(new GearCommand(this)); } + /** + * Tick & update internal logic for {@link GearManager}. Called once per tick. + */ + @Override + public void run() + { + for (PlayerGear gear : _playerGears.values()) + { + gear.update(); + } + } + /** * @param player - the player whose {@link PlayerGear} set is to be fetched. * @return the cached or newly instantiated {@link PlayerGear} associated with {@code player}. @@ -111,24 +182,81 @@ public class GearManager extends MiniPlugin implements IPacketHandler public PlayerGear getPlayerGear(Player player) { String playerName = player.getName(); - if (!playerGears.containsKey(playerName)) + if (!_playerGears.containsKey(playerName)) { PlayerGear gear = new PlayerGear(playerName); - playerGears.put(playerName, gear); + _playerGears.put(playerName, gear); } - return playerGears.get(playerName); + return _playerGears.get(playerName); } public CustomItem generateItem() { int attributeCount = _attributeWeights.generateRandom(); - boolean isLegendary = _itemWeights.generateRandom(); - boolean isArmour = _gearWeights.generateRandom(); + ItemType itemType = _typeWeights.generateRandom(); - // TODO: Generate custom item randomly using generated values above + System.out.println("Generating item of type " + itemType.toString() + " with attribute count of " + attributeCount); + CustomItem item = generateItem(itemType); + System.out.println("Generated item!"); + + if (itemType != ItemType.LEGENDARY) // Only non-legendaries have attributes + { + for (ItemAttribute attribute : generateAttributes(itemType, attributeCount)) + { + item.addAttribute(attribute); + } + // Add up to attributeCount attributes + } + + return item; + } + + private CustomItem generateItem(ItemType itemType) + { + switch(itemType) + { + case LEGENDARY: // Legendary weapon + Class legendaryClass = _legendaryWeights.generateRandom(); + System.out.println("Legendary: " + legendaryClass.getName()); + return instantiate(legendaryClass); + case WEAPON: // Sword or axe + return new CustomItem(_weaponTypes.generateRandom()); + case ARMOUR: // Helmet, chestplate, leggings, or boots + return new CustomItem(_armourTypes.generateRandom()); + case BOW: // A bow + return new CustomItem(Material.BOW); + default: + return null;// Never reached, yet required for compilation purposes. + } + } + + private Set generateAttributes(ItemType type, int count) + { + Set attributes = new HashSet(); - return null; + for (int i = 0; i < count; i++) + { + switch (type) + { + case ARMOUR: + attributes.add(instantiate(_armourAttributes.generateRandom())); + break; + case WEAPON: + attributes.add(instantiate(_weaponAttributes.generateRandom())); + break; + default: + break; + } + } + + return attributes; + } + + public void spawnItem(Location location) + { + CustomItem item = generateItem(); + location.getWorld().dropItem(location, item.toItemStack()); } public static CustomItem parseItem(ItemStack item) @@ -158,7 +286,7 @@ public class GearManager extends MiniPlugin implements IPacketHandler { if (i % 40 == 39) { - serialization += "\n"; + serialization += "\n"; // TODO: Remove this temporary fix to hiding player lore } serialization += tempSeri.charAt(i); @@ -167,6 +295,22 @@ public class GearManager extends MiniPlugin implements IPacketHandler return serialization; } + /** + * @param type - the class-type of the object to be instantiated. (must have zero-argument constructor) + * @return a newly instantiated instance of {@code type} class-type. Instantied with zero argument constructor. + */ + private static T instantiate(Class type) + { + try + { + return type.newInstance(); + } + catch (Exception e) + { + return null; + } + } + private static String getItemSerialization(ItemStack item) { if (item == null || item.getItemMeta() == null @@ -214,12 +358,11 @@ public class GearManager extends MiniPlugin implements IPacketHandler public static String serialize(CustomItem customItem) { - return _gson.toJson(customItem); + return _gson.toJson(customItem, CustomItem.class); } public static CustomItem deserialize(String serialization) { - System.out.println("Serialization: " + serialization); return _gson.fromJson(serialization, CustomItem.class); } @@ -241,7 +384,8 @@ public class GearManager extends MiniPlugin implements IPacketHandler System.out.println("Item slot packet!"); PacketPlayOutSetSlot slotPacket = (PacketPlayOutSetSlot) packet; - + // TODO: Modify spigot build so that slotPacket's itemstack lore can be modified + // to 'hide' json-encoded lore from players. } } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java index 521974557..d54b217d1 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java @@ -1,5 +1,7 @@ package mineplex.game.clans.items; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -50,21 +52,22 @@ public class ItemListener implements Listener * @param event */ @EventHandler - public void onPlayerAttack(EntityDamageByEntityEvent event) + public void onPlayerAttack(CustomDamageEvent event) { + Player damager = event.GetDamagerPlayer(true); + Player damagee = event.GetDamageePlayer(); + // Trigger custom gear effects for attacker - if (event.getDamager() instanceof Player) + if (damager != null) { - Player attacker = (Player) event.getDamager(); - PlayerGear attackerGear = getGear(attacker); + PlayerGear attackerGear = getGear(damager); attackerGear.onAttack(event); } // Trigger custom gear effects for defender - if (event.getEntity() instanceof Player) + if (damagee != null) { - Player defender = (Player) event.getEntity(); - PlayerGear defenderGear = getGear(defender); + PlayerGear defenderGear = getGear(damagee); defenderGear.onAttacked(event); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemType.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemType.java new file mode 100644 index 000000000..ed32a8115 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemType.java @@ -0,0 +1,18 @@ +package mineplex.game.clans.items; + +import com.google.common.collect.Sets; + +import mineplex.game.clans.items.generation.WeightSet; +import mineplex.game.clans.items.legendaries.AlligatorsTooth; +import mineplex.game.clans.items.legendaries.WindBlade; + +public enum ItemType +{ + LEGENDARY, + + ARMOUR, + + WEAPON, + + BOW; +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java index 1ae4319ba..25191f7b6 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java @@ -3,6 +3,9 @@ package mineplex.game.clans.items; import java.util.HashSet; import java.util.Set; +import mineplex.game.clans.items.legendaries.LegendaryItem; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -36,6 +39,30 @@ public class PlayerGear { _playerName = playerName; } + + /** + * Tick & update internal logic for the PlayerGear and required custom items that are + * equipped. + */ + public void update() + { + if (isOnline()) + { + CustomItem item = getWeapon(); + + if (item != null && item instanceof LegendaryItem) + { + LegendaryItem legendary = (LegendaryItem) item; + legendary.update(getPlayer()); + } + } + } + + public boolean isOnline() + { + Player player = getPlayer(); + return player != null && player.isOnline(); + } /** * @return the {@link Player} that owns this gear set. @@ -69,7 +96,7 @@ public class PlayerGear * Trigger on-attack events for the set of equipped {@link CustomItem}s in gear set. * @param event - the triggering on-attack event */ - public void onAttack(EntityDamageByEntityEvent event) + public void onAttack(CustomDamageEvent event) { for (CustomItem item : getGear()) { @@ -81,7 +108,7 @@ public class PlayerGear * Trigger attacked events for the set of equipped {@link CustomItem}s in gear set. * @param event - the triggering attacked event */ - public void onAttacked(EntityDamageByEntityEvent event) + public void onAttacked(CustomDamageEvent event) { for (CustomItem item : getGear()) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java index bf9443f7a..540918364 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java @@ -1,6 +1,7 @@ package mineplex.game.clans.items.attributes; import mineplex.game.clans.items.generation.ValueDistribution; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; @@ -30,12 +31,12 @@ public abstract class ItemAttribute // Implementation left to subclasses. } - public void onAttack(EntityDamageByEntityEvent event) + public void onAttack(CustomDamageEvent event) { // Implementation left to subclasses. } - public void onAttacked(EntityDamageByEntityEvent event) + public void onAttacked(CustomDamageEvent event) { // Implementation left to subclasses. } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java index 4e8f8dc1a..12e76c9a0 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java @@ -6,8 +6,7 @@ import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.game.clans.items.generation.ValueDistribution; public class LavaAttribute extends PercentReductionAttribute -{ - // TODO: Replace with your generators +{ private static ValueDistribution reductionGen = generateDistribution(0.2d, 1.0d); // Value generator for heal amount private static ReductionConfig lavaConfig = new ReductionConfig(DamageCause.FIRE, DamageCause.LAVA, DamageCause.FIRE_TICK); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java index 5c255a918..f3a4458a9 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java @@ -6,8 +6,7 @@ import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.game.clans.items.generation.ValueDistribution; public class PaddedAttribute extends FlatReductionAttribute -{ - // TODO: Replace with your generators +{ private static ValueDistribution reductionGen = generateDistribution(1.0d, 4.0d); private static ReductionConfig config = new ReductionConfig(DamageCause.FALL); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java index 8903beb8a..ec97366ec 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java @@ -9,7 +9,6 @@ import mineplex.game.clans.items.generation.ValueDistribution; // A.K.A Conquering for Armor public class ProtectionAttribute extends FlatReductionAttribute { - // TODO: Replace with your generators private static ValueDistribution reductionGen = generateDistribution(1.0d, 4.0d); private static ReductionConfig config = new ReductionConfig(EntityType.values()); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java index 897adb14b..e9227cadb 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java @@ -10,6 +10,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.game.clans.items.generation.ValueDistribution; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public abstract class ReductionAttribute extends ItemAttribute { @@ -22,18 +23,16 @@ public abstract class ReductionAttribute extends ItemAttribute } @Override - public void onAttacked(EntityDamageByEntityEvent event) + public void onAttacked(CustomDamageEvent event) { - DamageCause cause = event.getCause(); - Entity attacker = event.getDamager(); + DamageCause cause = event.GetCause(); + Entity attacker = event.GetDamagerEntity(true); if (_config.reducesDamage(cause, attacker)) { - double damage = event.getDamage(); + double damage = event.GetDamage(); double reduction = getDamageReduction(damage); - double reducedDamage = Math.max(0, damage - reduction); - - event.setDamage(reducedDamage); + event.AddMod("Reduction Armor", reduction); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java index 09cc76b99..36f385e73 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java @@ -6,7 +6,6 @@ import mineplex.game.clans.items.generation.ValueDistribution; public class ReinforcedAttribute extends FlatReductionAttribute { - // TODO: Replace with your generators private static ValueDistribution reductionGen = generateDistribution(0.5d, 1.0d); private static ReductionConfig config = new ReductionConfig(DamageCause.ENTITY_ATTACK); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java index 0618e473d..b1bcfffe7 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java @@ -7,7 +7,6 @@ import mineplex.game.clans.items.generation.ValueDistribution; public class SlantedAttribute extends FlatReductionAttribute { - // TODO: Replace with your generators private static ValueDistribution reductionGen = generateDistribution(0.5d, 1.5d); private static ReductionConfig config = new ReductionConfig(DamageCause.PROJECTILE); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java index c3b57c04b..1ab6a9c2b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java @@ -7,8 +7,7 @@ import org.bukkit.entity.Player; public class ConqueringAttribute extends DamageAttribute { - // TODO: Replace with your generators - private static ValueDistribution damageGen = generateDistribution(1.0d, 6.0d); // Value generator for heal amount + private static ValueDistribution damageGen = generateDistribution(1.0d, 6.0d); public ConqueringAttribute() { @@ -18,7 +17,7 @@ public class ConqueringAttribute extends DamageAttribute @Override public String getDisplayName() { - return "Conquering"; // TODO: Fill in name + return "Conquering"; } @Override diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java index 301008ca0..3848efeff 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java @@ -2,6 +2,7 @@ package mineplex.game.clans.items.attributes.weapon; import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.game.clans.items.generation.ValueDistribution; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import org.bukkit.entity.Entity; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -17,11 +18,11 @@ public abstract class DamageAttribute extends ItemAttribute } @Override - public void onAttack(EntityDamageByEntityEvent event) + public void onAttack(CustomDamageEvent event) { - if (grantBonusDamage(event.getEntity())) + if (grantBonusDamage(event.GetDamageeEntity())) { - event.setDamage(event.getDamage() + _bonusDamage); + event.AddMod("Damage Attribute", _bonusDamage); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java index c3b0f088d..61e48715d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java @@ -6,9 +6,8 @@ import org.bukkit.entity.Entity; public class FlamingAttribute extends AttackAttribute { - // TODO: Replace with your generators - private static ValueDistribution attackGen = generateDistribution(2, 4); // Value generator for heal amount - private static ValueDistribution fireGen = generateDistribution(60, 120); // Value generator for heal amount + private static ValueDistribution attackGen = generateDistribution(2, 4); + private static ValueDistribution fireGen = generateDistribution(60, 120); private int _fireDuration; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java index aa4484b4f..6109b9cee 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java @@ -2,6 +2,7 @@ package mineplex.game.clans.items.attributes.weapon; import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.game.clans.items.generation.ValueDistribution; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -44,13 +45,13 @@ public class FrostedAttribute extends ItemAttribute } @Override - public void onAttacked(EntityDamageByEntityEvent event) + public void onAttacked(CustomDamageEvent event) { - if (event.getDamager() instanceof Player) + Player damager = event.GetDamagerPlayer(true); + + if (damager != null) { - Player player = (Player) event.getDamager(); - - player.addPotionEffect(generateSlowEffect()); // Slow attacking player + damager.addPotionEffect(generateSlowEffect()); // Slow attacking player } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java index c694957cc..0c2cd3adf 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; public class HasteAttribute extends AttackAttribute { - // TODO: Replace with your generators - private static ValueDistribution attackGen = generateDistribution(2, 4); // Value generator for heal amount - private static ValueDistribution speedGen = generateDistribution(0, 2); // Value generator for heal amount - private static ValueDistribution durationGen = generateDistribution(60, 120); // Value generator for heal amount + private static ValueDistribution attackGen = generateDistribution(2, 4); + private static ValueDistribution speedGen = generateDistribution(0, 2); + private static ValueDistribution durationGen = generateDistribution(60, 120); private int _speedAmount; private int _speedDuration; @@ -29,7 +28,7 @@ public class HasteAttribute extends AttackAttribute @Override public String getDisplayName() { - return "Haste"; // TODO: Fill in name + return "Haste"; } @Override diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java index 0b9fcbc74..3794c8b0a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java @@ -7,8 +7,7 @@ import org.bukkit.util.Vector; public class JaggedAttribute extends AttackAttribute { - // TODO: Replace with your generators - private static ValueDistribution attackGen = generateDistribution(2, 4); // Value generator for heal amount + private static ValueDistribution attackGen = generateDistribution(2, 4); public JaggedAttribute() { @@ -18,7 +17,7 @@ public class JaggedAttribute extends AttackAttribute @Override public String getDisplayName() { - return "Jagged"; // TODO: Fill in name + return "Jagged"; } @Override diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java index 9413b79a6..48c2c285b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java @@ -6,8 +6,7 @@ import org.bukkit.entity.Entity; public class SharpAttribute extends DamageAttribute { - // TODO: Replace with your generators - private static ValueDistribution damageGen = generateDistribution(0.5d, 1.5d); // Value generator for heal amount\ + private static ValueDistribution damageGen = generateDistribution(0.5d, 1.5d); public SharpAttribute() { @@ -17,7 +16,7 @@ public class SharpAttribute extends DamageAttribute @Override public String getDisplayName() { - return "Sharp"; // TODO: Fill in name + return "Sharp"; } @Override diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java index 0bca99aaf..2cfe356fe 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java @@ -2,14 +2,14 @@ package mineplex.game.clans.items.attributes.weapon; import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.game.clans.items.generation.ValueDistribution; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; public class VampiricAttribute extends ItemAttribute { - // TODO: Replace with your generators - private static ValueDistribution healGen = generateDistribution(4, 12); // Value generator for heal amount + private static ValueDistribution healGen = generateDistribution(4, 12); private int _healPercent; @@ -21,7 +21,7 @@ public class VampiricAttribute extends ItemAttribute @Override public String getDisplayName() { - return "Vampiric"; // TODO: Fill in name + return "Vampiric"; } @Override @@ -31,17 +31,17 @@ public class VampiricAttribute extends ItemAttribute } @Override - public void onAttack(EntityDamageByEntityEvent event) + public void onAttack(CustomDamageEvent event) { - if (event.getDamager() instanceof Player) - { - Player attacker = (Player) event.getDamager(); - - double damage = event.getDamage(); - double healAmount = damage * (_healPercent / 100d); - double currentHealth = attacker.getHealth(); - attacker.setHealth(currentHealth + healAmount); - } + Player damager = event.GetDamagerPlayer(true); + + double damage = event.GetDamage(); + double healAmount = damage * (_healPercent / 100d); + heal(damager, healAmount); } + private void heal(Player player, double healAmount) + { + player.setHealth(player.getHealth() + healAmount); + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java index 3c22d4b79..7729093e2 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/commands/GearCommand.java @@ -8,6 +8,7 @@ import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.util.Vector; import mineplex.core.command.CommandBase; import mineplex.core.common.Rank; @@ -36,9 +37,13 @@ import mineplex.game.clans.items.legendaries.WindBlade; public class GearCommand extends CommandBase { + + private GearManager _gearManager; + public GearCommand(GearManager plugin) { super(plugin, Rank.ALL, "gear", "custom-gear"); + _gearManager = plugin; } @Override @@ -46,31 +51,16 @@ public class GearCommand extends CommandBase { UtilPlayer.message(caller, F.main("Gear", "Opening custom gear GUI!")); - if (caller.getItemInHand() != null && caller.getItemInHand().getType() != Material.AIR) + if (args == null || args.length == 0) { - ItemStack item = caller.getItemInHand(); - ItemMeta meta = item.getItemMeta(); - List lore = meta.getLore(); - lore.set(0, "Test"); - meta.setLore(lore); - item.setItemMeta(meta); - System.out.println("aaaaaaa"); - return; + Vector direction = caller.getLocation().getDirection().normalize(); + _gearManager.spawnItem(caller.getEyeLocation().add(direction)); } else { - LegendaryItem legendary = new WindBlade(); - caller.setItemInHand(legendary.toItemStack(1)); - return; + Vector direction = caller.getLocation().getDirection().normalize(); + _gearManager.spawnItem(caller.getEyeLocation().add(direction)); } - - /*CustomItem customItem = new CustomItem(); - customItem.setPrefix(new FrostedAttribute()); - customItem.setSuperPrefix(new SharpAttribute()); - customItem.setSuffix(new FlamingAttribute()); - ItemStack sword = customItem.toItemStack(1); - caller.setItemInHand(sword);*/ - // TODO: Open custom gear GUI here } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/WeightSet.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/WeightSet.java index 80c402c84..68ee5f5ab 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/WeightSet.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/WeightSet.java @@ -1,5 +1,6 @@ package mineplex.game.clans.items.generation; +import java.util.Collection; import java.util.HashSet; import java.util.Random; import java.util.Set; @@ -11,10 +12,15 @@ public class WeightSet private Set> _weights; + private WeightSet() + { + _weights = new HashSet>(); + } + @SafeVarargs public WeightSet(Weight... weights) { - _weights = new HashSet>(); + this(); for (Weight weight : weights) { @@ -22,6 +28,27 @@ public class WeightSet } } + @SafeVarargs + public WeightSet(T... elements) + { + this(); + + for (T element : elements) + { + _weights.add(new Weight(1, element)); // Constant weight of 1 means all elements are equally likely + } + } + + public WeightSet(Collection elements) + { + this(); + + for (T element : elements) + { + _weights.add(new Weight(1, element)); // Constant weight of 1 means all elements are equally likely + } + } + private int getTotalWeight() { int total = 0; @@ -52,4 +79,16 @@ public class WeightSet // Should never reach here. return null; } + + public Set elements() + { + Set elements = new HashSet(); + + for (Weight weight : _weights) + { + elements.add(weight.getValue()); + } + + return elements; + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java index 3ce29f6a6..e43868f99 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java @@ -2,6 +2,7 @@ package mineplex.game.clans.items.legendaries; import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.game.clans.items.generation.ValueDistribution; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -35,12 +36,12 @@ public class AlligatorsTooth extends LegendaryItem } @Override - public void onAttack(EntityDamageByEntityEvent event, Player wielder) + public void onAttack(CustomDamageEvent event, Player wielder) { if (isInWater(wielder)) { - double newDamage = event.getDamage() + _damageBonus; - event.setDamage(newDamage); + event.AddMod("Alligators Tooth", _damageBonus); + event.AddKnockback("Alligators Tooth", 0.5d); } super.onAttack(event); @@ -55,6 +56,6 @@ public class AlligatorsTooth extends LegendaryItem private boolean isInWater(Player player) { - return true; // TODO: Determine whether player is submerged in water + return player.getLocation().getBlock().isLiquid(); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java index 9df21fdee..2835846cb 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java @@ -3,6 +3,8 @@ package mineplex.game.clans.items.legendaries; import java.util.HashSet; import java.util.Set; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -27,15 +29,11 @@ public class GiantsBroadsword extends LegendaryItem } @Override - public void onAttack(EntityDamageByEntityEvent event, Player wielder) + public void onAttack(CustomDamageEvent event, Player wielder) { - // TODO: Buff knockback and damage values (What are specific values?) - // Chiss: Make 'em up - double bonusDamage = 2.0d; // Too much? - event.setDamage(event.getDamage() + bonusDamage); - - // TODO: Apply knockback bonus using previous Clans Custom combat events + event.AddMod("Giants Bonus", bonusDamage); + event.AddKnockback("Giants Sword", 0.5d); } private void buffPlayer(Player player) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java index b7584c0ef..92e103bb3 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java @@ -1,7 +1,9 @@ package mineplex.game.clans.items.legendaries; import mineplex.game.clans.items.generation.ValueDistribution; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.potion.PotionEffect; @@ -9,16 +11,22 @@ import org.bukkit.potion.PotionEffectType; public class HyperBlade extends LegendaryItem { + public static final long ATTACK_RATE_DURATION = 100; private static ValueDistribution amountGen = generateDistribution(0, 3); // [1, 4] speed amount private static ValueDistribution durationGen = generateDistribution(80, 320); // [4, 16] seconds speed duration private int _speedAmount; private int _speedDuration; + private long _lastAttack; + public long timeSinceLastAttack() { return System.currentTimeMillis() - _lastAttack; } + public HyperBlade() { + super("Hyper Blade", "Increased attack speed!", Material.STICK); _speedAmount = amountGen.generateIntValue(); _speedDuration = durationGen.generateIntValue(); + _lastAttack = 0; } @Override @@ -31,15 +39,20 @@ public class HyperBlade extends LegendaryItem } @Override - public void onAttack(EntityDamageByEntityEvent event, Player wielder) + public void onAttack(CustomDamageEvent event, Player wielder) { - // TODO: Reduce after-attack cooldown against players to 100ms (instead of 400ms) + if (timeSinceLastAttack() >= ATTACK_RATE_DURATION) + { + event.SetIgnoreRate(true); + log("Ignoring rate!"); + } } private void buffPlayer(Player wielder) { // Give player speed buff - wielder.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, _speedAmount, _speedDuration)); + wielder.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, _speedDuration, _speedAmount)); + log("Buffing"); } private boolean canBuff() diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java index 60db32a47..3257e5811 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java @@ -8,6 +8,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import mineplex.game.clans.items.CustomItem; import mineplex.game.clans.items.generation.ValueDistribution; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class LegendaryItem extends CustomItem { @@ -17,12 +18,6 @@ public class LegendaryItem extends CustomItem private long _lastBlock; // Timestamp of last block from wielder public long timeSinceLastBlock() { return System.currentTimeMillis() - _lastBlock; } - - public LegendaryItem() - { - this(null, null, null); // TODO: Never used, just to skip base implementation for testing. - } - public LegendaryItem(String name, String description, Material material) { super(name, description, material); @@ -35,19 +30,17 @@ public class LegendaryItem extends CustomItem // Leave implementation to potential subtypes } - public void onAttack(EntityDamageByEntityEvent event, Player wielder) + public void onAttack(CustomDamageEvent event, Player wielder) { // Leave implementation to potential subtypes } @Override - public void onAttack(EntityDamageByEntityEvent event) + public void onAttack(CustomDamageEvent event) { - if (event.getDamager() instanceof Player) + if (event.GetDamagerPlayer(true) != null) { - Player wielder = (Player) event.getDamager(); - - onAttack(event, wielder); + onAttack(event, event.GetDamagerPlayer(true)); } super.onAttack(event); @@ -70,6 +63,11 @@ public class LegendaryItem extends CustomItem return timeSinceLastBlock() <= BLOCK_COOLDOWN; } + protected void log(String message) + { + System.out.println("[Custom Item - " + _displayName + "] " + message); + } + /** * @param minValue - the minimum value for attribute value range * @param maxValue - the maximum value for attribute value range diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java index 5f7fca155..7934f5de2 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java @@ -1,14 +1,24 @@ package mineplex.game.clans.items.legendaries; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilMath; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.util.Vector; public class MagneticBlade extends LegendaryItem { + public static final double PULL_RANGE = 10d; + public MagneticBlade() { - + super("Magnetic Blade", "Pull enemies closer with special abilities!", Material.STICK); } @Override @@ -21,14 +31,32 @@ public class MagneticBlade extends LegendaryItem } @Override - public void onAttack(EntityDamageByEntityEvent event, Player wielder) + public void onAttack(CustomDamageEvent event, Player wielder) { + event.AddKnockback("Magnetic Blade", -0.5d); // Pull players with negative knockback + log("Negative knockback!"); // TODO: Apply negative knockback with [???] velocity/power to victims of attacks } private void pullPlayers(Player player) - { - // TODO: Grab all players in line of sight and pull towards player with ??? velocity + { + log("Pulling players!"); + Vector direction = player.getLocation().getDirection().normalize().multiply(10.0d); + Location target = player.getEyeLocation().add(direction); + + double targetDistance = player.getLocation().distance(target); + + for (Player other : player.getWorld().getPlayers()) + { + double otherDistance = player.getLocation().distance(other.getLocation()); + double otherTargetDistance = target.distance(other.getLocation()); + + // If player is in-front of us and within pulling range + if (otherTargetDistance < targetDistance && otherDistance <= PULL_RANGE) + { + UtilAction.velocity(other, UtilAlg.getTrajectory(other, player), 0.3, false, 0, 0, 1, true); + } + } } private boolean canPull() diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java index 67c00cfe3..6bc437489 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java @@ -3,6 +3,7 @@ package mineplex.game.clans.items.legendaries; import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.game.clans.items.generation.ValueDistribution; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -15,6 +16,7 @@ public class MeteorBow extends LegendaryItem public MeteorBow() { + super("Meteor Bow", "Shoot explosive arrows!", Material.BOW); _flightTime = 0; } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java index c8d38f700..47fd1bee3 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java @@ -12,7 +12,7 @@ import org.bukkit.util.Vector; public class WindBlade extends LegendaryItem { - public static final double FLIGHT_VELOCITY = 0.25d; + public static final double FLIGHT_VELOCITY = 0.75d; public static final int MAX_FLIGHT_TIME = 80; // Max flight of 80 ticks private long _flightTime; // Time (in ticks) since last touching ground and flying diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/CustomDamageEvent.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/CustomDamageEvent.java index e7b460fe3..9b008c6b1 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/CustomDamageEvent.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/CustomDamageEvent.java @@ -91,6 +91,10 @@ public class CustomDamageEvent extends Event implements Cancellable _damageMult.add(new DamageChange(source, reason, mod, useAttackName)); } + public void AddMod(String source, double mod) + { + AddMod(source, new String(), mod, false); + } public void AddMod(String source, String reason, double mod, boolean useAttackName) { diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java index 33dc2239e..afb7f04a7 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java @@ -215,25 +215,29 @@ public final class RuntimeTypeAdapterFactory implements TypeAdapterFactory { } @Override public void write(JsonWriter out, R value) throws IOException { - Class srcType = value.getClass(); - String label = subtypeToLabel.get(srcType); - @SuppressWarnings("unchecked") // registration requires that subtype extends T - TypeAdapter delegate = (TypeAdapter) subtypeToDelegate.get(srcType); - if (delegate == null) { - throw new JsonParseException("cannot serialize " + srcType.getName() - + "; did you forget to register a subtype?"); - } - JsonObject jsonObject = delegate.toJsonTree(value).getAsJsonObject(); - if (jsonObject.has(typeFieldName)) { - throw new JsonParseException("cannot serialize " + srcType.getName() - + " because it already defines a field named " + typeFieldName); - } - JsonObject clone = new JsonObject(); - clone.add(typeFieldName, new JsonPrimitive(label)); - for (Map.Entry e : jsonObject.entrySet()) { - clone.add(e.getKey(), e.getValue()); - } - Streams.write(clone, out); + if(value!=null) { + Class srcType = value.getClass(); + String label = subtypeToLabel.get(srcType); + @SuppressWarnings("unchecked") // registration requires that subtype extends T + TypeAdapter delegate = (TypeAdapter) subtypeToDelegate.get(srcType); + if (delegate == null) { + throw new JsonParseException("cannot serialize " + srcType.getName() + + "; did you forget to register a subtype?"); + } + JsonObject jsonObject = delegate.toJsonTree(value).getAsJsonObject(); + if (jsonObject.has(typeFieldName)) { + throw new JsonParseException("cannot serialize " + srcType.getName() + + " because it already defines a field named " + typeFieldName); + } + JsonObject clone = new JsonObject(); + clone.add(typeFieldName, new JsonPrimitive(label)); + for (Map.Entry e : jsonObject.entrySet()) { + clone.add(e.getKey(), e.getValue()); + } + Streams.write(clone, out); + }else{ + out.nullValue(); + } } }; } From 155b078c49864138671cbeaf5fcdb4b5dac7ede3 Mon Sep 17 00:00:00 2001 From: Ty Sayers Date: Mon, 1 Jun 2015 15:51:22 -0400 Subject: [PATCH 103/104] Update spigot version to Shaun's changed. Add separate spawn locations at (200,0) and (-200,0) on the map as well as safe-zone regions surrounding spawns. Temporary halt energy deduction until energy shop is enabled. Fixed issues related to field zones being claimable/breakable, as well as borderlands. Define claimable areas. Add GoldToken item for storing currency into physical items. Add gold management for checking economic status for players. --- Plugins/Libraries/craftbukkit.jar | Bin 20822058 -> 20822067 bytes .../src/mineplex/core/donation/Donor.java | 3 +- .../src/mineplex/game/clans/Clans.java | 6 +- .../game/clans/clans/ClanEnergyManager.java | 2 +- .../mineplex/game/clans/clans/ClanRole.java | 1 + .../game/clans/clans/ClansManager.java | 26 ++++ .../game/clans/clans/ClansUtility.java | 3 +- .../clans/clans/commands/ClansCommand.java | 11 +- .../game/clans/clans/war/WarManager.java | 1 + .../game/clans/economy/GoldManager.java | 106 ++++++++++++++++ .../game/clans/fields/FieldBlock.java | 21 +-- .../mineplex/game/clans/items/CustomItem.java | 25 +++- .../game/clans/items/GearManager.java | 66 ++++------ .../game/clans/items/economy/GoldToken.java | 25 ++++ .../clans/shop/building/BuildingShop.java | 10 -- .../src/mineplex/game/clans/spawn/Spawn.java | 120 ++++++++++++++++++ 16 files changed, 357 insertions(+), 69 deletions(-) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/economy/GoldToken.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java diff --git a/Plugins/Libraries/craftbukkit.jar b/Plugins/Libraries/craftbukkit.jar index e591860d5262f42c6018f260ea69038f47ce2955..74d42a85bb11ca3207b7fa224f2b15957e045a08 100644 GIT binary patch delta 181707 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%0DfZ5eB)loX9zgHcy+{BA)G z>ivD`5oBoTBqJ*ky5_7xnnB0S`^vlUd1)zXOPIH|Iz$s@wUbMTRCjvG&nTAM`!uZi zdL+H4w+j?0a!HCe@3t@ni$n{lPd1Mt_~~LhjO$0x1+(tlt}By)jgu-W-E~G&x_hp$ z!==?8%TAg(d@tdDGZc)R^Ahf3Xh>3QovstvX`$F$x_^P{#Ll@?Cr*N3VoNqS5UP)* z(edKV4$8c7p?Ip^C4$j}d2UIu9jkl-F8Tt@kWstwa54rv7w1F}E}S*{=6?vy*zJ7| z%GB{R(>;utuH6(jA5KwYB3|}K)Y8@yP)iy6(MS>*P&Q{tCmodLiPUT!zwkdwS8)zd zbC&$O1Jq|ysMdvzy=GKqBvIR#aO+cDVV+sr&s*dzqdYtT5^jpzF_5Z=>&Zwb7xny1 z`W6_U@W7$;#6S2SdTW;auY^!P$K(Ju2h1S8-!a|UQy Ot67al=psCzJe?XzM|Vy!kdK}aBpz{%1Cys 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 delta 182863 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
4Nzv`&(`5Bjb*3waU07TlIPl1!ZR9 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
jHOXA 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�M+CB!Xcf}j)Y%#Zn^`Zcxi`duo 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

a*|CLRufex*{crgNuFas5-IYb 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 Rk5xlUy)`_siuTr9{|D2}^-}-< diff --git a/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java index e984d3432..0345fbf59 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java @@ -145,7 +145,8 @@ public class Donor public void addGold(int amount) { - _gold += amount; + _gold = Math.max(0, _gold + amount); + } public List getCoinTransactions() diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index 24d34157c..b27796e68 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -1,5 +1,6 @@ package mineplex.game.clans; +import org.bukkit.Location; import org.bukkit.plugin.java.JavaPlugin; import net.minecraft.server.v1_7_R4.MinecraftServer; @@ -68,7 +69,10 @@ public class Clans extends JavaPlugin PreferencesManager preferenceManager = new PreferencesManager(this, _clientManager, _donationManager); ServerStatusManager serverStatusManager = new ServerStatusManager(this, _clientManager, new LagMeter(this, _clientManager)); - new Spawn(this, serverStatusManager.getCurrentServerName()); + + // TODO: Add spawn locations to a configuration file of some sort? + Spawn spawn = new Spawn(this, serverStatusManager.getCurrentServerName()); + Teleport teleport = new Teleport(this); Portal portal = new Portal(this, _clientManager, serverStatusManager.getCurrentServerName()); new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion()); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanEnergyManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanEnergyManager.java index aa14e48e6..95524615c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanEnergyManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanEnergyManager.java @@ -32,7 +32,7 @@ public class ClanEnergyManager extends MiniPlugin implements Runnable for (final ClanInfo clanInfo : _clansManager.getClanMap().values()) { - if (clanInfo.isAdmin()) + if (clanInfo.isAdmin() || true) // TODO: Remove || true and implement ability to purchase Energy continue; int energyPerMinute = clanInfo.getEnergyCostPerMinute(); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java index 83901e238..3c70a4d80 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java @@ -4,3 +4,4 @@ public enum ClanRole { NONE, RECRUIT, MEMBER, ADMIN, LEADER } + diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 96191b126..65eb96461 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -3,6 +3,7 @@ package mineplex.game.clans.clans; import java.util.HashSet; import java.util.TimeZone; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -10,6 +11,7 @@ import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.CustomTagFix; @@ -43,6 +45,7 @@ import mineplex.game.clans.clans.repository.tokens.ClanToken; import mineplex.game.clans.clans.war.WarManager; import mineplex.game.clans.fields.Field; import mineplex.game.clans.gameplay.Gameplay; +import mineplex.game.clans.spawn.Spawn; import mineplex.minecraft.game.classcombat.Class.ClassManager; import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken; import mineplex.minecraft.game.classcombat.Condition.SkillConditionManager; @@ -59,6 +62,9 @@ import mineplex.minecraft.game.core.mechanics.Weapon; public class ClansManager extends MiniClientPlugin implements IRelation { + public static final int FIELD_RADIUS = 128; + public static final int CLAIMABLE_RADIUS = 800; + public static final int WORLD_RADIUS = 1200; private static final TimeZone TIME_ZONE = TimeZone.getDefault(); private String _serverName; @@ -90,6 +96,8 @@ public class ClansManager extends MiniClientPlugin implements IRelat private NautHashMap _claimMap = new NautHashMap(); private NautHashMap _unclaimMap = new NautHashMap(); + // Spawn area + public String[] denyClan = new String[] { "neut", "neutral", "sethome", "promote", "demote", "admin", "help", "create", "disband", "delete", "invite", "join", "kick", "ally", "trust", "claim", "unclaim", "territory", "home"}; @@ -121,6 +129,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat Creature creature = new Creature(plugin); new Field(plugin, creature, _condition, energy, serverName); + new Spawn(plugin); DamageManager damageManager = new DamageManager(plugin, _combatManager, new NpcManager(plugin, creature), disguiseManager); @@ -184,6 +193,23 @@ public class ClansManager extends MiniClientPlugin implements IRelat return _clanMemberMap; } + public static boolean isClaimable(Location location) + { + int x = Math.abs(location.getBlockX()); + int z = Math.abs(location.getBlockZ()); + + return (x > FIELD_RADIUS || z > FIELD_RADIUS) + && (x <= CLAIMABLE_RADIUS && z <= CLAIMABLE_RADIUS); + } + + public static boolean isFields(Location location) + { + int x = Math.abs(location.getBlockX()); + int z = Math.abs(location.getBlockZ()); + + return x <= FIELD_RADIUS && z <= FIELD_RADIUS; + } + public ClanInfo getClan(Player player) { return _clanMemberMap.get(player.getName()); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java index d6fa99f06..2b0272a6f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java @@ -537,8 +537,9 @@ public class ClansUtility return true; } + public boolean isBorderlands(Location loc) { - return (Math.abs(loc.getX()) > 400 || Math.abs(loc.getZ()) > 400); + return Math.abs(loc.getBlockX()) > ClansManager.CLAIMABLE_RADIUS || Math.abs(loc.getBlockZ()) > ClansManager.CLAIMABLE_RADIUS; } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java index bc5ee1494..11bed4f18 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java @@ -25,9 +25,13 @@ import mineplex.game.clans.clans.ClientClan; public class ClansCommand extends CommandBase { + private ClansManager _manager; + public ClansCommand(ClansManager plugin) { super(plugin, Rank.ALL, "c", "clans", "f", "factions"); + + _manager = plugin; } @Override @@ -784,12 +788,9 @@ public class ClansCommand extends CommandBase return; } - if (caller.getLocation().getChunk().getX() < -24 || - caller.getLocation().getChunk().getX() > 23 || - caller.getLocation().getChunk().getZ() < -24 || - caller.getLocation().getChunk().getZ() > 23) + if (!ClansManager.isClaimable(caller.getLocation())) { - UtilPlayer.message(caller, F.main("Clans", "You cannot claim Territory this far away.")); + UtilPlayer.message(caller, F.main("Clans", "You cannot claim territory at this location!")); return; } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java index 1d5437992..849f20a5f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java @@ -105,6 +105,7 @@ public class WarManager extends MiniPlugin { Player player = event.getEntity(); Player killer = player.getKiller(); + if (killer == null) return; // Wasn't killed by player ClanInfo playerClan = _clansManager.getClan(player); ClanInfo killerClan = _clansManager.getClan(killer); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java new file mode 100644 index 000000000..3517848cd --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java @@ -0,0 +1,106 @@ +package mineplex.game.clans.economy; + +import java.util.Random; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.plugin.java.JavaPlugin; + +import mineplex.core.MiniPlugin; +import mineplex.core.common.CurrencyType; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.creature.Creature; +import mineplex.core.donation.DonationManager; +import mineplex.core.donation.Donor; +import mineplex.core.energy.Energy; +import mineplex.game.clans.Clans; +import mineplex.game.clans.fields.repository.FieldRepository; +import mineplex.game.clans.items.generation.WeightSet; +import mineplex.minecraft.game.core.condition.ConditionFactory; +import mineplex.minecraft.game.core.condition.ConditionManager; + +public class GoldManager extends MiniPlugin +{ + public static final double DEATH_TAX = 0.04d; // Percentage of gold lost on death + + private static GoldManager _instance; + public static GoldManager getInstance() { return _instance; } + + private DonationManager _donationManager; + + public GoldManager(JavaPlugin plugin, DonationManager donationManager) + { + super("Clans Gold", plugin); + + _instance = this; + _donationManager = donationManager; + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent event) + { + Player player = event.getEntity(); + Player killer = player.getKiller(); + + int gold = getGold(player); + int droppedGold = (int) (gold * DEATH_TAX); + + if (droppedGold > 0) + { + deductGold(player, droppedGold); + notify(player, String.format("You dropped %d gold on your death!", droppedGold)); + + if (killer != null) + { + addGold(killer, droppedGold); + notify(killer, String.format("You looted %d gold off of %s's corpse!", droppedGold, player.getName())); + } + } + } + + @EventHandler + public void playerCmd(PlayerCommandPreprocessEvent event) + { + if (event.getMessage().startsWith("/gold")) + { + notify(event.getPlayer(), "Your Balance is " + C.cYellow + getGold(event.getPlayer()) + "g"); + event.setCancelled(true); + } + } + + public int getGold(Player player) + { + return getDonor(player).getGold(); + } + + public void addGold(Player player, int amount) + { + getDonor(player).addGold(amount); + } + + public void deductGold(Player player, int amount) + { + addGold(player, -amount); + } + + private Donor getDonor(Player player) + { + return _donationManager.Get(player.getName()); + } + + private void notify(Player player, String message) + { + UtilPlayer.message(player, F.main("Gold", message)); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldBlock.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldBlock.java index aa98cb5d2..a9fc37918 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldBlock.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldBlock.java @@ -26,6 +26,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.energy.Energy; +import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.fields.commands.FieldBlockCommand; import mineplex.game.clans.fields.commands.FieldOreCommand; import mineplex.game.clans.fields.repository.FieldBlockToken; @@ -206,17 +207,19 @@ public class FieldBlock extends MiniPlugin event.setCancelled(true); } - @EventHandler(priority = EventPriority.LOWEST) + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void BlockBreak(BlockBreakEvent event) - { - if (event.isCancelled()) - return; + { + if (ClansManager.isFields(event.getBlock().getLocation())) + { + event.setCancelled(true); // Cancel all block breaks in fields. Handle custom breaking for FieldBlocks and Ores. - FieldBlockData fieldBlock = getFieldBlock(event.getBlock()); - if (fieldBlock == null) return; - - fieldBlock.handleMined(event.getPlayer()); - event.setCancelled(true); + FieldBlockData fieldBlock = getFieldBlock(event.getBlock()); + if (fieldBlock != null) + { + fieldBlock.handleMined(event.getPlayer()); + } + } } @EventHandler diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java index 7933da3ea..8840581ea 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java @@ -50,7 +50,7 @@ public class CustomItem public CustomItem(Material material) { - this(material.toString(), null, material); // TODO: Prettify item materal name + this(prettifyName(material), null, material); } /** @@ -79,15 +79,20 @@ public class CustomItem return display; } + public String getDescription() + { + return _description; + } + public List getLore() { String serialization = GearManager.getItemSerialization(this); List lore = new ArrayList(); - if (_description != null) + if (getDescription() != null) { - lore.add(_description); + lore.add(getDescription()); } // Display attribute descriptions and stats in lore @@ -204,4 +209,18 @@ public class CustomItem _suffix = attribute; } } + + public static String prettifyName(Material material) + { + String name = ""; + String[] words = material.toString().split("_"); + + for (String word : words) + { + word = word.toLowerCase(); + name += word.substring(0, 1).toUpperCase() + word.substring(1) + " "; + } + + return name; + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java index b3979bee9..2d809d9b4 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java @@ -38,6 +38,7 @@ import net.minecraft.util.com.google.common.collect.Sets; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -279,20 +280,9 @@ public class GearManager extends MiniPlugin implements IPacketHandler, Runnable public static String getItemSerialization(CustomItem customItem) { - String tempSeri = serialize(customItem); - String serialization = ITEM_SERIALIZATION_TAG; + String serialization = serialize(customItem); - for (int i = 0; i < tempSeri.length(); i++) - { - if (i % 40 == 39) - { - serialization += "\n"; // TODO: Remove this temporary fix to hiding player lore - } - - serialization += tempSeri.charAt(i); - } - - return serialization; + return ITEM_SERIALIZATION_TAG + serialization; } /** @@ -318,7 +308,7 @@ public class GearManager extends MiniPlugin implements IPacketHandler, Runnable ItemMeta meta = item.getItemMeta(); - /*for (String lore : meta.getLore()) + for (String lore : meta.getLore()) { if (lore.startsWith(ITEM_SERIALIZATION_TAG)) // Found serialization lore-line { @@ -327,30 +317,6 @@ public class GearManager extends MiniPlugin implements IPacketHandler, Runnable return serialization; } - }*/ - - // TODO: Implement packet intercepting to hide json encoded lore - List lore = meta.getLore(); - boolean serialized = false; - String serialization = ""; - for (int i = 0; i < lore.size(); i++) - { - String line = lore.get(i); - - if (line.startsWith(ITEM_SERIALIZATION_TAG)) - { - serialized = true; - serialization += line.substring(ITEM_SERIALIZATION_TAG.length()); - } - else if (serialized) - { - serialization += line; - } - } - - if (serialized) - { - return serialization; } return null; // Unable to find any serialized lore lines, hence not a CustomItem. @@ -384,6 +350,30 @@ public class GearManager extends MiniPlugin implements IPacketHandler, Runnable System.out.println("Item slot packet!"); PacketPlayOutSetSlot slotPacket = (PacketPlayOutSetSlot) packet; + net.minecraft.server.v1_7_R4.ItemStack original = slotPacket.c; + CraftItemStack originalItem = CraftItemStack.asCraftMirror(original); + ItemMeta originalMeta = originalItem.getItemMeta(); + if (originalMeta == null || originalMeta.getLore() == null) return; // No need to modify item packets with no lore + + List lore = new ArrayList(); + + for (String line : originalMeta.getLore()) + { + if (!line.startsWith(ITEM_SERIALIZATION_TAG)) // Remove serialization lines from out-going lore + { + lore.add(line); + } + } + + net.minecraft.server.v1_7_R4.ItemStack newItem = CraftItemStack.asNMSCopy(originalItem); + CraftItemStack newCopy = CraftItemStack.asCraftMirror(newItem); + ItemMeta newMeta = newCopy.getItemMeta(); + newMeta.setLore(lore); + newCopy.setItemMeta(newMeta); + //slotPacket.c = newItem; + //CraftItemStack.setItemMeta(slotPacket.c, meta); + + System.out.println("Successfully intercepted item packet! " + CraftItemStack.getItemMeta(original).getLore().size() + " -- " + CraftItemStack.getItemMeta(newItem).getLore().size()); // TODO: Modify spigot build so that slotPacket's itemstack lore can be modified // to 'hide' json-encoded lore from players. } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/economy/GoldToken.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/economy/GoldToken.java new file mode 100644 index 000000000..1f8fff16d --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/economy/GoldToken.java @@ -0,0 +1,25 @@ +package mineplex.game.clans.items.economy; + +import org.bukkit.Material; + +import mineplex.game.clans.items.CustomItem;; + +public class GoldToken extends CustomItem +{ + + private int _goldValue; + public int getGoldValue() { return _goldValue; } + + public GoldToken(int goldValue) + { + super("Gold Token", null, Material.GOLD_INGOT); + + _goldValue = goldValue; + } + + @Override + public String getDescription() + { + return String.format("A gold token worth %s gold coins.", _goldValue); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/building/BuildingShop.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/building/BuildingShop.java index f39503c57..84f1d0e92 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/building/BuildingShop.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/building/BuildingShop.java @@ -24,14 +24,4 @@ public class BuildingShop extends ShopBase { return new BuildingPage(getPlugin(), this, getClientManager(), getDonationManager(), player); } - - @EventHandler - public void playerCmd(PlayerCommandPreprocessEvent event) - { - if (event.getMessage().startsWith("/gold")) - { - UtilPlayer.message(event.getPlayer(), F.main("Gold", "Your Balance is " + C.cYellow + getDonationManager().Get(event.getPlayer().getName()).getGold() + "g")); - event.setCancelled(true); - } - } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java new file mode 100644 index 000000000..15b8c3f33 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java @@ -0,0 +1,120 @@ +package mineplex.game.clans.spawn; + +import java.util.Random; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.plugin.java.JavaPlugin; + +import mineplex.core.MiniPlugin; +import mineplex.core.creature.Creature; +import mineplex.core.energy.Energy; +import mineplex.game.clans.fields.repository.FieldRepository; +import mineplex.game.clans.items.generation.WeightSet; +import mineplex.minecraft.game.core.condition.ConditionFactory; +import mineplex.minecraft.game.core.condition.ConditionManager; + +public class Spawn extends MiniPlugin +{ + public static final int SPAWN_RADIUS = 32; + + private static Spawn _instance; + public static Spawn getInstance() { return _instance; } + + private WeightSet _spawns; + + public Spawn(JavaPlugin plugin) + { + super("Clan Spawn Zones", plugin); + + _instance = this; + _spawns = new WeightSet(new Location(null, -200, 107, 0), new Location(null, 200, 107, 0)); + } + + @EventHandler + public void onRespawn(PlayerRespawnEvent event) + { + System.out.println("On respawn"); + event.setRespawnLocation(getSpawnLocation()); + } + + @EventHandler + public void onBlockBreak(BlockBreakEvent event) + { + if (isInSpawn(event.getBlock().getLocation())) + { + + } + else if (isInSpawn(event.getPlayer())) + { + + } + } + + @EventHandler + public void onPlayerAttacked(EntityDamageByEntityEvent event) + { + Entity defender = event.getEntity(); + + if (defender instanceof Player) + { + Player player = (Player) defender; + + if (isInSpawn(player) && !isCombatTagged(player)) + { + event.setCancelled(true); + } + } + } + + public World getSpawnWorld() + { + return Bukkit.getWorld("world"); + } + + public Location getSpawnLocation() + { + Location spawn = _spawns.generateRandom().clone(); + spawn.setWorld(getSpawnWorld()); + return spawn; + } + + public boolean isInSpawn(Location location) + { + for(Location spawn : _spawns.elements()) + { + int xOffset = Math.abs(location.getBlockX() - spawn.getBlockX()); + int zOffset = Math.abs(location.getBlockZ() - spawn.getBlockZ()); + + if (xOffset <= SPAWN_RADIUS + && zOffset <= SPAWN_RADIUS) + { + return true; + } + } + + return false; + } + + public boolean isInSpawn(Player player) + { + return isInSpawn(player.getLocation()); + } + + private boolean isCombatTagged(Player player) + { + return false; // TODO: Check for implemented combat tagging? + } + + private void notify(Player player, String message) + { + + } +} From 1fa919e9546d8e1c19903119af845741031bf6dd Mon Sep 17 00:00:00 2001 From: Ty Sayers Date: Tue, 2 Jun 2015 20:01:42 -0400 Subject: [PATCH 104/104] Finish GoldToken integration for cashing in. Re-implement fixed hidden JSON lore encoding. Fix damage reduction attributes where entity types weren't being properly initialized. Prevent players from breaking blocks in temporary Spawn regions. --- .../src/mineplex/game/clans/economy/GoldManager.java | 8 ++++++++ .../game/clans/gameplay/safelog/LoggingManager.java | 2 +- .../src/mineplex/game/clans/items/GearManager.java | 10 ++++------ .../items/attributes/armor/ReductionAttribute.java | 5 +++++ .../clans/items/attributes/armor/ReductionConfig.java | 2 +- .../clans/items/attributes/weapon/AttackAttribute.java | 8 +++++--- .../src/mineplex/game/clans/shop/PvpShopButton.java | 1 + .../src/mineplex/game/clans/spawn/Spawn.java | 4 ++-- .../serialization/RuntimeTypeAdapterFactory.java | 1 + 9 files changed, 28 insertions(+), 13 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java index 3517848cd..2268a2034 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java @@ -15,6 +15,7 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.plugin.java.JavaPlugin; +import mineplex.game.clans.items.economy.GoldToken; import mineplex.core.MiniPlugin; import mineplex.core.common.CurrencyType; import mineplex.core.common.util.C; @@ -93,6 +94,13 @@ public class GoldManager extends MiniPlugin { addGold(player, -amount); } + + public void cashIn(Player player, GoldToken token) + { + int value = token.getGoldValue(); + addGold(player, value); + notify(player, String.format("You have cashed in a gold token worth %dg!", value)); + } private Donor getDonor(Player player) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LoggingManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LoggingManager.java index 52ba6fc3c..c2b1601cf 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LoggingManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/LoggingManager.java @@ -67,7 +67,7 @@ public class LoggingManager extends MiniPlugin public static final long REJOIN_TIME = 60000; //Track Offline Players - private HashMap _logouts = new HashMap(); + private HashMap _logouts; public LoggingManager(JavaPlugin plugin) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java index 2d809d9b4..5e322196f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java @@ -87,11 +87,11 @@ public class GearManager extends MiniPlugin implements IPacketHandler, Runnable _playerGears = new HashMap(); // TODO: Introduce configurable non-hardcoded values for generation weights? - _attributeWeights = new WeightSet(new Weight(3, 3), new Weight(20, 2), new Weight(77, 1), new Weight(80, 0)); - _typeWeights = new WeightSet(new Weight(1000, ItemType.LEGENDARY), + _attributeWeights = new WeightSet(new Weight(3, 3), new Weight(20, 2), new Weight(77, 1)); + _typeWeights = new WeightSet(new Weight(10, ItemType.LEGENDARY), new Weight(45, ItemType.ARMOUR), new Weight(22, ItemType.WEAPON), - new Weight(22, ItemType.BOW)); + new Weight(0, ItemType.BOW)); // Weapon-based attributes _weaponAttributes = new WeightSet>(FrostedAttribute.class, SharpAttribute.class, @@ -370,10 +370,8 @@ public class GearManager extends MiniPlugin implements IPacketHandler, Runnable ItemMeta newMeta = newCopy.getItemMeta(); newMeta.setLore(lore); newCopy.setItemMeta(newMeta); - //slotPacket.c = newItem; + slotPacket.c = newItem; //CraftItemStack.setItemMeta(slotPacket.c, meta); - - System.out.println("Successfully intercepted item packet! " + CraftItemStack.getItemMeta(original).getLore().size() + " -- " + CraftItemStack.getItemMeta(newItem).getLore().size()); // TODO: Modify spigot build so that slotPacket's itemstack lore can be modified // to 'hide' json-encoded lore from players. } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java index e9227cadb..196f187ef 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java @@ -33,6 +33,11 @@ public abstract class ReductionAttribute extends ItemAttribute double damage = event.GetDamage(); double reduction = getDamageReduction(damage); event.AddMod("Reduction Armor", reduction); + System.out.println("Reduced damage by " + reduction); + } + else + { + System.out.println("Armour doesn't reduce " + cause); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java index 629f70285..034f52f24 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java @@ -41,6 +41,6 @@ public class ReductionConfig public boolean reducesDamage(DamageCause cause, Entity attacker) { - return _reducedCauses.contains(cause) || _reducedAttackers.contains(attacker.getType()); + return _reducedCauses.contains(cause) || (attacker != null && _reducedAttackers.contains(attacker.getType())); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java index 877dc6199..5b3448c1a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java @@ -1,6 +1,7 @@ package mineplex.game.clans.items.attributes.weapon; import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import org.bukkit.entity.Entity; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -25,14 +26,15 @@ public abstract class AttackAttribute extends ItemAttribute _attackCount = 0; } - public void onAttack(EntityDamageByEntityEvent event) + @Override + public void onAttack(CustomDamageEvent event) { _attackCount++; - + System.out.println("Attack count " + _attackCount + " - " + _attackLimit); if (_attackCount >= _attackLimit) { _attackCount = 0; - triggerAttack(event.getDamager(), event.getEntity()); + triggerAttack(event.GetDamagerEntity(true), event.GetDamageeEntity()); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/PvpShopButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/PvpShopButton.java index 962ea019c..d4ba81878 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/PvpShopButton.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/PvpShopButton.java @@ -26,6 +26,7 @@ public class PvpShopButton> imple Item = item; } + @Override public void onClick(final Player player, ClickType clickType) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java index 15b8c3f33..8c0c0aea9 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java @@ -50,11 +50,11 @@ public class Spawn extends MiniPlugin { if (isInSpawn(event.getBlock().getLocation())) { - + event.setCancelled(true); } else if (isInSpawn(event.getPlayer())) { - + event.setCancelled(true); } } diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java index afb7f04a7..5a6238618 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/serialization/RuntimeTypeAdapterFactory.java @@ -32,6 +32,7 @@ import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; + /** * Adapts values whose runtime type may differ from their declaration type. This * is necessary when a field's type is not the same type that GSON should create

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 Date: Sun, 3 May 2015 14:50:50 -0500 Subject: [PATCH 065/104] Build Update --- .../core/common/util/UtilParticle.java | 4 +- .../game/arcade/game/games/build/Build.java | 183 +++++++++++++++--- .../arcade/game/games/build/BuildData.java | 4 +- .../arcade/game/games/build/BuildQuality.java | 11 +- .../game/games/build/gui/page/TimePage.java | 2 +- .../arcade/game/games/gravity/Gravity.java | 45 ++++- .../game/games/gravity/GravityObject.java | 7 +- .../games/gravity/objects/GravityPlayer.java | 6 +- 8 files changed, 222 insertions(+), 40 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index 644b58e31..e9cb3254d 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -259,8 +259,8 @@ public class UtilParticle { // Dont send to players who cannot see it! if (!particleName.equals(ParticleType.FIREWORKS_SPARK.particleName) - && !particleName.equals(ParticleType.LARGE_EXPLODE.particleName) - && !particleName.equals(ParticleType.HUGE_EXPLOSION.particleName)) + && !particleName.equals(ParticleType.LARGE_EXPLODE.particleName) + && !particleName.equals(ParticleType.HUGE_EXPLOSION.particleName)) { if (UtilMath.offset(player.getLocation(), location) > 24) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index be21d3839..6c8a819e3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -1,6 +1,9 @@ package nautilus.game.arcade.game.games.build; +import java.util.AbstractMap; import java.util.ArrayList; +import java.util.Map; +import java.util.Map.Entry; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -86,12 +89,16 @@ public class Build extends SoloGame { private NautHashMap _data = new NautHashMap(); + private ArrayList> _scoreboardPlaces = new ArrayList>(); + private int _buildGameState = 0; private long _buildStateTime = 0; private long _buildTime = 300000; private long _voteTime = 12000; private long _viewTime = 16000; private BuildData _viewData = null; + + private int _countdownTimerState = 0; private String[] _words; @@ -99,7 +106,22 @@ public class Build extends SoloGame private OptionsShop _shop; private ItemStack _shopItem; - + + private String[] _hintText = new String[] + { + "Click Creatures to change their settings!", + "Set the Time/Weather in the Options Menu!", + "Vote based upon Effort, Creativity and Quality!", + "Create Particles in the Options Menu!", + "Vote fairly for other players! It's more fun!", + + }; + + private int _hintIndex = 0; + private long _hintTimer = 0; + private ChatColor _hintColor = ChatColor.YELLOW; + private ChatColor _firstHintColor = ChatColor.YELLOW; + public Build(ArcadeManager manager) { super(manager, GameType.Build, @@ -113,7 +135,8 @@ public class Build extends SoloGame new String[] { - "Build the word!", + "Be creative and build something", + "based on the build theme!" }); this.StrictAntiHack = true; @@ -137,7 +160,7 @@ public class Build extends SoloGame _words = new String[] { - "Pirate Ship", "Mineshaft", "Archers Tower", "Dinner Table", "Pokemon" + "Rollercoaster", "Archery Range", "Pokemon", "Pirates", "Vikings", "Dinosaur", "Dragon", "Toilet", "Farm", "Tree House", "Snail", "Burger", "Cat", "Truck", "Bicycle", "Soda", "Music Instrument", "Squid", "Statue", "Cannon", "Catapult", "Sailing Boat", "Grim Reaper", "Star Wars", "Elephant", "Penguin", "Ninja", "Pot of Gold", "Shrek", "Fruit", "Breakfast", "Toaster", "Robot", "Camping", "Spaceship" }; _shop = new OptionsShop(this, getArcadeManager(), getArcadeManager().GetClients(), getArcadeManager().GetDonation()); @@ -179,6 +202,8 @@ public class Build extends SoloGame _word = _words[UtilMath.r(_words.length)]; UtilTextMiddle.display(null, C.cYellow + "Build " + C.cWhite + _word, 0, 80, 5); + + this.WorldTimeSet = -1; } } @@ -194,6 +219,62 @@ public class Build extends SoloGame //Game if (_buildGameState == 0) { + if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 60000)) + { + UtilTextMiddle.display(null, C.cYellow + "4 Minutes Remaining", 0, 60, 5); + _countdownTimerState++; + } + else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 120000)) + { + UtilTextMiddle.display(null, C.cYellow + "3 Minutes Remaining", 0, 60, 5); + _countdownTimerState++; + } + else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 180000)) + { + UtilTextMiddle.display(null, C.cYellow + "2 Minutes Remaining", 0, 60, 5); + _countdownTimerState++; + } + else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 240000)) + { + UtilTextMiddle.display(null, C.cYellow + "1 Minutes Remaining", 0, 60, 5); + _countdownTimerState++; + } + else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 270000)) + { + UtilTextMiddle.display(null, C.cYellow + "30 Seconds Remaining", 0, 60, 5); + _countdownTimerState++; + } + else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 285000)) + { + UtilTextMiddle.display(null, C.cYellow + "15 Seconds Remaining", 0, 60, 5); + _countdownTimerState++; + } + else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 295000)) + { + UtilTextMiddle.display(null, C.cYellow + "5 Seconds Remaining", 0, 60, 5); + _countdownTimerState++; + } + else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 296000)) + { + UtilTextMiddle.display(null, C.cYellow + "4 Seconds Remaining", 0, 60, 5); + _countdownTimerState++; + } + else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 297000)) + { + UtilTextMiddle.display(null, C.cYellow + "3 Seconds Remaining", 0, 60, 5); + _countdownTimerState++; + } + else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 298000)) + { + UtilTextMiddle.display(null, C.cYellow + "2 Seconds Remaining", 0, 60, 5); + _countdownTimerState++; + } + else if (_countdownTimerState == 0 && UtilTime.elapsed(GetStateTime(), 299000)) + { + UtilTextMiddle.display(null, C.cYellow + "1 Seconds Remaining", 0, 60, 5); + _countdownTimerState++; + } + if (System.currentTimeMillis() - GetStateTime() > _buildTime) { _buildGameState++; @@ -202,10 +283,13 @@ public class Build extends SoloGame //Flags this.BlockBreak = false; this.BlockPlace = false; + + this.ItemDrop = false; + this.ItemPickup = false; this.InventoryClick = false; - UtilTextMiddle.display(null, C.cYellow + "Time Up!", 0, 60, 5); + UtilTextMiddle.display(null, C.cYellow + "TIME IS UP!", 0, 60, 5); for (Player player : GetPlayers(true)) player.getInventory().clear(8); @@ -224,8 +308,8 @@ public class Build extends SoloGame else if (_buildGameState == 2) { //End Vote Time - if (_viewData != null && (UtilTime.elapsed(_buildStateTime, _voteTime) || - _viewData.Score.size() == GetPlayers(true).size() - 1)) //All votes cast + if (_viewData != null && (UtilTime.elapsed(_buildStateTime, _voteTime))) + //_viewData.Score.size() == GetPlayers(true).size() - 1)) //All votes cast { for (Player player : GetPlayers(true)) UtilInv.Clear(player); @@ -295,7 +379,7 @@ public class Build extends SoloGame } //Text - UtilTextMiddle.display(null, C.cYellow + "Cast Your Vote!", 0, 60, 5); + UtilTextMiddle.display(null, C.cGreen + "Right-Click" + C.cYellow + " to Vote!", 0, 60, 5); _buildStateTime = System.currentTimeMillis(); } @@ -348,8 +432,12 @@ public class Build extends SoloGame //Only count if they got above TERRIBLE score if (BuildQuality.getQuality(bestScore) != BuildQuality.Failure) places.add(bestPlayer); + + _scoreboardPlaces.add(new AbstractMap.SimpleEntry(bestPlayer, bestScore)); } + writeScoreboard(); + //Announce AnnounceEnd(places); @@ -882,6 +970,11 @@ public class Build extends SoloGame if (event.getType() != UpdateType.FAST) return; + writeScoreboard(); + } + + public void writeScoreboard() + { //Wipe Last Scoreboard.Reset(); @@ -902,22 +995,27 @@ public class Build extends SoloGame Scoreboard.Write(C.cYellow + C.Bold + "Vote Time"); Scoreboard.Write(UtilTime.MakeStr(Math.max(0, _voteTime - (System.currentTimeMillis() - _buildStateTime)), 1)); - if (_viewData != null) +// if (_viewData != null) +// { +// Scoreboard.WriteBlank(); +// Scoreboard.Write(C.cYellow + C.Bold + "Votes " + ChatColor.RESET + _viewData.Score.size() + " / " + (GetPlayers(true).size()-1)); +// Scoreboard.Write(C.cYellow + C.Bold + "Avg " + ChatColor.RESET + UtilMath.trim(2, _viewData.getScore()) + ""); +// Scoreboard.Write(C.cYellow + C.Bold + "Rating " + ChatColor.RESET + BuildQuality.getQuality(_viewData.getScore()) + ""); +// Scoreboard.WriteBlank(); +// +// for (Player player : _viewData.Score.keySet()) +// { +// Scoreboard.Write("+" + _viewData.Score.get(player) + " " + player.getName()); +// } +// } + } + else if (_buildGameState == 4) + { + for (Entry score : _scoreboardPlaces) { - Scoreboard.WriteBlank(); - - Scoreboard.Write(C.cYellow + C.Bold + "Debug Voted"); - Scoreboard.Write(_viewData.Score.size() + " / " + (GetPlayers(true).size()-1)); - - Scoreboard.WriteBlank(); - - Scoreboard.Write(C.cYellow + C.Bold + "Debug Avg"); - Scoreboard.Write(UtilMath.trim(2, _viewData.getScore()) + ""); + int percent = (int)(score.getValue() * 20); - Scoreboard.WriteBlank(); - - Scoreboard.Write(C.cYellow + C.Bold + "Debug Rating"); - Scoreboard.Write(BuildQuality.getQuality(_viewData.getScore()) + ""); + Scoreboard.Write(BuildQuality.getQuality(score.getValue()).getColor() + percent + "% " + ChatColor.RESET + score.getKey().getName()); } } @@ -1033,13 +1131,13 @@ public class Build extends SoloGame return; if (_viewData != null) - { + { _viewData.playWeather(true); } else { for (BuildData data : _data.values()) - { + { data.playWeather(false); } } @@ -1062,18 +1160,51 @@ public class Build extends SoloGame } @EventHandler - public void showOpenInventory(UpdateEvent event) + public void showHints(UpdateEvent event) { - if (event.getType() != UpdateType.SEC) return; + if (!IsLive()) + return; + + if (_buildGameState != 0) + return; + if (event.getType() != UpdateType.FAST) + return; + + //Hints + if (UtilTime.elapsed(_hintTimer, 8000)) + { + if (_hintColor == ChatColor.AQUA) + _hintColor = ChatColor.GREEN; + else + _hintColor = ChatColor.AQUA; + + _hintIndex = (_hintIndex + 1)%_hintText.length; + + _hintTimer = System.currentTimeMillis(); + } + + boolean showHint = !UtilTime.elapsed(_hintTimer, 1100); + + //Initial for (Player player : GetPlayers(true)) { BuildData buildData = _data.get(player); if (buildData != null && !buildData.ClickedInventory) { - UtilTextBottom.display(C.cYellow + "Open Inventory to get Blocks!", player); + UtilTextBottom.display(_firstHintColor + "Open Inventory to get Blocks!", player); + } + else if (showHint) + { + UtilTextBottom.display(_hintColor + _hintText[_hintIndex], player); } } + + //Initial Flash + if (_firstHintColor == ChatColor.YELLOW) + _firstHintColor = ChatColor.GREEN; + else + _firstHintColor = ChatColor.YELLOW; } @EventHandler(priority = EventPriority.LOWEST) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index 6d659046e..b2a8f14c1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -259,14 +259,14 @@ public class BuildData } else { - Player.setPlayerWeather(type); + playWeather(Player, type); } } public void playWeather(Player player, org.bukkit.WeatherType type) { player.setPlayerWeather(type); - player.setPlayerTime(Time, false); + player.setPlayerTime(Time, false); if (Weather == WeatherType.STORMING) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java index 3cb6e5715..78e1c1a42 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildQuality.java @@ -1,5 +1,7 @@ package nautilus.game.arcade.game.games.build; +import org.bukkit.ChatColor; + import mineplex.core.common.util.C; public enum BuildQuality @@ -7,7 +9,7 @@ public enum BuildQuality NoVotes(C.cGray + "No Votes"), Mindblowing(C.cAqua + "Mindblowing"), - Amazing(C.cGreen + "Amazing"), + Awesome(C.cGreen + "Awesome"), Good(C.cYellow + "Good"), Satisfactory(C.cGold + "Satisfactory"), Failure(C.cRed + "FAILURE"); @@ -30,7 +32,12 @@ public enum BuildQuality if (avgScore <= 1) return Failure; if (avgScore <= 2) return Satisfactory; if (avgScore <= 3) return Good; - if (avgScore <= 4) return Amazing; + if (avgScore <= 4) return Awesome; return Mindblowing; } + + public String getColor() + { + return ChatColor.getLastColors(_text); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java index 981d50e2e..132399e41 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/gui/page/TimePage.java @@ -45,7 +45,7 @@ public class TimePage extends ShopPageBase if (time == 0) time = 12; byte data = (byte) (buildData.Time == ticks ? 5 : 14); - ShopItem item = new ShopItem(Material.STAINED_CLAY, data, time + (am ? " am" : " pm"), null, 0, false, false); + ShopItem item = new ShopItem(Material.STAINED_CLAY, data, time + (am ? "am" : "pm"), null, 0, false, false); addButton(i, item, new IButton() { @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java index 91df8eb87..6e4350f2a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java @@ -138,6 +138,44 @@ public class Gravity extends SoloGame Announce(C.Bold + C.cPurple + "Press " + C.Bold + C.cWhite + "DROP WEAPON" + C.Bold + C.cPurple + " to boost yourself off platforms!"); } + @EventHandler + public void cleanObjects(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + //Objects + Iterator oIter = _objects.iterator(); + + while (oIter.hasNext()) + { + GravityObject o = oIter.next(); + + if (o instanceof GravityPlayer) + continue; + + if (!isInsideMap(o.Base.getLocation())) + { + o.Base.remove(); + oIter.remove(); + } + } + + //Projectiles + Iterator arrowIter = _arrows.keySet().iterator(); + + while (arrowIter.hasNext()) + { + Arrow arrow = arrowIter.next(); + + if (!isInsideMap(arrow.getLocation())) + { + arrow.remove(); + arrowIter.remove(); + } + } + } + @EventHandler public void ClearObjects(GameStateChangeEvent event) { @@ -153,11 +191,14 @@ public class Gravity extends SoloGame @EventHandler public void KickOff(PlayerDropItemEvent event) { + event.setCancelled(true); + + if (!IsLive()) + return; + for (GravityObject object : _objects) if (object instanceof GravityPlayer) ((GravityPlayer)object).KickOff(event.getPlayer()); - - event.setCancelled(true); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java index 7efef6c4e..03fcfaa87 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java @@ -7,6 +7,7 @@ import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.disguise.disguises.DisguiseBat; import nautilus.game.arcade.game.games.gravity.objects.*; +import org.bukkit.Effect; import org.bukkit.Sound; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -31,7 +32,7 @@ public abstract class GravityObject public GravityObject(Gravity host, Entity ent, double mass, double size, Vector vel) { - Host = host; + Host = host; Ent = ent; Mass = mass; @@ -57,6 +58,7 @@ public abstract class GravityObject UtilEnt.Vegetate(Base, true); //UtilEnt.ghost(Base, true, true); + Host.Manager.GetCondition().Factory().Invisible(null, Base, null, 9999, 1, false, false, false); } public boolean IsPlayer() @@ -86,7 +88,8 @@ public abstract class GravityObject { if (this instanceof GravityPlayer) { - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, Ent.getLocation().subtract(0, 0.5, 0), 0, 0, 0, 0, 1); + Base.getWorld().playEffect(Ent.getLocation().subtract(0, 0.5, 0), Effect.FIREWORKS_SPARK, 0, 100); + //UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, Ent.getLocation().subtract(0, 0.5, 0), 0, 0, 0, 0, 1); } else if (this instanceof GravityBomb) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java index 7ff622d36..3ed9accdb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/objects/GravityPlayer.java @@ -39,7 +39,7 @@ public class GravityPlayer extends GravityObject } public boolean NearBlock() - { + { return !NearBlockList().isEmpty(); } @@ -76,7 +76,7 @@ public class GravityPlayer extends GravityObject public void AutoGrab() { - UtilPlayer.message(this.Ent, "Bat: " + Base.getLocation().getY()); + //UtilPlayer.message(this.Ent, "Bat: " + Base.getLocation().getY()); if (Vel.length() == 0) return; @@ -88,7 +88,7 @@ public class GravityPlayer extends GravityObject return; Vel.multiply(0); - Base.setVelocity(new Vector(0,0,0)); + Base.setVelocity(new Vector(0,0.1,0)); GrabDelay = System.currentTimeMillis(); From 73719e0df375b4f6a4f10b1d1b0f92bea1b1ff8f Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 3 May 2015 15:30:58 -0500 Subject: [PATCH 066/104] Fix world particles issues --- .../minecraft/server/v1_7_R4/PacketPlayOutWorldParticles.java | 4 ++++ .../src/nautilus/game/arcade/game/games/build/BuildData.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Plugins/Classpath.Dummy/src/net/minecraft/server/v1_7_R4/PacketPlayOutWorldParticles.java b/Plugins/Classpath.Dummy/src/net/minecraft/server/v1_7_R4/PacketPlayOutWorldParticles.java index 7feb8c60b..c68e25f76 100644 --- a/Plugins/Classpath.Dummy/src/net/minecraft/server/v1_7_R4/PacketPlayOutWorldParticles.java +++ b/Plugins/Classpath.Dummy/src/net/minecraft/server/v1_7_R4/PacketPlayOutWorldParticles.java @@ -22,6 +22,10 @@ public class PacketPlayOutWorldParticles extends Packet { public PacketPlayOutWorldParticles() { } + public PacketPlayOutWorldParticles(String s, float f, float f1, float f2, float f3, float f4, float f5, float f6, int i) { + this(s, f, f1, f2, f3, f4, f5, f6, i, false); + } + public PacketPlayOutWorldParticles(String s, float f, float f1, float f2, float f3, float f4, float f5, float f6, int i, boolean displayFar) { this.a = s; this.b = f; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index 6d659046e..0241912b6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -240,7 +240,7 @@ public class BuildData if (all) UtilParticle.PlayParticle(type, loc, 0.4f, 0.4f, 0.4f, 0, amount); else - UtilParticle.PlayParticle(Player, type, loc, 0.4f, 0.4f, 0.4f, 0, amount); + UtilParticle.PlayParticle(Player, type, loc, 0.4f, 0.4f, 0.4f, 0, amount, true); } } From c3a7dcfcf87ce386a122a1083840a6f01a8001b8 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 3 May 2015 15:35:42 -0500 Subject: [PATCH 067/104] Update craftbukkit jar --- Plugins/Libraries/craftbukkit.jar | Bin 20821956 -> 20822058 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Plugins/Libraries/craftbukkit.jar b/Plugins/Libraries/craftbukkit.jar index 16cea00f23a0930c8827f68affbb3acb02ef2398..e591860d5262f42c6018f260ea69038f47ce2955 100644 GIT binary patch delta 190232 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%0AV_bqHzX7DOJO5 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≫HN#ubHxBMnNK`mvSqm*d-sO@?U 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 delta 187807 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�$c88s7qc)z%3GE} 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

1R+?X*mv1lb&a?mj8J4 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 )p2s~)4$8AjKa}W9 zEqyd+R|l6|>8SATCf=N}>k6!3Pk)l0m-q^BzAS%xNuu-rnB-ANS0%#^Y{N-8-{H%8uQatH>lYh7t_jJW|$O*vJP?4%pt zBbyTW1Lx7sH*Zx$K^@`vjgq~JKAiQezxW*N^JT>PT*M3+W>RV=IyMWXrz>xkTrgE| z^~&*6$6A2Q`rvFw1DUuz9Z+B+Qd}~weAWEd^6cG`R!S>3`0B~W>rfLehO(Jzq9@4n zV5jbvY)~#E{8APsnqYo8|0DNeWS-PzhaZ)g`s=!R9F?(kLe4%>&fdQ%`Kr`}-Cma+ zCZpxEpc$T-jK)HofH-3h7Wuwps%#3@qr`x$I`jEda#-n;Y#SX|{1)R7oBKG)@aC+w z5E81ET8OcGXcOCKFWnQ4HYv3hu1t7t&U$_+(dTMi+7js5&)-URDUtrUGyR?&C>(%o z=-Eo7VXerGnrBk#Ak#PnB}O#zaAaH|T&S{QUrbBKDf@oIx~vU7+w>9Xhu{e6`_4eI z{w`X7L??4gir|em7`TW%*2-FRg@4m)kp(ODD1BM&|5EO1;*>W3qt->LgCi-vZzh6J zxLW&cZCPq2J^-XI+ZcfKu=3UWMw$4a9lI(dzphU87B5#cW z?zM7-ziQ#w7&`8L0&Ja#i9yV7Y-wGke)s5Q!O}7DPBLLojK;EUz8b0{xUuNijx0>A ziKPW{+hHg%YP%-;VQT3OCEA30X@9DLwwDQCX>l5BidDfEcj5QxrTL1{`D$P1Jx*X> zLr5HnyFsWpACPr~faGLLRxzX0Mu~iL@}k1ifPZhspm!EBSzaAL76X$jWVXjs39-F7 z4<7Vl*B6%N%ium?`i~bbk@C}4gK)eDGFvr{DRomCkV6Yj?~g%~&QOYu!t}MJO<3Ho zrTQ2^-;RXq;Fi+HZ0Cy7Q%ZX+SAOBX47cEJ3{{KEhZ zuPVfEDQ(K)*On$Lky*aKU1vHVl7XxNm*MVeRIM$=p<9j)9~_?G@`))>rtt>7ST0L1F+ zrOU0vDz;dqiRARx$W*63mB`zk`Sq|%`rgu>vK zZ0H)~f~l#ABZ3BB)fK~g;`X38xd&}}yi6*sq4b*fc#d##1@vpXt&J*V;35DcK~7p} zO?i9M4oIN>#n1f3Tzs@-ud_=RD>41bj@RA*Mqp$3Wnfu=s794Q_EJ;2QOT3UN9^W7 zv^c?D*zom*)TH&+7p1mhbgxj8+RUt|^iKn3>d{lvKlZ(aC;Fe4F#6eZU5&FZO5F{9 z*ExWBt{6Z0B*vcu9%t+Ss;-b!<++tOsy9Zmu=!KzDcvNr0R^tYn-*pM{F|d#hJr@y z>F3g|@(}XwLm+8qWDxe?Tj|dRU81&vr>DkHit%XVH8UwUYRi#ru2MEu#uU_-Fm*R6 z_cBo9$VOHz8?HpR;qse%^!}V9wpPktDA3iiESsPN{`-^7lr?bT9DGP*2E-16)#T^) zVz|Ev)YP!r}S8M9I{R{`ImWNuOa{+@kFERvxY3*zpRmRRQR}k`|~kG8EC?wOL_|(G=S=? z3@-~}^McDFloOKkgj?0V!c>j0W92Q%#v4?KoYi}sy=K*c`M|T_ao?A<5aYiOHEAL2 zYP8Fem4}vj%1&kuin($GaR^V*5iQnWJ35vX$|GUwK$&gi*#GxKnOez?KBW(HeuZI~<4%HZBKWi{!@+QWSElr2UQbzljc%7k!jp*<_RJ`2BH9cMH3?%4CzN$n&M|GP-B`K+9U6|U z`v?Q5Co7y>wn^Eci4Ctk4u%Mi*&4LVjy;}H7O6|1=HvGQ@4^#FaU*HD@y{^X$AP-# z;D@WwWo20h_H}NVmy(KvojzNYM>a^2mt_wR3q0J0iH`~#63B5EVa;3jS;8>Vb=)1EgsdqN!FELhm) zvUBphcWM-9Wp%fe9h6Vr!=tF=?d~!^L)-w_-}>KHm{r4CFxN$hPu7iVJF(Sha(9K} zWiHC&TJz}T-(7~1_?a*$o~P3IuN`*zAmv&Ku@o>!n}}_H3`Gu&MXW4d$%yzn+X8O^ zE(YC;lJw#sKs&K>7s@K_=AHGZzOXH*tL`SvCtL$K;_9U8HCUA^Wuel;foZqj$E`BV+TxO*NMOse%7VpF_|sf)cv5B|{y(;^J1)xO>3j6vM0yjfh=RR>*t=kf zCU#@2v0yaDE^6!zHTtLs4;p*Lx+)el_6GK@7>yOUqa6pw!TX)(xrc{`-}{Gtj(uil zXJ%(-XJ==3Gw?Hjt+?@hk5ZCd!}>=RLXtVQ-1{$?^*2BGj_Z;~lbd?-?)M@|uyH7< zh?48r+A$Shw~49%pB#2^&J*6hYr5PLzBi-tPlx$8!^rzbDz=xuNktY?Nvyl zM;)&1;k=6E1hZ?_nb&1mkV&l5WSE~d=qWN`$J{f2R&v%Yw(+wpaP~>{KZ4?4Poz0_ zgJ-5%F*jTZ?%&rGR7pyrmvk6^*J8S;%xg*&9bW5o(LMCja1}T8Zk{M~&S^lV^2*k?r@pOr z#b```>m+pz8!#}ltvvFGuimG+XcHhfcTdp|_Mb*(*==|xue6f|j_1?QqtV(b(Qak@ z4x_{QkIQ_jQ21`WuXW!61@pvU9>DdPoY|g@7@t}GuIuFKV37^@HS?j|ebnRqazb_u zfNXX;u-=n1A4n2OKqJ@&Z3RD`=yKv?P+*xjgS;GmdZwM|5^!+TLb$SdnZD%ZX*>jGuz-WmQ`Hl3OPziHA<5T z&UHd>FuZczDziQZoK`GzYvx2{XMDc4$d^ZFsPM-6P0;~2BAz>oR^?B3X6_KZX^5tq z5XL9$=XN^fj)YWFq2#@|oC}$aSm>_I^-@G3X*LO>&`T7AGxOe)`IkJS5Q21v_mR2S zv7TSOoFQjEb`J5<{9tCjgLqy%z@imAw1D4i;h|}U|7XdSU4SFK=3J(H&V^N@k_x_eL9T)u&KMfXuhCn*BV?Yh34xnJ>%L zkqA!QH$p{OcW#hr58}8bzXp&s+1^W;6+9gRy*bm%ekqm%{c$ymagF56JI*KGx?jy) zE<5N1d}MxGbyu2GaF?D0EYhEZ8nxJHflBbv}{ zI{ee?T^KQat+*U7aYQ?_$Y+_A_Di0Rs@soJOWu2nV>NOGt!-moW%f{7`Fl@IZBIZ< zbyN(qsjJk#nph%aSxB~^=pLN!*GxNp;6e(R{rN3(hqMY@h?4&Sy8wGyot@0e^jG?# z2d$2Ep#^zu1dK-tD#b;A%dE=JTGR$NPsZeAmaoZ=p#=8VI!A8ZmV=daV|KdC**4|f zM&>}bW!VlgHh5RL$`2yeFtaTG&8AsT6mUIjgx2~SFmy}MXi=d7SLrCtA)9ua8v&rR zEo*0ywO_df<#+kTssLC?GgszhlXXnm#7kXLQ3j!8ad6ARf-F2&<&t$++A`>~l%Rx_ zx6l<_YCx71e;B3JxkWx%Ulg;;RktryDJ+DOuae4C<3pFxRGI6WHBFNKNR+s9n@Yt_ zs>Ywi-$CqiKvtG)eMm$HuGw#R2oe2(@BzgyWCA$PgPCqz?87W;Za|H!N99D2qV=1x z({BRU4aO~glA`hFms4MzsF^iUIW;ude0=6G44wjO8JNwkpS4b!^kSiZFc=LGd7$R4 zxzUZXG8OHGxZin`1`Al*Uzmh=nl)_r=#^xH?={YPAW3o|O2o)R1rQ6S3(tx$-e&|u zR-cbp4X2kMzKT{#ilyGfhUd1>g{D2R+Ct2Qi|v}_%(A;?9hGJh4eH=Jg}bnA!Z%&- ztT?4@%WIPzoPxpCF;FzUn%-G<>~p`YxANE`2{xN@aEv7+nB^)u8Ubs;5%c^xD_9mD z^-t8IORjVw_m8GxT#Mk``SWYqs65#D@mb}$gKtnG62=oqeda$gYnO6TSd%}|N2p_jQKDle(TR{JOIy>soo= zlLUUV8F0=AC}vrRaWDaleP5f^QquK#sE7@RM`{sAZMJEB);%X<?Qc|LaRo^ zW4BQE)O(pVLDqE=*i6S=53NCIH{7m5i?s@MSmB4P3YRz%bieS4k2}FaJ+Kv>QW?4t z+wnOIhed_E(3~=}+CpWs!IC?}3Sg={nG=?^sy_@hfn}Br*XLYjjm_(`aWmF7Qnv1S zS+(U3C1v|`y7fT&234wfPa>8C&>HbHsediZa%@m8BmzA$YWeuH=))J5T%U0{MzlPI zdhQ(%rjtwWt=Xhn+2@poJ*RqLheeR>ZWB_O3e~vDhjOt8YWK{V?XH`>Sh;rdTe5#H z-DvHls#J?l+D>}5yI!_@tu-+n+xE?+Tc8fl+afsDMAjD~-7(ex!;1?9+ywVol!!oj zasqizEyA)RrPtTqqC^M|_*DR-My=S}R@pa{%r#p0u`~{@!q>V&Y^G8TXy@8oHx>|) zy}`Ns?l&T~>z_x*>;QM!oa#n)2%k)(a8A+LmlaSAE_b-Q5m1-8c89;$EXN(p_3V?q zsl00l-?jS=0Uj_J(_Oe!Rh}$k8`h?8b|cx4lPn%wkIgcNpd!tr9_O4!LPPc^QPkzr zPuZ3-iv<5@ZM$7)Ctm^D~yzfq0n5F%kJzCaC;>GZFW&akSFVBp|Ks`PYa1FUszeiT=;@Ip)GI0dF zBzf?q5CGp2BKIP&3uhIm_F;G5M|t?!L{hX z%1x0>4iL_KgI%;rS1rr_Ri>3NR{LH(>NbEmJ6gA(dBD|Y-&SQ;dLz2Wrqa76xVdUz zE1`c*ug|V8UsOeWY?%=Ig3|h3abE^DmLOz%e(P=;-tqggA1MWS>(4JsZQ!EDIC2l> zi35sVI*?sUHUdOim&wWAbieHaQ;AtVW)BVQp~tezZ?{cCi92_FWUi>|-|(k5i#?HT zVVoPoe&3ACeQtfR<#;`!yCe4gkE1etUe`jpgyjR06>erX=I;QcCL4Y#yVC2o*LQWh zJp*(8&N{~3p_AE;e2;x(lun#hI&mu4`UYw&cMu+#@ITXs2nuso_sXqkP- zr7s4H8%zY(g^T-^U5)RtpR{t|wd^HIsf|rM-o843pW(h4!b!la^^M9}I(6ux`JMo~ zuVUb5ni5B?f7)9hiM|RGVg`*l{#&*Mp9*T%VuSiS*^QN8 zogVMMW(u%<6~Wfr%MO&|Xw;o2{H9)}XCua;<9l%H_1R%!>yd}xdUEHZ4qCIeY1sy8 zBAtq2c=8_DvlFC3V3vG3{&!<%9%ehc8J!Zf07ro=Q6P1`X8S4W>)ooGJdvZhqT$3WfDm?(VJ$w(r$MZ!3Z?Q+uGUo?2#^e zlT0UpWi^}d<`013hCnP>BH4X?cD&R|Suzm^=WMC6PMYuZh2Oy&!g{Dve(2QxI1vRu z1u3EU*^D`vsZAtC*9jl@JccJp6npboC_vV}xq5@ELPPfMu6Cz8`g929iMhFgWo0p5 z>Isq$Gw%eoQhT%pJ`8@=TR?`l)7z~H{J6=RNsf&n&D1|wGMN1fTe9+LI96y_`eC2wGqL-}VP z^+rj+VP~k(f#)*)WC&ZXMUQ+pw&DkMrMFc5e6~HT2j}mWr{MlGH2ss(*IO61>{tdM zzIzEii-41LAFp;$K3Vp!uU`^{JLe%R{Ro@af*AHsQ>%?KbvQ>_|Jx9ch_`{)~g8-E9~dJEN0l>%6xZ*$=s9D)zH1PLyn2;4S>%hrQkK+-xn zO&75f-VvUqrx{*sHFmA~zLIXvvE|+rfH`{$?C}8?$R|qLs{W#ctLA!S#B=mf8|*_< zzJLJ7C!eSNs?uHRmy);e1|`PT5`ola-43WXON*Oml(=)+s}RD7Q)&wqdR+Zk(x^+q zw_WMq{20FV6z3}b{5v}Klz#3T;&a#3-dyQvwfv&&e?tx}D8)G5V@mUD2>bX; zexVrnrq|}|=>-{2vKD-C4viqQ>$*Bd5^nNkP|MhDb$P;2z!jojFiRQu>B%nL!^k)4 zT!QdX*wCPlp&WK3tl7eJ^=z3r5|AOFebNw+ZiPIkN9z5`k7jXmI_?Kikrj#ZeX71I z5v95+i13lR7T*&;{n?;b>L+sKkQ%VNzi~h^dfz`nYWK32uDX_Jx0e zkR)7)iNy#Bz>59-L48I^Qrn^ZJ?;VBWK)I?^_1AXe~k!%bZW88FY4`5)F$FO6=USp zVlQ*m-V)i#<;A=nKmFL~LUlFec>BG?>v$Cek}vs)Hj~KVC*2@lC`Ye0aZvd6JI`nm zDcXIH%ju!6DUi;80&Hz=qK#&UqM!HcF9gSe{xv4T6d|%X+*ZRYr7`=WI-n-N3RQy6 ziD1$8nyyN)=5@K9bULaBR&Zn$1fhL%(0rE+V$7}b4obmKf7ZFGrn&4_lHkwwpW4L@ zdqyYmqAm@QG*3-4J26h4*wY3ha9{d2FD|K;#+*;M{Xg!af7E!#;UKgt?z;p93~(!C z8fo|h%xu()E}Z?_!f1?uiOsB|`B~YqCbpUjzrhzOay(s6b6raQsD78|r(G+~sgXuG zWFGY#*l84MTotw=Y7jtGJ_{9s*!aep(Mm2OH18wg@b1xsHlm~e?7~mJNAq}OE6oP! z&7(CaG47J3<7Y6}xtGSE=s;$F$}%5@c$lL&LkoiGai8`+ulCkxm4Iy zooFJ9oVxULm$n5Objm9;atvVqso7o+u%>6RV>DGOHT!zt35@%$sS$@dV@n$ICQp3%4B?w0ynnmyrxnnr4Ku^bqVNwZWIDq zuf|8AiZ>f`RkO^vphV;4Sbe<1tmmd0DDrs3|v_cuUo79-Y=J`vmG<6cm3JME632s%KkoeHgUZJl#I7~4(ye<64simS7oE;*I%Wk_4AtC0^)9V>1RR>aEB zeoMX;9_BP-meq1{rJ3mniYrP=kbpfK=$WIdq1ZyZ(4_VJgV4jJ!2bhxtWQoImK2eb zrL=fg?;c8+fu4!MgSS}Xhy-web7I+%Icufv3Co~H$=eno*uBmcb_oA6Jyc$ly5LZ3N>pd%{{KBE+55`WZA%08*gfEMmlanZG z9w}GwtBrp&!fe_ml+#>=4KGKB%$NB&OeVS zQG#I8*5{P(x=j6#sGwaJ@ta{|P6wrOx8E|+;U?HQCd9%7D89ibT5_D(l2e|`F$^VQ zZ;KH7@OL09*p?G7k4WOC&X&(Z#z6kt5Ynd^i3s9-KU4HnwL52=?CTS-Lrlqhx*!x6 zVv&A`z;OWfXD{~Uw330zU>tLOYrP9&-5Uv>MqnFm?4g`1&FErHl9M0J#YdQf(&24Ez(cbQ+w6h_!@4}Y?xCXm@G^bLicj)Kp?*{;Le-oN> z8gPk6bFBE-uS9Im<2jWk)uoMVMg{}(S{%i}&ISV+BbD7gtMG-{ETCIhk}|;%{hEX4E&k1+(8Y)>!bXW$TtJ6hGu}VDjmnn&{cp|_rBB&+{j#ofSB{spsL18O zb(#8WPWdf4eNbJ~fU>A8bsMIq45u{C@8 z!5sf(&v0g9nq+?OHbuSp^{!nRZ_1T|IuwuckDz@w;VUWG7nxh zcduct6|;5CZ7=ztmr!g}D*3FB!u~Wxn4hG zrO?SyT+tE=-hgUBY+}vaUzA-o@k58t$ui%(MoSy2u?5sfr~0|arFmH>5VnX#2y2j7 zojc@|>&rGa$W4~0tB&eorj!xWOcaDLaM(j)?yvwtV@3dJ%r-U4t#o%`(&8~mlpN6t zucfQ<>adI!xmsyyy`zv?pp_W|V;hy+Z2IugGzpS!Vk`JKf~xStbQIaXI2qTjH|&wS zO`>BRigAx{RBncYqEpXKI#>JyI@R2Qyx(9}dwA|NWq-Erw6+7CZp7uQfHWY)AFIkWcvR7CHGe)aH?C=-M@fdGiz$A4xb1(KX!I(?ie%0LVr_X z_Tq!+r6TUZ#+;fW&R9LH12=18?o|c(wMRKc55_#P(^?pVGHeJtGbwkda^z1x(R7g? zi1oqkuG+}!-=3bD#g`-4_Qu49*S&Kc|ntMphZK)WFi@KBR%@+fpLV^p; zOO7obl$?S=a&{1xx~c!t}K&XI&Z;a#|@ z0jD{iYr$Hlms$uC)^LIsL@r)zQUz2XQI} zJwGZ(*s|8X%nmq9#UyW{*k2?ztl)_?+i@q?UWxMR-o?Lfg^J}_h%(9eo@>reF$-5Y zG5dSDm5%oPd?_t`JUa6?yv#>VMmcap)-65vSGhCE&RKL?zU?~(kHL!r{RW zwacq7n+O_TPw%_0rN>NgH=U5mR}SpOAF&Bnd2^xF^1NAn$Gj=ZdbRS7jUl1NS#bAV z^SUr=mponx;r-7a9!muX28gf9k8jPIbX@uWHQSW6^~hT-O-_?RH7veYe&uWS4 zRTg9wLikX?dGjOe!x7sa=)PMxy-DpZb0^SCt?!`TD z&FjcwYUJ%zVvHE_qklZMv{$(c$vU!#J^2!caCGq2+Ib1ejqP#Q@SEU{}uiY=90tn&Kf6k2PXossHZ{7Ul=mDQzG)xWfy|Tj`TI`bA*Ml zv1G@(=1o+Zl|6e_ymEnRUoyH%0*)y?^P0;8pKzRU`hIIaxO(PHOTQ5Qo-@c`fxYt% z8fT6~7b4@aYhEqpKQK?H9IvBudODjya1BMZJ!B!w zhyrSBexNIiCS&9B)Kcr~Q6i>=G0m@e=928~t5LDwCq?6DQ#O5O-W_SRu(tf8Aa`!i zg1l;cHVQr1#kqOiCDe{?ghT2-D+aKYlJ~P#_=dzk0e8Oq-=HOg9 zKk&r33=}&5+r~UwiTXqjqJFPkel7kheul7VoAX{tAN@S(BW)dV89QM|CgATn?AF%2 zt#a>EEA0-Z4yRM{{gDh}2i^GuxDb}X=bcs({nLi}mUKG8$5wE57?7?|Vw&3NSYar7 zKMc3al8a8wvh(}$hAO-LTv*)AOfIu?y&Pyg&wC`<_C9_@6B0FQ@!Rn;nAu&) zE58XnP53CtT~Goq|8QhiCtl6FuWY4bvP&YJ*X^L9Tpy%L=Q;9;fc57--pG5Pm ztba>uVJXHy#X4nb)w;whHjxlU6KiUlj|s#O;vMk68(Wr{SH6s@j}i=|u6eci((2@J z)XT~9m3DZNg^x6ng!(qT0R>^~ZeiXLxm!pV+i#mN>JoI!!%i4Q0<<-|r_aliJlG3C zk~;8KHNsU*xQxXHGuGWCUn5JGFm>3H@ah&Of*Im|b|PS{kN7T62N{D+dyol3=wvU1Gm(tuW6Ti<;D^0VO%BlaA;fv#y{ExN?`Xw9o@ky707 z&A%nHN76Qp+BM-Ux*VtWgw?eGJh?WRm1=?cDT&}v*=QsS8A`Dx0zv3Pg%p-158w3zWJlIRdjli>Nt{3n$oFpfR) z-MM$|@+ktd15m~}<#h;66Im!|$gMuK6W((B{7MIMx3qbX7za6Nma^)(v{QP?1 zh)#9xlD|O~28ny@!W}2cC)DHdZ;Hapbu4*3>iDqUJ@WsR26X_4Fy_D$pnLg4^mug= zSN^cQ(fRFU9V7h18bo_^gJW>ZTd;@%{)TK+zx*C{imrTf_N;aZXkQGe3ej61zJGlp z*>yzzGHDFYM~OSTF)F{er0N+|!dcGC_vHN=5VbSL=dV<9m^8ZN$x8HSrU_*g`m;`x z@{db`O%M5I0WZ2SyhL#E^}kQ2O#0YmluTj(THKNVBW%dha77JZzc4eb8{(n}B$ z1N^ywdHEJx^5T3;Hg0~tL6Vv#RBA;4U;r3p$^|XU?^ixV?l(8w3`kt3sNP5sshTkTm`Miv0T0$UTY@VS$ThCIwW3NKK0UVOQ76sXq- zTVx_tP1(A=`J*L4CxQqe1T8fge+s93Tk3EUO?cjX?Ed`E$|HGYJ%{e43uHGT11u_6 zk_f7mhsW17A)LA%Y9mhm2?|2EUT5-^r$zYzotBvb(;3KiE-=M5$4KJVT*SzZKAZ2W z)Yq(Tk6Qc$;36R?UlEwU)08yiV@iI7OE!r6b-z%^xehrksG1ifSr=xN-+i<@>Tlx%o+w`uIZegqVycpW23IshIryF_KkSCwxST zkN6SKilLw`i_+zrC`EF9L*GqF5Xl(9SM(Q9+4B8bW1cu=8rIQgGY8p>)^FIXkPtry^MbASg`;(`wyr$8+qATMuRj*%!n3l(dzKk61tm3xAOyXdiby{ll?UsVB`Yu2bBQxRs| zaJEPODu5m3c681O5Ey7cxuW*m&c+3?+;o53Kwf?+xEnX6bAbgnxk-V%#rB8S^;1g_ zxLxc{!A}H+Iu}&s&TsRu;WIK?Vg2^DNx?GZN^{Z4nA*M2?H!!S*%NAbaei|Oq$gZo zMHKXw10mEM#gV3m>5-#CGx7!e8QN%TB5wR0am5|FxN|tP{J8Vo1&?>EgD+Y4XTesm z@NNZXmA>Sv0qc1>_PfM5r2xW(^%_<1PSz%2geB#4Tn{iI^TVH;JHEi1tsYZwP=+Gf zQhIlH>j+;GdF&2LB2wD8&8O}s|V?hbD`FFt~0Iup3Ez# zue?q&^kP}9aA^1(%yjj*>fH(gSdS$Im14zD?+(2kjM3~TWRUr@tmOp*BztkVi!dl3 zsXaLqW4jH1dvhmO7JL&sCheI)xJbSce60Ch2^I?jPj3GD0(%y*x5MqDEA-1mJIm#-!{PZ!X0Lhb40u%?7M9Rmz1zaJf8K|!M+R(5_Mf*26)|+ z4sPQWcZYR{*!l@)3;a2|BjEYRLj_aHW!Hn`fn9n}hHqPpckh?qO^q$WblhU;-z!{Y z&Sjr94mKjz)MvR>7Z7^`*Zn|AL=e{MT*0rB9eLlAP$N6hQ}|eyRlQJ9Ls~=h0Y>A; zb@*AA?Y>sC*~2 zU~3akR&ryW6*Lge)e}hhW0mMDf6nm-tvi?cte}s#^mfQuuu(AJmY)OA_(PUHRh;;Q zsBj#88UMV%NgnqC-2F>SqG0jPI5PfS!5rDZ(Z}v@s@%*$BU@E0@=HOWO3{L2aCk^9 z2ucGL_eBdy(Fn=2l&=MK{NdNZ_cdUxE@Sj(P8Qmm z^0Y&suj}>qBD2#;#Y!!;PV&(b`slZ4U0upBD#Sm5Ls!0Sf09L#i`Jf-X083Zd|(pz zs+A{xCLahV^MK2p-wN13?spsQIfdMg7TyoK2(VK8t4Y+kauaQ}@|H58Dmk{{=xA_Y zKrh!4VAvWv?P?|Mfmf31T?Uf+*!*$O7Aa`y)iG|v5mf%ef(>)jevxDOguTP_2S4vd zMY`k}SJyd`#0OyULwxO3&^lz%{3ag&^)qPk6X@Vy0n(S-QC0h&(dASPGO%SM3S~s)wrfABkF0ND&oxw3;?UL3P(Ew>^FFJy+n!ozDh7fA-x?>#yW|!I;N| zkI}g|ELoU`wwkm~n)hQlB`5IHi`(v_#q*+Ou1L$aszRJ!-`Qr93JuVSGO~`udNXGqG}1XmN$KeytcT8Y+8WU!C67{@JQ>%UU1)gxv{+swLPWCY1=`B z%RfTfUrGD?ODo^da&nOg+uBx}DmASp@V!ggY2~SdTHcmfr+WyH|LMsNcG3>Avo$rt zrVp&fpoiQ(sGblIp`0CBlvqt=Zr>8o`&5e?ea z{@P}kw)i0=ESDd&lgeEtfz{}X$F`uGGB`~OofmiU2kjMOKTjG;6?SdZR^`)&VY`Gs zgaSAAdVuy{IYE<9v<{v(cMzJNX~GQ;)WPKwpl$HKKMNYG9ikj$;iq0^Y(s-(_*X|D z)>uLJ2Tgy;0Xln5Gfuls(T|5(e4Rt%V=a^*NUjvX-j3H+xW1OCIj~^y->-n1ZkVVg zgIaQ{e$^HkSsOZ>SiAWgJ8#JwwU+#H4;9XBx50&lNFi>mtHu>i)UMi?KL}5(%y2<& zrPHrg$kRN!QR~dzn`9I`wdL)2H#ZBt)x;P7s4aiyK3VH7yXpjF`jhj4hwuj4;b^2r zhbxDlXdT&%Iof{;m z3u^A3HbyzK-s#_W%yf(q4`L~~~bxW>wl13$HD zIv$Sg7+mQ?9IpDLT`e6pT0e&9>*4_VhUaQS<>Xf4ZSkmI)~!VUcEH1KsK|$prPd2g z3M)KDN^rk!Q7xnS7q)=zB-bjm z=I7&Ye>Tvy@Q`x0JT~X~(r#cc)q%@tq4N}gSr3oG3DVNjaXcZyi1y*5@iT}81QhmB z_TtMekxsKf!XjG|WuO3uTg+<}Zc~!#^5(Cc*=Vc8o|`(`sMLJO1X{h_2q~Pa>>o|_ z`8_uQDKgpwMcxj$8tiD3LQcLKpZNba{nXBXp~Mr=m!cxGwXF&*l@>Df@|q2O5K?$x z#qHQ#7{uO26i$;SgdM+1dc;RhgulrWI~4YpK02aA;vPSP*wC(pjg+{*s*9#}0HHl? z{-}JN$sAubIr6hak6Y6UF1)LpRYZMT+M@h3w1RWQ^w~5>)TQSRko4l z%$bD~lr8r^ve(2LEq}4$a$Z9F66Y0mRZ4u>ysy7@hQxO}aF;fK@6g4CQJltbR`$vO~36+M;G6>WKabUr4XX( zgl+#13`97IBk9knG?H9W3qMO5d;}$k>&%2jh)yf?Wl=W^Zz>hocU^!K$PY{ z*4mRdOsD8slDV!(l1IbeNggmvRr&Gw8O%%^bWuv@Z|2SwUz%b-twMK;^C63K(hZXK zuxAhgSYAvBPC9$m%u{D4A)id&_!fgLRpK;B5ElF)l-8wbdXr?O1r+1@f(AEC;bGzw ze!04CrV$_trMSXAP&Y=-Nu`ds((YqbHD>AImthMUT$XDe^8RG=yDo6Ja=VP%pL7)ltrb z|Aze-L|$QQGcGDp7s6|1Q50@Kgs#HD9l}?w`N8?8p|H>F8Q`#x64q3-x^?7w&w%CI z)=?+Mj|lqa)EXxXFu(S4<)ZuQYH+=ybk5wne{#`*kvePU&`GD2!$(wM?53y*w8eb` zvALN#e{M=&ojF6T*U}O=eGUn4KwsS%d09>s2Yi}1C?0gpw=1vc#vcH%FIzfNmmr1d zE`WV_IvsU>iSu9zxW7j0q$3hxC~)UG%+Lk$rTA&f62|DRC`Uuz6Nj$SeY6`*Nk{^9 zb}V_K?uAOxA9kIN^`do?fxFyMSCbkt*VYsB0Fy8;m*~;?|gHXK1Ej{ zGlf3>JGw@3UGUV@ipBn><0Kv~E+9gGh{Tkpo}zPQF*9`K?_`F?l6YVct}45?zwh%& zn_+Pq+cL~g8S*`&)Q)9;em33RxgA!ZC6}=f5*WIWM$h#Hx*SOj<4}T7vqtA2>JS$< z8`}RErM}F6kuD~HGri{Q!)3U@iS&=q+4BjDu-U;o1hk^VI6Hz>Ho`(1p7(HkaObK< zz%?eAaBj@sI{7dI5%j8VOV$bDgK4M zjxwkNi#)FTS?OuNnOrrL(&sMYU+W5>e6v4k{`EYmb5_yd3Fi27I$LhasS1kx)HQHo z2)ber5*Rc(e_n?wLF~mTT?3`hF~3pO5n6P8wh9+x0FGaVeJFmy5~Ln+lg{dN3NJqT zRmzUxpxYgC59gfHb#>V3bGjAEAjYDt*R-`@8^3vT)k}>S?O5CeT|~LJxKxm5x~?Xd zd>f;x&P`o&C64LyOb#6YRelJs&D6OPf9?eP$Y_y9f=cuVVW{^BdYyMi_f9ck{~pwF zG;Q*yTabYk5%9jtsqZ82>GsN}lc`H0{wv_AwKA^HKl-Yif4WY&xVMO%v4!q&c@DO_ z5!+#G$OGLNCCO8Ftgf02TYpZN5?uKyE3gsI!XE36D<}Eye(HX-Ui*xH4Fwr;b=5i_ z!RYdBovmT3$Gz4qRB$s{7vS6p1k^HTj&F4F%7(jyM7!?A$FaB!0`mwLc~)n~)bDin zl+#E}&9czV0PBH8KqMD-7AhLKDjatvxA>sjA{nb#l(=)%-aymoBR1hy(~`0KC!M8o z1gpE}U+RFhG7uBWC2MtltYyBg zw^B@6&CPH0=%Bv^JFL~!QDV4V)aqM1kntk`pp;sjFY_+e4U-sgTn9$jZoO`R66g3M znyC#?EzpEP)u&3}83fKXJ_{-O#gRvCDATD-xxarn>cNjdff=6}=!Dd1|8_-o{0bDf zaAPK7XCqF9w^i8`(;^Ca@cahC()@xRa~povVKL@K&7>x(Z={dStc)M+`1vTP!5UZ= zRd~|zJak((ak&@W-Ev;V1?1}k`3#`)VTY}X8p;ADxcIO$fBg>}r*@BbdK2TLbvqM)itz;A1pS@g|#bkVl!Qf%#^Jj^-6w{ zhHkxr<8wj!MqFI&cysKLHpK}5zs;0yS5&R&fo!k{^PFE^oL&Zon&Uv%%#uJpb_=C6 zZ3eVE>)};Y;S4rGzwTAg`!JwyRD@;`K1CJYNhY{PaoyM40bEV&>6Bw-ll_W5Dhb|t zciF&)fU8;&j`s%*?(9)O(PK$OZK;HNHnRjzI^kzaRwtSEAn4908+v1bUb zIv3k0-iCYETW`l^)+`!pQ9ex*k&(KZi)otv&W(Ir5+oq@=Av81yYT!b2#XsLQY25- zRAJXm(|VM{SZc;Md~Txh<)gP#ymwOlq6(Yf1n9K+kAbwMbzT9;y=)V2%O`B3jwlT+ zvXYgb>O?u5o}`5+1}p0DR`Dc@*^P=SoarTSQ?C7l19m0!tD*-Kjw?2CtfWs>Sdhr>M zhC3V5uIR4OQ%Ovqg8rR~dMWFhmdyBA>Wx=5e&8>+Gd0T5lNq`ex%reEYGShH8o%+4 z;RmGEOh3KoiR@WW<-~`*hEcX*L+IaNZsG2t7D81!7XC+(hm!YEtzPlJV&WTT z%OxKzYAwQXwz2X4e8yj`LFw>6&_wp^qKUHWNliq&*>-mf4050~i;XRMA}91sONxGW7I^1IB!9Bv(>t50s&X;=i-I_wD-s=c!lZ3n zu(t-fHWLX7Rf{9}1?`(6iK2c2PAVsVFS5rLTTx9VL(?0iIq+bpiz63zr%0@UYaTkm z$i0s*+M(p)TE@z@^a4dsYi|DTq7Ll)j-p9QbW?vCSk_*EV1PI(&nraToQ&V1QqYz) zQX_sLIfrjP9Ph&ibZ82jFEn{?e^L2Cl!V=+ey5KXRmcq`EM*bnw$gQ-&&;{09^kP- z$EMH*u;;+N^eDDrhfWr`D97duA7_($Xjg~lCFdGzIC8O`uq|lSo^@wM_mzwe3hMXp zJk+V3DM_U(AK8gWjNN$Oj0|IzP2dEbI*zb<%{YG{Kks+=@+5hX71E+kpx?fyYwZ&hEF;` z)@0JhqEtEXKs5>-C%Mrk9X#guw~AZyNe96Lx8h`xC%gE)sFsqEE&YDqLe9c(cnnzr zZosBx7gab9NJy)$JUuW7WL$C-yDqb9Q`|i8dKanqpq!$bav+$XZ*6QEI}~Fk8zuzl zjU`2cxTCr8wp{w$5@R=b>WYRdhtmD~k9=RFg$LDGVo6bj!!m?$o$Jf1mLRj885jCO zAIPPaU<3yop?KIjhd2 z{%g+eI~A`{qWf^I%IpzfW{WMu$h@tj`eJ^}7gFh`<_s#mL|IdR=Z`lehQDk{d)u+0 z-o=ZhAYk=l)GNP)6nElR;b$E-E1-CU5_jg9%WIopM21?4N)|b|IE-uHzulIz*I|&4 zs#)AjIfQ?&db+*~D!jx~33H2kaj`+$?fBH=q$V}$7P~5eV@4LPp%ef01mb$JgCWHZ z%Jxg0Mm8`3`L}EYbo~7jltR?8VX>LSgc>FA4(1kjVJS_ED;%04pA)1;+*GD<|s`J?@s0!d6av}jzFg)`|RtJkZz zrxN$uqg|W>pr?x+%6p|D7u{pKjnTnS^(hWi4#<}8-WzC3q#H8MJ&N0L0VB5CGj3q< z7$xG=uD=EEgervyz1N$|?6cjLA9|KJTt2vXmr}Lt_ceDT!??hn#L=524J-a6ZR3=o zj=)=2e&RX&WX_|DJ1e_(RPp)Cw_(4!y9?F1`XiuKcb34Sei&bTN9h7zecip=zo6?Z zu6{&Q+{7{4ZCU+k#T9b0sk<-x9{DmFU`vc(!M}ohzw<=?z8S@1mE>mzHA|plF_%PM z`6R%(vu(4AouxiV6-uC5XQh%}7bLd0qq9MR z#VAho$hy4W!r0N}#V3_uFK*6?y#zM!YyjyQKl~D@PWI~J^6L*{QDU4mXhiav^fzl6 zSKM5QX_jI0i)Co=ZiNQ9Reyo2QAx&hI%3TB37{aqZY z1heXQW3>(%r*;&r>WJyk;&pqA{gujY`S@YS1BjZe#xYMTeQPec`F3X(aHRN(98o51 zv2B|3hOS9$Crna(`GAqc>)SNqb?VvTaA_ew?<#fr=Uc@+`E2^h!p|3%$KxEXm4947 zKiR0%;!o1#&dVR2uG7coSBkTxk6~0Ipk)!)icO@}E|(W`M;=0b!*38hX*Y^9l}nxj z>wDW~!^yZ}#xQICq||NQ+@EK0kf+9qrqsS%;xk|xev>fWx?8+eDb*N{TMJ@gP39ol z;!)h1oAP>l0G}-YtJ8}YDP{Y6@V>*|Fvt(=gvA|~w7bZYi+K&N=H;{ErpggsZ0^_c zF}5Gfa0LR^%K|I|Y`$%IB#inY`mR;=k>KPK2*!g-aG=?>FU6~r?0Q`=9Z0#qElflw zA@eq+{k;2D+*Rp~AN~8L)oFBUJk&%)#?QM$b6av|@fk_RM^GZH_?vQ5Y9@G#%yJra z@p;9JaB{<y>s^6O-tite27B_0|53^$ zFE(rrw$V1o8*0r?1VWf2h56gQRo*H3U~ zA^Kt`Wv{z`{C@Z|;Hz1RG9utW(Gg5Cha-5`Q2a$%V_&ZOCwgDa8QbwbA~jC@QBxa<|AnVK+Al6DUpOZy$KQAh%@v~aNxG}N^s+2aW4&C-}BR3aZA1R1&Xfk-Tn1& zy3==$34>sUDRnXU){2dN&|Y6Bab?PB>gzq(U_X6~vgvQNFP~WrB%!7ZYtsLeNDldK zTl!4+$hErztr4O+4QlBNCHvs;1bp+)a4j2hz0d%6cMu*qn&^jcMnWCEld`FQUZx(4 z2R2tzL9O_~Pbtycp@IIqvenvm_~2$BeS$fXw4Q;vq6D+v} z>l3Uv&qhrh$`Rb**L0i_I_)Q5G{P@@8P-uqh=PPG|$kDk~ z=;Zc)#)w?ydYM8!^(g%kX>i)VAAcR<;KpY#fRzFOt?)>h5 ziE$O}ABBKe_2eN*|NTKZ*($ z@I1jW@jV2}X?N={7B@xLR(%S6|`1DWYPQ&-{mTvE8Be6(hH( zfjf68h|=$ne!jE=-SA&Rx$IP#kI*h(hQDq3u!Xd8h&-t`lSFic;P_<-nYjyUCID7v z7nr`ca*RiLJB@pX0ol=nVJgDm6?#R27p`68laJUT$!qu%y*qdAqFxLU(G$B5%|5N? zp;^V4601QqW1i?On9U{qZG_|_5Oxm>u)|(3>iKiQ|LA8T^girAB713Ukq-fTGW9?D z`m)whp1sS~>8G#b@MHAlsJMGYCZCr27C4Wmd<3{8>ux6{i z>StS*PwUjy{$nov20`u%@oy;C=ZU_#P_reMn5Q3N;fUIy;1lv=r zA0Ve>5QQVBn_qu|VX@Uz#=)loIEXDUDS0M)Tm*b$gG)ktbYFjXdff$f*lDwp39_yc z(5}0!AN+}=iz&De4|>A~W$9x2@>E1Sq7^%g(!;c7&}INZXC+oXLWYmZG}-ol>vYsmodZE7o0N24 z&fWbWvpu$r*BFD)NdRod&eSc*Zg1?WcU09lPmk~|apgn7TXp6)sic{iI4IIzTdKS_ z7h*f~=-d)3J{jL#xS0D9qQxiDZueXB`wY0?eeKEOhly|jxrC?jZzVHj7o33W9x6CQ zY1@%_%XMZ+d8)`gfExwql#iGgUn7sUXy?x^d8Hg0oo5?1oko3s6@!LUlN2ls;KFbU zrsmyF&o8+wPq)TAae3G?_tmwTHKepJ9;qn63W@bqpkv6vRamf=oJB!eMbDVUP zuDzax(=O0*mYh*i!HXn_QDdIG9}0*uxJ<9D(QcV@M?RKVvG4zu{4VwFj^c8DAuL-4 zfVmQpzIys5_?h&LDm$^|pGzuijZ;fpaWmahc!Vmq`1k25UjpUdqH0aH`CCbaOUnq> zI&pJT$|*T+O6pukpobq^Lg!Ml@=MCIO4gvnJ^pjL(1Sw5R{U#}`LaHRC2N!>>9;}p zKcB#!Z^Ekx_e<)qkg}2@n8hwI12We{JQw-GTc2h&3B#JDQ81;rvDka_Z zF*n>*ju7h!_s`K|doL|S`t8gOPJ9Z0tFy6|hA3sbZaZ@BufXhG-$@XRfYgigy`*>G zlhOZHtgfwLm8D<_xJWw_9QJkr303$@WgtW_c-tdXjk)t1U*P_Ls)icM!QOU2(-D>+ zrPR{6yAvB?a7tJnffI<0y$seyqn?l&0bD108)~z4zJ@fV7M=76TsaQP`4cu5FR@f~G={d+)% zu;0TCZYH7;O**2YZM&WZPu|NcqOt*v+Q_?YhIX3cPJx-&&yBN=P*vrZ1F$BW5NX(= z9NQDFe?JljRY@>0F5rOHiw*B?I3j6DLvs>?U?3PiwvfbgSSS}4WhnP&-+CMNDK*vX zablaTa3#9Ah=wD*H*n_HX2Rfc+>;s(vm~hr?h-1xac|CUx8~ze z7{VI>#ep1Z;DN`{hDuk*bX)SYn4Og@`&4?XJe_>%UTwtC-a|X*eW?l z(Kf^p_OE7dEez5Nm~HuB+X&>G<;^xEN`A^vl(=(C=9c)9njtJ9K)5b2 zv{z0`&HsE=>pFyBVIc-p<8~X|*wMv?BB`m#c0gpDpy?x@iUNNYu*|SSiOKr$oNm6r z)JWKf3gk3P4bIGKwc!V))H@7boH-R&VEEQHjweFOB_|jx*!{JJ6;i^!#-8YhG_kL? z8{Yt6UQUvO;v1iezk^uABtx#Usk5)^Ejogp)0^@cn5=v`sVQ5&n`h@|f%Y_wPY9AZON*!40 z#ihP9{8nE5bHXdHU7c{w@Gq|V*s>;kPtOQs*YmFodpec7bJWbH8LwXwQDc#qfw0f! zpi*zPuX<^PTM!BAW$@_;dQ7{KFyjWE4l3;{OM?K?fB(2`w||u?0d0+eD^Tms@zqPM zxD~H3;BVI|-RrMt_{7vcnGK)_)A5MF{Ss=}h27~~+F2f9g!g&Ll)Ci%QwFZA@F*6c ze(hFzNC`FLd!P100x(BKl1?3XFSwadw^k%|Tw0_1l}+wf}CsLKwr(ks%WQ#}Ycgmes+oKo6W zqWCZs)8gBQOFdBPg`1(sv6yk8w2M*zNoJ={N1}m33sKmoFO@D-l5ogSum4Y={TCDN z(%`Zti9lq{yVZm_WM==A4wf2hixQmAIZ)b+52zJ^*9q=iEv;}hHg&A$-Je?1+~8>@ zE1SOn9l&m0FRd^w5VUulA6ukAm0Fvz#G9qQ62A|C+?{>CQ~HzC^03;}^0I1}n8B(i ze+GZMF?O$XZ)1hN+#Kz9lkOVEMusr{BkM*Wy4kW0oHy>Bs_b}q$b(uB{ip1SIa&{a zUHyUEaiFvXcS%)d&0hd`Z5C)+W+`=I7D~i`qR>2nS@BW8?Z)<*m(7sofypQlmku0_ zF>aDqnI&6bTlSZOyL9B0+D&-4e_iu1?4Gn&aU-4@stZN{umi#ryp*=?&}{=mS<94z zLN(!>CY9OoDZwO~$R1^X$?*=t8FKqvSrB-6hkowPJy=l|&RX>N~6r8Oo--Lu*0!yp(7QRf&@6>07rKt_DabUd$n{ETApsmz1N{s!9&c>_Vqm zv_lkQnS$B=xzwi@!$}sH4jKqGZBi~csl1eZYPspdAUb(I(31KzJf)SZ>abM(UIbOI zMY};xk%%m$bn{TXkgQm5kW%p@zaIs@DLcGX+ok$x1R}1~Qeyp89&#LmdSTrBHY+AU zcYm`Hw#8C1f>nEzO8cVPk3G*}?en7xjqoNZ84XqcNn4ds?WlQJwFdDhcHvLb-zi<& zs485HPOThIylHj`YU3wrC&I|4}xwcSnVb$VeM3pBu?M9r>01X z@hGmE64OytDffu`(&dy3Vgy>}`0B${E%^}Cuu6&Oq6(IS1Vl`yV2k<3(8_jk=P@NY zN>yQnND%dtSjX4sj%!w;PQ*heeE6tN)a^F?R63d4Aaa@Hv6hWjZA_}5l><#Q)v6omAOJX|2}6M_Kt&X{MG8yazt# z*)yXn`_*-dr_RL48jmcc8-+p%|Djh$q&Tbm7sQVMGq)gL>b=S4rGV!h74DGDYNiMo|IIXS@&!l!>;O9 zGO8}9rR--kKaHOud;S~G8n{jd5thC4=Utmz0EZNsVXy9zF=JSwc<)!67SzH(uw-^rlkQvkv-o95?HcU?^)9rV_$q>tp7*r}r)v=`s*PW?nV#aDNP- zACR3^T8!QEcrTkRr?1ByZ=A3cD!=Zn%*FH;&;G{tyDW*Y)m!zTYi?khjdPjXK8GyH zzKY&({|Kuf<2&D`{^^2<3{x=eM}ktvH|P|r;Y!dDz9w^9IQF37DAOL~pe_1*d}Bkf zwT>zhyElpd=sE5Y**w%_G73GZ*k`X74(0{UAiAriMI?{$`2Cb50p@~Phg z;#-`0$RRO$&+y1rFP_<$?0H`nGg!EXjj@VL?C)4ej_LXA8#bsHD41wfwUgEq zf%%@k@7N5PfTEqZRqX<2IVHda7rSTRXV%S?EG3Sz1_n$`hZO%)&!$8YK9eYJX6&Gc z(mtj$+}R8&pg<^KN#bW_PAkB0^07TWMvKEBv4y^VI)~syEu2$$E~{Wpqn|=!U@BX! zw1FkW4ND&Y=MfyYl2ns*(sBCbb98r70h3(CCd!90=C&P|xM+T6$*qNu$_I<$CyNOa zNIa%nP-+VzA4kAk7Ke!l0}e+R>j`}>IeH5kj(Q?_GTQ?*}^EiWjF*Jmt2uC}`R!#QiP5c^dWr)tq6 zvoT{w{3MTZVs7wvAHd%tr8`9OxHg!9ia$Ct7Oc;|&ft^Q3J>_EGDz&&ov|Q27OH|z zIuYmkF*aWx;Wtx3%8mpi9Fst(ol~hXtt~8CoFB+osIHMPdj}W;A0K-V0yy zi4MaUE3H#8hk%wu8UU$cOF*d?zlG01!jR0^LRWl13hCImZ~Rs$DD|joKr?7qO{~ z{pvcWO6V>Rj_p_(U5Gqu3BC-viRFto$6+=glqwBZFqY^VoT!SAmv1Y2Ypo#+T&p7P ztzzteYs@4t_Mv`WT4@V%1AD)QF}LFg1h)P`qo;2Hw%edMVxHZhGAk=auV?H(eejI$ z2&M$tP26B@Wt-C{9tATg$RFW%zKn!I9xPC@m9%_koP{y^Tnb$hX22n>bTH&2W>@xL zwe`_wWGBLGz_F_fx&*W7lWL^A+_xC~M772qY>e(DI^dIDyjm%aZ{xv?x^0|MiWR!V zr1l;xsiE4FxRTf9VQ2A@DIc}L1KVSYr_!2OWJyjT<(G77JuZ+Ke!t;;^d##&72Yd?P zM{znYMghtvemDXt%Z?=JVwEhKhL!YI2D*6RIOT!hMlufXDMyc#0L&Dl5(UMJ1c=D( zN)95c+uElYWaQ5giIw6`02JqzACTM-pUVVKjW&vY^NHX;Jy_1-bZU1J0>w-* z{26}d=j-pnqQq?2%tx8cUm}t>)0y@=MpYENTMy9BH}*2Xy1egrus9jMVxO=!v?7q9 z#yjz1CNS&wbf@*y^<7l-dg#HTUqaa$j^xUcMJ(#YaOLUa9*%nL#Xl?!kOz(t6hQH{AefLo9;!hsNt&?gr{A%RTV4 z5I}D3`wnPC`!^oU?H+Y%y!@P^d1+=@U5%9D1wk&A)tE1?k+eIWb`l9z`ap1Bjc{2q3V&@5gQ^7M3{tr1ad-xROMp^#c1 z)$x-+3X6VTp6p4e=Il1(le(yb3!L%WF18l*WV7^WJ+`0A97f`Iez7OYlet|0LCsYC zy34Vr@bOoDG*S{{JXy{Tw$L9H&4R`lP6Yeg&4NSi`s0`iC#I91|Q^}M4tM}rO{i!+X#YIK?1W%T8p5X-*2r3vQ z3;t^2?)Y|Jgglr=B5Kk5^3w7MrQ~l3jDDlmu z35+1|f&>2M5o?EevI~09)S=Jd146wn2H54nsh;eX%!chy zP)nZ>TvgIQ^C?7OF_CYkCv${IPXF|qHP>Q6TP35Q`RHh!sw`AcH{Rgt_L0gQVk3Hx z?B3Qr8N(K$@?4{)@$k`=;cYTUkcC{?0$Y;FdLGsETp*(0BTgk0=ji|m;T3>BSUlV2 z$%6E-xFbGk{1Qws--!<)V%%O&c3zjsO$7!SyZ{AHaLN$g)xl@Cpj#%AFbyz?vzeYO zRi@x?7W<6$O7=2PRtfe+>Cy)kN-`_GHm=pSbs1k<5kU z{p^Aq@nb#M+l*=ff_!&ArTO*APRld9oTZ(m@^5*P7rg0`n*?wFG}U zmh@KQrYEz=&f@XDt>fR;#^JhMZZwOZ9(gkVI+B65-9O^Y0W`bDtOgO{bG(7w)#9zR z@nofH?30Aw`9!nQ2Ilr6FA4I{-qF`9LXdlm8ixDj3@m3G`ZEOu?M#f}l_nrftch%I zMFYz(bLUtT7ug$#M(Y7m$wUL2CQGU15K*064K5?loM2r8d_$3m;9!9|9VswNF>0|O!QhSBNfftGgkTXpY8zOz-gm2@K*?2w ziQ8zst&FX6aJ^>~|De;-l@9UTI2nRd@L0vJ1_oAKhR<%?!GsGSp&Z&c<90B5$3Ucp zO7St^pt!g`(7@bImJ-;JX9dn=0#%rjzS2kL?n4dix|$UVz+al%S4u9cPg=-=pM_JQRd~nxFS-RjlP5Q;01j2#2wnHswlmSZT`jrvcq->R}b_ zM?%FPUNNvDyu%zCH#*G5?hsioj{;0 zSNsoPw5W2zz=pZ*A0c^^j_J_P1l{jp;tmMtBKz?QTTa%jVcP_TOU^?yVGcRml%_>O^%XIfgRZ-svyYDOviu7Tyt z$q%+@6}hk*dI`?CQ&N_PFQj01Fksw{r4UQ)e(YLsCRF@~LBu~YARy2pJtOoE%%7q+kV(|4zyiR!=y;Q36Qa3ZXEnr}=i)3#vHqjwj z=GjtSu*`1)y_6Nb28&RS_WA~hbbN9M=fIn00%0wDQC`+TS?i}TRh zJFO;QVh|ppIk>)qz0eENf!&<)?)z?*C7+HUka!mA#U{B{hN%gUeV^yhTdYI6a{c+2`_eA_9Y9&{%*hHa`Bxd+-M2pp-U;Qb(Z#G zS95FjQVE~5aMZD!)LFlt7yCxfZ|qY_3%!0Hz|~SqBQJJT56LR0Qe9UmUyKjIBB`+# zE2!I}AQ+|Fhj9`}AkUYEQCGZa>cz^r*3(D~RVJ2Ccno`t^HRm2w8+x{9xOJr^5{VW+9`o<%!#wTyjTl4 zqu;BIqxuXGeo_lrNeUIkFA&|VFLYe%eZ>lxyIe(dO~ycg1^K5^He?eVh#E~|(=adQ zcAqQB_{V3_=VQ<_PkJepMBG>}=5{Ryf$Z{a*YX-D4GC0T5P=jBA0~LQm-=$;xt~cY zN-R#L`9%HMUhHe#Xd3)NQlXVTRpkzG?I&1-zto?vcuZ?R+r*q&?k(-D7t-rtD@fTx z)_AcuviQR55Bm2j+;e}bkTTvxD&XSeIxiON(3Fvhy4oaS6TasYHTHV3S2CL0uiD#_ zF@>xZpoMG6E3sK$Y{~RuV`XEE>wo0hRnYg$Lv>*aO76RgqMIFXTi0|OsDw|N4X8wA z9rt1-^!tJKQ>i-JQ;8aV*^8ajJ4fPbnPg6-(A!lntf}g35sd2434b6DT7wVbd6pMD zET@|r9BkTrC@d!muA~|71fELq;5S}K)Y<3i*{_|qXAKy0c#647!S zRf}kqMw}Fbk@-eS<}vbFo-q^yZ}C)Cgj9X=O6y_bqHwg4m6W-enX=RNp=RJ|zsO)Zjyv#0Utc4LaBvE+2-^Cxlfrc)5tDV*b9wG*`HZr#th6ww~ z8J&lp0_*3MrGHKPoUj{3DNy{y{PpVL`hQl(_&+qCI-IDTmB77t#wHT)PaTY`rhd5O z3_b<$A^j*-b62Z~kcVDLmQ}A2~Ez_lKq1kKNW(v0l^f0n-C^OZ_;L>R2H<0(8 zVPxtfJ|uH%Pmd>A@Ym{5B*ajwjhNM?FEOIWX9LnMH@VZ6vi$~{%+}Z4RrsWB*q|hS zTwr9k^yWw7Qve?T6cK{Z9hReuOO+fW=|ze#4|NeJ5p`|6{B{}%FM)<`T1?8raiH78 zlM3T-F&_%7~>@64b~SbJnVD9Si7|3cR=E0#vb!^esl_cIJbK37(U$d_I6L1~_Tm zjTlj9oAJxlhY@jYKG-0TRZLlBjTC?EFtTF06qMznC0WUspbXeWGj5sjvDLo!{Tku_ zV~e1R4=3w+6yM!YLJE$|1n_gH79_d~BkOF?EMb!cXBt$by$_N2Zvy;FnU=dVZIBaN zJ6Z+tIkk{b6$IMI>K?hOD3Wd&F)cc?=YLU*_%N?YPq=|!@C-6yg0yo+wBk5`ekyw7 zx7&_ulH09wZ}xr#xy7mrkM7W|FTt8*7n863zbQWGEOAaPrX(_a#qYlxS#f=Bu>C$V zMVi2e2`awgI(=N{a{2{-;6i_!~TlX%CGoMsD_dbH=+D&=yvMXh!5tB-P2S zkEQ1_NdXj-xPho>d8|O0;7^S(Va*9Qpiln;o{q2ic``CH1`+nc$O_5^eEjUX;2IEb z57o>5PeWoA9*=7;PYb$Ox4bA4_|;b}5;fP6^q-Nnme*;|pE#bh0!EbwOB2ZNV2=%n zmit3-K_bM@o2~NV&wU)&yuB&U6BEzqf-b6>!nuRkxx|A4y_K0vIx6Uq7nL}~V3bso zeQ8R(V{#Sfv6#Q0lvRrCcI?^rR*yl)-e6VIevzE;z!UsNUjA8>H_N%8&KCtP30nBZ zir(;fz3?@Ucv94xU39$>O1d{XVro(5YdnzGUUDZHci9r^a-wQ^j1#iXqgnCbi5PEq zh&uW!kU_lfAsQa;qMgaExPtDrUf3V^eiLq^pq`U6eF-~E@}OiNo^3>94pFNfIFKvf zc_3XYv&I&Hu0OZR*8r;+F*WFLS=+%M2KN{f1s-C zHUWZN8Qk+_cNoklC^uGxJpJ~T$keSCF!_Fa5=Lc^V>RKux_@)ErKkg6sOAttHe*U^Q!;J~3 zVp6Kai6=e0*+5r(Lsd#VA6M%~kXb?7mE_ih4{wPk0>mG^yjg#jWmBy;*H1pI4?(QW zqnQd3mP@R~xZl+kX%VFPLDb`R5J9Lzvu}bdBE}E*W*u|~dLEww_$81Vu8F~S0>mKd zkMU-G<%Xv|Hg5NX1^=8|olCjNPEe(Ilk)aK3MEe+2}knpY2bSD^MODd{RDbda-Gj zH$tRYCz0+F_Ql?;i9Rnl2Nc?HLDbtt#tLs{(q+-;G|58U5=bcg`D%O#6vfwhvu3ik zJ6vvbye*nMjHfqMZAWp(SqjWjQN{U$vPUDrdL0pblZxm7C_USI^dr@h6po8GLYPH4xAAXF5*>&>EE8>p$> zh9xI2+=8uNzD)Fc?#*B~%2^rS@DeJhfdyHL4-dfyr?{5ojm_U0%xMJ%2QO7WqQUUO zm&vRLzw&0wT>h2XN@-cLL^OCTh*y5F_f2s=dZi7h6f73}~@! zA(Bk6DDn<=B%=>$R&+-Oc>mc<=WAs2;pNIA80m?sXI*0}(G>Uj!T0B|i}y^pAmfX0 z?fIh8wA4Jl9U$xsHAkyZZ0C_z$*13QnpmLw?!UNO|F_?&ulM-zcO&B<(4t(%q zgVS_l=W7Ee8;%y<)lF==E|2`ziA3sC1$lS;4i&7HiH+4cn4=UczJ@0!nQ*7|v`-PZ zPHgsTTqAe)Uz7N+o{3eISxMRKTXry}NMoGpI3cLwa(xMY^bIs98n!Yqw`==|qd84G zyw3%D+v6?Dv@@}qItg(%slu90CRRrF(*>T6?vn_{0u9252lEE#EZtEmtn39z_^Qw6 zB)7mz1^nECT=;wYqy>X$_8b%9ciOsU;x~B|^T~OjwAYqxbuYu;RlyF1 zd{UCngWvTdP3(#**doF&L@m1C7*;*TgBMRVVL$616HV}YIeShNn5-F#=wMVRR8~U4 z8Y>n}HnH8Z#V;E2a?3q{{p_isS~JzeKI%@S${o^GDYOyIXVY(yYlevh>3nZ;EB>q$ zFP>#WT%oy_u)lI@3!k}=rd}}9Rlsl1Z?R>biG}FJAKi-U-=*S;DJDehl981idA)C4 z@YdL<63+K1koy*ynA^p=B#CkdDm7aO7IS+FlGYtrPPuGl+ECy+9C2fDMNUQe!g~~q z4(BFBt&&h{*V%uAj`j6KP!gx9>N9{tME74ztb&K~qGI+*Je|aS*WpD)-u6D-Y7vL` zXmjGS%wx@mK7_+=i)m!G2{Fccz+m#Z%ETV$ykm)~Q=dWU zwg&RxD^{CW8%@^5QHX7w0K~*?tqJQlJ?V=JyoZE)qrI&E3gAA?=R73bROOh4>Y0Md zxC5v}9&oWkw}wU!sg3Q=sKB}bik2Tq8W)`2o8Gx$Ze7>k-kN%2ffKCq2Yj2yVD6)ubnLMiGrO z6dG4c^uJv8YpG!K=m~N=h% zIerI=GpEqWd!tb1kUC1R7RjSF7-Ah5#HQx9w3AeyK6FZ>U zLZxhKWQUa+8Gzr|F?Qd?G9_YbE^hTbC83tHG}uC*sQ3W>U#Ieuf?y$f^gRt_hZipM z+WpAHu4~`-xqZL%*u-u~L6AsBw7w?-s<- zQQbyfp7Pwp=1LGlSfjF}>RF0o$;*RZW2U7xlMQsa`OjG<)=FzE5rt~Md8&O$Rlaz` zGW_@@{LU|ad;w1M@#vGQSd4s)9;g>|cte=(!)W|Occ^olJVaIe=L7!>x~gN~n?OaN zX!p*|aMCGMN?`o6uNmpQ@qme>7sM^RfZfavNz8uz z&zkULK+|mrCA6VHMIGy7W@{wa=>x7eSOB=+@vpc98-j-RYU-W!p6ubO&5T`E;SMuf zp?&|Td^ccV^3#Z~^Z~hiRdMtl+5n07`_l{)N1>th{5((<;Oha57rXH2G%pI)`%Azh zT95ua1;AG|;GmB=Ec@p&vssehn>E|suov{pJv0YB8qlGcxy`JPJh(g)H?Iu`)}ORd zc!R&0EtcA?e)hv*8q^nPuDSdtbUKyD4j43Y@gsT6td&%yL;X?p$q7u;M%A{^=4?$w z`%qo$O1yHg8T0PAKr=h1Pjf>*Q}K3k-hzq)Wh0!`v&_x4!2Ff&%;trd*$Jufv8TJ; zUk!-cYU8QC3GijxLd|TgNnGX0?Q+^BFwC^zR?wDdV$D@G1HIth&Hopl44?-w%Z;9#Z>W7#~uCz z;NdB~wqW+KF2>9vW%Wcy9TWoB)pDt|Tj*F>Q}3SWjHE-#;fD(XAy`~!gHP-W%xp63YvY(Bd* zxY77?dJ*4>iSUtdvHH`my_E0jz?4)Lv`T_+wPw|2lBBohzCHswlGiL}W?MD9u|~qH zhIeJlLva$}rWZeSPDcF|yb9c0UY=CJjFi2azsXi=Dp9!d-N<9T6Id{BS<%eiNmTd_ z+xB!9uo(3LU{)nGq@mf2N_vp^2){%4p~_~qK`Zq!QK{lvL`DLhR+Q(}J)72yxdzO0 zu>TDqnV)P&O)G8oR>yW#>^5_b*xS~CtCv{4J7)4)>b`R{pU@q^Zj%{5UcDxIyhhe+ z6bA5P__9Jma;4)xMpbueG%*S`WaNb{=r5}CpqRpsKdAMkg;ZHw*SZ|7pV#~iRdlT@ z(9Zp zY-ZJz>0YnQ?lnf#>iH|B;SJ$Jpdi}A!_&aq*$BITGc$`*(f|bbI`5UeC4rfS=*Se` z=KlonegJ5h5?KrMWaDQ%4v_Y>lW1P!e*q$?Ioi{shVx3nwjc|0@^fR&%qohtGPAq# zWcPEkKU>gd)>jxmV|W$ZT^`0q_$1)(^Zk_9Om1Ulk7e)JJju5fy`H(-i{H6|R#oKu zK59jXOKmaM=@dBO72%{xS#u~j+yO(g?DIao8EXFr=wiGjbo)>@LKOb)f8eK!`NxZb zV!H?5eAb%Nd^8T!<`d((ny~<@>7XG#1@O21asr;i?Y#;0kp74imOs;8d2(0V;XqY1S3B7HY33*HMep6 z%Y_xbXs*MLX7|-=GQle+f}aq+`(EPC05fxYr-(}9{6obPsO`GNtu>zNm%yw%EEkO! zbBCDOGkwgfj88}e8grDvN8?MRcsc^Zy3XbX0url6o7q!YOJmFS_>Yd{Ei)*M2{NdD zGDyF8uSRxDx8s$gv*YnquQ>+GFJWlDpZb8KzLEHf*wGgdhd6}y=tAB`{hMVqD`ydIL#Yf0!j2m$xLbsA1` zRd9%+sC8KuSM<1VvbzD&;KloZA`Oy1&6j}niWXbUY^tu-417|x9;g&YiF(`2%yVk%l0DC;`6p@` z0sjhXk)<_avcnQ!4ik?-dpdiS@kwV-Db74)W+Ae{n#Wany955RmYFAZMAK=glS}kE zYi76Q9BJ%dC3n9BPw$ZQQ9gx}DMa(lZ>mZvg>rv~?0Vw*3ry#dxmrHYX7;(23@LX1h&4PSb z1UaC>FASBRa)c^0Us%hZ!j^JS8kg&>DRg#IGT@{Lsd5eGm3q0 z&8)M`PUY~phid^`(5xBECcuP>5%10HHyJWttHpb1t>BEeJL9}wBn`~#KEtiZ@Q*`B z9H3)7`wfD0<96Ja40ZZnUA%}33UBoF?#XI6loLKB{VYB5Xf1UFB1`P;13{vkUc$-KL1WPi! z*Nlj%o502-qo9H9wccdEA~_U^+aVSfq4&$%Y5}~MQzYiMFmJseDVl0fuouW@;CDfh zQPA?`YHjR^vj^v(xp!Vl?+N8^0a-}wjKe-}eIw?$jn zDLuTJjZeCdIE~-=#es4LPNsA$DQ~7Xe2LwrC_hweFJobG@?dkKrT@RTz(A6&iM|Omv`vYn z0I*3V3l@DePreDCw1H6&P+wgM`HN8jMHGR&J$_?sscLZrw=9{ZH9_ZbuDa&Jd^}gKXADr zWYicEjo=3wTUcJPv%cj^hmaN2E;BE{7Nhs#^tA%kt&xSr>txM|18d?C3c_Vq^6Am) z>>40~f>W&lUL2_m+}zR3!fMH$G$dhO@tXkb<|Q^Yx47RRNBnfUwr@uhIPyY4A{zn9 zbZbhrivLFO&zPtf)4I?CX!8;Y+EN%oh~D^*I*oB=qV$5yxZy+gQJQm%h1x6f7r>F5 z$8`t$yg~x`?YiCEG}HcTLe&j1hEovGPcn~Lv7NV+0gn;D7o+0J>}6r!$;@^5XZai2 zHa**@c4d*?+rs|x;Qf(9E6lUg$(2O+*BQuJ%M%5DJzE*o-ognY(o2?mLzR3LvJ;`Z z;~2hBnqTZ3U}2r)elRblbg>gq+&-&f2XI@vEX*Q04z;jsc`P5YzG^Vt8~hp2SSAKZ zp?qj*GVpC9AsSuT>G+i6-Ut`JjW2~ng=7nh(fx;S83Njlj^|VxRDisB3w$piejjIH zkMs^RMgdg~U!hF}6}E{M=FsuIP=FL2X!zm~dYVPgDHhgB4>~)P{jyO7h_A-?a8Z&r zTkA{q=l^d|F=Ia5rfe&X<<)w(Ir=aR0KupIXfg?&?o+IfJ-~7pvqSyXOd^51!v8q3FbHD z+JxT$2?t#=5c@Y-us)?ZrW>dkz-gkV>s!T0Kn4-C)xzqyZmb|7-2L;fITVxs1&pOt zV-ss(P4jd!+gFJ&QXay|hwrtpiF|xh8;j!SkmE4&q{^6{%gf#w-wzA%2F5`KK~cWj z+m_Vc-UFwbu0ZKjFY#Ph*n3&TBbQxmc#7)cWU~^|hreE{ z2YM0itOw21u#$)dO}y_h`Wuo+nS+@}ENrQ6;#KeoT}JWkgxM*E0JQA?XEqd_)B6Y7 zC)6R|d>C8p6|(l!l^sGcNLoCatS9Y>~HLE>NVrFubZ z^_&{KFMdY|$9)U?U3Rqt*ZT+4?r~Zbg9E~es(T2+_-(*PiWUzMsOji@Y7jbglJ5dC ziZzhgX<6gj@)Vf+5gM;);Eifq5xeYviur;JGv;{mHHva>cq*|lPK(y0VZM2mTa?oQ zpR~b*lX&c+#|v^fn)FU9#WcW&az`yv@Ud4GHd^jGW9o_nuJs3H}|^I6#svLEc8z9gOQ!l3IZH86g&UIMlZ zuL!le!Zb&Hmzh$rnYYE4AkjI$l}*z(+KpC$6sMqCLb)g_E3DgQ*8dc*D`It-Zifcc zggU^gwco~Anf|g5Kd%%whoy#!y2Y(b$a4Ai@7zbf1s@T(PXM|s$R{*JXTr_fl%pM0 z!ivnHW{{gv5Fp4PE66Cm{&vSIx@BjxG65^dJ2WEEt}SEzGS%0zjaQFn&})p|9h0!b z)rX%1Jf@!&tSn2`?h(J1k(Af@#!Kx*BB7F%U6LEG>3jRvjZjq{J70z|2bpT%ydhg# z|E-hq((ELUMqs|iMBsuN)-NX~BmX&eiDuG$y##gbopMuetF2uY0Tb$O(&8sY+WalB zVHLlgl||}3Eq@bI$$0pVP<{=+?SlO6c^TdP`WH5Zf^t7xbfrk1AR|Q4CRP?M(_i!3 zDZSrAZZ(t?X+d76Dbc^Jh1Iott{*;WEs77VtgMzY#G7XrQzk6R1#68GC#St*&L%a(qHCqY2n%!1~{*K~0tHYdxe z+1cva4!n;(DLLcNv=+qn>26l!#HFd?@r#vyi2@Oe41zLHIa?q(Do6&;`{0X_Kf+%G zcfH)YjC9fJK^^S!i^@MjdNLsuUz8e~7xK4wC|N_i z#Hx7DlLM@nxM;njZ>t=JMB71DT#fbrOK>L7wqoQC9cpzuKoPO6U>Qmz{)lbum|cX5 z&M3Yj>#+TYe{zik%tsGFFo*S)oo%RPb?8!Y-)>Da;l3l`c6Fdp3XmE@xdXKsZDsZ3 zD7VYiUuyq?cD{usOKUSCrHXi*jP55BwW(Q^)Pj)UA$2w!$`^c-fRlAa##vb*S=L=Y z{`!DcZ_5I85jV6}ZfZ+wgMW; zf4coMO<8NWhG>}PcwCSwFU5xj9TiQ;Qjb){EZUBS3ryUK(im8 z^mw0u9Ad<3E2|?jW-4(iqA}3b*QZVjB=7Sr%~HujHI608cO_-3>9%T#Q; z-Jhq^LDR8%@|PgvM47Et_tS-BMH4P`*+N}Rf;5R$+pW0GM~dC2o^Ez47Cd?YTFXDE zq>A#ptgJCpw+v$*<Jqf7G=A!c`6#K)VrDGL%5q{9hCdvx7rQ|JB1vFPTslkHQJV847 zb@ZV;!f^!dUmv(SeV;>wAf%sVZieozQg9Z~9n%8>g7N0&AIPNNowT|iW+g%gm5uEY z0q(PzAh+_Z&TASfXa+Bm&RZFmrQNp4zY%m4?7Ev;3CzlCcPBZwxM*dAbXlHBta9S! z23&E$<9cFKlKA=$D;wfEJxh>JzViM+sn*j5asIZI9hb%5<$bfXg_w%A$SwBYMTBmW zTIn*zJMb-}IT0=8rB-I3l_KKaQ!D$=liv-YDSz%4=(IVL;&TzENk*_So{5?$s3lX) zho$=1K+E@Jq=YZ6R|2abUcW@lDbsazUh3~B;CE{Cf4go?8QjSG< z3;+u83|zY8lagKmyPlT+Lo*-PB{XL564%?kA}y{Ky0*TIGjXxiX-29N=KD{AEy#f>)BN+x%}nJczm z!1ij?4C9*t7A#JA+t^+YX>&>Bj%I(;HnV4Z13>iMsabu2TO799@ECa2w6^e3+8-6y{(sk&U zY-gM~W^zqP&1@2F^4i!?gQD|VPI_-nvBGIDD$|af)%;8hnBpUmBQ2=z#hDyxV?8B$ z*KUkxydJ=L883z>#e;e2FdMrdfwXQlve|inv}1xma>;$WQC#29hbTS8_^nnpWG%K1 zK(AJ}X#Set#%@WtY94T`-4EzWjK63@(4hm7vF9HP*w}BHq#EN3_CH11@OK7&M=87S zaiXN44L5_UanC-25d?EwR_c@m7kB>+{L5kOF+3jRVp)C=1>+^7T-uw7F9EzHO8u2m zZ+;eEg2i~;mk=qB_D3Il?nK86sxW>Q()=hXEMZ>VWyR5Jvapm}P;YGrO8`l=Jq71Dr{D%o%fs_al&S2$b2#u9b6*dCuWDg^;0`fDQJ zuN2&eiv9UJ{EkvB$_p9BK1!ake$L^kho|2(p;OC&Xi%qaQ%7`O;nB>-ev&n|W=qY= zba@Q{m)59Lf&Xl7V+&;9rAPm0cNN+gjS3~)f%#_;X5yly?Td|g8w(x!eKnw)cnUJl zr?T<>k~F1CDoXcz2r|cea%+}CzUvwK@;r1losYgFFiYis<8K~OuAL3H_DYJWF`-M5 z!yvF8kj6;_)*eY#xEc=Xs8l05cYHJ2Ddvv#`Ue-rPCSjxEo(SCf<* z&9Y&d_;w=9M^1s&xYByy1;Eb+UwRV>W66_Lnr35{WZ>KTAIy&j@IUbIg;jb4VQwuu zoUa19cN_tuvl+x0(7a!^uRl5!?llVL*as~JD@gK+bMw(p^aY)n<4B5^P}7ee#_teu zV6lzewMx49Jb35tDzcd;Pc09xMx`Ng~d@2zzZb;NSHwF z6utHgrJ%Xh2epsjcaV5;4x_xR;okW!4qO5q9dGaEZ3 zGxPnBty}4IKV5*L%cvwc|H3Z)Px!3n@4fqv+F-pP=zHs)}lBaohg(O?Rm{gk!5Pt7%Y@Cts_?^UgD z{*5l@>&e5>6@vICKn9Bw4*QqG?8hSC<)y&3sa-Quf;5PCes)$zKTZ)pi~7`Sbllv$ zJAUUCOY_>|ds4Zq#hwBmnBWYEqPvPaLUWXC-BE+<)408iy^kHVIPP6}by++5goVN{pyo zU`$OrbXu`G{>paJ;`*JQWg(?EHZck?eRMrK<|z&o9Xz*)ZD42H^!T@*QlKh$Eq)ge z)f?Mcwrr~Vwmz(N8Kl)ipVm#)XFg50=ePJDN(-5)4WMg?D3xANlmGfQcHGY|S@afL z>flnqx6dKS-}Z66I7hRk;IFnFpf&IxfFw#ovcHQRPkm_4zQY2SVN!urltDL6Ge~_r zv1DNT8R+9H_<1<|K~f1It%m#k;lbC8&x`Mqd2Mv~ndtWEXF769n{;ZN&M(w5t(HtH7s5si?%vF?QT4 zqzNs3Q4Z;x3cPup33j$z(#!PTEppRa#f>}#MO$v~GLc?FZm+)B86Bb-oNIoK+Qh|_ zuU|OX&PK>noS}E?Hfjr0w6iBaZ;V%h0@Id|GwL_fj{D*z6;zznrBHqtt~Z9PFcnrf z=Ga*!d9b>+mbV`Zjn2|En!J=!nPt-LEDv9oVrSzeq{C|ZvUw0lBJ3z!?UdVH()#s}Qw}?P>74 z8niG>uaFf~!19X9H|$?-boRQ}`{PG&^uZ?j-LkVX@*L{*52HUNf}|(l2J?-83>KZA+i~Pm63E}j zD)%v?_4a_qGzg96=1reiJJw%hsp!P_}W)@E`mx*!>qN@ zh0k6=_Bzw(gWIYkU$*{Tv?sq%@u6CgZ8sb%t3echt%K&bmPgxmkl2*|Yz;R5J2J6$2G58d~$Dla3Nbcgp zHp;fOy=JdPZ^1}Oc+waR3xPSs=>FKE=#WGStN1k52NM`|JWE?oifTEm&eDL_Cq{Ukg{tY;c^zy7iV)IHs z`bw?N?>g-ARB+!KLu0&KtESBDuqxRLeu|B~NQv%$0AI=-HVv>gK0Jdw1?^xPqX$xH z_~cG3&dY3~TlF0SVnM)LV=J`Z4~Mb|--E z1zIgVIqIm-7ZF%O#omwRpbA|QfcKFUH6$JLVLLR<;i4c1Pmc0MBsG1ro`T3(Nnw8% ziL3;@7(Mvx5x#Kz*8x+Q(=`evvF*4IE2FE%zJ<6Q07QN~`lJuLq^Yd0>$|9U%7?X( zJIQSCmw(WPxKW<`TyZoY&Ykwb?iEQ*MQTjrzXFCH(JIFKp$UIZVBWag#0P8T?lw3Y zr8q>j6$_NS_yr%gtrRCJo5EHF;SgzMK6@OoLO{M^6o5pK)ZVe*H|P3*w(7uR7T4M% z;8?NxnGgFU`?|C-O^l`TVe?M~p4di5>o5L$;lmo_(`3+in@ct-X*2L8N^G+Gvc6XS zUCkoMNF?R;WyNv?f9s!WA86PJHHg_L_#&oz^UIwyI``8UR3<1ChKbU_zL;cbE&A@z zTMXt&_+3ma5A|jBWJh_rYr@u&Xd?x&Q;dp50XFbcsDcNI^82#Vx;1ALMzKA@7Yo*s zw8mb$Sac(d>lyx)QLvQcdv~HgstNNIg?!o1QlG5a=2~sBb_}(KaGU4N0jBe=)^tK4FFpp zvQipwMrH!~z)yQ=PlKbu|1iF**svwTK>XicX-#}_sl9a{>8^bvUp7MKG9xf9-3h=G zhD-pql^d?S-V#Hh_iaob;@uk-8O?mLHCeKP$hqTI9s!lhQ9a^Qlym+JO9w04UO3E48~e$zX;AK!%EM&1B_BgDzczARUa)J(nZ z2OsUlNY}cc?x_G7BWi8+WtnzKnN!+*b!HXJtsEqwD>L6ga)5n*^JQ!F+yQ#8k|P1@NhD*@868bz^FzV2^nlWy;C=xA$<(RxRiICIvQ zP4bcGe>n6Eo}t7cMaFO6LYEYaZu%k^l3)(^O!}cSB%h9yJz&!15Vu;^%0qimItTj| zu)qZZ^6{BR5^z4HuP`znp18OWvxoTeE2QggsB`#$cd94cd_TqC|qxlFt^ zj&CKLB+VQQaj-mm7=DL|alQ^VR~{)2WCmZSeOG0`O%&e`;Jo|>fb)wXP6sa6ms(!E zZBXSx9TKevkup zl^Ni09c+j_P1Ki0f$L_epH|kWaqsJP3s#6Iv+ zPWB^(4z}9Y8-!Ky5W)E!>=)fI4xAywcv=9o%6E7k{pEZwx+Jx(LClYFuoS%)_dZJ% zS`~A!MAv2S)IkS5=$rWiD)csp%$g3Cu2%>lXZQ)>l%Y1f;{7`ie_^jtCHnefDby@(J zj9oL)Io+yDLQ?Iy@OIOK>0IF$l;z?bFOX||gWvO9kE{`2K|$547!i55vxtoD4m@oy z*+u6(l}_{m`D5^}kcKM!A}wzx^>twPfx1Vd5x!ujHIO^_bNsdoQ$Gj0C0j>@oj+{b z01s3ZtHL@}1RNo1_II!h*O62BFo<(g9L%Z_w?8%)i1R_m^yaf58ZVwU*8xuvG6UT< zM^~1Z&5!>CF(nm`qUuV8yKpED-X#%}4x5;OIydyOC-h2=v;~2>J*Gkm-Ci(g?01;| zkH?`+2mr6P|Lg#YT`3MWMP3_z*3sA02ZWm;WK9@?fS1d@;rvQ|?XEvEhedP1_{O~s zX!(bg4rb0H84O~^vJb(}4Df?j%)oapLBRRsB+|wLZ^}#pSaqw&I^bYO4BAY<(Sxr3 zRK<1U59nJSFgic%(X1yZ&IZNUoKDy|f!Rc@qYgZBE0OYZsl31TB!dfpcqQPd6ArdO zHn?h!et$6ueya#Bkko-g{!CycMeIcgPF_0tb@1Jci!h81F2mrn030s-uEDFxCfE6& zKTgfS$i6Fr7Ryzdp8+^nB;0hcS@J;7X1+W67JY3x6R)2-Sd{F39|gWCI|owhXckqT zJJ=a{i`^_fETa>A1MT|^q_HmhI^~bPd*#4!Tdk+&zd>&2$$v(v9cQ3}RDX1s;%$PVhrvbXmrt8&jE#C!NvmzyT*+Zp)a>0RJh7a+d>t1qP zGx|a$({l-Kbh7GlY2eZ8P3iQ9@D^rYCrdJ<{9L(mAYRp=9Ul{NIoS@Sm+wI{yL%nT zOSfF$$#%Zai3vg9+Z3bC&h5mx{v0bH$Q6~^){ca^+=D^J^2PutAkGFjSq(iI=Db7Q z>3)ui;Gi2+;+pZl@%fGU=N-#LMOq&WB(%6`bIbzE>6|6 zY6L&<$|Y+}z|$F$Sbn~MlSPUp1)VP4>_biL=RiRLQNNIr^>Qhn>c@x*J7}xbZyw?n zh}|WZI)-?Eo&nE#FTa~W9Q^8CgzuTrPBzP-S->ZJ3E<5jhcI!iypz3k4KRwh+NQG) zps)Kv;&f(tE1R%mJ7VZAd2x3c>bf59 zpjIaCSa4_tc?-JF-l`V+)V(xd_1Y^oS0eq5#)z?qo}3 ztqrUBA%k|ho`CrjQ8A0?mcXx@PuL?OcEU0z!mD=p9V}M0b+QMtRNIwbk$4Tw;cfBJ zfDGgN70Bluo$i(*)KZ8FRIvDo$7`If z)8XP7VX1ixSom!eSh*cdrut=3F$vj;;-W1!||nnShCrP$6};riyqt@ zI~fu$hMrN$t=Y07d7G0>)uo<4i?}Vl+lg)WlKva^`=M?b)Gdf-k-*w;?JnxHY=S2; zAL(YyOa0ynwnw&m9*ho9$wM>%U!w8?wKpPYufX;TnF4fw+YHVV}@*Hs=wuEBLW^n^xg~QsG%GKQ=+P!_a>T zM_OG!_M1f-+gCowH<*^e%VSPZg~s*`fNU&oH1}f>MhWuztbzyLL0qT7ZLAI%#X}z# zgO>^akpitB+WN5%E?-Y#e0_BA66#1#e8jZ&eyo%Fjt^I(^WbiN7|Fik$?r%gKlSvZ z$q0UX^SJjkaXyUS5#k=8ZtMR4#s3Lf2-l1FA;p#Q^PA9MzG;jfv-5PIi^z$k|7y^9 z4!r|T?+KLUvr!hp8{rtKk$*r_g+)X!KRgJo2{85pNvm}qKNcs)H=_=hZ9un`yg?4G zzaMT&&??+fDwG`L$Ck@Uf!lw*xH19)TcAXP@c;-E0mJ>+B3IuhDRr8B-eUmpCV{#F zTmj=3KT>whXS5$1r$#Yt*XqQr?Ib!H;VBl<4) zWA!zvQa2EY_a~@44b+(U>|OYqnw1Dihy3E_dQA?qb`4iS-WtCPiB&5}=aQEyYJT&I z_HsRiB5*?*pFS`Qj4lFQ;L#i^Eg&B5_hVIMBE8Z& z|J@#jJk3WmI^@SvyrqQy$=;VL&xPmS$*rgS*m22IJ$^lP*Bv^$NmeJnyXgm z)VV8gI)|N{!7%cPzg`1Io={Bs`9U!4gnaKU26p9wtg;LytyOsh)Ly;E$&Yj(NCH;Rq z51Dt)x%ZCi&dvtlN)sy^->T|j%p2GGD-&V@gv)O7SHY!1<`y(`WK*#@An{>%7Xmp~ zYWS`I1acO8OCYM+yPODjs?NUy@>43O1qhApqkDfMlx<}Lgq_9%1hP~d7=^y6 zC^99Koxrz*@Ph2j0O78El9Uh4V1+(1RLQ7zq^S(LTP_zVT;`^fVgbTYYx)nh7}KN* z*wb!`^izP)(^$llZn%5O!&Wvt-@_&H{Efc?pKQGGcl+l6p^Z&%DkPa%D|Bimnu`Bo z`*I(Wfy&4;0YcN_7Re(e`kk8?f)TAh-V&iS7x-r5oT1+{R1jm6lWdM&xqY+)+Awoh z@?8RjbfYa0+i&ZW;q{Rt-XTh&SD-M$*y$v;S#pt=6OgNcPRj9sK;fv-QiyfTKm1E9 zQvJzQ*%cHhd~PlEKfauQs6HN0zs#b%Rv-|fG%6M-bTpn$laUo`HW!_U2N>HLBgtGW zm>uw^R6CUm6ej!WJvRv_eyH1IAS%Rk#280r>IEXn$7=8SFnA%f!L+nA|`bR^((S1qUOx1GXn+uDN28W=ua^H386os^e2q| z6r(@I=}$QQiJ(7`^e2k`Nc1O~{>0Fq5`t27W-OlVTC)5=wJN{4ASnsRa;#8)k3}aR zurgLiFvb{)TI8?$#lxs6Yn+r0t7CC3i=}_4+qHixy%iIVdpW>HuxCNpcxZ8IT`Vq; zumtyO{d?t#Vl^}vdv+zX;AZ_AE2O(ydcBUN|8=M3#!Hq1dy&j_cdT&Q6699{V;vVF z$c|3RCy+Pn{cnR1WIc04I)as`eX-`tPbeLmzuPmlII83L1m)xYSfPoZ)<=1T+SNi> zUHlGIR-BI&DtKEW-#ztci47PWw&4JU#3LWbav>b0RK6Q4Y&1SdN+GqFH`Du9WNN!m zT3AuWs=_#+{4`cLYz(y|EFY-%J{Z{&?yn0gm0uwO#vTlb4W86A>L%KHXD>D@A`a;! z8Fyvpr&!^YeVn-&W>1Nq^28}lIAve2WEIm1MuZ0&4J1$r35*jyw}!KI^S9+nqUFzb zQ7D`))|MX=;IcCTRVE3oCqheEYVmB$iW|km;fh>KIo+T9`$RgK@RNhW;^NGgm{Ed8 zPg{K_2)+OK2qnT6CseoQcjt~rd!0nC)QCeD#Uuy>uqxpc=MClKgnVPgM5bb&`j#k< z!s(TUzJq$qv5<^c&Q*&OD!OTBHVVMi5HZZgIjKqo1KEQ18F{r2dTd6CtoM`{OmOqO8I2IAO1v7kSYXt03oiE%0F0 z2uO%Bd_Ffx8hbwzW#R(VeHR_p(t{sz&eKh~+al$rx9`yzkth`D?!%kFv1k}a8M(rN*YX!cQHBbgp%mZd##xpUbhT z+v9}N^2jd#Vm#X#hgX>O`b>s%GlsvUm57HEYqBp+$Wlf?yrt2}kxZXaV^^j?W*eGN zZMI=goRF<#?TQoX8sjU8iB1i3A|bX8cX@0}Kp{0g7KeF50ptr^O;zycFAY1vSXWnt z0{zXHosb>>sqdN(2fG)id#}X_)!43tY;1UacQ8&EY0u3YfP&dz(3M#g8_{zRSb%+Y z-2o6T-$5(_v{-nZLT$Gu{aKBp5hanI3vltK5nom_F&kq>z0+}pub911b5lop@&5-8 zWyys&eE3Ccg-@XntWaEjwTIt7$sWBdc8-24t8T>=zWMs@wEXKbifO9@PiJ-3Jeg{2 zChE>YYfL{6xa3t0eXq@vH7=m)ujXvly*Qzh{mf_zh1eBM3TH3SjMf;l1Ip9SPW|G& z3t_!*VEg{2W~ZcPV^d;1w1Sie@8X0#_BL{g8=`tDv7#lZI{JS^jj*RI6Hu^1bW>}o zRUce?L~E2 zKkgc=to4q^lQMn}YZP-`9FGUQ1>y17yqSt`ItA&kYaZVuj9-N=;ttE%9xoK*G9K&_ zWDe>>FxrnRFiZd&DA(2?!UT$VIpk z>s^ZKTVz-~E)vnIz)V2)`bGweu}`5C#lL_{%*zYcPAVA@@r7@uRn}Ijw;V0T8D*Po z4nrv^#S8oG9qa7UWZe-_2;@;f?L-)5?ScE0(P?FGJTl9e+)+Z(cYSN4=W)$Ybt`Fs z?1f5sh2Fxn-&~xRt{Y)wBwQI$GG1tBJ%3!``l?Cv+Ur6`)&$*rC|g_;*`lPCi^o?@ zEZs`duw98Hxzv%@ZM)?93h~CPPNT{iK~l~ZWvMXaq?D_K;O%Muz=f#O4Nya46q+Mz zTrL~WgidG13l;2r!bm`v8ly8#wnLu?VsUrvIfol|8pdO$&>DECas{z(Y^|pgrPCE> zAhQlQnc^)eQ|iSV_k({ZPvLZhp?20vd$+V-pF5~B)$yTeuw|5p&*KGWW3oY|(RHTO z{!0Wv7aNz;N+YdeHlB0NZyqmnvv$0Hb|(yBK`+Lwybx-2lIjUhh^@{vlX z8Sz3X>znuWh79aNZRi-=_tf6jyxAv+7h@l0#tTa<)+f}C|ALOo-W8c|FB%spHm=H_ zv*LyO{QjmW);pW#8DlC_pLDWPwsuRjzN=cI@~^#zAj2Fmd5Y2UAqv8g%2#vag<-}L zk#hL$+wU@}q9gjpol!>=%FU)Ktro@$)vbkHch<2BlM%5$ME0pSMXUfeZHiM~yf76{ z`e=_g4SfVQi`P+OzJPD`2I+IF;5S_+QtzFG-kZ;@xR4ToR%&`KN)fu;{ta$t#CcFb zi;yZA{v+D3wVzKf9KBwxLD#t@`XN6cE7@#r8J57$4RS46d%t$tI-Qu zYksF5AxG}RqyxSTeFGIpAwdtT%>G{*^^btedk1CqukmZx3E*fp1~yPqqI>l%-M&{f@;*$@cE}gwEl(Uoa)qD zOu(#lqct79{in94*KPh5wPI7lA9Elcn|SJMe*O107|psxUDn7NXclb!AMpa-;XD*C z)YeDDCeeT{S6$piKAs40X^>|~7pT~v1L+~Y)mJnJe@?Y!c4@}_i9=(Np*|N*>@mRt9 z?5jkf2gcsx+`7*Ajul?Ic4c+FsKq~XNWd(>qmG_5IonfolyCWeaAXUf$77P)&&1`g zk8)&t(Z66AgkmVWYLIL_sxOQKk6`uc8V2*P|B0JgHqi2dLW^U&p2Z8_=#d3;3 z=*oNrg{D>^_VT<{kBaR(#Nm?tFlxX0ltTn%vG)R^ul)HoURYzSe5tWNZ+L3ZG?c1< zn$?WWhHzDdgbQ7U_$IPi&nuW&)bwRDAX9@I^k$>N($Ug=8fFWgN|s}Sa7}xTW#n0D zJ?8UX7fj1Ud+O|{)t|+&l$nR19L4BZx}$OlnOw;}k`{mnX0*h^NJ^qgd*1}y&83xp zhenj(6#)stBx^5uGvd+3zmS?(SFKZ0m4}BQ2dt9Uul@bxKGJ^0fh~cZI5ri}RbrKQ z#S;pDQtZ#sS9jir&DXBlbdYQoWs_kuNNE@ed28Qs>Uv&}t+4!B)GVh###NablTi3> z>8Xp7M$!|CpNiv7#W?gtWcf$yp|ja{pKP0j;bavW3@(SkIygufTPi`=VxQ6X`JA#U z9YlaKsC5~s+G@4x# zHLNyH)bU<@W|IV=hqV{2`KZw-28UaEFgT!eu zW7B~|DQ}x62=lDP{o}%rQS^?l8`e9#YgRMkT&o1(Z+oW}`9Ct}h`8g>3x0YB_-%$C%V2bj!C-`(9slcfyoi`?U_*M%A)ig9Y%Zu zIh%t*vzH^*nb3#(M{<9JrF-lnW)Sx+**C1hkco7)=4#v~hDm8CMJI;!Zb?g?E`8A@ zSaY)1tu9xSP%9gG@!6v${tV(+`+k)mq}XexUn@#^3B)>)<=}U`k_F3$?G1TWA=-)E z1rmmxkc7fd<1P>M|5O%1*7srsm|^oE@wvP4s4(n8dn&<`qY{Mj*7?=J2iHDrL$Y={ z^Bn_KNg<^>)&w<;^~uOZBbU_aFxCJw6EJ04JTXDoWnH3tK7OO?G)Qhjk64M9M+&>t z1~Xjc?9>EdhP85Zj(d{W5eudhzSw4=`cG!_>`z2Sw&nF7i*fXF3loHBh0RY8e$y&p zUOQs>7L`J*ex=7)PN;dBkKZMf&|LI{_ALKUi1uKMFi;j#!j~o#zIdtF$o11kAy4mN zTfC~47P9Eb7O$uN`6}`?Na?d8K^SAr*CE5JojQelZHf5^U*xAjCV{PimW$G6O+w*G z{-!@4ESZH&8-j7ykXK0lS8MjZPCGf}G$d*I+~7Y^3RF&PN)Vn}GdVYT%ERr5%pcAQ z?TrLm**o|C>P&B_4DwW0NmR3gm4>L1=j_chuOrWC?Cu0`mOTNGqAc5&fYq60pPIiXcv3uqW9!4(#|{3M;uQ(DYI@T2wC=a$siicocdr-N+IQ4ZkEso zzdUsCH{@vzH?>=5JOIV#8M+lmb>?K=lYQ0|a|E{SOMCD*-f|iqZPa3%R%X0RDE!V@ z*PG2||ATJ-ShzNttA7WQ2jhu{Wz%GS()szbkdOInG$yiP+&q6n#+Ci) zU=yZTQj%Erc4c}89vDYQwk$Qsyz z!%y$fe&;Fs#>A-}C|_1oPQ)(I3h^qdZ(kFJn>n|lSrE|%y>*mbHviC%IC(xnuC)jb1cp#RI`RywCbxn^sdJZ zT%^2>#yAQwmJRJiqsL5}P3UPKR~G{cR^pJ;`ZochdK)!C)f)*URQZG=aI))R0)lKL zy$b9-eupXFl(Gqj>=TK|K4g}1dAq#^FCj>s7HQG>2qaYbr974?cA==gBt&`@*hu^? zu2idJ6N*`97GqO=$BaiV-Sg9GA;q#7uYbYH$tpJCTW7woXozavrym*Q?S}dGr!z87 z@W$?SYoSMYRmZfWNRitC+G?C6VfO>Zb*m50riLKl`! z9X+$pFPJ{$IViNX^3odZn|<%6(pq-BI%5uHS+L{EZb8z8P5v5_M^;&;zAd@EO}Jy# z?f?6hW+%(yx{Sfv?uAKLY16?bJS?k4E^+`RT%8lDLhXS>DywB1&i)!p%?f%l(<Zfb%Vj%_U#0cOwp1vSh3;G z2TLaSpW7x@Pm$X>4HsWjbZ6WUs}!Yf|g_a(G0i&}hgMxbISZ-281 zldO_)7YbY{flowrA;wh6;cJF>f#RjSKQ{$2W_~$)gt*O^=cm3 ze2#A|V1I0@m0b`zJiiy%H~4xD@^gok?O1nqiyW}~L{@N)3MK2fO&DX9c|2^)%ugr~ z5BrvoTEvbgZ9=ql2K3A&=zmm&^n6eyd!h17wb~Rfwz)=qo~h*chP3N59>FY+Tm*`7gJtbwh4tUrkj_4 z{Y5!crs>WKt>?bBCMo7&i|~#J;D~5$Z_1n7HetLqq9r>Yi@JfS%1$qJ&8O`81LKO5 zHc4roin%TwNy5b-SV8;b{e|eDAOARpcM{Y^66B=R!{71NMD9A`JeUstcEr8_1Vc&C zSqXe>D?C3!ji$gM!ml1aF5kt%}U`X^ow^GKm7N zd1ncsuqyhtW^3>xSl)8LH-Ob^ohaZoTsDO`;RIU^x4rnLEgM@r5rHL!C1R(o2&)cP z605b-;AikU&E4A$U)Cy?D7Zpk9SI0^*lD=6;12~ZiDx^g3UhmPjMGIYajH}&PDRYU z+Np$2z2?;B&YX&z+pkNwPPIdPBs^js1D66gOn&i3S1u|s&+tS6p9WxQa3!&9cQstr z58hb7^Ete`hYHV~)f<;U0g5kSzfx&@!*|%uMc0P^blJV}Z(=W93A=S#a(hNlFfM&G zDynaBoyzA_-M(53d?OS23kVr-qlJDZ)MIY(uYz^8W#AF+z*;KiXz zwwc3|hH3CCcoP6eM3eM~;jAitWb09hK7TJnLB_cuItiAjbREf-LA0|tViX%2kIFZ< z${2sWURH`BbBdihIl+7GtTFK{r-@p%HgbC0SWOc&dj}{25eX|nnvcfol%X}AQ^&ql zDYge*Tr$O;bNK!QUBjDIj8*GMd$^MLc%nvqnjED@K~LXz&Xeo@iQbeB`;@Sx@4+N3 znD?-OYQ##!QEAW6(01@qzDKz> zFkTB}hdHowm1<~i$u+UMiL?ZgeZEGgJm!vGkF6ptGr#Aw{|1d-wlP7coNS~y>{pe- zVU0u~4Po`;@WM?d*l%vzt--q9RW7h=i)M24_BfrYkw_+w>||Z>qqW$1H`|wt4uxHV zm%5c#oc~#cV_2mmwOCuhmBd7aOUJOq@KPf_$l=Vr8te&Ev3lWnl}cOi7H!}$7Aqw! zh4XHosxUX~K)4>WJSalOj_0bsfwxrfa@`-9#y{|eh?8J5V+xL~sDJ@?V&Bt43& z5RxROTrmkGQ$$k<_IPN5-B|+yLH6b3xYrhP9l+8t_MWcD4~_jFVPD~4c;Q++jLjzX zxj`R-^hnf5qtLcuZCg4K^Y1b6Ql;3y;j{S0H{eKlhC8OB_9|Aq6shdOC!mRA?cgl| zm2n(C<*TWz3dC@0S9#32^#PhnNhn4`r3qX~%nH?1DuxTuy2>8TWrTCCqv#gNq;eF) zb{OoaY7K@fi4E=WMtI8se#qgOHcfg~dZOUQQt_9f*bHv8kY?hjZ`=h`5|5TvVcDm= zDHbthi7S$>skDc;v|j2npBAs^h5q6)O5Iu|YnIg%PC^0C^VvskXI(`OcNfoAWBY0% zPHa8WM5#FfR}y2YYp`#5RV^E?Bu@EEh2_M$*dSS7UF|lvaISVkP2~f;HduU;9 zX;q*(WBRYKk|#FUC3 zIM;QE#@!z&;OaOn6~S4g*KoLIxgEUJe5Z1F{uoWA+yqlbzvrC$H};?=nlhzZ6*9MC zyk>44yk%hS4-U(dG?g~xRTgqn!)+7Ex_WScb#*+W*JN2DF_6U(;rn-rued=Mv?H8?bVI z4=fQ}{AZ+hc$LAW=XFsV&jwC?vqq)ZM|i36B%o1B;_G#q#t&PBD7!`;r!H;gR1?Ss zpk_*9)K<+z4!ouGuHnq>$d6kwRr0`8sgh+txVN1vl#pj0!mjy4Xi?62)FxxjJ58MY z&psj69{Oy~U%)_0-G-|B7clCp!|IUkObnZLE?!sT)TrMK3R_yhDCb=2l3MG-X0ACf zd~SqI;#>kw6_H7HN`r-ZRDAiGM%{}-oIRkyU?lPVIgLuaEdnzza^4Fi>}p3jRpgCI&D$&LH6o)CDP_LZ8C*mF zh-NbDICbouiTVhLvOTsjX>I(VjW&(FL>HMkiIO_-=~>l!=ele3g6Ip3FV<=QAWU+b zAb&{9nO%iB>Zjk5SuCGUBbYGRZq-?C<{=uBqVCX>#F~!WKnz<4FX^7-aFP>;YXivm zoXXi*4Tp_{kLqY1TuH3z!uH_@ZvjmSXyD4_LRlktaYrVb&fx+#6YMKbt?uJ4_w^S& zSq_G};w&E*KYEKJ{WPKUW>}5ti9hpe{^ToYJzt^ql(W>6Lw1E3P@n=o2v-uF0yH}W zyD^V1)bTzIF6PRCW>TIRE~ucCfE^7(yWl>G_1}xF^qG)rnxHCkB z<$jWAOoqpBZa|o(GV_0^`f}H@zJYW5j6<@K$+VDu!licMBLe_J8A*A_yDDNpvP(1t zggHloNrI*j3Wvo~8vG7kn!UugAn8{cEWgbVZMvm-oU2eqRgoK17LEDUd(JiZTr*dp zr8cI(jTV|~=nwGG;CddeB;ISo{>6_P05UOwmK^GK66J}##B@HNro`nDEPD21`|yK` z=M4v*sXz!zZ>>f;2d*Tp!ng`PSWfvy4AO0E=UngvjaxNSEUt4QZAfqI42>(XK#XB2 zlc_$9!Dg4Yxam8#1R~AEx9X2Dd3~N3qAx_#+LC(Bd0YssWSQu~1^_FIn6Bbnf^2Ys z>>V(^3~fhx!xkA_DSP)Yn^UEkLAl70E5!&q|DN+7muP(c1<`}$x2H8y8~mjLoCH@A z=loPyf~uQK4spTj3v(`Vl^tRX4@0lThi6YI+Qz#`k(*NCMia2ZtbY_XDcsj^qlLp} zDyxG!40eMniRX_PoR6G%P74sKw>UrSxWVfKRlSa+nsd{je3%T3rr*0bcjvB|bM2(Y zCLOLM{`t`0JlF_ew5DIjxdG1%&V{`IMy(>IGwCgOrE)9>UdlL`VBr%xO{%OuMj?0k zfTKfkd$G6y!IbxdW)ii;nM=`hV<_iVyRhe9qT^$`;H8;Z0f(odwGTzDRvcJ$`6n31pnGpgB!w26PqC%_HUsXnl;41SsvfX$d7xR zU;m|vXQ@5ZIJAN*iH^MuF3q0s3!Do1+Mt|SWKTp{ua)c0=DPO8aPN;blC^IQ8)VXw zkB@bb>{d6!f+Ri|YU0^PV6=`Y(~G!&%S4rD&)~(qOf0!Kshydm z!F}OP0i4U>HPbZs7QB>+zI{k~-~tV93NK~iNDlw{lLqgFmm1Pz4*$GTgH!t^3ZDzB zxvv<@g^%{!x5JILqq6UIhj>=-wK^ii_oL8;ZO}Bjz)Q8~I}Yb|E$+heSQN zEu6b@K+^-~C67AefPPs^LL6N5%lVo>!gYseotw$IJLgr7oq(5e?G1-dT+>tvq8(jX zl>zGXsS8{T>bK3@FTki1$>*F~5L+?`owI!NiG!2;Z?t2$9$w{vq`WHFEU>bKqZ(N? zC*s5^7#pF{X12cFl_Y-B=?vcDJH zXrYIOZibI~uLp3kpEF2><@Hk?omu%I>cG+*E^6~AgR|+Op61-vahkcXp{ltCaM3r9 z=WvAFXpSS!2O}?O_}##{4ihx)(OgHP7{Z5uNld;|R6dX1ZRLPwiJMDm zYT!cHU0{?V_wmF{Ok*kdQ58U60vxuLa*{V^J0-Dov($Qih|66r&(?g4Y?155h!PoJYPw_%_=*UIE-W_w1vX}%O;YFPqu@%SR};2G1Fmr3NK+03 zFyF~|pe9yo&RXIJjc$|SO5&*IY&Cwg0^l-*fD5fSP*T3t!zoHHuCbi!){b*2^4-Z! zK{{8!xs^RRS3*8A+^K}lb)HH#*A3-dG5Nw|6L$(+v^d#GK9P&U_n4-xJj%e892QUK za7n$;W)LhETfjEp2h9NP5g^QA&tWA%E?9}k+UrG)=_Ffr5$lQ{RKUv#a45)ilH0Cz zO4j8*ak%SJC;9G1r*s|8nL*O)e{zyDH=E#n1dBf}V|VeR8mz|8B)L_~o#Z8loI>Qj zTb+V+8{;@PcZJF^1>VxJ_O1ESM}E236c3k{<1#1fqCRwuNx_R%LPe*AM=Q9J!|z)- zSxOIN8;9HNwg?xaw=wAewcC5r6$I|W4l!a`Q}MetN400C2z$(<~KJH z=dpf)HvvJPgBvaUrlNAeS*K!p@M&{MT|irJ#?c9;nTHQh$nFD_z}}EeA;B-ce5e zaMMi6qo1QZ?6ZvwnbceTVUcL?$_XFu&Q`4wEE6ZXE00OT+Kbtc?)~7G6bNn~A|6@pnWD9{q*d$^J~7?;w(V6a>_(Ugc! zoNFGUsZ`8UCrMr4NI;G@~+NkYXb5$rjB(4&tOMnG@uGyw>ZN2EI&#{{Nw zu1&PY4KM3#oPBr*E*cM-xEhOEthTD!a3!%PK9xw;*eG}@UzT$C5I%#+;mhz+HUGfj zrD-f`Nutm~%qh*PuEq|ZeEBnHqn)h>Cy6UHjupU5bI&leRY^=rS5-Ld%yIzIBg1i= zTwPYP_gNk1V!UxDiV_a*A&gj-x>TLg*M^HCv%|CCZ3qiDIlQ`}CQWcLdGU5rsKJ$2sB@LC;o?Y6BNH4f7whaCuiF!UrcC_Y zERgpr)w)|>I(zC;(;+2^@0zJ%a{cbk$vWqbxJ%-=7Mh86s}iws+4mQ<=}hM2Pc6-) zoYV&`+MeVf$m7v*TayI!OLI9~x+90<*>!m7DTEK~;=o2H4rj4`@J0fj#bLiLDlA_e z>Rdt(AObZ2tJtob8w}y?9BAA_vk|sN-OOnS7j>f->yID(^mZF&dw${vbYKD4b#HFz z#3K7@!P&+;C+fisT1#fC^w+qS6P#0Y&TAcUr@!W0rnPcR&LzmTXE_Jrb6D#1 ztk`x}-c$`-X&FXaO9V@(1q z2SpvCOC+N%NaEUYhD0J;yjL4@I9F<-%CTqg(*ADzMp9`xNrU^sOO0d;hd)l$EU_iX z7rUkOO{6k(7VEGX{gj-&+&Ng~^ip`{l6Lqjl)wQ@l^R+~VZm%wi}^yAde1Dlk~m>L zhra}Hm;+T8YSt^PLvyl++zdH^4f`KBmq8^Gq;vV4>-eJ<<5}CC-Q-@|Oaj?kNqO{A zLm*C9-paWpKXEQx-m$|p%oN{7dLheIjhr~(rkI1sm*1Ci_nywvpu?;yErYc#keycFOl4p(2tmf(l6tX==H z@ly;IMT%l+YhBhpSg%DOdZ#+Xs$(C|1uxsr&iGj&pe#yHL0f&TLJb-Z4 z8{Tx?Sc~vVuZE%0+(D(Wu4#W%ObQrI`caxgCJm#vY zGK|OFtrzq;s`2}3bVd+&BmQVa`Y7NK1MT^%p4KK7d+Jer2 zD>-D`(loMNTpZbGU^G0g9z-)S6?5%aU z`3#gtGn7XuOL_eKmszX)Z)!|Bz?B^4Ju!33fl+A3IXC~A!6oSBn6;nuwil=zUSv`e zy_&;qUup0YcxgW)mG~NO;K1PvQMm z*CNrYvkR`=M-giK{BqiZN{-AYxH8tc-!h-0 zEo-IewI1M7)?z&B$8wIW!5Op(@nUyY>O3s5Ven>%C3+9i ztLEHbxOf)UTUFt(uY9rjBR^S*bMe$;^Nx#M8ov7B@2RC6p`No+b;gYUshOMh>Q zjkskPhja91Feek0T*|9@itTa+Q9{EzZe2GJ)IesNV)Z9gL9X!ozlvc z`m`-vAbqkHpkO$s9jkrxRTi6wTTR2TL4m>xX8)T|5(WFH>tNf8~ox93HcUNITrc{C3`JE3gHANQzA?xZ4=jlkR*N)rNO>;69pIc13+qM zzjJa9zL-LRF(RpTWWwbS!c}-OymiH|6E&$>_fa+Eb~Q~A3;&Z8PFf^bUw{+?#>oLG z7WFX=Tz&HHsiheQ7td+&c}X4%)jk9=ST^EEt!5{ecvz{hM2H;T0)=K5tAUtdh{`sJ z(dyknX z28J;)`4} zDc{)Pn#g=Vs3moQOSmjmCFJ#IT%B3MQ#H-C;9}y2r4O&#oLdNtHk|iz?%G-tC;xNI zHBQfus?SKd(P4~FJVSGYuteI^O{;0@OVJ^applZgxaRROjhUYhS+I9#DyBiB9TU#vowT@rzB^%3O)Zh&Vj(o9H=1gb#rr)pS*T0 zt(Q&LSEMohY9RqPmJfoukY`-r_#;CgMpqv6nw0OnFgPdqk)Iph{L)JPJr~IM*CfE& z{G(RQv2Z1^`CHDFXIJ5^Bg!9nXBRE6@8Isp>i??_HC^CJ;$IeSEijt--{f3l&s@JG zY-}dHQH$VnxY2^I3i`gKQE@pS>g^A~mBjx=865TBH6SC2SL0Q5I($?j+XxjlF#$U9 za$Fs^SUqW}??|C#3RjS?)^jtmCt#IuL7In9=F1Eg!a=f*wv}_n&uCNz| z`$w`T<#39%f{!9Fo};I_5L!k)Io>TqS9r&%;O;6FH_2pc=qIwZqc^A6Dfp6!@@@B|KZ!L0{*Wbl;Lt2D#|4u>~-6po=ye;l{AyKO}JWNj9_G?CcC;jS(mj?V)}14ae7lDNT*qb22@HuvJXp|zar>%qCE5RP>s z;q%3r;Ua^-;6N6;1ux~7vpd0~T5vd1b{T52@h#_GwBz>U z*(rD_GhL7ulK4+26_%%rcaPMA9m=`-UDQ&MpML8u>D*(^&H7U1SXochS(xh%7X{hX z1pBZ}V-s---=2l{NkllxmLO5_EX@lU2E{ILF){0>DXxW=_bD9i_q7Hmcqj3vE}h|` z0S(sRHSkgmyTsuyhN`gKm$|#i{k}J4LLDE{YcR?Xh~+8L)^zh-Upum#?~}0V8aajS z3q-EUYkzS!rg)Ms>7TT7pMG)A)N^DVxM*RzrUoiN-n-TmwhawM5^LdQ5pEX(uJYmy z?rH@16Gtu(I#(57&)}_vM3wg^y)eA*L3(U7yp+=$IXn-qd2sk0yyf)%sBFN<@ord$ z4a1g1x@9evjMqMR_`CO+O7o`x3PWDPxgY-)_zK>e&|w$(#9dRC`2~^UwKH5I zc3zf;Giwiss`|H_%Dkad(RxAr%c(mBD#fyclT7c7Y%LnIx&@A)_rf7w>vlmmJV8Z7 zV!47N+XFSKQ-8sg#Q66rDYuC5FiNa_2o?DUO>YH!^~9-8>~tu`75Qeohf#6L0+Pg= zDwiTxNbrc#nrr)I{UQM zXu92IYDcsgt|Sf$)?jatG=ikSmBjvNdH9jVX5cSP=GJmJ zcL0a`0LTs}xr=CuU^3Zacu8I1aLyqPS72cgs(J=oNenu|qn|8$KlU)nZ4>8e9@Dsn zPd#jU9+izGz2*5Dx95ci-pJRw@%5aO&Zr#w1TPg_Vic*IyQHajzDJhl#HoYVkKm$( zs~YwGqlpTWNDW6OsT7lCaBlNTdK#*WIN#}}!Mn;upLycV0?oExGzgxnT#p{n%H4eM5Yeed0Hm}8if?6oE#wauEi#u3KtFfsa;2EO_G%|)vcKlm2c^qED zm>`WW~p0s`wJzeG07*o`{m4HQu)izK0_B)Rx83JCi@}0Lk zI|+h@zdyLZn+%fxs}hU6)VH_CPMI@u2X=vqqxY$13AbTKL(5ODHNg`vKU0?JsuetT z)uzjazQpBNbu6kwIvJ{|diuLVTXOiPo5A_XzSBMNBDhu(&$+v3AnO*AZT9Ukw_LIwwVR;u9;#wnF~DJVG>}sfYB1fCyA8P zep5Nt4qkfTJB!1)2Q~O6ywn@JB$M>ULnhdjwF8&{av~>d9yO6J>^eYd>hC!@{=7=c zPu_dF%U`~=7cT?`rjTi;ONKy6JqzA(?&B4MbCW-PvS+nkHc_l{n86HCk9f|3;Oz`LpdtCFhD?>fPi97aC!WE)B+;ad^Uig~%Py#T4#c*Mz# zkN-n@$d3MA#o4WLY7a6bjcUNN|A^s$0~pGdk8mZ2S+7kZv8uX}D*5&YYAom=3iZ<0 z-m7X^@+JQtJXt|0twtfjl7rhvjbvTnr`}~c;o{>WOoCt;d3c-`o(yO)^)5r)RA*KS zKWL&klLISVIFKkeO7Tk4g?-aWxQCm@MWuS-fsbbBTh2}QWU~R-n6F_eyeWQMAyMvE-U}O^T0k$MEr}I^Iah|&1x(Le`@qG~ zn2cLu@S`NlD6ck}_HZR}Zh{7{*WmLUK3-CVCMO$SB^Ud_20IR=Maa^xb-LlZMeFT20Nd9rVS(WcB=&c%*qr}1NmxN$7=tBEPO zeDr58KmEZ+UKSY$#T(f8LFWY$su18fkpmfWpABBVa>iP(AU39&8ssJ}PyzF5Xm9}> z@zA(h*`$0QFJRj_UpaG=SC}qv5d!#5mchHp1zWtLbpFe#WFT%%ApvK3(RP!SS6piU zcmI*9y$fx?9+}CA6!y9B(zZP^ZtNK_+9V6APTa8tg*jI?9t<_pRa~Mv=In;HZw#ee;tl#Oor>%A?01S3;~?B(rU*caM8jOjmnn1y;x*j zHNshN@ha^zGdCX?mDO&}UHjMIl5~@m>yh5MPX>og$@IXQy4)-1d#wJq(bsnApR}y=LsjwVX-8(^Vl3O^} zznI3At>JC-8mSFQ?^=w;t*`HGRQ;u#3y(86H`%?BNg%2bDL+oo1a39)R?E{dFC5LEILNr1boMp{x)$Q>_+1xJgRSxzcgQ%1Q#z1rW)F+1Ub$%@r!w#PAHFYe8Yt$%mBdE<{!alXSy||9bROYN zNj7NEe`H64pqjFr3(Oi;NC3yhv{FvRoKF(VjVmPJDd(*7c4jhIS~qRwQk%d1zofMC z(#Ok=wGTIp!B_64Rm5fFmhp1or2k9biLLxX&6&e+akSw3|44npCqo0HVsT$2=A z2aKkH7ddxuiNOWRYma#wUG*3LBjxuiRROjbUV0#SnZvQ`HNDU)-Z4Cf>`%)JwiUyb z=~F6VYsG&v>(CN|q+I-_x3NOr(Sq#uQn^eP1_>(5EV$_X4{??D0QPa9`9%&?V8vTe zT`0n;z?H{_f!X-s;x=w(Ibs(6y#G}=k{^#fE&Br zhGIKL@Ns9w@srwcRk(P04)^dF+z*6-+rznoxQ7QnXzRanTN1t+!hv*ocy%9am{J7v z63;vR@KTt2ks`-&K&pzR#D7lJw4QbLabZ#I)N-x@7so_03{KLcy_a)8SJ${9eSE@n zE~7o^u_l~LW7FZKLf_2c3(YuOQrb?20R6?7u$pWnxqB40{;jK$=HIBQY-ATKF%YNqa3%4}@f!RNUV8eP z^d-UlCTQ>=cnMz4;bD`s@Uu3VYIA5;Qdu#_;M`bmU^T@B^VsPgsGsaIydioluP$$$ za|!zjOR;{ko;Z78SE$%ctq2|9N@CHNJ(gf?m$ zKor-<k3+p&a+lMKriI`w- z;6S>(>bj|ouH;%pWvkc<9d zZqP?N=VgCgN~&@D7qmFY6%}uv)#Q8yU&F>_go9TcE~p$!{Yq_RE#XEBmo;=9d^GZ3 zf{Q0j*giu0~5?u)xmD0lQWARqX~=>}SAMYMtPmJasgb3-*oH!BaM zaI3ylId%))+G5Hp?!_a~X}<2P`5-hhM87XwoI{7dzu3w=e6Ppwokfkm4jSPRp|@`KA|2Y+8%(ihdYPGBBE0 z=MQ)NRi*dYz9n^glZKMLp5Z#>#%=+kt$gocM9oa#6l)6~&ETfMjTRDB@G?BKapE|f zL>Hy1XjAw|bPS=w|Ck@*oWf4QN3w6Z?CnabY@HEmr#BQXj`>wn(OV<&{w})$j5M6! z!%c&qnK=2~*QRHUudD{YH^myVkNa-#3NbgwKoh!C$I&GdcHnTZ5wouE%K7 z7}JH&$}DFlX%s^pqpoin=el$yu9=>Fo?}R(R(C=x$qg5nD*R+l_3onvaTz`u3OvV> zLg&6bs`7|DU!&Sh^^_W@YWLbLef|IG+d|lWVLiP zvUh$nxP+X?B^v8}!GxKAe|nBxw{OrNSg#G+u!M`2mS>)Z8J;Dkrsz@{=>B z$X%aAv1qGNRnGd_^x#`eCTi0%uEip!pc2VD&YL>c3tXV=&xSxVarUp|DA{k zhxGwQlZfe@8~Q?xN9_`RF?u|FW|P{3e^lyFf?vE&&EwSicPhn_O51V3u9 zQTR*ix;ze-7C8JRfP}duR}3GX1yf6InC=&>n%C>!-xWrk?~k<7jV<*pW08}Ss>OQxG`KzdfYX5hX!Ba@Nb?RuE~0%*}KaPv-~^@ zMXPO@_}>HY3TUPeKDK3v)-qqNTV1}s0ps2n!9e-)^-3~71 zLlGQq4&V|8dg3TNew1M)7pOCurf~5dR1$|v%e~tAh3hTnq{^kS=lDS@sQL>@IJhha zO5saKY9Du;!(rvsD9rCpC5e74QJk5@_T^%CNgmVB&*(^2fs@2r8pnDrqS@_xfHY-{ zfe&|S)=(8WNh8P)98SmOpk$B3esc4{emF;{)%dUMX0mP!ovmKK^MFa>f&X!mKS<9bz_~34lH{B7{hZ~VXP)@! z8ZsAf>|hAEvuD6)yz_-^%OF(A%J5};Qo&#d}a?O{e)4Q zwOy=^4g=xh00H2o=-=5vc+(N)I}Weyqrvr;sMCsJa4`Z7P+_^`3O}4~)nf61bDsul zDh+>BXHui#V&8l?hs(*SYf)Y7DjzvFZv^M4x{N?1aQJf+k7Px52|R5ye&lfQHyq|i zZjc6SgnY|W94lw;@N;FSfEhO{%+w@L%3QA0hW=o zZ=tH&BYKE9VI^CF42_%D*xym^bK5UTr)#Yu)n&M2iBwrGytFm5m&0ktG>eg+{BSF~ zmh`H>kj3__02+yGI(&2}=>Vak=LN1|yIIW=|_9oaevx;tD=Qw7;AcrmKvtta&| zrBqaIJjLIIH3CNC^)Svg%P?_r-dKNk`LFrta(IgM=ZnAjdtTUrnGUx0i&VFC>1*p0 z()W`S{=!4gb{o{r{cE_A!}+@Zk;)tGZ#29&T^GV z3x9dTB7YkzzfoO5HHIrW{B4JG;iVH!r#bA~noF0IJ!bhAPG5-@d&VkwBAkQGQtM%! zb6;|;x_V5uZ=x{X_En8BkIiZsr@@sRdsALlx?dbSi4Znhb&a_nz-sox3NO7Pv0no9kRrb;x6bN5GSDmUTfPvc=6 zuikvCsa)ORk3*SSC?h%NH-~fdg4Syeteek)B)R!<8v|D(P!%fbaU|+efdw`Z1dPN^oulY<* zRPz1!Z#{pz<*Hei$-C7)X$M@%A@RC}^g;JcQ<#cyqs0dnZU(U04nG(8%S|c-B*-7) z0*rY@m_o)rs9Xx`2`?4rvT5VkBz#hCGh#zHG>H*bWL%5jtm0|tyqY>oxao}b;>u?ayepv+m(!@Fo zZZw{&5!w^}6L1mhOb%3(A09{Yrw<75)RSNP5DD}i$OX#Fw^p07^f2dk4(D7F3p$Ji zkyw8m&jA}g(M*$^9{|#R&Stn6#mppb?%o&R#5|6u1zQR(E^3`@Qs)wq9+%ZzqV}}H z5^nOl{iYI&MZh@5I?p5)NGU@U>7##coJS7+TJw- z*SODu08P@DaltW*{|~`WplFXL1!@=^m;OhD>hN+-W^Xc+a{b2vVR{UUpCI-7TTBv; z^PdIaxu%wcTrTi>w^=}rd>w#3N|OkMi~Kxhm2eEiP^(GIfg6pta;ZgVhjUm}ai&c{NK0z?H=9#Wgq|UY;2o9uRAS9pyFc0z-9s!!MBH zy#y_+q>h2bbnYEE`iKNikbJ7UDTBuw^Q2mmHDl1oxkdj9pe2sf!NG4Uz%Utq+8b5JWuSt^ANk;q#`!YC)ZX* z@~)`0DGn}wi&#y=;PI%8`G2U*dL8FZ;W|0Qy_7s{Y9O|EH7@-s>D6jxaK3B-FzSrA za;`)Rm17>))R|HhxRUs+jiz#KK2l~kw~up0J7_9Jud5S`Ot@GLcGgsq^GqrV=RCV< zob5+b%(HKh-jH4zw`_S}iXPNa&ei#fb2fR@>Of;qt9+9Rbbv-ZTnm%-@oqCHNo+qt z<2G#xjMlm2Tf|-cR^zhwnz*H$yEj|q*fV%(%enY%QpuaE!QJ4kFAiJ4X5T@|*>!lS zmw(NrPN;AxRu?3#2KvB7GtA@Cw0rS@1C^F@z$O>mLQS-1ZEKX6Bo0`~xdgew-M~bh zyUe-F4QjBm@8dx1@@ggA=q~AX+GucIY&l^F?=a`GwwSrdKaqEOB@L1ncA9`~vOd_W zu|9P4*lyC2i@h{ObuUav;-{U4fU6w#4>Hppr_6gKux5`YkpIS1A2xGtiK24s6TCD> zjlWMtx=+(s-?*r=Jmx)Go!#Vo@OW|Ij;3}CUg~~49}ryfjS2RW^U{mrk&Tu=lek28 zbZ39j4C4~K^bG6+hf|7jxU9UVanUGUWfUYOF(Zs~^xn@a4s?uHZOBi*Eb7V{JcJ=V zAD^FTKHvv5_OV#rTNg)VlMF4RUA}-eo^Ya1qFBiuy^3PPN{ey#N5tinQ#rOBURwEH z5@Xs8OnApOW&#{w4u70T{KDjc}udAqG`iw_D*EsnwWla4vG*0aFRB z0LwYBERR)vPN$5VGD=zB659+*gIdEw$ zx0E1{cvRGAL&g3kVK>}r%agb3Sy8PA)yuGE-tbo~(H3^&bg6aTAFxH$V%K1VraA5} z$k@4UhA|J;9vJQYP2gPKPE92rUfPCmeMu_c;GSF_{y-rJ-_h2xei-Mv9oD#>PCYYEk!BWV6~CjZ5nv2IYmT+NzA<;C%9O4phU08n@E6GCsRjYC(xOl_O zU4y5=OF6fZ!*a9+JHAodcp6;1*=f_@5Afo<9r#PFVl^ipC7VcElBT>Ro!(d&@PJ3b zOCc=d@Wt{P{2Jc6qJ$>(5kaxu@6_&m0$dDB8Z6&h739ut05fiB=^2~#OC7wP86Q>n zh|OOZ%($_}@72}+Xt+2fgUh4|CSxx0noU8md2Y$3$-?KkE7M0{y-6Q)x4!96Zj9aF z2lF$I!{5ty@&k($kxCbSza#n^u26Ts>-VtAJ6gPjPO^K{FR8s$4y|SoR%KIW`mCDx|{U z$fG8>7%SNJImP37YzGE5%j5gcSsU_KWZdch*luV`>M3E219qLQ2)SwS;8c{cBo zCi&4ZS#Xo52Al39-2n(E!ORkLH*r}fg7022DTc^zLjS)(G`_7$%2Abr-Q+K$Od*6j zld0tvfn8C-kvui}m*w8RFEjQis?&nMcx!?Xt)SOntW9e&WpSb0wZ7KCviQNGnK*n`akMkCQW z&aEqE;^bMa5n*36a`35Mr2F>&v2`8bRTN#DTtX7kAq3Ksds9ho^pc=}bb=@%H7J5e z7X<`D0@7Q8l%XXP8%PgQ1ZlB=1*CkU0#bsYg0vt-koLdl?B3nE@#lHS+&%Am&h**Y zsbMCbVu!XdG|y&2?qc36hznHhrLO#hm$NJ$LZxnCrnJ^dL_^|m{_R3O zh?l<)i3@Ot9jVB3c=VJb@t3|nix@oDOaWtfyP-f| z9B0Y31gz7IdGZ@4e*tNFlYqo;`ag(Z7DuS zNG$R#0X5}kBm;Jev6lGIuw(ABQHWO1dcwsgbGeB{*n{#DL*M+sP_pP!C%{iO3Dwkk z!NrKc5f$498NHJ(GB)skCRX2Wa!?qljr)b6Brz&5Ak7X{GPL=m2FdL3M81$|I$V4t zoiQ~6#rd!RuJ}|Sy&?$z?2?XG!~|s8Ev{hb{Xb2pwtNH`C0Cr4GV+Q7iEH%(JVbb+ zX?hztR?CVT8c90aG}TnNR*TbJU0i@iYDIRi_~rYG*iCvzYG7-)SjqEH_wQkg03((6 zGW6n89lFsfz$mWGqDU*dx_m#8ist-w0X}jCWYj?HX6!@_6EoDBM3WktSxv2Ec!0N9 z)y|C94#xXiP268}9vBc{Pq*eVq(9%L;&WdMFzVV*j2B~=iGv0E{$l;>X0Tt6CH*Dw zCeEt%X1d^VKW7;p+7!)nc!tK2<@Ko<&yGvvfr6LeS}l_t!Hp2o6x9U=AGUGOB+y^9 zm>m!*Z^9H6j8Sm$&g`i0=mXO}58hn#7+B z7i;e(viNlf+>=PKIgbUcH`g|7qOkr^|c@>ZJ7O0g>?2Wi$1$LUrk$9wvxtPU2 zOk;6lc@vM+pRuM8`_N2HEcPF=r=pQ09lA&U9D=1YH!%L;xV1g7R5$h*M(AA^ol3?& z`A`=Z(4%4JFU$QVd(nTt2V0J-B#T$u?LdKECUI$G=h!DK#@R5}0vZ`rKp4 zipGh!=#y?fjir%-D1h;7I7a+CG7vkTf!UiMWmn9kB%PExG0;uUZ>E)#)o^h> zm4ek3UB+`7yB-nDPVJm zH?p{Sb445~9!?32(X1K;&o;!i`ZgM-m0{JYwRQMR*@|;IDJ<+?h+NZB^Y0*Bj0Sem zKnkdvtcNdA>O{7Ni^V-%b*$k1zV%QldB@)PHU)`27>Vte`RB0p%mZ~4)z6H5i@j;~pw*J8 z?X{HZ3Ku83e`;bLV(o*#K*R6>jj&TCjH(^vEJHg`=3)aAT&v~zeg7dW13+)Oy-Y0s z5ANSlGtd|=7TJIKA3_lTYOi)Oq57dJgjget%{!5Wj2{$&EP{+8zlX7&M>R~2>XL{P z*nB%{g|{JGoS=8Y0h~iZXl`Ke&r>Q`0(Badi-n6)e_p}(=pPn0xTuId>Nv=N!_`zNr$LHwp?dD(oaCynI(7$fJPFVrJy8g<%kzm?{C@%n#rPpJ&Q_Oc-4mUf%U%GfYcL(I z4Y%R4R5W-#$ZFX12GMFc@530a#+%22BCN!Kt<0sp6t33`#NAz2eu2bFmAQDN>8NQe zJ{h8mf59Uq)?*gmvFYNR7qwXC!?jx4#AsqsG&IOfo`#G{>0`#0*0-zl&`QT7xLApq zq^qQk4T?3w|CF&7X(m=v_I^n-HyJLzoEypa@q-qXJY+#>6BcBO(y2<~zTK0^&d+L? zJd8&w)^}JuvJ;Cj3A!XG*zkMU%cQbCN5f<}JsQoAOPj`D3`NhaA(|k^nVVO7=*FZB ziZYD7+KU2>NmGO|P0W2iD8hg$0O9Q0UV5@*^wwTTxo~l!Z>}zG+J`F5J_xCO{FA{s zuPPw*+XjMUwTyX9Pp+q%l<54**s!6xN^)O)fDN^&@_CJd9arCK{gzKy+#XvEAx@L|xp)(Z zF2{nxjKoNQ2p`0=6$X9eY-RD&1&Y{JdJoXr&m_25Gf||0V&CbYK*QdLjNQY5W*m=u zc%;%B@(M+>gr%{f(`BW|Ed_*Q0&r{rG;l`|9w}*SzDnYGt2ME>QK_qF-KZGLPz+wY z1_g2UPLMeqc!{<4+Od?oO1}3PNEW}_#Cpv{?t`EJBiKJN))a#pu-Qyz;4gK4N5I9d za?IM|2Nn6NEO=%o3o_+1gS1Q?4A*Lj|D46K;<|Hiv|;)@V`C0579-_g8iwxT8*H{> zJs`qF#zBQa4eJjqK7|1Zc&aJ-h|`gZVu#mB@$2&rjGy9zLk-WrWyYlnjUnzO1Sc9; z+aaVq08cZ328k_Pc9Ibg(_rmbxYp`!uEAnq@8B@G6OXj6_bQ7ceOR0U1L_wfCdk8w7~n|Hs7(Ct)0pSl75BgxL581^+x zzJ$m2&N1=9)x_ifO~6!gSsHdDq`sNx5V2lb6??-=@_59ju|<}`x(3Ix^f>((L3-rxHb%MQZfXIV|OO_i;(%` ztzHP)!^P-#W0O!*7D7f@x{0x}Y{ptcQ1>k&zyAyiVq||j(l=c`i$}N7#Nr44i5}v~ zLdBEIOvrDi6W$4&=pmcGjeLP}H@Mh8*-^*5mMJClbH*Na*0GH%6fANq>0QmSW5vMa z1g-kaW9;?rj77_weQ9_BorjP-yu)Dk7j>}tI4u%=;9`p9B~2`R;}OQqkdeyQj5T^$ zSMeOLsU*V10>s|B%E)A>X(iy14<)v^`*0Le=y1t|74TNiR8lwBO z@e71p^xJ{7w8!l*2v*C%p?1S9Cwj>_lQiXqh(AtS8mVJP_XOjnZ#_*uVQl?q-Et)! zsasiVBB|_uo5fKg>#N|phRQg`X3S6b6E_)R0Kx|>vzB9jIah(rL73BO8v?n6DQi)J(K4~9b zt^9#m+!R4ML3q%2907Cr<@J>>)crM9DA=E>@>t`37UTPlG)~%g4cZ zLs6y~)qT(Occ09`MuaW+?|1}(#}-pH-pHG7Q^@QcJ67Nl5-j@epNMxf04kh6F~MV} zt_(tRL%GLPQqKR}#DYXv&5&q=aGD86u*;tV4do!2`mWZW?+q7gbFkIljs?mx$aoZj zu_4&EZ$wu5{+NaxTcy(wEF-pAO~#J@6#dgIG;oeDg~{J4x}rIQ?=a7-qJo;`3EKGu*J z!-H4hk=1hHCxt-`|0x#lIIWAre@Vl|%Gc|MV8M$XvTie}fM5eZTP8w+Tve#$)DOU{ zmaP{RqwXT)-ozl;1=?n!O+44twH*?yKbB)T?zAfXL)DepC)1pQHDv^D=PWYc<*H8E z4=~CAlV-EuH&uNRT76Pgzx#CTvHBeRZj5~-F%E-Sk8!#tN9yRQG~87(@;!Qs(!g#2 zR*ie&wYNW-E`Uk7uhUBBphqXWo=!vNB_F|chxWPYfdH(QJe5bin;%&`Hf(DA*&`GYc<*(H2p6woj{oZ;e14qc#S;CaSs;c9QweCZjahKT5=nC~#3%-8leX)Yr4HKq8j zXTp|HjUeZqB@+%I^ns6fIfv%=K6ITteeLfOJtP?Ca)nR&<*ds>DRk#e1M zlVGM-K4Ym3b!=0|Np+31{DZLuxZr3p%@B;ZkcLh7SqrsIY%ygyvGc^;26eB&-iZ~16loO&e<-S6IWCsnCCQ<%06Be@7HRxX1UY-H+v z26tm9*8qKG*JWCwjf9J3hvOW;gF5&JgE!t$Kp#=Mcv6-8=)Ih5e3qxt#LS~g(|ee) z{Zko>6eTB=8ke?$^iI#yN}?=XNne}&womeMtai(o_GY02ZPbO3dPeF#W=8e*6o$Ke z7Urn`H4rY2N?D?S)M@yR#Rr8Vt|`4&feSDdt_@e$YgJkcSeLISdEmBPt&lEZVtY9n z7^3{Z!IN`$lxQ7f#-|@SFjD_f z7zrh0Pq?BxbvP)sO$&CTv9RaC`@Tf`x#FE`3`sg`(B6;gBxAekTpz^$*u-$$p31pcJuCHWN==HVIlrwvhehxPN)dW z^E0pojD2@m$5NtT_#9+p_%>rMl^P~fR%`w39&jiVh9_9|T0X%kQXc>I)&o>h0Li;I; zzkZ;I{bc@Q3c&DnTF_trgglt~Sob_)Ri1~)>lSMEJicSXJ5NnQZ85hyf@t?U1BC*& zZ#c@+5f&TPqG<+vUk$A#`;*A%Y(Hsw zp;{O8-4>wV=r{xZowufi4d~kPof_*YG;{n+W3|P}rL+8Hr5@pYCcGDD5`0CMZh5uk zc>t7|cbKp;L?<9V9-{E2JT1?N&}RdAu{zNtIE$S1c`-(WPcdOwN)>{u@SYZ$Aj>|} zI(F>#JuqEm=@E3Ej*eoWsoUjN43prnS}WW~~fO zH2icbBkXp29V-j6y2w6|nfVH-k24MOl% zvM{ozMv$ZMNb9gxvp7DN#o40rDsu1GcE#toZKT)fRgEC$;*t8}>sj1ourBsS;7Obe z7emlPS==9jEi4!~k_A~J>wrBIfo1FaH5$)Xs-E`PyYZbySCUlsr6Z-x&%R`Jhp;&0PlPt8EsuM{;@w`!r88<;C2E@EI`hH%bhVpM z^Vif6o^JaoeNM|9q<@AS6_tdZvQMQFk3&ST-2O_}jwsj0&)dO8<@#0^7vquEe09%?Xc7(CN-57fX23~*?rf9rakS#9vQ^*$?yIPB}h9YlBSd>xAhkQ+X-}+0Z zZ&1HQd0U%{7&$ylZ#ZH2PbQ$7We{q~oC8`2UxSPBzz`F25iL5{Jme9baFGdz!gWGf zXPb{>mF$0zEa0SPvff1Q#v>)iITr7UWAQ);1_6doiL%zWiB8Xm@?JJGoo+DpRw`q| zLCy!qYVl~m+KolZd?miF-w`&yF{eek?EihDQw>pG6c%Qr$Sh{mXr?ocCMP)sIJT|s zP_p4@Bg!<*1WkragA}{@vo*0On`EmY&oQ%_bUH*>(>4kwHWr7OudbO)@Mv!myhZl* z*=8iY4wHp8olQctQ5aS+=JvdaIg54c?2$HVRcPn86KbJqbU=gQ_#(RgqOO`Z-G-0A z<67>n`GLF~(~Ge*k-9Yu-K3wiw|USJ!v2}SSdfS)&r1gU zY0T0~N+Milg&_+VvWl)(!`wu8_k4HR@_$+ic880v+(MIp70_40(3#Yu_!Sd=TWAuj z2A1|CDKB4aVl_qh4aNInCj7EgCw$T;AEPn|lHSoSdDk0*d0GEvVKA@NDo$X3k@`=V ztL%6}TZuOiuGKPI!Td$aJ=A@B@QyQ~5Qi_Jq_c7(18a{c;P!?OObiFeLPj5G`xy&f zZDOHIrz2g$e%8_@11@e3T5sb1vH&s~s9Md~$}$z(u|FLjKG%QIw1ePcb<#G4A%+*_ z`x@rwG2!w~g&=*i(lLJN;uo$bzELZ>yjfuT0k6>#bhaBh47c6hUDZHs!;7&eDGX8A z8)Q$JI^yM^aI=D30Kw*TSi?)Q({Zj&QAW5~KYE=a1KW<81Ya56io)3C!UPW^uHQ55 z&*N2T^+f+f#aheLWbK<1RcWsD*=`1E1JmxG)M!)~e8l*SaGYnTm&b@-$&SYvm9Vm5 zxJ?$GMZGuDY(~cyUZMk{H@Q};*4!b@)>Y`LMSTlU4xxo?>6%U_j$YDo&+`mV|$jvflc>P_KL9I&c zInus+uPWvvCj+74T+EE-)#a@VD5Ii9zwl5aj2`Dn`&C!QlEkD}!s{8>M8@)KYM4BP zM`}>6viJiJUEHif6ZeK|!|R_sNs{Yz=^?n-ljFF2IEk?am;4EfM3=cPK?fZ>H;p!$6Bai7>dkNr*789gJPWi_{(lH*wQe zfQ^2awNz;U*XD$mDey$G;`KszvHzq}*gphrwX__`g!=L(9;r_ma)rdLM=RnQV$%;w z30%aCGh=kdd3uDR(_f?*KS@rxN`-d)$#6ZeMlJ61e6O>AVovV{ii6|yRNNHSN*8CB z6?n?0e`_(g%og8%SHtAfD@jhCBBg?wp=(;NpdY-##Lf(6m}M^M{3Vy*HxeRGj@* zBU(m>mAsA(`q)*bs)rnYU7HGC3fF3>RazBu6QPf(?S!vx@ZIeO(T;wg(8Tx&iN10# zB28WS@l0ro^}HPP?B5E4aILe3{mEGG4W@FCD5)8Ncad)Wm77#LHk){=0sRUHw-sPH zuRTcupy5I^y_c7z$BuPe#!GoLGrU>Ob` zHL2Nf(KXnsfV^Oa#q+T6SBqn0gqQICs{m6DVG(9Ah(UqD@u3GyR*Dgu62?-$GqHN2 zGDZnj9YhVgf3Y&y?uEZ_|02O%9L-d`n8mDLk7z7ec86Xxdr#p5TI@?yc>geO+K&n^ zKz0S2A~^~!)|dUPfYc8B$>P0OBy3M`cTwIb0%N{VGtv6|BNp7vfzfr~RCZ|nY##A6HizY(s@=?+UngirSfoZGDX?E4RCY`dpp zqavr&lsQAFSMBqn;^{c1Eq|cV=HroG zW$Rh|$WIY_$_EgV!N7;4gW_T8c*sEz(tCM2gTIGrpg1-uq6x;Ewdz{)5h?xO+rO_};w>zej}i=)?ZC9)${L!8b>5ba(c z0F4fMGFUhpltN|H*XB33FWQZU_YaI!)OYAU4aeST*p3u?7NK#l8(jW`{LOEuVe&j4 zDH=~$ya`*Uq0$b5H{hZt(?a)oRB?pvGq7J68podv^kS%5heJW|YqsuOSetL%BGsEnI} z34*(*0QMA{!-Ouc%P-K}gvjskNZZH%W%1J?x;Vlm2_4h6&YI_g;M$yqIbdZqlCUsj z?vqHYIRH$}{O@qFOnk(DdGcAXDY^sUVsG8(|4=9l7a08J9RlYTv1IngKM?)nyq5FZ>D1`ZrGS9o?`DvB|+9PSK=yXN)XMC z#tj)i#U>9UP!zcoH!}G3X z-QS}h%ok`Mp)X|iV?PPlvkCpRl6>Mr@xYyO}xp}cR!dUSqKqTpv?@ua9n{pzJqUPvEVhumqZ^j@cPdNE6d21tqg5F zX+U*F@|RPv=BKt6jaXk&ee{=xi(}m|I6Mk6s+EO|^|+>CGIwG+)=b$;mUk^uynoYF zOfx*4$=G{$O)OYkshCpRNIW&>wzJuq0_3QTg!q**Ty@ib4#?)sR~LTeeO5qN@&%1SAVZ%62QnAM7qPouPK zPOL{N+oDX&O-!0;jg#5%gL=bzm{5?U6LN~I7(~#q>;O`}fNwkqp5YlHxfwEQV7_Lo zMy7`G+57*{|FF>}52_k%4;3viS)ezF~?y6%n zHze)W{$$JpABL=lX(1CE8cKRDFX=uV#UuH2lf^;3brnntdB}cYTHwaO#dl^u#t10%U4^&HFZRaWc<2oiOTITZG~B0mk-TFtM8AU|Y;8anOw8 zLia4%x*bbBLH4&q{jQQR5u}rmLI>i>r}-Gl<9NU)H<^t|9t?tXws{(!KAS+a4=|F) zw6b0{SDq8{HX{8sGq&AQ7~)|MCDL6IDa-Ggc)Vf#Bp_@=dSGI{GAk*Gze0w>MJaz` zVlFgsWTw?!CTww%qhTe}oH(j2J<_$*9FLhIjJP=K44OEiZrURjFK|&5eMQS*O037H zkm5TvH3rWdiR6(s9JipCf`6FsrMF7J^btlH^>UP-N)|+Ilb}x@*$J*`L^xL0B%~SE zmoc_9*u_gAjoTVxe!iPQWA)?vmDnwuZ4ik&I<%eI9#)gn)x_fM*yBlYQwC z36js^U9EL-IUcEZc7?@_J1AmTF{BI=Qg**y%%rT%(Fmeqhf-Si1Huq+4-G46p!J>; z;9_#Kk8W}p9;xk}$KtG4SsWrpcApw3%D=OP86J5wB)#Wf*9j3rrh3bskWnvZ9Aodl zpO1kLXdkQqju~vV;9CMm{@Zb70Isr zVq;S7_l{1e96QxdG^tPs-!Ng=1e1U@I9;_8+O`QPzniCH*%PLQ$bGFfYzJd|rfJyH z8@AeF--38gQ5;VnKYGyPnv#M0GYpa$?PUzLSzti5#mKuzQ@g5fGg94AWZ>SiFNqN8 ze7H8JB_<-uA1Ru*S<`R1hKuZlQ+>p$*;75Wpc{RoMWsvI)J5MY0DU;ezR~SsMOBs| zE>zx5!Np?AQVo-(Md{duc(bLJ8r@qE*!p8rv5q+A85w9q=UXPcv|cCVem2!vdO(@h zD5b!~>tL&b3GdBQ{p8JVn)MY-xbeA3z&Rzl&(2w-eDF&hJDL(%OBBXO1{pq&V?wn9 zD&bTjI*j&|zRZMwzA*_n;Y`oKm$J$FfbVszeR?GJO6b@D#vUKju%)^0x{IfcBXJQ>T{YwxQoV52z}-dRz<0f6XpWX3vw+*2 zE-CPhPLWuOt*bv`^(}vzxO}o2-<&d~y{13vS+d{iszTTW5oN|%hK^o0Au;LAcf&;g z9!j}>8I=GxB~?0-JY~cu=~xotK>d-aFaK>)Wk?%sc%d^~%-G&hpyahQ_thJn5tM*avwRD+DWS*ec)QF_ie8baJ{}!_CSK*+l4fC_hUkY==c0I zFPRG&mA|(cdpTFbY_{9u)nToEcT}XXz7Q29CJ&w#ZoEzo zF!tgY6LS&8f6sH*s%6zL)h&=~Lv0Jt{G1QRlw zs8BSZ*6Im)Cgvgv-<%d;1Zf!)zRlMNvI39P2sl4adi7`Pdgarm)fVBCr&W2ocU-1`G-7y@#rIb#Vh?e`B`R5tf;IX!edk3|{8Oq7c^E?Ke?DMv+y@GX zUiVWJ8N2!$JxG21T8$w#)QJiKz zXjnMFgelu}{|kC1In|ISe@J(#C484hc^bUN0Bn|B3XNx+AhlLsyhjlSiYKvAX6TzD zAlB+JUnz_lVqS7olwo-rGja|n4Cj(wT1yoU*IM24Cl!-E$7vzPc3t zkkQwftVG4DHyQota->Ydug=JXe3taS!J2Wxx0e#U`;2}2H)FBlXr1ZqT8T1h(8I7x zPyMmh!VgC+J9ce4KW43HQ8Y2iO{~a{3N>PV3WXBGgwFE#E7YuP9);<8dye<)OW3on zI@V-NRDyw>Vl3Fh#QbDOlmcqkd-fx}$vzq;KgMGw#HU#tSzA|WKRGI0GiP+pR`{1T z>4(nQTmL!LJlS72wzvl-1HRSod?&Or^-} zXDq8eW4KdffY$F%g^PhO91(yNNfu9+DXF!FF{}dBu+1~4*Oa?{PIod3dP68->p%nD zsLyXSuA2M-f>bb2tA?AH@mw=z(CIjduae5ASu98rsdwwU%f5rOdb5(TO`YY!!FUbG zKk!JEy&h~~C9%Z@+BSI4=_;V^pDnqV5Ih`(f_!oBemm^+Kz`= z1@zK&JHM9X)ENHFfQzw^K8iR%h89wCJH*Wm!Nyr<12i5sf}#d;ybVu({pGEoAtTx^nn zX3R5VSvN*ho}J+#I-Rzw!uVA-{$_oRAT!5nfp`Hf?r2KT#l^aKFN?F1b@B426qKaj z6nio6kYY)y?qNs zkyO5CaoeW4O5=6WiH0xjCXz~a3mtoABkH3)1Ya{2mZf8<#uUxtf7(NC`Qx>_~ubI_SP`5$!{hOY(&-(GyxDwA?E5yPjsmZ z>?mY}U1BT`)Ao#298*%N3q<%nd4(}513Os|{hCIWzAm(>$15L}jO@>Tqxq2w$o|#% zib!)STs~~Ie>Mnzy4%NYy1)5GjxK_)L!{rqGpydhQ zupno&&htgZBipHPt(I$VX<|{Dh$yerQ))S5C&ug8!7KJC8%I@5^| zwzdiZ-%>k1#EQ$H7`^hs)9G>dB;(8XnVr1K;$ zvRHnriI)zG@e_%wkn-6xwE({e7n{Nko4Bl~m4S&bpO#8czGGJHVy?M10r;q`2L}LuS>hW3qfjUYjU)Sze?S zxuI}zRz^G%B9<1%gc-U&F;ok?W#PL`_(&v}-EPx`q&7TR!(=`lseDNmA57K7(E%A) z`RWj$y6=%#-U)jcivGnhm{tls#XP8#}oF0tB z`(r$0;u5VUb%u*O)UYL%6AqZw2;v^b-t4Yp5#Pil8CavGq}K-fSXmF4KaCHdB~sI; zj9L5pFe?(9I^lCrSO!jCbD*UPGPV$#TVaf8X@*B-jBOgIW4=DKB1QR0B@dFJW3^0p zoeAdZ=VQ^2etE?kFRr+1)uJ6G@F?9`pYAh!+mnTT46=>PTzUHx5MTG37 z#(5ND<0mneAU0PjrRy9pn^QhRoxtq^b*sg7svM0U9U$1lf;!VRWm&W`$*JCw5i+2 z=C-gZEkx#gs8#wS%vildV~As|XW=-R)mp?m7L&Hu3SB!VCIcVeh3#i~%0BBg#$jfp z;7x~UCP-q0$b^q{^%7G5?R^FG5#M*4ol412*H8b$6Qf>5tn2|l!nEM+RcW;y zgVp7Ivi9;Gla^?N=r}MNZZYC?5r`Nv{I4l)7&o0&#Y(Ra$V%bY8dc6t$iRn+JtQX? zeD)jN&bsEY@rD;KBL|`QJ!A1AJ8u?t^g>2O_5foSPcRlPd}hsxGHhledvJ;A&l)B- zCuQJJAG?R^8C-l)S4`;=8)JAF@-Zn!;I)g)4i}{xX1U0LkWq6wjj_OARqQZi4UEDa zb$F>hD-l&UJ8No&&eaMWuS4@VNi1-*m z%UPoZZ4_KomA|SI#Le8;dPd}aXV%7R|6zr`k2Od3-yk@WD* ztJ$;@aM>#e)FWBWgxg^zAzWNvf|kKf@YzHbo{6>-n$E#S%f1Nr()9{!0<#7sn5+q4_xkX)wq(Y(6(k;W$L3%!8j36-yUELIa9TSauJIWhPJGErfrJ)p$A{XC%xq zhT>Zr5RMVr9UEfctv)5ydsvD`s&dq88Q7t}3_{A6T@0plZ~%Rg3IwLX#if3o6tGIB ztYJn-j?TD($2g-I*wyMv=XLm^T#AW2#}Bfz*hj{;qocm zTH3<2Z21O#;K;K|xPD>QO04~(kc*>##d?cTTj%&VmeP)&k*z-1WoBpji;|slJjKX) zimk7}vN^qJk`j#EYO<3Iv>j(+wdH)sXxDxjV+q(4&WSgFL0F8ag-XEwW!~PIy6;bZnuDWSp2T^|@_kx0?ejVL(yf#U zp|W%|K40Z#2)RXMF!y~2uw+yQW}=dU6eI0+laUT<9C#}sq)6^#uyl(8MvDdUihAQc zq`qyd!tldjK^(57(L?zeGlKRgjM^eTe6G6)Z=e{8+e?NzVRax<(t{awp8K zCnNT2-etkXx{+T^%v;Xau?>tZKJVbu6m-8zzRIt8i`eq4k{52U0bv0>N{0JG*!pv zu9~|xuAvc}Ip30(Kc(5R^0{&L0^<7}L8T4t(AqdO-P_`7ioRQvY*@^!c}=RYaDRec zf&#uLGeym-5Ne9ypDAWmG3&Q1g(ZtnP(nqAMRC{{q8n=f5kA76tx9W#6gteGOxmA!P#6>=H?jZQx$gF8Uu4pi?$QZGFY&2J6`8c%+8rB8x8#)y0jEX?3taTr9d9!{Q7vsbX#&yP;=@SSdsNG&IOmhasnUS{NF>Yrd_DcZ!mR{)&b0a;VU~9piHkx}2bRJ(62ceXx7)J^G4$3ZE&Zzaq@?*9VHSEcl6L1cxTi^OVDX(P)hz!o5Ks zSEW(PuLWjvTB|_faddsN5f1#BbX#v!2}|qO$HgOh3=5esq|78l%8tM&d>#k@4m#Rq zVl{BIF$OecE+Iypzc6Od7u!+iTVl4@@f5a=pZ!NyG|Q~7yw%u?Z$7U|%Y^rD!z&yO zw^zZ$sHXL;vgkMM4Re_Zg$GnZ=T7s&WY<$#1O~#zxlV^ng0tKJ8MSAJ7%Mu(SeWn` zI4@GBoYwSO!^M50XH2Y~s2GHWP(v?jgxyT=ydW>2_Yflg#Ussf$Nfrrmw(s9qT-eM zaYkU5F*fBd6RRN>46bi82(D*HIq0TN$a`mAUD*dR%8Aj8$-BCLWq73fKCZ&GIo;Pa zvS-Z0xzcAfjaT7f-sF*q1<5^-(WK%9#uh!%two%}h8rU@>;4w^&1ziLH$J&qwK#_c zJOFFuQDQ?x!DN&$dnSAfZ8QnBbZp)Ndz1`|@1J@u+XJ&byYN57!D0v&xUAI}RE zdkgW}w40UZ$?P;gjUdnAkzVUHDo8x9p1egrGx$L>}I)ewX%LzYhawGoIXT=c~ zpN(O0wh^q|71f^k2Bmfk-c*ju*l@1|S-^1x8|o(*AzFQbynZvy#OjEg3-ba*@2XUt1o%q?L7^!{) zgOQG_Eu#jgs^#ZV#!7E!75&T~wD@Ngsn{IiA_g z;%N$&1MwCXx5dYkp%SVsnJ7V6so6-nN{a0kDGYyF_UsLtbY_ID*BD}4e0-#lUbh(gbc0@jQ?F}HWIwokU$a*6QB~vf2}jh@JNm1Pb|*<)-+l}jNCBaQ{McH@|<%Nw6>LGKlN}` znyB9?KG^W%b7pnJQhaXi5JEOqSB!XF2}%81WUKWrD$Dze`Tj<32___;)(Mq;;_J!l zkWqW!{WmFpd&b0YZIE7n-UViJI;TN0;tnnCK1wp9NWOUF>lRH>E!|Kp9oy*NE;y(a z?p9;p|2BF04i@@zhOlLEZeYCW^#x|!#8Q8Q!RH+z3|7nWYr42#PX<=$EP{}_ue%uB zbXx)IO7FW`sf>hcwY+do0|h0e91I!FpDt!>^S>tMEP78w0Xp_jYe?=fq0&oEK~W2p z5&vKj*3$RlooQ*s`G$DwuFTKq1iD)?P4&DUlFGjN6_dr2fVa z3~q{4z*;iwJ~RMklWXY~FK<0YuE^X62(FwDA!%-4@N0}Q8lbzlwgGu>4^J@o*Z_{# zmcgKUF$ZEgxWbg;SnW@hMkx`v{B3q{$nb^WrPriBAQw1zbYF7B4ZfFl`` zn{@FJ7Wc>2VEmwUpPil%uO3Dbi6^{I*gXaIJ!AiSfw88dYa^`1$wDA0!fl_D-Y-2F zi)4B5;A6YRW*kIq z&%85C82vUAVq|pnWR6Q~xY*lVz~V^Z>yhB9y@SGQBy$>+G2zTqlMpNpy^P&nol#!Q zcVbA+>EI8LYxVIB(b}P)wV1A`F1e5PQaWpMtm~iJ*q^ZiJ|P*PQdOb zy$)|+!n8#iLFOK!IS_kf16@cvYbj@(O`ZqnZ-BEH?7U0|i` z61vKP(#ciJmtk-**pD$ylqU55S%04no?~#*hYnz>o2Hoq*XD#{7!}122r~-*q^#{f zc0n>8MB#Tl4(|3^RZVnBO2FkfdRnxsNg>*}L1oAy2&q;3p1~cP9l#I-nvP-U2-j+< zxlI9S4PrTq7w=TWULvJ=0ygL9US@fa;@I6PLoS4ntd=vFxlaLclU%C=vmsCQB=y)M zdTTlgk9?Rli<=(R#KQNr1%dJ@WV97C-iuVe{?Wt|jVxWySi(sitLT>CU*fG5@Nl>& z;AeCwH&=7FLdPlmz- zHL}g&qPg@_u|mk`#kh;HX95&VWQhg7(mPN~wlsfI#z_oXFw0ga#7R0z%~Q1eFaZb2 zL!W~AInzF~nzWV%)~YU)LhxRzuR>e7L3?$RSn3q-Se9D{V7 zkb4jToC_KC_BOz^(Y2DCj0A}%rrgjq|P zRbkl-LL`y~pTAiu;p*4+%rFYeTl)eA9zX-M3t!caV?pt4Rn@JBl%#MCBHJ&tHwn1h z8Zs&|GZ~BOY+^B5HW^-iTmSaSspy}0V*1~4HGfVwQ_D{~PEPg@)>8K^xR~aC(ay+C z@Dl%?PKY)le3JH9VbUcvptTLvpS8H ztB^Po7t|AZ_mtd>K;hu`G>1y&;*rLlSFw27Si7g5iP(7% zo{WpWv=xXBB_a}l&FP)0TpA4h1Q2>ec~vo2IXRLBROfppn#DhXJ1ZBbn&e2)zhhCXweELN&!$UUCV@@vDSz)5`+-3(wd0RSe=j-VU_V-A15viS(2u2|#Y))7ZWEdb)O@S-N@p-PN<3}LjEQ6y}SXhK^Pv|%zY{uFl zyBQA|{uh<2&^}61EG3%LHCYQaDO47LP)DZ3YpMB!O>8;OCPGB+xWpRL_bQoaQKXm{ zP@jC-_nStOrFcv;k|^?9&q1G}jY>ot<=9|!{=>BEDy|Jr#CV1t_SOghDjpUCA?)mN zfLsX~^|W_0whk+N3`|UTD-oA2lCt6Nkxs4UEcp8j{B_*+x9p~=it!NL%e4vQU$Ja1S_`|U zbD80S^B`IA7#?Y8`w5F(ao8io*$})!FnYySBrUX4k}>hg2Tb%WR`TIASXk0g&w+MW zCdL^4-$&c8dQyny(tN_JR?E5h>*@#*`qKG9LIMb1n2$rk{c7-wdvh0S! z79uOWGNHZuT2XCTj0Bzzs3t9mO8n*knY@YlXN=-VKfH+!{)Yqe~`dRww8QXUog zh~KXyCK%ox1i|KnyJQ@2KY27a6$ANuV3oXXi-=(;kgTJpgymKwW3`3C_eSnxZ?%g0f~>&gV025f<$lG?AJE zi{ApEL8?1U$a_;IbQ!qNOWYr@&{Oz4vfJY9{CsUxo6%oX>$MX-k#dxlWQU&e#m-%6+$Aa4 zh^|{xG83Jz5Ts8;CYD7k$kvj5G&34ZQ5icRqaF9B8CyJE#ln%0=|<$A-ku)n?p3YY zO_XKFQ&4-(RJ8=OXv}LDxt3jvHB46Gk@gElHD@udys^i&rW^=aCa~p<-Cm)q9K$2; zKWRaQYLzZ6kIKYLb9GD-u0DcI?b`1ES?cVI-%oAvxIUp}iO$^&&0rWl1Q&P9>tb<# z&3mCTyrq^ZnQ-x9{!mxRZk3Fw_=@ZA1<0$$td@+e3XQ(dN3wX!c14WAzU-uA zBc#`u;k~;m!%I|TF2d=eZ52=6c!oS#P_A&j{sMTADBX`Vu@}k9Y~aIxOanop@4HF(oYR9g@Hz6~ z(+4IYQ1sn(z}+!peq@%_N!~&xVD;GGOl(>XYp0dg47eB>sjh)b|F_6RWEUz)w}|l{ zYG}A9Tc|Wfw-_58s2d(RG!vyctG#CU1-LjKG(=a#!e?Bpqlf!*#&AY7he+ICn-pVU zksU~Hu}wExjz?#)dy`THXFz1bFp3r(B2YVjjrI1$Dq?3@*fAN4#Z&Q@zPG!<#g@YQ z|Dn)8%{Bs^qU9H82Lj~gF`4+iud^1HxK5;4g!y1jK>~fnn#{#@4Ms6Dsx{Ra*-*rq z?WT+U4TcLuC=D1{XB)(zp8FdtUWUPP5{qU>krd%DMs3ZHjCH^wT~_hxlFSn%P2pNC zZ?w@>lKzJhVONoi4a3Mfo6Gt!DZ#+Jx{_WFCYu>6I+=uX$|0kq8O>O6M-vN|iF1=N zN0#~~o#I}e;ZI<3qT7Jhuo9RpfpC1&^4KB(ws$pK(fv7t%M0l^Av(S1zAVSvUYMxcYH9& zHuy{N?gtm=%4*`C5S(T~MmOfgiGtQkBE^x+6i*```o2IKHD6>xtl02da$N&E$k@02 z7>f`ayDtfobC9Q$Jk4Juy~~&(fDaKeACKDHAN5+=j&{Fx5X0_=u zW@n-@Jf4+_d&BHD1A36n%y9~(zGG;YF~eh`!l)t7Lr9J169ya4)WPhRlARhsJRYvq zG7;nU2x+(^v71;Bnv!C~^IvAS@zSOgC|>0c%ip<(c%4VQnmY8x z!b)`Itoi8n%CeqXg*pwFhSxR2gt^M2_**3tdcRCTY`RY2xrn)qQ|h9?BeX_`XyodI z73J`MC;WF@V1gx8njd`&(RY>S7G$CkFPw~wW(!D$hP}uSue~~NJRa!`|LrV3QLc$a z*RCl+hDuOxQi=XS$I5!AG%&Cgj6FPNVy>dNe+sUNrVzuhZy!=_c*-Qy5WD|c;w~x& zE1??8tml8%Szd3Y*bEC785@L=Y|a+9#nhrdguhh&y7VRUYp?2H5guDYe3ZrS-c-b{ zGN7L}3Gf_Ti~(bGnhlbUi!6kYO3x++E33=n_(AvOW%eibA)J5%LA>lFs65!cFJUb52g&DpcMxzJ|xLX2q_{yuMoI2TmijgKL`oTW3X|w0=kJ~ zeU>_l{o7K~jHIveD%o(xJqAYfG@2|grkHw3~(uhbQV;;D9fm77icUjYtp;{vN!-ertI&`e*GF)lhZJC=G;gqU3 zbud1US+_@5VY$l0(`p0YIgE_8e!B|IMU;{XZZ(kZB9bP!(x_um5kQj7cJmo zHR1{dmkS`HUhn6OohVi?(K02~EaXj)>Q>984>W=tg~u16caX*Je5{BgN^VheYfr-F zV@UDfC#vP#rm4>vxp0;Vv)3yGS^hWrT84?fZ@~o4Pe?-xh}!#1Y7n}_sV?G3R;u1G zBP72Q$&$UrG}FlNqR-oeb={_8Ih|AMiho-y$93!aE9n>$)^9fn0Wy57R*bUXqPw(H z!9+!eRI`oR#Dv`4CLzV}IdmK;AKhzW0kYs8Ra?8)^O&)?Tw#bk&nxC1GU21IRl=Db z3gM0Ml1PxK_*gqq<7@%ga;cX2_@qe~hu$el)SB zGG&rhetS$Hy~*cPufiwdJ64tfArFr+<9`)Z88qkK0Zin=#j2RQYy>UsvKo51?t8K0 z8rn5-5-(WCNsF;J6kU-#B{g0iLky|U(i%a;_vbB>P*0S9u-sj)(!;)m38!nwTB!9= zvbS>s>_FM}E6V1I=M9c7ZwUA}PwOSrzn*=X8%%=f9vzpX}-H}FUWF>o4bfBc*-&c!3Of%8c0gnPA6pQAEMI0y>*o~;EzceRD#j6BRK&GJ%BB_W;>i^y z7AKi@8K1K=sdz--FO7}902g-(zNUz=8xlh5G8} zMhD*huVQMdm|rg~R9-J>fl8BeKFi6wdceD>veW!z-r4jvTx<0gAz6-JZQ)M^OXf~b z743r38ps7jh#4R3xd-jo@$9^nE6|eEz)~5=JYWnvz}B|Qz@76<<)p1!g81P&D)lv=G?utT+6zByI) z2e+;a!Cxvb&EVQBUu$B@d;x*AdiKdwF?@Jhy5aRb7PtK^RR%3g=Hs+-;aaN?xRffN z;#Xt22Y<=puPk5vrzWR`lfB;iKf1mGJgVb+o9q&S819g4a7_Y92q6jX?ixsNLLi~E zxP+p`X@Mz}Fi@;GEmEv_DK2gC0->c8mm;Ob{_i<=c4wB~_whVr_Pp;oXXefwzjNo3 z=Iv(|5-VnZ7GBup_&Sp}{;^1h*w;ELyR7&H3Y#lGZ=7i`(7SAwEdRC5lBKxY^)wF; z7gvuMIkX&x4%@2E@(6y=T-iR4;%?I|e8F=glRFb?yV6gN!4JBhhgq#sO1OCKQMtNI zTuhG)mRyO$N*+&>?4J(}7vpnQE+G5Ow`N1*5jyM_o$wD3=?Uq5hKCHdw8ij%%BVV< zt#aRP0hv@Ap}6LOm9c86xc$sMP@H@Nk=&INbbCgzMXXEt3!peKd9-qrmaB4E7w7RM zaoxsRoQ#7Q4M#&6P8k<2=GLxUNcg^s%q}D2sQ3oBea>snx`fQ)w6Fns zSZhvitrZ|jzC{^zDwJGGZXA70g(L4Ohq)BivclE@rb2&vm9j2{GRw%rpic}1`7tmm zQX7~nI@;v^1xAl9Lcb=vW#dh56foMQ^gVN8vcZWN#j5BGtG=9!FHh47C0q$w#ayG? zifcL6NNm0pWY^;_=JLp95KFikk=6Uk1`Wa!*_RmJxqk_9@q@}D@vABhaeQJGUD7VX zI>h!uQ5iE0Dt0BsQ^hX3<3}xA(J}(;XZ)*Jek!hlva@1)ts-uDo+{$W`YO>bcmTs` zg)I}g86pp(87^MDikP$8(2iV9PI8u05o|hWM6igt(Up~_8xYCUdxm4;l*y~}$S7x; zhJHitiq=pjyCG83|BT`JwGDuPQls+6!IaAoF5O9&&aCUhOL6-^wU1MO^I^y2jB81=Kh#Ibo z_yTZ<%`-v-Es3b$LLZQ_?G?Vuvz}JtLh+Y6rRE569&9kfbpdQ=U}y*f`Q;Oc^pw58 z2GUzwT2{x8-nNZpWUKFKXT)BJv{-+U`Iib7V-H4Dk->kF#*^cI=rZ<|jKu?vKg%k! z%uTdhDK=Whn-QYi;D9;yX^}4gQjIAORlGz~(I9>0Cje=Lx{S%8p$6F;a40$toaz{E z!2WU+KsqaUCzHpkC^G$9T8W$UM}#g0wE#J641%Hjuz1cR_=oD*e$oBy0ebtyPWIiwce@IVp@=`=aS2X*e7vfR#f7N8b zRx4X#5aLXZ+N|P`V->uX;cayl{0L$lp0m*4%+d1ez^!B)y8^z(>NO9}`jPP^M#pvy%5Y$A)HX0(0(l;|)wi&}A;-|kN!dyNpA>SOf4lS5# z1Lc(r^lqhm+=WQb*9+_*z0Yt$9`Uj(M9M(H@DJ@2d{x2uc9QnV4hEb}PDL`PU{7cA zSSPs=Kd8-mLV&$?*9Z~%Peha}X>E29JiUK}n3^>*)CF&1cu{hMSnV0v!39^@O?438 zx9xx*_24xFp~F6Bc!WHFU+wJ43nIk$n8+eBat{sYw>ZUF5Q{>8Jwk`wLny5W5Ifs5 z7PAm0juZ+)G>u$#!j2jXb-J#__ekju78Ai!3Tm z#u?6Tu)z$);Xo9tYwC*7VSlp9GGVx|D1RUVo6XfY?ILS5U(Xsrve14sovsG2*`DHm zbjKd~x7f_({+?8x@7SQF%g-4YI_#O-BgD+sxDcxiF?Ofe^X!Tc=h{VRbne4tv`(tXSU_>2ZQ>nf|gBEYRp3 z$JSuca(ASc%zemeg&HBm3T@Db8oGf!z#6;I!f78e{V;tZJM+g#-2}t|!hy0l7V`tW z2;9qUAVWMVn;fOXQ@#a3Yy1&El66^Ber;`Oj0Qt>V;yUp$ElMaXo#p=k-8BndxRX- zZ)&PxH?(!TzhUxRbCVR!?nmmrr{GUyp48b*=;ncqL918K0x% zqan7d>6FU70KLU)uc%;`-YC`^Kjwe*Xv^j!i%kC?(pyF!v#NL^LVP)R!vCmviP+#M z?8jE=InH{a*p6kS#~)>ZGQKWCY?+;JklDrV%0_p*oi%P_CzQ*adX3N%WY}wi0cR8G zjiVa6;yuI~qrdx5!&hu+5v6Nb*hy+rwnd7h9Z`A3#@11#T^<&Ka@bq#QCx7Bs9fS* zPs7%JiWE-&pcQnlmCD?NBNivWfk=a%Ooo@ARB%BINXob>ba>jGETyox^*vS#%DK%v z(=Mnu(nm(&g$!8HFk>x3hyBrSnu~NL-f@Pw(l=E^ogvbTRr45b{Fj1HL8OV_Ylg?& zRi1Xwj`Ec?&RRR&(hxfAcb{qwTZz=o{e`*qS)(}nq~AGfz7~eiVSnnW;QkP)R4ruK zp3Q)BihQf1uw700^ZA(!5BXUd;{4huY;00of9Bd2Vy?Cez63bL7OX7t?29U+nz!!7 zYNA1Y8x|$Xor%Kf{u``@{fl1^g)Kf@R{9lXP%J%T+)!UYc-9xiTqmS>DgpK((NSXm zg{T-;oR1myiir}lic~EuE1kEt3id>ZugKK2V6pK!qIIVJ9CJCxGFQt5*SJ6?WyUdF zNSrBJwS|j2&)nosHJ3}Ya8%W0x9&wU&bc8<>}^uDmfL0j_fM2qwxntvabiJL-Kp6x zkwNuWit`gy^{wp9+^_GM(=FOQhKqYtC3pGde-LRcFZeQfdg`U%E)Z#=K91ox0SxC6 z{u`_61}Brb!8t8X7Pw-qYt}JyrFP;0?jHTfuVtRV;jp zD*LNqf0im4-2h>~TxsTN!^dF;Y~>ipFW-?!iT;iB9Mu@kCp$r;b=rvxpJ}GxA0W~b zit7w}ows1|&BxKYX=rebJY`;0Cg~9QO%{Uf#WJgknv6A! z&h}Nz4Y|!+C)XuaxIrd0?^eb7U?mTlLd<8R_`|9q$IR%uE=8|QQk?r3p8&wGVq*R5 zXkDEK5@}nB6Hf4hhVVBKhS&n4#o~?8aV{T?Zj#!RTrveeXfVH)0q;EW6n@YoI@|9Q z%Zhx_;^}rH@{t7F>KBk1_(2(;$$H@hqs5Y)(bZiMH2j0i6AMR+YrCWMV0S&iw&O+R z8T_EuDcdd5`>t5DXt6K4nag|v!zslX4iVK48~OK)x#6WOPFDNVx~IJmVqLSeGTC_4 zi1r?Hag~)x*lp|mstyS8VYvteXF#NT`Xj@MjTv@`vG=3%aZM{{zj8EMHp6U;*4W1( zbl8KBMT?5b)f&4}{t|GA?F6F*MX`a^bfN8jhb;cNs5yVpIk_4(5UWysh85miiWb#I zR?{s;++DJ3a4lLU;a45Ry^@hXZ$-;v_(cQ!qW4JWll#%K7JiY=BtmS%@tJ4*C?ay~ zuck}MUFOCGOTYWpDrO^u4*R{G)#O0@q6N#XgxL1(VU+`38}ZyWi@x{i+!hS+k(hz46?ut`|u>nWgkf?HTV z!Hnc{)mz~J)fEh93Ri)}WdAk|j{#}d+-&sAk=+myco-T#|O`gu} zusGQdBJD+A$gn)Za6vipq%}Nv!Eno?*yZ_*URQ}3P+b*2*NEfyHhD|Uz%$UlF^#C` zmW_d@4KrW45gusBaSEZs{_?CvQqxfJIS|`td1OocprSU90DFmi)#(ECD)L*v^hvJZ z7gkfz6CplbQh%ewLweo%i<nRv$iGj)e*ajr^=O0+`@usNEb8`+)t$*2=F)#uCci_ZxU;2KdvrU;};d&6swEtHo$1{W5urTVs(oj z^ajedow?;&{J_Tb?~Q~^VQyDm=4h;amx0gnOTV|3Ji6KX6_6?TLA!w$AVmLCK<>m3 zT84PYKwdlrduLVo`UoBNUyH_yRtICt$RZu%@w_q}qrn_6Fn`=qW7@mb!0)m~H7DYYNYz7_{XWd}2=4fml*VDMi%snr`T;Ys4p&s5D5uqMM zT@R4=lq+!=nU`f3N_+{o(mtq^Ho`b2V{0g)wPD>2E(>Hl4&|#Yh-5o#>o6B3RLIk@ z!ER6c=(390{=$MA_}n7wY%GrC1I8T2M2qyQtap~wSs&LjC$9Sp2W?= z;vO5%yopOInrU3x1Xg%gT`TCz%49A}oIK|RFJi;*v6^c_kgae{=5XKzL|Osb$nd#Z z3@6$|9p(4Ny;x7##M`=Ay%0KVR}C&ut^r04eqt^QzEZ&nhFx)2Hkb7wJAs8g;$(M- zH2j;%@LsGPxZoV()I(?HLgNW*yuhlT)2XMJ^E%dFMrT8jf22gy`|X~9 zW6846KAs@A8eIc#8M<3}iaYO(LrFN0kPIUhtHCX^Y>E=Ws#1keg+PI?f7W;hSbZK408gck8h)aWJSuYtr*xP`8 z#4*1(-R89lB-hpYS{kBZfZ=o_b1VBP>st`XY4#jcRQfBlCM0U)$05X#igyM9OrQPES#H6qCe4`pG*Koi55AyrYiUEAz~ALm~r99SYyR!h6XhPr3#Se&C`_U z&?<3dU9rw$?#6V@<&l?w(JgwxT&|hQ-Hd{vIEj95q!D3zKzKJ`mZ8za-f(uTsMRJe zw|oeedR4DN(6Uc;!f_C3GM374p}9(%;N0SEwK$xSgP+tTU1p6LpDT?Vg+tLl<481w z4tu_N2Aoswgf2be{D#RX^A&jmBHb~25wgiC6dVJQhDN;@KC{q*#pBv>_$<1LeLuJm z+gF4JuF{vx`*(-N^xFG`8oyu`(q zwjy;o-J85%h!>pFGb#5a#<*oJBY&~BaU8zVu9Dli7&-mwYvwV|4+_P{mj%EO#JG#e z%gYTC-+cf`-BtmpVm)M~K~kqboZ&vJ7%nLMTA~sg5mpXEfaYYBDHhg4$`i&L3t|JAr2=&sY@EnT%(POtI;t|WfbhLGxyUb#hvP8 zeh}}5#BSdvg^v1 zm7v(`?v549ddEe4;OBMnzm4<4&ja{ze}q1B5Btd@0{X^9wVG<)BAC47{)HrOFrQ77Xx*@@h7a^Ck zQ*=cb&Wli1OI;A;-f6`obISCjQ*Ke3RbIeMRTv~>D{pY^~nC@IGZ|P|-fh@Tt=ZeorD`M_DQfXDw7z8)f9-1W*op z>d%VXG{(4+KbVXARdZf4xE%Cdd9#200hspNK3179eQ$;&Vra$f4JFmg8IALZ;UM7q>h40rff!7<@htCWNg zYq|e1tXt6|3|Dx=aESD)Z1s8-5IXGXZyC-bdqJdYpT_W>cNQ!Lt}{yQedhjquejao zF&1$qwMiAYvsLqu-y(5&MfQybw~o2t__zggoi-VqZv@$GwJUDrW{h*4K9iYyn$_au z*AS`oJ;rb)FJ)3=3kD}nlPZzq?jk;r!BK(BEyn_*etrqU5FBE403j_v{mZ(~vNKRn zMDK{hp{%Nqb&MiE5jYGEO@1CZ8zPM(_A&g<--1QA-A30_yegR-2-IAFsPThQ6{fO6 zp`6O+K8USszvfc+*n{#uQxE4oJVtkqToRz+X_`9 z<1h1Sh1{acA>-nvu)^m2T0xhV_srEPWN}i)V2C9f;V*Uj{Se|ECY9%e#2e$i}(MWdrQrV{mgYqdN^!6C*{O#?ndufbcpVB5yPR6gs_QP%B#9Ui^75P42Ic!f4t`&->sJYt4$#DFt0gr*<-q}yF%h^_V}DK16Yjxa|0{NSRVPLoOQxbxjN+irJ+&X zRom7xcdx7V=#aj3Lp|c`^AeE{f$^bMqQ(AS{jQU3a-xR&%41iQ2*CBM+{U;c@Uh*zL z8ja;^OyoH?QuM15UsOKsfa#hl0oP`+agh80>b33Rvn^3vi;pj7&DjugJAI^5AH*i`mz)KabGCA+~xN1339$_Imi`K!M9A z(;*jz-C~5;{OH6*w*~RVbipiU8;--`VL;EC+91U9R|~+`u_4y8$90Prg#v4ob~Q;} zoyp-iz+D4tL}*tzmP`mhj@0S zmDu439rgq#ycHr%DlRj;SjNk@_|?L;G+s7G_R|bvB*G8^mf%NMd)8&~BD{5tLRRaS z)8DP@uLiPD>l(qTX|%TPd<<||>l&q8Dcyx?>9B9J;5_0b8R&{Ef&-gol{Zo=;3A8> ztSxJFv(hmDp~K!4$ZY&duwQsmUp~gK`u4!5^+ngO8x;Sb{jzsz(zA3*)+|f!`g|~@ zX$FHuUpI*S|HOJEp^3cH-HJ6&BE{;}t%;1ruO$1%+b!f`{Az5!k6(B3i+bk*Nu*Wj zuNE>Ezq;A4{MANg;1{*a$C)d9r;U7sUtR47|LP!GEbN$H*6eNdKm*W*Iqc5?k6+la znA`xdoc-2ah+lOqBBOgzCzGQmb>D^W;jMrCD&;7;#_9O0&)~Ys;%=7I_w>t@L7oU?7u;r>(eQp z*e5&Ya`|e21Uu|Oj}&KH+OeQa=tB)KBFQ25V4rD#z135WAV@S@-Z7WAhb>PQyi+FM zvuTEtTe!SqVKyyiFY`CMD<;$WQgvSse|eCs0|>EWOOayi3dB_e8s+Til{(TDpt?Y$ zEBFi{o=sYCZTT1?HIAXt|UmrKJA!YWZdkS&()vw>PH1T!sOrH?pR1BKDHeE z3Le{f|40Bl$nF|uXg@-2lm|x82&qpABiR#~>^#d!hBoZvEq?|`qnf8odVXP${=)0=Fyl_8(w&-TD3oyB ziA&%d_Js=+DTC6iNk<)o*aYyU6Q2f|a`#)tBc&66rSyvoCjHNsJMo^7%Rqky<4;#Q z@n0a*to$|O2e&%$+8y%Cd-p2ogTYG4srFAU-TF;=Q?IOuQ5M!f5iL8Wv9h4vcR=G zU{8gAb4F8sj**5gpHMW5t~<$HpLZ(kO2ZK*CuKT4`VX~op)$e{+n-K&1Vmb7&p?RR z2mW&6w;)p@z+cydqOTINchNJj8?6colWLY^DG8NMd!flzb#*bE<&pR+mE>*L@(>`^w zWXZMe!&#-LXQ%ngIv1CnMp_PrBXrmgG$gd5SogLQUg%SG?G97FHX*8kt4ehpMFw4( z5n4iYwROf9HP2a<`bVY;v|vj5kG8HW457n*qaC5e#ry1?i?|FHGu5$^MNJLpT+l^% zj-h+i%VPEw>>TV$z$aiF_K*89h4=iel7EZQ-pLkPek>YgWKVm94*TOFmYeQnJC|^| zInI=v)JY7Uhzkj>-np=giyB8}-_Ec&IhI6tTgtF)zJl*Sr1ImJPTEZuDo<~l8&^1j zxmAl4*SBS7d}&MN?_bO{S+3lLj>i@A9i#&!E_jGSb5K)0!fLsDO)0)b87zVUC2J3b zcK>ZEj(5qOb<Q{oia3vL@+PjLqk2`XE^*11>b{6Rn>n!X>YrwBKRbu zOCeVT!u$74=Mr{FE> zOiTsbPl`fY=#3Gzefx5xbHvZaU4XNj;>=^zEO7jwsk4*N^+?$ z$z%Xd_CvKPAqPUFi(h~+1aH(bD&Fnug6WZp#CsuGf{JWajSMfa607m=qfB@}n{nvs>em}^#6ao2vwWjgP1nXkw$qP&VKl|)1}m*FX4 z3cdu9684_q29@R9#VC-%=K(x9o1H;`@a|j$a}A+dWOm*QcGDvw~ zYm1YMAyREQz_4Fu<=;O~SKYx?SVAUMx>=n37$RlLmki(Or{GM8R8zbpY4;qU;N}qN zUJOGR;xSmE`yg456sZ0*srA&aJ>Hw@8Svr9g0hb`4E#jjsIGc`Ghiu2bnH`8L+%4e z`E{Gg)l(H&X_Z)1>hVtHusQh{sMRmC05G zUt~Du7X=qvXx9(Gy5uOZSCv%;%L``^DUSd`sp-26%4LOh-; zi<6MZ(Q~$l_(#FjS6lZ!38BN58;57D1t8au2<;OL2l-pDm~#~Vo#ip=8!}m6M460* zNTp~6!&!n9`~V_lc-}Rn-O!=n1QG#{WB5#26+!x+U3Kkv#N6Tv%+-f-N2CphP2fZ+ zPUKSjrQ&>;;oxWmk6njRg7ACZRS(vq06A>!V+;-29=e|4`LPx(7QE`JM+61dlSyV{ zWs(SyvTrKG?OG}LEQzizbonP=&8&hU=|j{A_hG3|f-;EN00a2xiZH|@QN?_rNP-@s zohB9Am|luI9h{&mbhVAdjqIbit04(`(zTYkjK0j35dI|+blXvI6WMJaVsSDNB6TJc z7_Kr>!N*Ai{D9%ApDIrm;}dkgbl6OuN`9tHmO!LF<|xCHrYSh^TdOojA#~UR7bs6R zS|{kPv`ECoIty67@5uP<7NxL1&EV3RJAF`br^n%9ovrF)=Ds|lxNjyT z;QLaKtuCtL7V`P#sKrSMQSWKpcK%`BLs+JMhyU(dfGV9(&bm!Ca=h|Z%Ept**9b_| zfGtIccdO1Qi$XJvqy=sx?%#9F1<5Dh(XcR*TBm=M6K%{2_HyIA~wO|o{3^&esH7$3M$(?+P z^FD9fqP@&5!*P4~(G-pWD z`8!##n3%ttE~xjJ`=_%q3H`w;KdwF{VQI*lxNrXm@}-97q4p zX-67-Wz~)0+>HH1oW})u7F38JN(A&l`kf6)^@DT=_iIyq*_%K)Y~g1VH+EJxy*}zV zL|oSU7AJc{q@HXR!!7<}I9Tl7*)7Z!Q})AT;_=qvWHX3lGSq^z$nc*ig|qh|Yn(08 zE#{JanJXnL{%93~wg_=_ND&2RK%{o|Cx-hMXSlSe@JBbb!o-~rSMOG@hj?It;(U$| z7bq^2v8?3iBa|Q535^f~*)Rp)g-9dH03_03TNuGGy^B4affe-_C?!^TcGuI*SIp&Y zqPWt&2G{#2IhxSH;^an%6zw^Nqq-=#&@n5M>L3j9=&sNi3f+d#VSC?S!S5ha8jBw% zcy*eBQy`Xf^~2+uRZT}_$+8UptGKmr*N0jLqGi?Yx*pn3kh6s0in|frT@Ut$FxPaf z=6uBM`0jdEcaIf5{ZuKGsACv+K1q(-Oi`R?!|r;rc7(ZYGc8UAp0b8dkq9w|`clDT zAyS?#WB71Xme=Y++{^k3*f z)hYs!n4?U-KVy)dG9OeZrBx9+Y@WXuB$c<740~Tt@FNld=lGSh`&?FVCx~TSxmMwZ z_iulqlWlw>-Of`SQCZ}8{AdN`Ul_=jRp!Kx z(z56Us~4_^5Mv7;1-(7D*C#b^_Vq@2odaCwF+%6$;2pSsTQb$sp=+AUpKlKuR|n8w&!DR6L( zdzL(lV%5@eF$^ec_flwESY6)4kJbPpt`IOhUg?d6$eRWk_OHtqQA(WgO4N1J|0DzKOc{jAgDGPIW~tmJ)??CF-^MJItlFWzK=mge7{5|N8X}kU7xy=isZM+3(Of z`x1s=fuwn*535B4j!mVz#HKRiH!H6WAjHT4V`t6zU9+A!S3`&i*i6mo_1rbgWtp!z zANc|pwE#ia=@w>a%3G{UOw>z$v%up`t`&xYybO%SZ5}s>ySdinngXL@GmN?K_kPIv z$QR`{;~BJ$=~03ZMLLDpXsQsC)e~zrzDw%$tj%7-HRsA%LhqUQCp2(<93kXD3)o z(Sd&uJojJaGU&%dAK3*M)zGobMZY#U5x38{n1`&8%R?^1kFv7bEz7PeLWgZS_QKMQ z5^Ij*5}aNCQRWU|FD!A=|4-{Bni>d0u!HFUm25cy5>>R-2(eMpSHbro(q4rEw+RmL zXE<1dK2G$OJ%G_vd@6H?%4rTeI@DnCKjunRP~4LoN!i8vCyDu7cdyT1%JyViz+ z91V<;{S9+*Z8eu&z5qsDM4<;{_gj0D>kEtu+#G}<9(X>9TN*4Vv*k5Fbn-_2hh$c@ zi@}MR!AW|6IFl7VORyB=S%}uhP3cKk$KNWae~Muay@u(&YX4Dp!yuP=DJ;DanlUMk(XoK4yiyJq-mJ3u7vA{Si8BEqa^Wc3?F3y~bQ*Uln!m6ZJYNLWiw) ze*+E_VWCO7Dx6}CO#_rhj;Gcnt`3LJW7o_&x`2STa+R&&mvskUhL{sf5 zuu|NYQ9*h;vE!8HC`1A1o!!r}ZaCSrYVp!4?H?n=`I}P>PRweNq$iEHSz+#UQ=w|> zq>`>enDh^MxG>XH2=0*NCAWg07Vi=(be{8pf^G+zydn=@e{LwqFM-jG`iZ$K^9)Yx z?~;U*d{IPwpit*uGTyboP>^$g(Zb+f=B_U^Ip6=RCZH-phwao?CO1)Wo0;plQgP`Y zCFK!QQ;geH?ll?z_>HOHnPw=gfI^7JI?Y#dCAiodvOTg#^bkddsgdaJ2Wadc8~SM<+VVexjQkT@eLKtzpA(u=G;-%%6| z_81CsE3hCx=SP)_Ro+SOv0^8t$3PiQ{iR?xr6(ofEMs+F>VwCb40{bXqWfe+VFxSx zu+LD)$QDLJ)QoarF#UbM!HAPnb-S1G74bd?4L;*R7>^?Tux8}2RXSu)G65KkFvl?0 z_OQjt{Sc{;JYsmnkETftn`P1+A)1LJCbwB}XAy>Y{A5tVe~wP1tYs(LyGKohI&+;0 zuA%g+KaWiK5et=X@ZWtIFYq{<28ra)asQkhesETDTls|IGQKd{p_$AT`_rE!N@eT@^$N>;(*!cy+XD~ZqPjdo#}B6HOnXfB5=>l?=YNyBsZhyPd+336yIjOgS*9Wt5NQOspW$UI6+AFEeF57K ze`(lJ9-+h5ZZ?^WVH0}z%Dc+MCl8ra`_ACRjnO?Et~?pX3i+`ef(r&2 zlY*!Cc`Po{nREZL*4u4b%TG4QYt`8lgc!B$(42a1?;130EmengVBp~Xz@*h~ zZH2G6=R;PyTCRSPjvsr&Y74BYxveIZ{=u}8u%apMF@!igWv{`Be?RM?HeNGsZy7x_I8k;dYO6CrJ6R#-Z&M*`uMu&hUWq3QjK(=HVsczwW79 z%veBJi@0QHQ1-22_@mzqf1dI&z`P(mOOnm6FWt!I04ei^Fgep(CLs?>iY34H)XNXI znXBq+ak5e=tBXlO=&)@Jlu4!00Eo=rdg9IciPn(+1UNbfkEn8D%q=4$;{oA>v0}_M zN7S1wpoyg{-;xM8s0`_C>7(Ejh%{B1!*IYL1z&@xH<{(=yXd~a!NRu-fB0qCnnT&3 zlx$Mg>h6ak#7m?T)kW=9@Lh(J7ASZr#<^KVzFxibQd&nI`o3CiXwa=Z%J8sn6`Z5I zRUKjw;)4L^ELfbznJKOwVKsBTE+~`75a|kYS0Iyxe<`>NL@E@M7>>H9;8PGu`zgcE z?kl)jMXMrpN9eHCeyiZs5J~$4!Vp{aULt%&uM%QLw%)q%SFHpK`|vpyC&xjg-t-%W zKR%$~ClKj!3xtw(?_U(02$5>S1co#38E{s41|UWLjL9x9EmAx<+*^;2`i7Ce&To|A zCWvJ63&A#gX>M*6#4C%2TUS>HAs%w%WVnLJ$n1?bhN$RqvqcNW*Ux|X-z)TbL3kqI z{v4%PUS;+252qC(a#SXdpA@h-nFf(2By$+M7nAcUBgg)rO% zz%>R6mSmv3sQJ9NSGJZ-obUa_M3DOX;mnp4VGaA}(ZX7AAs%BDm1ArlANe03>SrC1 zWY&MZ=CX-Hqx$IQUGrIC(?+eJ*W_|Uk@2-Hn#&_ofRW=bn4A2)=CaE_flAsOOyNR<(u3!$h7NXgY*`82lmxFm8P)9lMJWxvyf>i zbqU#j)9IxhWNJ8vGoJq3>E`br`|2k&516d^ z+G!M7&nlu_5IXFm-#Lu}&Kd>e7?HNJ+2wvDqLess6*tUT=A!BocPzif$#D?%%Taxw zeLVItwl#R*U1Ilz?rXt)t&U^K-+guM&fkDi5nk5fWOs>Eo8K$Z1|5=_ZI@iYhsHm7>8H)(>Kqv32}$lD3j(8i@WOnk z@8F@N`yy`G31zSw22>?)v7g_5RdIA%-A`|%Z_$+Ec=b@_#%KHc>Ds@CI9q2Nd_q^W zq?y%-l|zUD1x_>}RAxfVDwf>or*}0jW{rSCh6Z(|S(}sL+h7Y8$DcV(TyxB~S=S8e zft~2n0zd3Cm*Z6uicX}z?5D?tH`!w^yffnDykz+n)ipjcZndE7~Hi!1imSvixr+zE<18`fVpW&bjlg0&@1 z2Dq#uu8N`1za2T=kz^_?jO?!;4_;>l?_QR|k`7_mwfnwmfBlrIS$py@uD78e7Xza~ z%^v1b25OG(LU}mB_jyw_>ML5-F+7R}ojncKb-nKT`*Ocp_;GV~L}M<+2HEVFlp7T^jL z+Fnmna4JMPp=~+CpUyDgKv6NNzg}c0)P)RvXBiqkVqXtuUc0K&z>+6R&& z7GCDhHf`lKIHZJT?@Epf%{58!sJEFZtkDTeY{<1>Non>Gaea+Ec)}VpzOXdJ@P7SE zyITC73FN=jB4xb_A~lw$7_PjD;UF2<%_{j32(d>0tp$rlllxb6d0Nk0-7ShsooW>0 zg5BxHey^x^Ge9}JoXMcDR*cmlBtJ-oB~c;lB>L<1)&E#y#Su4+?2G&BG3LNT^0DB! zn}*-g{`w`CN32octf4{GG7+)iaN2VQoKqH_7wM62$@2&gT9mlL8hOqe8opxJTBF9d z>_I+Kv3lgXfUHY;qV<)Fz)(%u#Tpy2{Nt`c-Ch}JB1iF#5p&59DPfBkwm-69arPNn zv)hOI>oqHTFR~kjr53WY6b79}v2ZRc4rYa6SZ{GD$lbtb2z!&c9q&!9d~d5CZiCQa zTVazqapl2c|0NV8_US6aO@qB|(*aiVFf?=T;=aSqC#RLS^y_1Jj6fKIw+0PrEFfx0 zmm|c{9swrzP?_cJOWdIxiVM5fKTuTq3w6$Ug)>;;aBi)jrZcXTUVHcZq!^@BAf@h; zz4iEDw=1P0^r=ym2lu0R>lHN=MU-{_3WHq;RW!k5O>a?qeg}o~n>P5LVQJK{YQyH6Lm z$+~U4zzUsem&o!-n9jx{1bz+78=ES9;zxMV#(s4$r9I`>gg4T4DB=0b+YVP7~Wj9@R3 zSR)yqhgA<{bALpJEBYy?vuh^nhar=hD~8?S9AUxQ$$A9wjJY!S?kszb9D;tub*~#P z_#}TmbVYqoN!*Xw&551lY>@sj`V+YxX4FHUK#1e22f2}Xp+fy|Ji-u4Ex+9gz`_@L?%QKuznvGIifwo2o z9?4ube4m$7um>Wg_fLk$k5wiq9gKU{aRj*=K2Dh|g2)3ChR38UINL}oVO0_0V?+4J zFGnx}BK0227*79GMX;`mQ3`X7qP(1_sE!H7)lUTFu!T-i+{kXp`q98c=BD72!5mZQ zXsi=(d7+){U;q4bNG_C@>GnDe-|fYBQbgKY8#L``YFjS%_yok@z~Gf?fF z7uz|VG)C`q(@6iqNb^b77D0A*py5c`>Q2z_;H8}b|FGuw_YMF^KUni@# zCtUaJ+dMD&B%pq$VfVQEXKvaZQ&#EAkyPhBEBYyw8@wyYw-c17XtoO7h?AcJ-eG%k zS}9atgBYES)IZFXI%{#V+61eZCLzR(?VK_hw$3m)$DH@i$|Uzht5=Cbh@0$$$3dhf zc^$()z`L}JBU<0#xNXlLBabV(l&{w46nOn!6I#IvbPwsC0V}@ z)oC)hn~zsLIS-%^;=24J%$>ZVxEzm@vr4}y>LD^hhb?a&nS@3zSPp_ngX#GU&&_MW zBI5~eyE8Z6GdHKG;?}=H$LZwyP9=A{gO$6r5UEc*gD?bdYFm+v{*1=^r{5dNuLcOS zn6icjUG_$XSC>~&*}Vto6_)(d$mDjUGU*JF@->~|ZdH}Zm0Sb#y?)AET#Vw5-ZRN$ zYI|kU7$T)Njp4Ojl*xjsMw%`$_YlvG=;nx}O$KC@L9_4^b~O=V5|XSrPdOD>SywGO zS9EUZCuk3b=lbxSo{6d2NzV`fnExVcw4D5*hNn2%13BT$ye4zWQJ*P>ny2`y=K#I? zek*G%n{H~zHvs9r6#tyeYs|GsadqH;Qm%GxK64j^GQ0$l?#nxd%Vj8&+am_(Wx_#U zkh{2Lipw_E;I1>*e1+o5jUS+!)W-A3uFENyZ-njVQAgRPoVffNc1s{h<^ML0J`|Y=25uGtWFX!}JKzH|$qCQ(X zK=(RlL1DM#QN=x42{UI8Q9}@y@{8h*Zbnse-muNg<--F(D!TF+MCx{md`Tv$mlWI` zBDImz86I_6!KWdT_CE~oxUS%sg{YHUylL<0z{Il8e#Nro-h3Z+5-)EkgOy|eKc^64 zmk^#ea$<5UvfyZhc%k#50ei}HfYfBIWYY7g8~G3*WqrU`WI5@DB3nVEG2q7*>?hBm z-6}43K_pi<7)}hdV3GRJs5ng*lc%>i6<6d5>V~sx+Rog$JQla$8R~^M&~v6~pm5el5sQ;&AyN%~&hWmH%A{D<6x}~2EFqJ+IJbh+y&NLdn&S-juAtx? z(z?nj2+?I!Qt$|f6hQ{V@4{3B8G$MK!I1A#GC5jBbKYWXt`z;=z%W)QTUGh|0V4Ul z$#8U61(#lCrJylF9BPrI;5iUUdn>~`FeBm1_z$90Txc9vIiS{<^_U|L_5E<(kOi-= zayGtiVC2d4uPF{sOdFWX)6BS>f0@IJ@m54NmaEndA>LdZs^Co!DH|^!4Dpy^pgy8x zUn8mpE6A?lXG&uxM5?jhGdy_)!@=@Dh}0)mSV`K0XDT=qB55yV_{UiW>?!IGLaLo* zCfh19d^4Lhf)*X~TzkIaYQ*bHQIka##TMR!Qy-;ixxjCh#~nv#OUAk~{F z%bD~4*5YK#H8lHtH^=ZC0LWqU-ePFbY-J3?nHbiRQ#QmovODyy#K#}=@L=r|(XR*MonmDPaTDSD~m{ANndl|YM=Z@2c zHPs}=o0bFhAb%Wdv>a?|$m0OH^JlW?5I3^MR;13AE59||(>xYMGXMX~xzeU8v%qb% z{d6PDsN9`Gi260%An62!nox4s7H1f6b~yteHHBN4{2ebO^Uc{XexSbV#kP~-nx)Dx z5h8ueV*$e<%auv`l!4hqzDb5%_V3AV(n_tM91(+dNHO!z01gqJa~P%x?3?B@SV2GF6PV|s2@)a*g=WeutO_kliPvOJ-mT1 z#ABzXyhQVr1GCHUomK(pgb+i4gC8hp=cier&k;*O=GbM;MdA=*Dt}bL;~?s@mKqP7 zS$$+d6!z*_vea<9ipY~HqRkrzR(4gN(B0&$$Zf@~K5FFjBIfozR}uXN(RzKJX8N^C z<~o`i!?D}QWcTcv|F3dZ^S6POToH}hLlNb)%UYD{@&|}i3;txdZB`2wL4O&U+x7=C z$>OcK0CD&3K;6TgWQFoRPKDR$42+1F5z{X{P>;BT)}OJY{)-a%`+B1x+kyx86|umg|HVeA*v`PfTWrifD4VfaYbHR4ZC1RY zL*?@o!%4Nx2x}g+hE}~0;;qd31}8R`9i%5{=UCxhBc(9E;vl{1UGoqb*XpLYH?;<- zRZYGUDm?2~FTdLbgR}Z5K<>|HQj?TbOg&gRXC5UElgA2u6zAP|ke;#3VJ=^Pi<3)^ z(1zVifYfNcXEHR|jcoBFN+8HogjnAk=tk}XNKMymCYyg^l44k=L3)DU6)`z%Ukx`j zXuHxmz#$AjWt!Yy`obdf)iMf7-OkqOa9j>BI{>JlP7GG$HFk6=k04PX3^l1ZBx z%A^HEf=4r4VU~&|b?6{3vEidZdVS~*R=71+E9h}ni(}-|e}U$_#Kw_>^knWwRw%qk zDWt6%O9V;)DG z$8{W|LnDa9?Srz(+ zAl)LrXN5w48w#@7&(_0^;RtbJ=L?fN0*q?gL*{nN+R6Top$QlDeObxmDGA-}MWJ^`kdsizz{(kKIFib1gVk5Kr5J8mu z9}m_u1ez?h*}Lg!DDKBSbP(}wLzu9#Zf0e#SWlihAjD(k@^0ixfOJtOnQR+wlA=q2 zRGriHu9A6Fq?<;wBB{EI`GGacS2H!F?{8K+5sA=Y`zh8W#k=CEdKqv%G(tRTxhYgA zo2tr^E4xaLZy&J~*ZdwsSNC%Gx}Iq()2>-DFG7eV;UO662tqjLhnhO(A! z8ik^v;Vi~eS)+4XLqpdL?|hZI48sk4j%7;sY3un8mVrncmg+4A)=1TLZO9FZb3+$X zpq}DgjH}N*^3ZRGsgS+~t^|i(*V6?wsEps`ZSe#6IgclR#JAhQt%0P11 z^1n7nnx3y>xbAzypLlQwS;!5FYmaf4p|eiZMyv5L_T##@WovDz;=rBMP|@dsQ2`b` zMr`)B*_kUZiad8VpDvGohF?s0iMHquJmGRbYx+zsWwrW^Q2?htA&=$rTb#TIk)Ax* zpAtO1umSsvIi6{1c5jZ-_H;QnR^-T=rpF!W zFbJ_#GBs#I@D{McKCOz0XA=*K;=QUPM zOWG9%S=u79Q<`3fI>p?v!Rl_E>6hju{^|+^XBXMzKQhiY(om2~fl=Q5$eb9XIc*pB zn(ox6n(`8l2I77=FJT*ahyB8&RN3kcmilFO{G}>e5uwBW5f=XlZwq7zlHQJ24sxwE@87a)CY;k?9I3!%f_Y2SxjUOBcaJ^?3|u1oWCmA(_K z-2SjuHWpg!VWiA|BhBfyD7(INd z`NV1tE7Z?xD9B7;G(q&uPR1W$hp%?r1sIi_@yw0D8R$;VU+f7Ote4*YVTG3^O@&6e z2kTYO0lwsYQW>p~OFYawSZ~7klNF{_(hB%)s(R3t=tsu6s%XwnZU#olzRFw>_Sia; z<|oVhhZ_e(CAS{hD-T);FD#1BBQB zi8C81HirF0r^-%4*Ahz5fG-~`!V}Dr=!V_DXF8&hn{CsogY{FMx`CWY*naD}7SXrb zVBK5oW`(z{O@+rb5xcWrh|EDAE_N{#WO~kUywh~8(O})%KG$ zme{u1??bf+1i(!{!)ia+874FmN+-C&w7vl03NMph_de@@cw3i5wpd&L-29!fI9+JK+Nbz1mkY zFL@X`*;0^+`B0Zd!B0?>oq4>FHKK50JeL91koN%6lkpIL5O2*MiNm=iQNOj>KhU@qClbjGq;O}F_OBrqfwC-F?aql zbHVZ&MA{keUyMxJKU#uH|ihF>4*1CgUK!)Poz;$f<^j2gFQvZXM^<+eh(?g3TVbd zh}A1msdp{L+wI_f@}qh%FtBi z9u+k>kr42aUb*>)6&8mog~X7La>&NT!}(cBGD57NhHFl*GF)S>J&ppWRLS5H){SY2 z5QmyZDU-0$A8C_A%z4FXcR9p~3Loh!jVejT&uVIgK-si*I6o;_&D?z)AI-V2fAvTD zEvjOr$j%2(U7b1PDf2a)R9RfY@Vu@l3^Dp-*>MCh=E%~9}lh}1ytU^pKhBeC{ti1eyr zXhqTDvbe-Za1B=6iWW@^6et#4LxO7rC=8lOixf{< zpcD@+6o*hsaR^09(ZGin`OdxX?au7dA7psSTZ`&;Xr z`Hc0#Bo`+In7h0L8MU`gk))UShmJLejOy#bjNODI$fhTfPK;24&5KO9f%zy!SdleC zP3<&|BJ1v${85>Z0vQc-wlfxePg9ofAv10QBcHvqYf{cV^uNACZ{2QC=rtfCjIG_>`Y%2p$lQ{ILpQQ^Y~^Y}>~p3oA* z^zy^*F2PGLfbYkC7W*fEGyW?uLe)gB>SQb<&=j}EBW3Ie7JpV?g#4lwB;tzKNY#$q zV{l_}6O`#SDq&u$WuB30d0Ib+EG|1s=oG54uChF(N#{kPw5wJe9n~+!XGhS$KoKPYG5^E zgC?5Tz)>T8Me$)H)$p%CeNz4@K@rr{$~?xFOf@i>(5MoQ^!furYAoI`=r&ykMfSLn z>dPC57TDr4ImMCTCHDd$8#kG8cG1U-*J!n=%y(@_HvT6x23B&;8>tR=J;;ng-)RgF z>5rsR(XN9KL;TemNUJWkvbg?QP3$4xLr4u##m1ylZJixB8bShBF}PrZ2D*v|5^rrC zJLUb9)Sqp(WAt2wEVmZwcxE)u&>6CBlS;Tf{X8IA-tmGd6@L7PQXSwJP%SRCf3^en zLr4jHz+i>FAA#;7VcSS|5%`PMaRTxeP07;!eIJu$1|Vw0vzg-Yiyft0Goz2x8KK2x z-&s3QLP#y}aR$r%$sk7L&5h5m211KVv+IUfM4ua}R)cI{Z1-)(8rm|fa0^lyba#Zz z-3CQo#^9N9DW2s%53TY;c&6^nW0r?LwaTlsG`ujMBeXdEF6X1#M_2pW$XrrFMCI%t zK`w<~T2;JS86`9Vp#?WJIicEz%Hxr0Vay7GT$a2sRYbrO?M?hz19U#?EGywZEf7H* z3!dg;K{=89??~0AJY?)&H^xfJD7+;7lrac#z%Bakz)Q-tc%+`)85S@1GsOkk8gEb= zp~d+{UKXRnhexXI*0Hz`mY~8&u~(2k;XaW$<5XIex~pTGbWJ?3&mnsYeGjcKshFsRzTsV?QOlsfp6^kefd?JCranKe>twrcmRK&Y(6Kl|Fb7;YuvOr}J5$W|SVQa21C z?r-g4g6}&MxCcTis&^P1+EWKb(N3e(`0w*hr2gp;ogtH9#8s{bMBl*?ru;DFKPUx3 zq>r%?LLB=x?IQ|-yBTzut$`%2(1mn1rm#3jB+MJ-Cf3Xvr9RhGCQSUsAjoVy($KNM z=cJb?lwN*06f#O`5@XY`U>7+RB(v~HK3BJ{P(l6oE$Y2smb%L}kWnKsiZJKJSd42^ zahLlbr2M89 zv;${CNG{!t432rAgCh0sQSS0R5PH{QJxD$0kt0L($OJPypV~1F-y5ae3O+r_hTAip zA-h0G9jycgr@prXPe7>dtvXjIW7;|NCB|bVsQtmXp}6N2KNzAyB0Oc?UdB5QK!`*4 z+;mX%`=BN18Z#<;>kL@|8Bf1Q2ZR>qW%%qPzb3KT*BbkrXPV`BB%an)fvj&n~Y4xEg&jq z#D~UUSVs&A%=o6A&X6Y{q*Oj(Fn?D&uudN%WBVh-Nv1swF!d`GRI#`7Xys5j&xB`R zDuTZ(-`8-cG((87^o2f`;mp|xOIXEV$R6Xs;3jr*y;%;wsREn$=WvDX3Q&&u^qDIue8W*=i6a6tp&3rZbew1lAuaSsY^Wgw}5h8p{&F}4J^GBEZw zX|!5k==C+}4a0>Dgvpk8q)#`N#RB&&uuA5Squu3B$S46982b*l8rU#VXNzXD*+8;c zdb>`@O4nX}I}?0yVQUtjJ#)F056;eoXd3NXo@2O3fa6WtJ6hlOPNU|eJ`3|! z!4S;nqfv7`To}MwJANJQCmZ073wjf$!IaRmIP~9&DR0hb#tPw7f5vZCh# z#zRz{I7SuYZo|mt;+cxzDc6z=%10RMj`OoPSx{D$clF_<*Jq`|Jmpl#DAJ9LrQ*bP ztDcAGx^j%_@)aII%9U2@gm+RS%w|Fz+)A%36k0zJ~z(Apc-+ zSCAc8A$vLK`y|1pE}W@@0f+>U}rVDA}Z)(dk4 zY?d^AXS%!K|gqX@$ zX9uR3U0spc%8cRquowjogomhler+!!m#o*txC~q@k?n#{?YtA#&yCTFw z7wnPIY^R&xX$B+D>!4Wrr)IlRBB?jOtTW_N2)i90#WoYppFL2ZZ{<2dEY)$6!%)b|ik?p6R7KojK4CsC z1}0PSNGbT9a z{x6%Y+)!a^(qyEdC|z4A%wJ@;8fPx-uoZxmnQ7HlBf4EE1oiC-z|+xAFBj#D*uzoleha!*C@lDi?JUgk~4_I#mZ)s|U{ zE;S)*Ur%!HjAGjbYvSxPtK>jKO9ro?bu`@vjZ=G4FT(~-Ig7PpgbW|2x{e)}6T@$e z&XAiRq_+1@2G35=Kx$-KBO;6Q%Q#K!BZkInRu3~{NrJ%;ROUtTDdW^8%K9tGM9C>8 zA$_WrlUo@ZKFh@X=HO?vZ%?~T+dASVTJ7T4M{4i6o1JJTYEY{21EcLgOYCmm{G_tmBm5F7n!JAtB z3?~_j*q|_XS^QhWo6!UzCeXL(*b>O-BihH%2RSMR%tH9M_;g3*-ShMvjh;TO33yndQ z;uRK$xyT#HzA%yVYMiTh;W}O|@anvl^zynI1i226RCga|@g#3kT=aY6yKICIJzXDD zya zpUQ?#(F+ZB(K+@Xvnl>hvyV z6vexbR}Q^Jq>bbRAW@~o$sXg?$lGf(#lG)LQ*F#wIxFhEK1PC9&$Z|lntjC>@(R8ES7F9-?aT>W5_G~>AcAC3i3_U zOtsmh0Bc(iTAVX~GsNQJvGJN49Tw0wPCx$hjlvnPqR5|NUa7rnI=NA{{D}0poY6@#12QUsXBkU5V?-hohJ`r! z%V7M?E2Fm>qxX&oEiPZ4)hPH0P4FUvmCu=pL;|9?1CdMSl&$GhP~`ZZM=H}RB9%k_ z94CMH3%wWd_!8bZa~nnxNWo!*7MI^_V3W(*cT;OSft#+FnlkAp%&v-7H^!@Z46?d%ieZ%qkV$l8ZKDJ&^#12w@|JX{2 z$1|0+4J^O))RbdA%6M;)^>Vx#pOpHUG_O6kG2Un&UMhnxUfMvY%U2LmSEt}k()4>{ z1%p0VHEpX<)-;?`q8!@5<7fk$+jV8!-dWWsN%8?~QL9~e7i>DOb&>}VNmX%uS`jZ9 z2U%WQgHru^-vpIQu6xMHzkzm)afLL-WM*8-uQTLT2q~-HF?gtu4vNjoig=45 zK@)sz_3ya76iZ@JjaEQrLrCta=M4TEq=DYD?LH%dScKRSSHc7{@kl@aeHKTR(se{Y z1ufZM?I*>KWpsx08B4hnhu?%EzQL5?<#dV|8m1ZPo=HYhD%dghZN}^MIC)6D-g%~3 zBJ5~&t6B}&e&V|W!gtJs>$wKjF4_OY$(40ox%q(c_9qdd*IHc%#lE@|R3EeXFU0V! zW5?*yaDv(rafTT)qjiQ1`PJxSc0!1GF-!>A%8<9nX)(cFjBhru@FzA(P zfTG?H6MV$XHTV#$quPciNV}}m2r?BiYSe#a?7_D>7BndYlMr=I>NRDX{h6id?1)69 z-G1-M`L(+4W@yo9`45EHGq7G^YWs4>Q-safqA+in4jEOjrx^3X#oLs#*l2|BzV5ps zg%|J9if!l9WS}W7-?oy91J5PX2825Wz{o|$+wCy%1h=9^M34Ow)b|maMFzg#s|XRP z-jSS}xy}&O8nSNrGxtv+M4rnYHF*O8tRoKzOe%mpnC{ zYV@FUMvYz>p~Y#qoQzIQD64x3e@oHAwg~nR!Fm2Q%|>Y%@u#8P7$HuiziEO&=PNm3 z4_Eo3`DAPbgOSCI_IEW#J*2D`m^gdsp=Q-f6n!y4c}V_d#@rm8A)_xCYr|p@TAW8d zH^KdQr1fd9Se)mLt|N-MOjK4AE|Oy0JCku5kIkI3o#hi0+z^>ICj|9cn@g3P3c^}{ zgh-={2Ii4RA>Dx;fq}`vc%&s+lEop- zOmWJ58Wp^IZ{&Fa^yDqhxmsu-7G^<6KW8F?k6W3M1$UXK#)BR=N%3hXQ!#Tvh*O}g zqaM%Tm@cMb+rve1L-a!Wty7Wl^jp7X#{ADsM!a!;F=ls3+k1ViYo)cFVh@-7CRlM9-ZVY3t_x$=Jdv zN*jxo|1mzJ7=&0`KTTm}qV_wr<~Euykf%T6(%8M-9$CXH~0Z5-~P_P=}QY0FX7h@RUgs*Y*jhorb>lN}@WMp18(@Wb+4GPXn{H;-4D);(RLd5M?1 zCaN>XJ3k^rcYf3ud2LnCX$I$S*FY@jUJ-)LhYxcbgU@DBaN-zp-s)A_$_(EFc9yR_!#A^WtkE5+_=IfaJ!r=$ zo;6YJ`Ps~j%%eI(o|GXt(9}A8U*#zoxpPXVh=9uzRpqjc84a^E1{Q;+p>3C`jg0TM z!vDxf|4Sxi93CsuZisV4L%CLC~cAOy&u zS5|K?cV|wYi(842TQ`i{TH1A$dw4mhdWg0K;?z{y3D`m7?q{%M&gu}HmS%m6POk~P zj)TdqZ{Z<_uA$$}+MzzljN%34WHhoNBD|Dly73!m%jW>XWcb<;r#v#Kukl6iCd7G9 zaYKtiHyQA+(K>`9gj+S(1SjFKk@NJj{8&~*H!0>Pu2+u3J)r1Bk%!3ZE%C3J1ey6g zGFa5B5~oHtOPLWDVwhkCHrM8%yUw_iY8!EE?w!6n5gzP=@L=1YGFBr@Qx25z?~Jsj zBD6S1R?$E|v8O?ta-mw#AY%JwO*8qyE8@IGT)SdkGQn&q7ct>^ZAHi<=C&_}8|WvZ z_T{r@=ofy~ZK&sEnc1tZQ$FX(^>lK*R&nZcNd7?49j&hstJ`)zDoub_ z=)E9)JBIQX(f--H{xUn)dfc03zNjshe|(;KPQ`oF$EHL3_qg=LQD3h78AB@(?>tF4FE16K zxXwLyAUsl+7J-+jx3 z7npD0m|3}V5u-w#h!FQZ6)-TFQ#2A?nrjeJUG0x2G+>xQAVmhTI}1Wu5}n4NFQyP| zU|opAi;)hFk5gh_kzQkxa%S!#hEuw1hfYvAnNl22!l&LO)!u(fBInU??b|H-iuZLV z;UIhTE2!SdVn(eRCL=f~(y4w)I?;~4o32IfCf0p9uMCzi5Krc zK|2W%tpVyCp#>1U{U|xwIo63;RiNtTMeAtpc$CW ztnXGhuw3N>0F-^+rO3>$X*NOuaplKJYT?de#viS=;ni$aOPSK7dIf%6GX=SY{~k?s zBjejQD_r`NF*36TLS)Pj3KA!OounrY(o|(=Ih1}|{V{%T=Z<$!e=Nt5axLt%3hy(tWZR07 z7~ZBsjl80l5n7za$;oKn!Zgf7MwgG|T{{C1Vma$!U0u|?G)WEeA24Ij2|LDw>yy+l zX>0|uu@0VJE?=AkG3MqZo8K)JiNd`K@Z8!64UxKUSlr=)CeACG-=9?8_9IpZA;mM7 zG)ACIgpkVbJ_gIeU2C)IBhx}7F%qx$L@Q;DAhI|wyzvo_)=?c}@a?USKu;MSW)#BK z2;m#Q{}CmZ+yaO?1Q(f78XjCq3Y7>iqYAM7;4hzDh`Wl7kPYDWwm*g|zPP-BHwhQX z)#5$n=5Qm@69_Sp5~MJ1Sw6yOyqh7kIR9bMv9%`l8)M$36js^RQR`TV^k$V&n3pVr z!5~*ujIAuMFjrYN(x^Y0BD6RMRbnhujK5SozlgoMIF|_c`5U!U^;c#!i!@m&mx~va zr}7#;tmr7R@FB{;WC|W>2(XvM2dXF)Uy;!)UiA-ZRwliv)ii<>kWm+A2Vq!)(+;(C zm_T&CGUg2X`>Pn^+{y?sa;c@1ePjw`^t$PcJ*sPB0qx_}c?h9ZNpEnpfytELL!63B zXs|afgTXxw3^28tQ4}j7#FZ``69W5~QNPAx6X(%=`LUdccv;+CG#?+Y zR*}r9MF!7kgnT0WMR9MLAPg^@S8XD^_)1x*C=(zfpYkHcHVjl)kW4#AGgFxf@ygFs zybhVTGgQ%vEuM}vTYH*o7(X{k;rV33pCRb=zgt*?w!?G`cglt6D%K@CwI*mhF*qe& ztrp8*!r^$0AOq?}@?2syggF0ws>1S$vP-p8Y-fT@F$k&AkxtQwvpz!nX5T0&JWTZ? zG5^*22G*=tfAND%`>@!NMiqSv&@IkR%N#LxQ7=5mOQw8h45UslZE31Oqo2xOEUy}r zKeeZk+3gyTnH{T4Jf%lMfXFP65FqyeppWhf6Kbw?B#5px%XrJQ%Z8bL4arQ6^^Pn# zq){Zg-d6!rC&2|zXlFP7CygdK(wK1XhmQ!}jU#!rUpPXXH@EX6!ZHG2VGk4f?E8pN z_EY00YmE>StiOCj*a?6J^4FMPIpRnVJ+H;90oUjzWM<&+|Hbl@_kfZu|E9z$aq%No z{Ns3aFkl9=id@lHGObx8=CYEW#;d+hV~F4qu;TBY}GuHrw?Z! z#G>qb|4D$qbtwvsb>7v|f>ZtMBksIAH2GrnL?2^Xnb(dq;kPabhZ=m{E0@d+HYTNe zwIqu!PI4GBx2eb~kf56Uw~S#6mJM^4Lt254*Gi$#`Hi=RiAN<8)ONfIt%*=QHxru3 zqf3q2ek+T2TUgvk##{-(#{Qr-M(Y-h5Sz40YoNb8b=)Y)#~FNDUIVdu?yCOYgWHn+ zy)ct9;Tp{^r2S~Stu;ZUYBGE-|pgRJEAgw>_~+erjd)NKj|$EMhF6nSse1 zJksZxzXPfC?O;{u6O>Cnz8iu&FXMl#s*Rmfua0d}2YuO}(R|svzZZ9M)O8hGP6p+c zDX5L9au4Z9QMAI!d}I%2K`wdyA3Xy%Go$F2vOZL*$)rx`-s0lhIjWCP86xbf!rcTm z22GG3X7Rp$n%GB%b~Xw`ON3}Ga4iArti>a(1v$y$4I@o)*)B%w-UT71Q*qM(u|;r7 zf^tM&VQgNUiJe}O;3oDhN>IMMp`VlT!URQ7H=Vy?tOxdPv0*6t$(XK265|o#ZrQmC zbCcI0qfV=5H^Po%=a!+jHNjQXUZ0?*#bz^MFK!u7gu0s&)TEGqcd{^MiAIn^Afw;? z8^)rRE6l8PY~zq4@y$=qMu(*lyd@3o#vy%iy#S(&5MFx|)IfS+4~nf9HheJ_>>Hd5 zN9ofd6tmsQhtT5u1n0e3325GrC#VU-Z-PlJ zt69$2^gRm8kA1EQs)tZAhLlI{SA@JG@q$KJ&x8)x3T7no_k=vs?+fGC3PosfE^^es zWC9+^U6;<{o+qs0CzwwcS2rd3$;>0h3ZTkglH#5$(`aPPm6Uc6W*RRO=LWy zwX=IKM&X1RtBoqX$wtQurVV7Trwn*O6Ga)BMpcu+jF|h(2p9hCgZ*V1`XafETQQN+ zGJVKK&xZyhwQnTm$r2$W|G^f{N#`KQjoI$#iX zF(LO0oe=z$F>}xwA!Z!k7?@1MBaH}evG^u-e34BS=aW5rD)Vf^xPH)aIpv%na{rYO zMiB=n`}-m*cSS>nd-do9BRHdsQK(i@izh!#C-25;bLH=$v$#Xu_&itcKc9wKVZI7 zCks4t*8&}nVJ#ykqxFjrUssx})@0;-P083EWE%9UIoZ6s4X-_7AYn5tCKhoi*hjpo zHQDSl+76Z*S+MoHmhdz*!Oei5*?q6~OPZ=NbtjtxMVr>R6nWGiZ?+D;`tEjGJ1S}s z$_azvY!Y2Rovh|Hi$Y{^X&dQCql$SOW1m&mFfpg|WN%q~h~biGg3#h}w6+65brCKw z;bwhBsA%h~3>-?z0~?!Ibj)PsUcAfL^tMXRO~ek=vU+eVDYxig5OBHy3L#RQ!{X1o zSZxlS>?#x7L-B>wJ%EPLRvZ?sJ@K6rs>PG27Q5PI*z4|&x?ZB#*vYET=QW&So)Y6o z!-wnW+uQpt2`pO`+u+XU`Q(!U zc5gp7UTL+kSu8Y~BI`0;VI@Vtx06+$dJhwFCz=GjPazSp6=UjvD%H66&}0l*sI|}} zfq)9OcZPA+Y?yZ!5kG>wxg{v7{`QYXq6>hnWEpk&~QDW?8V_<2QlqIPX@p{G!fze4*CY zPh-N#eHuX~l#N1*;5*T%{z4Gq{*r?qGnN9O?ouW*?jJT8(YGeow%P9zN7@aJ>Dn=Y zq3FD2+(S{eCgUd4@|@CWV&%QbYCF})No42f?~33hx;#dPSU-jwCUm%H68?EUSxx^B zi6`Z+ZyMMl|0!yz-YtfHy~9wX>=i|GLe^e?*96k@`-j15;xL9L-%x_Z=lT!sOo&Y8i%1z0OGYO2At|dZ?b9Zlf23R;@5w--LXKWUhnpm;I z;?kz1+_qjs-)W>=GLIr)LE&_o7rg?6_9J~@Ms)s<7-DDC6xI0@P{N{%LXI@5N<(K5 zmcO`$iPTzJ_HJiF1B*tGMP?eq=V*j*OqEhtpd5N4iaP)Y8EX|`Vnf?cDI_wFmdIlp ziFKMq%Dby5f|@eF$=LH+3iFcnW*egiXU0K{cSQQ%HH?I0KVucw|Qiiw7nsmAoR$r=&wI)O$WDH<)R%Vs=c)CB5s0 zVg&+ql4+oNl^Io2G=}g?pQ7riZVSl7#3hQLs-X*v9Zxf{{rjh=dG<~VNw3dZ6KfV( zvakqvm4XInr7=J_&xD?vO+woeQ$0j{)|9+BOnQoH&H8>rX4?OtvE+Wp=-j{OjJ5hn z$J#849{%P#R{%A^rj(JXr;mil3bDsyxQAa*g4?&Spk<8H2GnW~!Gs z`RP>kHTD0NEEKG$;UB7(#CBQiJfhF|A>;KU6)qF%hdN=r^qujYk3xvOh*cCpbn7%# zIbEMKo>Iex2gK2b{Pb_@?3(EL7Qr?!`$P@Ki5^zV@;!{vL}>Z%$!Kw$#bJfS z#NktwH|%G|r?t1oePr-Dqls^f5G%bpYIyB2Q_bebmZ%=hQmgL7c(!B##}V|K&Pr2; zt%orrsx5`imKX(z{gbDv^(i4|FjFnq8Mxd;R^inI>6CutF*`v_Mjf* zv9QlNpc?rT8TGEKF@>zJ_?hr;6P4QJDNWa?g8l2ZtO$(dRcp~YEX zZ0A6sY20HBc5&Ch+~WP5ct6{Y(U$v2JvN6WWGibQ=+3tnA2U#tEE@&PfF$%Jx+a zIY`<`Z4FFj;*s+EA&VnEH&wDp^&1bMUry;Fjd(Vf}L4BS#`yc0|Wiv1r-s=3|z zN65scG1mB3OjG^lOvaoiC=4_FM`;yc=QMoK)*7cFL>A}XlN@POG>$M9hC|bhpMS+P z!vt&)0T(~;pSnr_xUy_n-L5QmW=4%*Pa20Vow0K?-3yVVMqh*hfZBIqwH0S+E6})A1 zpy8Dqdy>qQT4tCr81e#y)SG|L;Dl5Sq!l3ZVFvdtt~SN7rz3IHNn%*30x}}X@cI;o z2)#8N&`$Xzi9uD;Y8DULV2DLRmbDhM^_3=kQRcy6I3OqF|KyXlcD>5RdzF^2^glxj zPA1(%;k5p;8CewPoL?Mixb$}644jC@XVK0f~HA}DOS zhqzZ3gHmp-ZJqhEF4qRfq9flAuDzai*i6@JK_`S1fMiXQ;5)OZK=Bi3$MgB@kMitL4@}Ptl{gHi8bkNQ?*hOvVsAlGPY~zR(*CWaPN>~N zBW!0vhcc%5fGfsSYCVJ&=iCvRI6!RaJY5ynGtAf;sVuA6-`-bAJFTjzoz^oH=Uv%( z-d{0eO%0{(DZ5{T7G7!+h0YD@npnVB)76mE^*UiC8k&}4@JN#}Nh~he)T$DzB{U$L zRBClJv9v{{^2&I~XoUI=WBa-&%u{?=Qc6|n#cz=E>|Qz{edcu4iQUMAm0xNE>Hn88 zoT-Y?;(V~5h6yNph!s-%Ku$BO?bjMhe)uvJ3qP#2QOr%UenSP!FRm_L3s%C-z5vK+Z+g3}#jUacC4C%kZ*w5z-O!n$S^PASb(HHkgvB4!% zG1+B?GWw9Qc~?xuwqMaCPjJjsH5v8w1Jdqz-_#B+J;PgOK}PM!OU76aB7?=9aT~N%!%M~vvV8%z#Qaz%*;|`92#gs0Vl4Gnxh4D}hMYlQ1 zj4t?z;i2t>5C;HNGgWfxm&PhF$f(C~hq1bK6js*u8OA*&z32v}xvZg-LTks_^?w8| zYHxxucqEVbauPeOl3$>9oS)BAn5P&&rnEYu;xH4kk`x#A;jXKWd>vMp&4qpmCev{Tz-s# z79moO%uuyq_cx^WX_|=zB$oCTzH>_Z*pB(Q%!Ki)6d|9OS8|2=@Vfj<7HZ()W3~

olb6T9_g)?a1!(~Lf=l^>0-y*wXT~BRs_bDZ>C@qhaVmMg z3u*#x2Gx6QtOwV^nvBbh)YFsR2QiPHq<7s=IS69UI<{V5-edVA@}~Bmg6cJ4)O@w5 z3nd^Q)rmbSXa3MzQ?M3Tt~y?m_$vxd;LFox$L@AM4z+-Odkz|lz;ImwAB`Rw9pcjt z6yA@kaMmoEyaZ=a4mCxSG`1BaW8pj|yC6LY?Em+CkXVVn0cfqM*C!WfQFC23DU-{c z1YQ`)66H?$`GO@*0KP;|)bFof4X|A7NCce)#W=l7jrq=428F7#;6O(e)zu;$Q9(Tg z>U8N+OgKql!CEBITCfBC!Y|vpd^`9>=fC_y!W{uz8o5zV^e~?R+^BH4Vakbl%dFwC znkd(mnq;J-U^!;)vD5brgJz0cD0@0Fr5TgC5yOD~1%F#nTQ1JhqEZ)xC=+)#!3=yq z?qxjx2EHG+o4w){6^tUpvCA>=v|2J-i|F+gTtrc(ZrnQ!KSPSo_)3%|37@nGuLkhc zsX0Z#n#6ICU^7PPWSzD2Mu^fAWui1wUo%)lD@ag->+2^|y-6;}(*zgHB_u@a8U~O8 zKt2q{VuyrH5In)ceb@6oKILEnI}_HxoMKSK$f6m7 zmgtGMtA0?8Fg07u?M}9shy~Wyo=xvIV(g0Sd42OCXs- zLNua7hJZO1?@?x8*%{y>In<9!t8Y<4DN02p;(VrhzZj!N?rasj!I-i1=yCtg;F~>6 zS!6g2sbmXcu}*GU;OXK8LLF;1%B|$2e|C=kvIdVQ znB@s_u`3j_!^J-f{QV7kj<9`($}JHX5UrDf85ko8SO1GA(M;I0ym{1nsaG4qO}l zsx469eiiu7!cL@-$qxks&;tukIj^?@AK1z9Dh@2o-++z3pN|BV=!e6WQ~HJgjV%ba zyiA-$ZPPmdUKcZ?5>=|4ph^}t3IrHCds^|$gTN;@vtxm%CS~xn(;%J^>*s&x@81O5@dS)Bop=dfo%pNWG60gd_#f)jtcXr@7KK+2@BR?1!me6ELTcX# zsAPMxYk%-Hsp(t*9v-Esg|*Kb)$uCie9PdEI9)EiY%P2ba^wQGRKu)HM!qQpx5c~~ zXejso3qZZ&(f}PXO-n2~_KegF#<2Y$(IdMa+@9MOm07~f*@*hgY#p445*#;Eh?)SS zD|7N9O9J9&8mx%6(pxyM{2|OMZBFi$co9?lcyGcqx0#*=Hzv%3H)49U(0A>z5zrbr z(-F~-eL8M4E^L=~4c?1>S6f%1iDx>wUmb>rI3S2HphhI2Td*#&b9_Y1@^3Ki>%Y>j zWL$Gxb837XhXg;z^Th>YkH(dObGoq86ZLA% zpK^KMh~Nk`e};K-13uh21v0mk1@3YnD+8AU-Bt^=$QVIz6-KP~Kd0=ign2lUqjpvl z6mcFK7Cb`@sN9=pFgpk|8OP0OY$u~*w_+(0ymy@z@t7Fg9=*7qTvIt--M0cmNSR}M zF&!Pe4`2E!^e+6J0yBLh$6PRPWoKCW!eCvpK0bJw8a%?}yY;}QQGmhyU>paFdRw{P zKolv8GV#bz^eO1x#m)&1#D`bC`o3-D5AGewb??8)<}VE1#k_XYe%iJK;By@(B8h4l z5tV&3mcE;FCurs`3y#GiCGg6qFOxveu543s5)@7ja$sF>IJQg2;LUF z8dKzkG>dmpV6sJ$(#TAk%LI|Hi5QAbCl$JZM>+ zu0x0c@lgz^!X^5p%$x2~6U+>lPs7aS&uVpX5<}fV?GX7u3 zeMOU%k#<06$Z*U#JEm<})e9JZ1r(&(7q4CrlFrG-<_J?Y)<=$3B_D(#OE4sEKbM(^ zUt@0KVuGHSI*_4qVoXRePNr#%z8!Hgonfm;>R=QZ7xD<0xzzi9)oCc*e#1}746B_& zzsi9~K%S2esX##!KGeIO06}v&i-AA$SrqyM4`5XKl@QVkODC-ubG1&u@Mo?vnPNp0 zlVWFuoWmSG=j*HK*)Z>Jb5^mO98MAzgydp7*{8>Mt!nh$;-ZwFN$3 zzAQu@lf;^XQ(mE%oGUy`LqL*H=+A(rE$Ro|Umnr}B~D3%7jHn~Vs2~)rAyF=S9*vs zy4aDW2kpK=bhqTJQCQKPzIX_4{Z$-}gm2BJM=F!59U=1CKqYs^o({^e(z7?`*x^rn zVlrc^VSvPJh+~u0l_9RUI4YhT@u)2@dzS6yEctSdfPCq1!j-7h z_d%+}vL@s*dVEA@I;Q3?k7r87`lwJHTJNYeJoz3SKMyWkUI|IY>Ud=PL!Q`ILYw^u zSBOS*Zif8E#p+o12#33%9W2izu%b$of%Cc(Qi!hm@VHIf z5Ae+C_d~WL8(j*2(ztXtW;-(;!VD!L6@O8VbJ+Tqs1%%jt4j3M1QaE3?8V@7T@m7=N9J_M0#@)ER2ddpA> zle~-OrXlHIqOt5`ChEg8^a=n)UxczkJv11_sULl=Tma(WoA?qIr4=cIW_}#w&h5z2 znxvmmXedh7Vs7QfU{K*9jzj$E+QJj@S3(r%HHb&vvAHb zwi+-rsF$%B22{O%k_vg;F4Pp0gmQgFBkr9=b8vC#&uldUm-=*E0oaOonuXGifH5-L zb$O~I?3zzu%Y_)sjv-=@&Hi-P6Mz-` z;F#1TY!}d{5u*)tXJnKX*$^43hf>_WU)NC=*g6b9DVjJ1GXgvw6Z#G<;YyDkehHXA z$F9>Dn@e;SJW721Io##uyHG zJ(w6;3*;v5p7;AIgvc-d872u}h2Vnn-lx0|_yLgN94mbP@W~>PeyL2%r7I z>0AoH`>|*7pHd9rDYH|d$|Nc-^bQ_}xVfp=zXU?!tG^tbsmG)UE0RL_cyp*}XXj%k zu&ldf%@vht$V$OA*N2|dgYl;gS9019N&aqEHaOei#0(kl2|bUii2N5%hwg*?>-EAt?-6XYRs*0S5+qBzZv58nVl_HNjRT}1g$d956o2~;QxHX56~mq1H{ycrN? zj^Y>(G|M-yOSMe#Gws}QyL zuq(K0r_)09#!XPradzb|s)U&F+sz1L9%M@%<}?p)32tLYW68Fr*lTkyK+2+r;$JG~ z;u=j-kQlZWi>H)XA19>(mDy}6(p?f+N$BoEH{5I)Uwu{MVf^^;!HXbRp6l`+v!hqKdC30zB*l!GX(;kmB!Donl zKpqKOj2)SN7vnJ+2f}ob3lsaxd0zn5f>Tm4hbS1h@Z2yZj7}=6J*uAo@yFaL3L#WF z=C1s(9@v53K*v7S2g&xaC6gB6j8^tm;r^eO1*Ju7Pln|oD0Or1bs)0Jq`N5Oow83Ue=E->usjI5DueENl@@qfVb%Xe>YtvV~wxzZZa_MZIv{ zsY%9_hjl^4k1KZ@WeNHz19>F6WKigNHP~{ixfs?R9Xr2^&JS$>%I0v7iWCF(t_fq3 zk@c>aS9@T@T(&7C+7SWMJz(rsl$z^WO%i@JY&Tlfw$wi2elxbf|BUo8aS^x5DVQfa7O9`A#MTv9<%*qDs73j2Lqn zLu>BGu#c!7>-)-g9|Kc^*sjJ3IJT_Idjer^=U-+ zxq_<&lsu0LPeNH5;%lt&zFO%&WFeyz!ndQ}IeC{Zo)0D%%Z@FwA zBnY&iqd&H6k^Z;lt74I>$|Xi7)gPv1fq9 znT_bITHH7s+bw(sde1xGaBqAmo%;!6%u-CR(WK(ClN3ly|8Osi4;Smx<_`l_R&ZHi#fKAssY7Kv z7itp2A>kb`$TbYSIt1JPc=b*)*%|(&L2ib3_$QRrE@YzVT_E5DWug=oD{lr?_&r>Y zs^1x|NDldhFEj;??&OBlMuVFj9l${lorXeiy6Gmat(it~>eTRQxWPAlO-X11^q`0L z;2;4NW;;fLrbfJ$g`dO9MQ@dTDz+mQu;UPGhuDNND+^a8BUgoI$~VF_~11K55|=xW}EcuWqzFjLrQ{g}BWr1>dtZ{0HV$d*$Wr?t@Bqapt^uKL^1H zDCsv=AI{g~^KXHr9XQJWn-lui9jp$zXNND0(eXpED0Kx53=1F1w^%fgdT0jp=!E(-$%7_hen{#NkQ zi{V{S0cS2}G^m3D`f|mRnqA~2Bd>%f;8~TFw;z@L!5-=C9TOOxS^r6xp^NU}$^%-- zTBP&s@S(_8(h0?-UcgrvXH!tRu`V(^-K~x}coQ&9i(F|4pNSRh%I=xN5+P>(W<)yZJrA_G2Nt%mgNxVo3`A=5=@$7GlfWZM~8Vf02!&jvT~-~@T8|Fxlq)uVre%L}b=ZSnBg z)TPD%f07dj*c%)$vMzO2N%#X)ai_9|+y%+TaU_#;K@gPuR2ELh+;^*uI)ybE=Z#SD zv$(l&>Dn09b?7$_;F>GF2L7s0+KJPYC~fnJDx#}G=8+RSP#@HUy@AbJ+n*Fn0K${t zCzbuABwmRIGNiJ?W0fdx)v2mvy}FP&GLY7Hwly9ZcqF4W$y${bG+@o1I%tv>iPjMM zn*i?}D(@7Gf{lk2gIVN6E!emeA;@SY?2INkXbN9lz`;5CVDIV!xG~-PA$Gyytc8x) zl!%xy=Ab1^Niz%9;7q5730jCjp7$17;m59zjP`X^0?x7ZB$XT5TGHuD>GYlrN8*uA z+ef$)Ik}&ZMqKl?d4;Kfi*LC63zylfXDIp(5bngx9e6Z8Fd4-8^MI1{z7^9-Wnf(f z2?-{tW9N$s(t!dcOFM1Nl5}gWckDmY%PdO&RUY%$c4n=tZ zXu8zwlT)evjwD%KS zZ-@B^KO%1S*^Gtv0GGQ7`Y)v;t|2)vLdblPsZM@R;9S66z@;k+P>k}D{e;1&Jh$jc z;e3F?+Kt1ZR12hifN&0qK62RFEdm&|4|i0y8^}@d;mP`pACS60VE~fg54&52FXC+Y zHwg-0mC3wdp)w+PG+AH9hs75Eg&;Nl#Zcicw4!H6{h8Qt<$TeAabpQAt^OQ~2*Hfa zn&fIYSP{?y@AjOx;6KqM-cQc~G<|X?LO2G^@q0wuDSm*_|KGy1=0FqR8j?wo!g{2p zwd~Sz+^XR`PA2WDG9Eha1ttrVeQ;VQcdT$BqJ8lRo{UVMk|il>_%n8#F<$r**_-;? zBefi0JId-z>XxE2F$}RGFYyHX?>SIbRZJ8!0lZ}g5Y?UxS}~w$Q{PNx zY7y-ip=(Q^`=;H)csy;It|;R_EV`1=K-J6=Dw6fF!UM>%DfRN>N}$Mn_L1x0lE@%J zT^28#hCwCszGmbo(8_ArDgRHZboTl z03J_}mz7ntL50*rdd^Q4enZKA7V%2))NzO`Noi;mA$*-L?2i7(u5i4MEmD& z9)V}t@!l&Z-b-n-74jopSdSAfv0%1G0ibYKrW`#=!wWInEX+n051Ja~qyVwG|0c%5 z(#jAHQU$E+QPBY%p%DDVsjj)SFr<)qyM!JXgN|HOn9&lnKr8-JCQ)bx1arFT6LxKE z1B6e-U??E0w*JV z=ra<{$QEi+xt@tC#OjdH4>fe7^TJ?EsdoP#4bg4CVA%fE8^ZSET%j>~-{;ZJMfk#b zJezCA`xv{^YXC({6zPRWg#(agW`@NE51`5Y^fy<(lDJF%W@s|A72HpiXygf3;Y8iK zDkT!5H+H*Nj>Ou1$vq3XtRY_*i7kRHBl915fqizcSK{LHIVnONYF?obzh0;Oxa+yI zP+cp)$m~&>l@&~X22hhaRwTR+(CvE`EIS9#ip@gPrQh%rK~&@f=JvlvdWrBPAPa5Q zn>C9}n|;Tbr%@`r3If;(%Xnq7w73Fj&|3gQm8mpv@!(3$JSAKOxTYrlXa15(2A3Ls zT383L+1n=w{wM6zG6ps}YU#uO3A_1>@E(j?chv9E8ClKB@=$V?8MnXlJOBSRE?xK& zWqo~)(azNSkyfZ3j@@KOSG~ZD{=TgH?Ef`7Wm7J!gFx&U`ZW75SV;$u%8ifEro(^Z z8%0AagpWYXFOSbHM1&vklQ^q6(AJ$tQD9@t9Nym0-Heu>N0 zsYJ~iY(7tWXe;-p=55xk9bGypse>OU%^9J+(R_Qy+U0rq{*&@f)ZRWg z{hlE2^@%$NymtMbU1HN~z4DMI@@|XGXSdIH6RP=7lG}fNpBGCf$(IhD8NTMt=M*nN z(%j@&kD8;7A-eCBZp>b2@nU?A%h;-lTNdj42=4=(@7BE3FxKvS`)uaN%yovTCHuzA z{CT!6C3k-R5f5+f?y7leQJ>s>=GPjd)fNS}^}M92bb5YDpA`*Tj^*CFI-<8yK=``&)P)6?V@cD4m|N3xu_t_ zSYh8NW4X-RJp_>+N z8@Rf5U+v;o$ImUxjz3^FLuFjc8<%@Nzqh!pZSArb@tr#DKd@EDVOr^h*WObejJvx% zW>z=fd#{}q-jq7@6$d zsb#linLYzNRD2h@oVG4hQ+iyvO)d5Ot`v2*rmTf+UTrJxt2g$-=}r}8sh^&&PtPOQ zvsX5?<_CEjOjW$TE9dUw&P_X8ratW2Ylxux;t^{L%5_E@vilTeG(9qPbaHaaZnKk< z1^T^)MLu~DnNvAiXR6ip9wVm=@G6b83-Ea-_-Gt?DDHs^@6gTgtaY9`-CV|K>gSCu zT0QOX`!}9aVB_+@u(I!@#Ys&HlCF+G9$NUb(Y7_~w1J{SS}M@;h~8 zzUSq*$Laer8p4M^(LO=!@(dHJt8|v^rzfq{zdf!|yZxKst^VCU4!Wpf5x;Zz^FmwyN9P^XM-^+Q z^7qyxY!q&K(Ry%gT~>AS)rLEjKE4(oa(-*|O>5lNE6`)?hUczbmh9SjXpH|2$D)v3 zD}AOG2(Qn$d34W<)a6d*UIrI)1Hy0k&0QM1*Q)!hOz}QX<3CT` zG;X5xv+#nCZ)qRI z*LTgoYmsbJF`%pM7>yMREKi<^9P#`XHSx^z%v%<#Eal4MI!xbfHtJ^4ZHJa##Vd?d z_(}2AR@tUK$`3gY&mx1fbsq)zyxr%!ML4wbRJS{uJ_i@YcUH6Nq80db>bCS;kA7DU zo_PFV`^Bl3l=8j~%vV|%(9k&j_X)-MeR3~986T?J=E$a$d&y7Nc}=vq)v>Ul!jcLZ zSG?~;{w<4ujj;he-S$rjzF$0fYjw||8vKJ-?$=K3b*JI|)LlVO*F`@PEQz5^H$HNu zLSl6%+p3;9Kg{yMxD&hVZlCZr4!fUOf3LO1s=B4V;oGlAZ=KM%e}0~Ycf+h&<()Ne z4|M3YdC8|ef+S0Wg5_F`G#kSVpDh8D$}x~tu^7dFSz8jS=l^=5tOkvo?!S6lyK!GaroJ8m?(yC|>MH4h7& zZ=3tBP@uP8^WO7pc=UwB#XPOgJK{gAkE|XP`E`>=SlNe&xec#An#`T&UHI-q%gz^V zu5GLB95&M<&*EqHz+ES<-?xr+Jv_9o<90&@|Xi&^xdCb9$qUvF}(7AYOlMCzxx&sT9$UdY3BB>3hKGq zH9H3Qjd*0T`uwT-1nb)BK59MpeH!9t-qs>x)3C9NmG|4$t{t@IO!AzWN-I`$-241o zg+ir`>!Ovj*Iep-jvv?L-8g)u`Ji+ApB7%s7@TJrRk`f2>gUKG^2r$iGvu=OefiqP zXkfkXlui>?W)XktvHQw~#7zHpV+Pfv>pU{+9%$T=zW9yQa zS2D*2M^-BTA7O79m*vv64=YM{cc*lNgh;1IH^@bINl3`0bW0=M-Fea7DcwjTf~159 z@;@*3zV8kDd7tO~06#v=nzd%lnwgV1j}O_O zK0A2{+oh@06uBJySWE0$OY=zzdl1n<=Q7e`Dq*Q@3-~w;VQ?e7NDi{ps`WLpW$?lg zuFTF`n8KJ}%r7~RlzYu#%?uIEIs>&4l>R6-?kNMyj6Y5=Zk^iceZ=Iu<0R>|{Gq1U zbsxv4*xekR9GN*mo-3i`+6av?SI$9>YK`nv^RpMU`!+?08?vOc ztw+)xp~z=2(H-S3zt3sNn$Ww+Ngdl6y4ja$wp+c<8$3 zmRrZH+Z%{^oyq-->Dk8Ds-~ku%F6+gUg)s2KK) zH6-YWdutw3mbFfj#=lk}rIOhyFW#r12zGo*#c*rX1U%EHWyKLXgPUW}!|cIBTANy9 z-T#&aw@s1BDv(69RYOJ3s5-W!iX<&BuEs^y%2qAmU4Fi#i)`rID;e7fV#}&zf@r?t zbq34$O{}09{(+X)DV0;JoWXhZ{F_U?R)RVcr9Jto6$>*C_zO*&eys}x(a-3uY*7eV zgmV`&cfbdE?W8(d0kk%J{*?;G0l#rKo0?2h47D903OH#SG-!DR!ubo2JQ#)67CyVN8V7JWSNlaYWxjc1AsKTJNQ``3zJtHRo5I_@iDj38Cyfepb8}`%4`uGSJ~2eQ%MGOc~cD6C3ZTt^}i+ zEi+AFRo%w7m=@npxk@SiO`eZkS*?=;XvXR^7Nr|DT#@+^>(xi&Y2%BBjc%V7z8+V9 zU7f!G?on?-OcIW*PH?v%XWH~uqw>LJ#@X3;-n%vw)~8t!*YFc=yG{4Fu}%*!`nKa+ z3@6bc!ji;gw|!*n5vm}fe_zpK3f!oz8wy<5cVL+oS(%nxf0kOm7E@8H9>Z1w7?Tzj z0g6pC3Ch0GETpm^7+ZftZYr}nM48f`I7v9~z=7kxSj|^9e*cdBDacDiUZHs<9Dap4 z+Cg4(tb()OJK==n+#sA`%w_6hXN<1lkzUR2@g+!YmTq+DS(wa-?`O@=*ikyzPIxtR zs4%4@6B@GyaTKJ|=w}>K_9m&F8Wr%`TLL!>ILlQ!z7PZCu6R>~MCNU^<_iu>Q*{1pi z=Mc>mbrzn;RB7WRsmlK@xDEaCceIyw-b=7CeI8yCi@0U9F4Nku+yedAy$|{~wn{#N zM~O}B3w%kj7e=uynA-A#YYds5iqX$fFQSH1YAn$yrc>mX=||p1FD1%iYWLx~^_q}` z$$W@qVi}ajY{+@?BXDeB75_X_`%(C_X=KR!0omWvTxdDPhbM(4#3c`(G zA%VuhrTn?gB?Bura}KrgCP~}8K!AD=`L;&ZxGO=(7PAS1%x3%Z_6NVLUEE?Mjp}OT z;uac>ykPH8suRBBF=gYXoe_iV_PW?SrQq|Xr}CR*zcQVCmrA>kt#XvyK?z@>-fdORZO$zom^(tmU6G{M^R z8m}8aHO1MhX1X;I6g{LAIYC1Tmwn~;5h+w)Iq>5TlrJ4$tFPY|9Tp_=(l*PJsc25; zpf!_bzgVDstuwV_Jf&|#%VH%R)(Fm*r@}j%A+x$Nm8PCBRfcpw5vV)Rw!VU)byuwN zCc3hOd`9b!ZyerKpq^ZLHm18YITewg_bp#sBvtv~hfB7ql%SNL;Fjcw{^z)y!7^S@ zA7l)_NW+cqw1Y|c^P8TWGb@}W?PdkVSaF#sJ-Xv`ht0?V=OKBL=f{LaTc%(!9>O=E z!s}RS-;pEj6C`QZfF2rD6WBS&t92`1-721+F_BjOVGB{(fA;Z3y9Bqiy)S zW8GW4ZcK1_ERDE|jkwN*xW)uV+_0}Qm@s)F4yra8z#E8@C&bZ3JYhoEr=8lhLOm1< zyM#xH8=h?I@$z4>O}swTgPjdCx=@angf-(Vz|g!U&j)vfbW##){Cb>@Z8(jnvG;T& zp+qoS_`L>wU+D~s|5Cr2BliA@m0G9hvJ(4m^2pf|Hl35x7OiU(JhuTb+r?n{Px_p0 zJ9k0MT9QxEeKz9>VM#gl!7T%o!3kk=mleVhmhw7ION-~+p|1eq0SHipacQcLq>sec$!1?w}E-|FFBr(}%%`bAk zu~}#ToUO%~`4$U?QIZGhIL-+q(x?IqCxr*Js=xDkpm(FGGAux4EoiFF9is(8ziUVd z#q~(B!jH&-OY`Ih7w7*a6Wxi{u{S$CH0? z#s14=fn*#TQquxBgN&c^!Zi($#iDxeDi(To`_Gl?U$6{R9pnZN6b}Uo1SHuU%wPe| z<^!PMzeIJ&FbRkT3elN^EZS}W^WlKD|GntF!_@DneL$a>5GHa^8MJLm3-=6^gYxiA zrvI|mfVSl6yD%&O`GSoKv;t+^q1M~Tjsgs?n+J?LsDtjvA$JnGPXLL8*0)A*35KI! z1c)Oe$R6rk?UX;fP&gP`mGU3UpxW->;5*q7Ko&@+|80#9kzfX~AOP<2%dt*n25z9e z?o&Dcm2`6l%iMMF;wcLNqK4udqe14lK{-%jWCTIbMHVnKFb`(t{-lyadIUirCwYcP1vovOp1c4^bSAJ3wZP&vA=M{JG~)r zP}fwPo1jBxUW4SJzD;PVkdy;_OZkuv_@IM-48H|Bz)Vo|wSr3+iw2=U!nHvAa6m8d zmtq+QfP;@8IQXF%cd-4P87}ZF09XeQMKK^dZ$S0XsFJ#Xv#STjQTFd~+(kzE7eIn3 zLAJmcGr=Za4*`N|0dj`|qF)6n>U;n|bo@c0(?h+`$bbNPeahp3mOHe#qmqMKordWUr_*<$Cb{G!~*cIn*Ges zAfE$3-FGpVs)^7EnEUg=GI_YG{Ig8*fetVdinc$XC9DX75Fx`6AX%sh=X{F4pcPc0 zyTU(#_@I~jfoKp3!iR1osL6laP64rs`&d78js8V%fQ}l{8V%}!Zj`uaTuntlv}int zmVY*9{PY`SXq*Xg1ffAT555=c-p7gH5r z2-X7^{>?;$woCw8!lo~vK!*=78i^C8GC(cB2!fDbO7#Qtb_@JG82Dcqs*#f>80jxj z0lOeenV>Of&Z#OjqE#E9rs}>)cQbvL^7dZ|*z^)W4kZDo;`Mixb+kN?2{5K~zu$>A zfI5f!D*wU;?+Ih0L8lt1dGfdLVjjo}@M3cScB&H~=z3omV6pzU)>3*qK5$T_3+%!^ zMoQQ>*F%A%=Yw*fj9L8~In6A<=;r^=eCfaC4AEJDhgia@KylD*5#DU;GxVk7q5nNB z?vAW`!oY(sV=icr;2MxO6c!Ih`ZMeW^f2+Thdb8o-%>MxO7sL2A0TbSq7HP&c#EAE z_k;x`*dD~ye~z2Knn9$LV8575}^K|xR=j0m3a6*STH3GDsZyq^O3vJQj{NpAv0 zLrBpqWwz^#H9rk1oedl4`mOumf*u2@Q~mIRR<*l{jCnY19Zp8v%&xwKpXo#aNK{kp}$?=g#}$P!~30R zkn>KECsaw$`)UVwKyL8=lKXKd_q`$;9Wvbwl7hPKO;m=xBp@U9z~%qLb#MAW&d_QL z+(juRT7VkS`)ckM=HI3bVnb&Y;O_!7onvoA2+shB8xycEsv~ig3t+NTF+7-}2Tn+^ zTLvK{)GmOs0Kem@NPG+dqP^}x#6R>q^pyEa@0}oNU zl+bhTZ{GuIL!e^1Z-0zIeP4cmaQ_nfw@QhxAb+Ur30nn{F(6y|K=z@z|ERn(H=P&{ zdN2U7f|1a(2*QR)t$`Gwi-!=xCI$lf`thKzzqZW3-5h);`rQMdmYl7FJfIP9b-eo( z8Ufu8r2r2@zt#Shy8z^{654jWfyJ{4Duw1UJW5fyDh3t~<^3 zK0sIb|JcOtNPB5M|2%!rhnE|LVT%chT3N5;7rU@wv2F5<};PVT* zw(nShcVgy5(9b2J7=1KIoT1SL)Y0-`Ux=zVRFA!8#ZXy{yT^#q{+gB}Nd z?wxCYCAZ&=fydNH7@9Ee-40hk4&-^{{j1>de@~RVA*UA+L;oKDzV6Y<08?74+ox^; zDt^A`{qCUyzx!|FFDFGCnLulvB^WNt$pV>BrVlIV{Bvae<|3Bh)$6a2Q-tPWHA3XC6EMY!*@>v$b*F@!=xLM0~;}9sK-ba z8boV-weJ~#AX)*wME>#1e`f6O#%cpblu*m5KJdXj0W8makR|>1`n&5lotzB1j;sx0 z&>+*(M&i(EB2TT!hHi`F52ooqzWGZhy+k>RI%~)kbtoBc;Kgb zyoZz<4uIFE3=D}rp>^E|6%22vratp$G0~ri;Od zB;*x1T=rZM-bwQwZMnLB-IVr7N$i#i=Ta|o9qrTDG>Jo9K!|TyI}unjiU=)DEBQ@9r7!FX}n|ng>XQ$QJ=fpp2fhD#y{KX!>RyFVE`TBL; z@~j>v% zwuSv~vW%IXez0%MX^{y}0T;Sro1W#7KaF9@AWoCZ4-t>6c$3gIH(nxGt zxu5H6TkrI@H+v{GPw^XkY?ikprI&25Kq@E$Xc2`WM7~V}uCWsS_3}}VKgeFv3GJygsAyj6w{mPKiaOpWr9x%^bk~R z_aYVNP%sgUVqXg)9(MetXER|jSH+gv?OD@}GS$d{6gvH(R|3r3X(UG1XZ;g-XD)Jb zcAqMRq)YWmIkfVSvfKT4u9lfOC}B@VIw0u16LTecrcqBJvnw{p2}Ke8l|$BL96t+U z+XvM?ZUuaUB$rLYprdt8&BAZQVK#|QX0`GTJW?u)m(2t)($UEg>K6Ee24alHqbl<) ze8q|&#v7+rDjYE3#YC{$2diH=xx2n^EXwG@!hL~+ zcb^sg0W-x7i__20bcWPE1+R#zU2SM~|Jq`3<*gbQ5X5q%ql^;aX2_g(GqP4K9M>A7 zO7XA$K{B&LqUUbBs$H2@%xvHEWpVfXa$E4dB4q!?`RX!Qv$(tmo@Je7tPj>TB@h{r z+L*b{=t=18{!foMEQGETH1))*95p9I)>oZ9^DT4N)msh( zuMN%6>%t<69m6T~hicagmM25r5PFWdT;o+lhFh;cPmTkctwD`Qz0ckk&)A;qgfVZ#U(__Vm zYF_h-G!8`@+oSqLv13*3%niFG>dKa2Rd+9$>ToQlbi?JbZTk`(?)*AO(^vYo;SuoR z4DW*qdqk}>XB!lS4l&Eri>K>H@tt5(MluVM6MDa#g4Zgvwsb3aFq4lNGB>{+mwsFO zIb_H3%CBnNwNjZtkj8&3a-ktqu<(&!N}F%wN;#}Sj^S{-@jE@{o2PvT?d2N#px?js z%>BO8j1IfI{BjXU>zs7m@8ME8#owDVSKGdsh)l`Zcs{Suby{*r2hRT_C~(1iOX$~0 zVEPSZ%M5InUTiwUy!{=vnL+K%Itq?R8g85U*AmS6H?O*x-i>gczAq3dlb1e_=SSLZ zY%Z3}1+OcXOb;y=$mmgHwFN`=-#xMCa{hCez3+hImjR-%5hU&UT*{(W6el|@}hF%@KUW&;kA6w{B>Z* z_D*G^q+~}3n-;MF_>`0MO|TP>S85R3anj?hZ`Y8=H=noc zazWnBIcfSc=AC@CqLMId6f@|WE%;Me_t8`1-oDXejuRW>_6@u}?O^m&L`6Gqxy#gi zehNWa@cgqVXL-{-k1hE4!S3;|>Ag=*OKjJ1^IS%21xy*#mFNzC;AM|(=SccKOAc3j zo|5|9oXycgP`_y0tV-OHz)hN4&(C4kBt_gJr{Oy?U2_6?aLSL?c=%%K-12IkOQ9LX z4H-VoncP;}GFElHr@}8%NqPfd#cCz|8ep*WrMMy6S~ksKxpESyyJ=t;4#1-1Q-qE=!m7Po#D*N2l>6y+1wZ(P-G zGBpU!_T$+fsQjcU)s1j2f!FGSrOE~INVSW@O|eVUxt!|%Xq!#Dee*iKenlm5GTDR% zFMiLtDg;)bN5yjQ#wf+iJXBZ_n^tf{J^N`Z^9xbvJ-OO#%(#+hX+e=7 zT|1qgHrGG3oc3ihv$oc*S40|uvsGMIJ@~`m?ovmmNWn&Ld@_Fy{)0a8KhgcBvWIXw zs?>s-73IqzkZU%~rJfe6P3P+9nP8%^&22H9Bx!TU+~`j(y~mPeDBtutbf|W&2s{M$ z!v|E{nPd8#+^6i!lFF(^%6Jp?#8{`Ap`SJ3kNR8dm2tYmf3U~!0CalQg8 zV|gNXLxGKoyX;8p_o_mkm|~lsX7<9Lzy{R1ySA1;Vg8_Ptc1vt9&lQ(ZdEHDera;O z;%dpKM)j2_YwLbLFzKmooZE)QY38Y~=eeBiQ>u}+f3C~KUMH^J`o7ZmVedE)+%*P&MmzdJno~Vns2(#4dll?6 z8bPN?0V8XN@H}~OM^ICG`y38zo-xm}NR8bxy7LycsAbgf3oiGk?WdMzmHPx#Asgcu z4YaC0Cz~_6M=2~gD%9TsQMK8eEa~+g%GZ~jRdi3&ak&#^#vC6tg}iuz3R&ZJ>`4n z)B~czM>d@lfx{Q8SL}91A0n3nNdi{~ySQd-I1{_-bKxPjox3oI8?*WZOw=ofWjcY6 zn;^)IMB4$!?R3MtTY+`!ATu*>FgcfhNTQf;V&~&w95fR%HeNRl5upX&k;Mv@uvGnu z!ZXYp|H@?P(&f)a>>?lEKz@ibwxuZyp=`|Cq5LLvHzNq@L+tg=LF}cNU!P}1(fDRw zP`O+Y;dN`PGelZZW!SbcFtm8&LHFlN^Am8|XvT%v(S|Q)HFY68SXJQ*F*rmnR4EhR zh;N~eF$IOe>Wvy<~9;~2iO)47TZ zmrcleFr!(WF!pfceU+-4(i+hpPOG@qqQDT`3>pFQxa|C;Zf1eu5+ty%zv$rgFxM?H z-8nAfp%Fczs-)Z3M*1#pE?-9NG*N1T6w`z6zwwT1U+wQKTE@8eVD;R(fVt3Qo+F^*_*m5)v9(^R)uz|BrvX6ue>RX?kb zkcy7+td7yPE6}#rrBhy-u}aAn>{Q>t5RC{Fv>O$5bI!CoS@j_`KBAvwO%Z#2q`WSf zB30fgYoC$0B8t4XEGd$qUfo`r+nJ4P9H$ZBT8d>*N<_LKbXjYPV3kjm!;=|v))2tc z5bshSQR_yx_k-D15Ij0_zDn{#J0-ux@3eN-A?lo!*CKt*sBV6aq?OH%v9K(f^GfyX5Xv4>T%mf63FMW4yj4HrBT>5G*tq(B-eG;$&LEOpE$hZ znkBEu0}`(N;6_3+aD%^6{t`r)?6njz4B-&&jS}Y87x~~{p#z?O9@HPg_Ua{USM!(O z9ha{+PU5bGS)YH%c|62537_2NZ?}9ZnG) z8pKvGjc1lmxBx7mV(^ueHQgllIf5f zimGaZ@M2nOyEZkLdeI;)(lj;AG&w3x%Z&GR(-*O1G(FxDWbtqsVJ`{1>dBG`?pmkF zGk=3O^`&N@yy~X<`QTEmFw3c4YGQ#%c``CuBT^@|`uT=%E$LzcGt6V^%*c?yxJ7IT z9Xe5Fd)yyy*9H(tjqkjn0a@ZNH+UEJxToqPnn(Dn-ZUHF$9YE-8!x)G(7AqM8Z`Ke zn=rjSV>qo2f4&PMtJ@ITZA0xV+t zPc3i!6(_os!B%KbuyXUBp%$)4S<0wVk4F}gFYgdqHPSmurJrqu71A*3h@h{RHoekT|*vwAMG=vJa5ieDU%8gkpL7z z0@5fDLBP)#O8wFulhE0BBYP;f*;ROK9`Fx*awdjz*Ms-fKy{?t81!ZEmeUeJI()_w&>U7AF!&UTq9l?G= z{vBMA$Qnl43&R?onsbM+cM;t|PL;%ZpMj+cVo;;;t??_%41(?}v8sHWONHb>U;F0KzCU!h0JqQa55X{7i* z3mbTOwlipg_gN(%WMmVKp))LDcR-d>xbenAI^O*Wxxm$whE++>K_b~QmvEzbV`V;( zY@P}&!84>2T&4@_QSPrtX*=V;0xKPqZIEvR$5}JLyMdxhlD>mSHygt4OhM_ z?cKE+dgN>^;@riA)_)t<+mA2VlEo`V#bVS|mL8l|^RXndkk3P94$G|J8<&igwflyI zfdd(RfP8&^Q*$WZ(O%JeZfS$XZ&rm=7hlv|+xHsll}!v=vOfq;6ki@Qxo;YnB2S`5 z_^>Z)f%oR*`P@K7#^}o=dAf~CDMPryp|ka^s>60U1*an#jqe4QGb6asxHL;V>yGd) zT#fnL$Z$}}@$*=k^*=pRXv&Feo{b{TqyM}bqrk4+ijxztTbPUDorQLhcr^ zGo?FBA&(B{=lL*awOn}%n+O*qjq5nUK~&$m>0pnbGxLkw^gGC7Z-L!QfPn3NWXSwZgH76?N(Y?ymS{rRYGzYX2kSf;?9P-E}f>2r>ar_*0qgeM&{@3saG+Yvq(G zN##A{YLoL@oRu@{9toKD*-qhk>zxMA{lpnz3**H9AVUc=1SjV**uWk18sq>_e28$sk z(!jOr^}nxO{{dqDPP2CSZVZo@o{n zkg|VJQ}ORwM*m1bj>wFgnSu6LVSSI%m>)et)w$;p0Fb?VknnzcdE;&(puILC)rUf$ zrV#P-hwbkQH{EN0X=aQMwZ~LrX7md1TF8S@{0*D`w>?mEI?fy&;$UYy4&^Ys_T_s1 z1sH@NaIgRHmixZ|1LT9NaWk}NJ%)MGUII`}Zu`L{_kB0DQUj9;`Q&Fj34I`M?S;(y zE&#woz8?Y)2FyYOoi~7Rf(B`eHx_^jZ5JG8@B>1aG!G2AmmLkAcL;xh@k{7a6Pu^q z0p!3GKYPHzxHkz9NTo3!1<-QEh~PC21@It&*!_&u{&1RXJ5&@y3 z4fy4rPyPi%q%YD!Sxk3Kr1lx(1!&NpdKfs)1MW|vz9;!t-Jv@T^E<`{Pzbe}ct2VY zxcC=-aPfb?YSUeF*YC#OP+UsLud5A;?nMD2_YArZ=cE(TL&2l6Y%4T~(!TL2v`#Hy ze(e^NaWjA4n)?iZzgB_Ijq#u`(EM}l7n4$901XUypygk~hJ*^59H;@!J*euj#?^rG z;av}#|0g{0APtcw&Fnx+SiZ4W$?U*0DM0n7d*=UZO4HjJpb&N8l|DLTs>3826Y%He zcu{E-5DY3z_ay&8cp!k6l<@%#H`il)(2}{E0Os+(Yk*MfnFvAavx{gJ2@(Uq(VqwS z33PAxZ_uaTJ_ArS2oRdZ&@x*euPfG)0o3vx5dQZS{0sWBXM~1CAsg_pT-~+F-77*y zOsUf}K!9%F2dRKb_%G`(;Vzzu;7psLrJ3U%VUZ*Qrb#@YUfka#4w+dV!$U~0OrJoj zD9}u(euLIX`t<-({h#ekaZNFy?N_EhUqK6^LhAtDAILwO&|UxO6o3}Qgf#sqxCC@R z2PDWefoTXda*tn(f)PSV2R8Kwwb~!-1W>IQ35b3U z7?5sqQ$MJxh4f5$D5v57M-?Q3$}|jGv7{-eT>mZ5e*VFtdWec8u+y6IfTvpA3}Yp) z`2P$ya~<08+Ixs0WYX85wgeDiMZaXnL0pDOHc^$C|14IiS@Ci1m0EX53x&4NYVcM? zf}pT4`WenyiFr#k#o(d4*~+pFmUGv8k=yI~q1IEybn~50%>xlz?du zV(DqM84vmI!lvQbM9pW`E#R~4nFwtj%jvA+>=P?uCSpDujk3}b7Pm*nku%}n(bx&P z{dq|ndaGx;D6$ugb6-1uaMwen<8KFk_X@VV0KcEN3zWeblVZFF{^qBM@8Ev({#U_z zUQy9tukuRmiq5rq+gk5QyZ&C$_hObq>9 zyC_aS{q8@TdNWH+;nz4 z^Rxccka=1ZDf~Z_FRO`(_n1PHiF{L)t5y7D-ICqEI|-p0*x;(K7e71aW-YsjRU1zU zxOGIY7PB^f8we>G2J24DwNp@y->@QvXc%#|~j(Dw~zFNVV<-kEF8EM~;#ehwbX!6+FhE59%tLk*uh z%rV}2&4fZ(Kd3{+{N^SA<2vypi>bSR`Qs=Cqe95iV$hz%H?6qZwCLW!TB~eA0`WkW zT0>N|hLCNg6NOWYmP)T%K*nwt zi2aX)HmSS9#viYH6u7WzA@8veAXsuc=6tAU?cVvoRmfO&%*?;&<4ho-K4!{Z@7ewB z!zl{^ig>}aKc2!2`vODW@}Kx29})uD@&v64tN`WjoXB!6aU*!|GQ(6fwb(z>wXex7 zfxDlN3A{FzmE;2l(c$m0PP*jlIPmC+FYAX^Ty<$wx74m&4MtNWSUa?z1tA2z(?OwN zLh1_kdF41|W)b{>cvT86I7p@=+Gim^>a{Im^r9??mo*2%zTvt{64*vqhq-Bo2>Hfp zOX|S%gkI6TFu!r2xI%c=XK^h;rXKac1S4B1cR^M61!Eg{VMlbn=E<*1oucMPzogf{ zT!Z{mi&mWvK6>gq@GbQjTDZB5K1Qc_Uc@5Z%U45@GYi{e9eKfEqBk!dFnQg7`eh($X({l85&|9H#6%jv2E0y26h$ z?F%6j^E(xDuuv|ShR#vg=p`4GnJ>gKvpln^GMXFat%aQ(>&Tw=yNK1>=Ke9eC&+ob zlm?vUQYe?EJm2HC6~5eJbP@~gF<%y!9XG;qxqP>$lEfS-*aJ>I&;*E{<{2qg0#P){fbE`^ND}z;+o)09E{mxTGeJ zX~9YLFFY{U&*YaMmA4DaMoXujnsTWAAbXqf^0JE-BWv_nV|I6v{xF>74War5#H&b)m7H&9R=p=Qwt^>wOCeHVwCtcJ*zGp8NdTe!?Gtp)RY%D}Y zML&}cie8r|SyiSn_w+<-mpg0}T%pYnBf|D|;8KNx&(tQhKyXNEJ(X8g-mEi$XXfk$ zy01uVDD3Q9JE)$%gTTw0`%-BU5tn?)dZZkPnkyPe$*abjA!A*_T&V?jg0FYx!10!@ zqfO8?b7q3XMvZ?4KWq2-9Dzh3=faiO!j+?qknPP=IO8VTAGM8IFK-dt(JN(ZG!qMI zXA0+s!6(y3o+Fi=->#7bd0xuA0;y8ZS@4E;T#DGq$;nZ>RAdw?uO;)E5m-rKicjxr zF#7wAI9D>qlSXt3zV7Kz;&bD9XDxpwgRsi}W&BLWu0kmOPz)8H=NH2!@mBv$jacZS zF!v+=8uD$dRi(r?b1bjWl3mO_^S1Z&6QvP&)4_B5%4&ZIlHgFD`DPA|C~d^|NC<$Q zx6sKGf{e_5ebI(q7#tzcV<^DF7Q@>h_BU4K@Oyjd#7j0d7^AiITO zIA%#&CYD{Cm9c)uBTGhrs_FD4@q;XEYDd! zDxoAsVn$}yx{1*F=Q1*B>w{KmFPbd`!uG*v&&=V!Z@`Qi??_iv?!(k9e#+1F)%PP% zn^#h5sw*UNF?;REW7ki&9!@;pgD_$`A9{+Xy{|H&!Y2M+80Dpp*XO4vly!-CkRG34 zk2BpaZOK!wo+OWf;kOmVN*7A1T5;73Y@Wv{KEJBFJm>_RKV~!p=o5F8naxsy)Z=x) z`*7TfN41H12x$S2iZKeL*0z`X?XoOaN=)_I&DLQK`V9fShQZ8y>CL5(hN|^GD zz$B^o&p0EQIhZOhc(8g{zs8V|QR=mofO`lDCJ&yc)ZzE^0h=R@Z>;bxq4qla+UF#% zcHQ@zduP=aQPb@CauZwn4YEGIk%H5jnfECji# zU};$(@Aas1PQ-aY^r`Sc6E7CaIV%k5+ppDz(RmXWEd7%_=-TYaPS4JwVDmc%Vy_Zl z>365{bIQxI@zSXq_$CM}>O3)jw@!`R+IBn>IOEYqEIPGk`CLqY(*jHXZ3@itIa5_c zCo)%6L^rZjwT)tFz_c2s6z#kiJo+1TO0;8rR6L&DJk z%>B*|fl^@QRsBnN+%Nz3<_*z_Oc*jE^qEGR`F6*HW9 z$g!lADQLau_rcQV_Urg&_Xy*$AM;cwT%XUC5j=Sw~6-=D?<34meKB6Q+?# zaVPJH$Yp;>MHM__L6xaLPyv&&zDFUKe@PZ7&sN$UY>|$Z9;7RcVqKSCn3*}DYJIFw zGdTamt18iDWS4x{oBbH&1iiex_&m-d)k`3;H7-}iP|uh0j*ES!S4?+xGjZR=1xRlqRf_xVVeucwLYv45_ z9o=ffxZW~T1j+K2!t5?)YwywZp0pF~)+7OwmQ6^vFlAZ7;U>NR5 zsAoYTwQnN?Pzpr%i$wQFrvo4T3_;3aT6_VQ;WmX~Tpdd6b>?E?X2LYEvFU6jdh$Z+ z16PT?O~t#I=to|qBLuIli%O_BDF^rdfC74EPf@2vcF_pL3_>4+YxK=IJ};Sm#m$Pn zw33SZ?X@*+AUAVqb*!u(ZZ%lo{%Sfrjwek(jWYh|t)9bUk%W%eQP1UN#n>04V{RR@ z*D$Dbi@M)83vkO&e8u!hgg_2j+2Jz-4s)+q>px}(SaL@;@SPEOlGF(bGg5WtUUQ21 z4JqgBZrLbrOB%e=2XDZI+S495;Ok!J*vU@8#!jtn zmC|F2UJfR=bo(RxU-DDCLu+GtjTQNJpR(rHi@Vbey3Y92(jtmR-;6(!i1j2LuT3GC z`Ifny>?YWI+IGxW7z!a^{w+dV>gr7M=Ym&xTEu2V-xNQC5qyRA>ek>7t72OjVt)Gb z8YT#TZ{cvI)}Y9*-`xi={$!Db*2?M;??2*p10pW+#wFCUC?;~!u4wsC1) z(3Pms27(NA-+$3GA)H{>4`3%rLY*6&;+TJ=5y7s9U`ib=svwQV9e}gE-fQ%frL5I6 zS&9R51yxdl-jOti)a+Glm=-k}NB_%Ewj%MUE}1ayXqiW7;1_TnWY~naW;Cjr!n^GT zso%)cU$jkddJq=M5K7q#sQ#R}obh1EW>d@j!hPirDPNHN^jXT@_>o-(hZ6Q1JM0r@ zlbradvY;`7Zo_ww->L^c#d|TnJ1}G+Q7MW3SQrc#T(@$GmD~zg?9Vt^TT977e$O41 z;&CWY6BHI@feA(xuHzKXrwt4nXEl!H*haT1&8dyZ*4c2hf;~;Z!@=Fe!NFrT01;xx zK}J6N9Wh@pp7wuMXsv<|f2M==Wi9JGW=pG=+gJd1L}_$l6^6w)uj(?)W|;n_mv@lG z7;n28K1}az-r@V-!#r@XZpx{UMuDb0g79srd=7Yy7m?sy?rpdf8%l;lb|hJ6ucgn1x$c8q5DMNc#x) zJ7OSHDS@-WpIz(yFzg;h1tu7@EC{6S6x+T`m9Zws?$Ygh#Y4#w*`-DhH?^4LuyUlx zLJF6ZwH^Jd!F|2~^!`X+x|GKYQz~3py2IbS`gD7TWzayc!m!nJ$~r0IU6wyGQV2t_ zta)Kjo#fohjmQ9WCyJ37MQMR&D=)=tBnXVFW5yQw!IS)7R=6Yv_rmzU_rQ^A5$HPi`_93F&sHM%$ny1exWc`FoElWRcqsm(F>0aIDC2DB*OZpucM%) zpp=RfwBY1HCTrUZV&9sG?AgKzWm3kqNIv34z1~;7EGSq0h5PJwJzH__BInE0BR)@M z>Oam8netw-Tf($lGFvL#9AXYxd-+VmicnCdl?F`cX02q&7iqdA-ytE}`@Vm%rSXEJ zuZc+&mnBdNkDPwt+YaRCA_{G#OvapJXh072#5FY({S2T9tEE)@{zTUS`ry z?S@O>+bW$pS>$VT<&S6Dy{9zWd*S#Fc)wsnPc&EtnHU*#QiQ=8X{OCN&v%CKn#TG4 z7n&KX&YyfCM0Jk{Z_{CalfOcNn}TK>&c{NKdHTn$!(xk-=MSiZAoU`Gh1phsd_vfs z*>2pkSHv>uFz}Rl7jDRF+7xXg(&-h;`4k2b*xPT9`vvz4sql>Ym7QlS$J}$12nf>- zc9@>5&;9n(3DU9FvU0l>Yr@!K->zJ8!aNlc6#?^Bd%P0*DS4<(JzRqP#Lj)!^5;~9 zdZp6lN1i{%*R!xq;pD@KraKEBO8gCEL4IGxodUzUxcAvo^;POhK^-<5nng#+u%WRX z)L@6b5a*C$f)PdmMfzFklS;jT&2S7cnIiju*$csxu^4J&9|x651mu%xiKj_I<1S|_ zwQ;R^0WX~kU2svuz=6v!-iaf)Wnzs)^9eR7c6WRV!zkRf_!5# z!|Nu&sqV!tB^9H_JB5qx6V06%DVgmn1e?tS3VgJYO3$TwqFia)SqgdHwT`~~LVA_X z4NgN*)zsx#6+6cutyB#4gnDq}Tf`pOawjAS^+{FD9rdzG<3?QX{ItdcLX5gbafR$}Z%MM$606pJOE<|6V`#H-=ntEGX)=~E zpEce5!fBQnH~DSSKfYhwq*uXcpn?WQR4{PVO+DlqUqIc$Y#F;9rvVSb=k>Et3dYG# z^^5~=cuU>_J(T%#{$+vIge_fetym>EY=JF5xa{pm3=8DVVqX=VC&2<|uk$yDpnz_KeHbct z@2&~inn7wI<|eaKUz*0(f-&S%7RLyF{AqN@w8S%4ib&ov63M-O9eY*dmV6HyeJrPt zP#GT75!TY50zGv5%|^I(DjdPYU@DHUR}~$S^Ly%ZI_{+qZhClnkHY#eGgtTe`aHBB zBu4Un^TVZ-4Ueo`=i$^Q zlNB-f8U_~GB@4phuxURRK4WEXS5PLcoic}zkzfO5M2Ce^xx0aqLri@tm?R;5ML?G% zaDG4QzW? z$gG2N(K2$tM;tD7^=yr z4U#b_&qLmS&q5yXQuniZ3=S#%j`}_KX8o&U0RHwQYTk*?n-++ui%BqjTpn{;m0<*u zGWJ-|{tm(;k9zmClfmfoHD=sfy*3R&x}LX<$EVB4V1r$1_+;^B8NaVTx(+v#$NGOW z7|@knBl+Uqy8Q_rm7_?ZGk7bSaw!i#o8by8(7h)?(2(huDgRB%?-HCW-%Pn8Ay~Wj zOQ4}&dW&!RyXu=`HgOuWENE1N@#6zN5gV8|1_3QC_w z7#FOcMLg9N*L<|;wbljoPlO4v*G8!XyR(9BvC=O^iCaEKfhVYMZAQaTFWW{`emm_J zWG;vJ+qZpY@WyS6s`J88SL4yetrN`so$=kd&!dPoaTD{4DiKN^n7nIka@qS!C$5NW z4XLMWOjbY@{#IF1Ov_xf;_`bx+CMoFJ0>)+-J3WpS~W@y4yLhX7$fZk$0hVEO3z=K zl!S?UYWK#hi)KdSrsctjg=x12NXgTwOxd+47-3{&YMi5xmrN@od?SXh z!e?yaj9Yh?#dvz~7%VS%!n~mQMtdbfo6$L^)fo*IW*9ASawd}cbhwDqN@9i#& z8+Ahz`Hd(aKl=>xMcS~%k+HC33z5R+B1;;WuC|(b{g#&*B8ql#Mw?LHZV>AD3>O{J zk#J5#*eBlgB>^R))(MB`x67QTw=1T9{tn)7-KJKqvuur*z9iTmIUcr({@Z>q9*Vk0 z$#6}3X&C);f2sjlyCKUpG!J#={2w-PTs7y|%_ZbBb`wm93$L8=hFu4k6T1xcF6{r9 z%xcUqOm|Sel`Ug_J0O%uu6Xu?y+(W##C~`ymRIxjk(kxzy=d5zr%PCyTr)njp_(lJ zkFc+dsxw)lh2ZWM+=9EiyE_DTLU0Ry0t9yp5Znpw2ZFo11a}Rt!Fh+w+?nLw_ts-A z_*J{Qs=B(q=E&athIKX_Ih}fPqgvhoRYp{{G0O7Z@bH1lyrECkA!!I1?duW^dz0g8 zQSE~Ct^?*~6q4iFDuO>Yx!2%b5h=9X$o+ZP!9t_l#a2b+FN*AvHN(h0ufTc)qt zqUFWIcH-axzeCNzngW;EWs-NfhqsJDAup06U+3JX6aW&tMws!JFJ^O#2+BtRz;t8; z%CZGDieGzJIk3?NB$YJXgGa1IzGKNf%};S)XqQCY2 z((3aXg;w%LakT*_D$Qgtl{MLT+BX6KHM)m9SF?FKqSzkYgnx@@M!A1RRPJ`=XgyEI zt~`$1XG^H#W9T7*^E7D>MhVU+0Nk#*YJr)XOeiqh@3{W!5YM^ykLy=*83lISL*XGu z8)p2TtUW#A47q5yJQlM;g2@Wkb;(cY9h~S#A#P@irQScC!jtQ_Pa(thN=s)PO{s}1 z611`d87q1Z(G3GAD`rl<&!fA1{T82M*dpROU3yG7fXyOs#Gtj7ATsfD1i;?T>6&g{ z_C0R#>XSW3jUd9@Ba7?x=%{F5{gSTr03Sz9iyRMyrFEjD?Uw99y4Tl$`-JbRNmYTL zy`?L*jAJ#i2bC;PP>IH;qLZMQOO7aJ zY|=s?xE}8OQ3p$*PGkP=%?^ELMQg3!#!c7CjmAjKZ5xSU-lzfmE|caJ;W<{A4iPq~ zVPZv!(p9WCH)KHhrhfVb(ek}= z-D+Vt)#kqCtH+33;)H|}*ZnpJLu-b5Y5kwEneXN_yjomk0k}lHk(%mSI>)&U4yDU$ zF@|IaR;8t9vmct*`biXMz>tdF6b6cPigIqP4=tP%JjBT^=x$v*Sc-D9Y6iMC#TwM;?=ZY zuV*|1@;~p#QB566qe&W72>a5r=Z1IBRvW?Awr$_ z(V^-r)haf&)b3Lx_GKMxOgcrg9W)7)#}hTJH2LiL9;DAYS=sF0hpiC_@ST+Mr_z+T z$`?s9^^H;xIEIz-=D)6l(Q9Y*y*23&MS3*HPAgKQqu0(;15lBM7hRPP_1Y z*D@}s_?Eyb011&OlO#FIJ~Pduz*MHSotUcgA??X;WE1~D;C;)CVvVd>`cnr%tcIp$ z&=-l|&{1+4le@8T6v=)p0|T+xArrL*H&3m`K#h%QcP9AM4RitDh+9&0SB z1kR0;hzQDZ8Pdu*_5oFFjaNir^=wjrw30R}K^i|=C|3sS3{-ERT~D|T(=Ss#WFOD? z?7V|f;T>*zrzayD^HkpTZpVl5g6QJu*hhz~i3n}PSTLli7-^>0&bPKK7b`>_*g2&f zl8BRl1(<+ikbvWt*oDPI9EA@kyECffbL|Ymh+C9CaTDgF%KvUd$$veinK;E_4OA?l z@g#5a+Fh`zy2Z^NH9(+c5BAhEDj4ftFTw6JpHP{^pCO1He??Z@lRlBTd& z*VyH)v;1zPyj&992kV~2kj2mxbrrRAAw4t zBqKRKg^!HOOK&CQtfqJPb!-Zc#Zt%s#zi$%R0jXM!@Oa=!dp!kj1U{`;9E|QnFAk= zJHRD;)7@jyN4KHxtSDbj8ioPMCvNv8Z#z%~zdVZ@V6g-4xTZZ?@*l%}Ko^U`TfaM1 zy~2(t$DWlpcPRQh_d8ObDCwSYbeA4*>YhJ|K*rgZ6;^%CASFj@dI%9lZY_Ywg`dU_1&|nFJ+51R2}HeXPu%c zE_eKHu(f_}Fbh#8CoZF691ob&f&J>-xIqX~q)f-lD<1FOsh?ZwPs+Fj8Fu~3W9!$> zkP+%*D%bZ`_dLC$#P8dpYce;F9^kH>a~{*ogxHRD&6=Jt?|q6N(=3Dv7sv3f*@ghV zqqUjy*KB>hqyBoV;rlgUKT;}Y$@k>^fAC1nVC4B1@9N!q_&?IuW?me6i~v`0<{Wga zqMdWn+xmU6=O1&?i!$Vnc3JNmmwd~Wl_ZIG)yCr2%<7m5i>}iI^|LZc4u8%R0~Fy4 zJ+T)zljbhyG?cPX?!noF)LaKy+ByNpZK?wJEOpSumA$(+pOK(jA-Wqrh(&t!FrJ3a zl&yJvdYx)WJ*9#rMySyHfIc-b2k9{Rii#kzF+#AUsL3>-!!O{~(!uB)Qsi+)L#|K0z~%6jti}(L=7577jt0BT|gvIMb zMIv)oNOpc>EBhQz6qfDu0XWm0faa4NjEKn zB32RPAM{~jD~Wci!5c^R`_)E;zX=UJaMeL@!cjTHM*SE#H4ABf2FKsNW?Ols=-qGb z^F^oF3&&Z~peeFviV;|~7wTWn8{3m$D$}{+G#FQVk-*HtL?c5nKryYXTF9+R;LB-5 zh3|wjjF=FjsKn;$50)9jwmRTgNQtP3KB6JYkJ~APHYb2mRB**ph2?a~Bn3HMo z^?$C+m#&081)HonV2y?J{+)U`9nY#Z`j*B!!%`RO z5Wp|aK*~{C3~QbhunB{28XPYaQ@PU6hH-p>y2Pe2YTLf|UhiAJBSbY_x3q!q8sFE% z^o^Af&3%0a86yKB-2hmvDMYxNqW924E%9Y_4~H(|K5m)_;`6ZMh{(g-I3Ij%*i7J$ z?-6jFRjo3#3$9s)ZpEAO>f^N!fG0Q?6!Pl!P1ye6Ifj|eMxns!Cm{QY)yf$zR;F5c z3}PTIV>lY%b!wlPdDIqDLnvk6?jb;!Ka1CX%EFxrF(T~Xxh}IdGQK);9dKHss=p&?| z5FZ%%ezsHYyX&Q~);VyR=*~oBxPo4E@1GHtPYmgPfUi9l1!gyB`kR)=9TV zP)oePd^lBF5$pr$`myk*R{YRIBD49QIo=*%+k*krT0|lmYbrKP2r}hZ1A{1BU3TK< z0@?>G532wJ0uSP-TPkdDFKtBr0ng4%M@5)9M0dXtKb(0{_sDd3fN{?$v@Qg|w6G)f z5Yas~9p%|5sjI0JYQ^+JJIoX6Ia52%A&K|EN^r$I)hW_FcB{G6 z8sD-1i3k5fzgN3bGtRc|QLV?EZ*P@9bx@eTwYJ%?b;ve(^|m6|55-EvRScBiA}yLcJtaeECHAn73c6=mal_MhBt%f2x=GMGei?t%pbRuTO9)B#2w)R3QVi{62UL*Rr58+|vHo160f;rjql(J<(Y*9om@2sVh)oQgond4gkUzU(HI+$eOmPoANvB zgZVf<>%X=nb!FI*i<-EpIgPZ8)xh1t&5mr_=RYcswA{3}SC@0$Y~*YTb+fFk9t-L6 zo*8W2x4{yJ0mmIliW`}-gR8=D(1j-r8zININ~XJ`cnHIe)AuUHI@?~?s>Pj2lQ;zA zlfeJLx*Ai?!N&<=Mb6)d`skwmerss)t42i?z#;PS7XCV|Mbcb6E5Rv?3~Nl$-z4Zfeu~HT*KRRs@q)U3+uO!xyZk+d4J*^qJ=1RsT=^ zZv8~QFaZ|Qxzo#t*B4%e+-k#^y9U0roWj_TS(ztGj+eG+z2%q~mgB7w=KTUFIvw?z81)B%V&^n312SeW=y;ISEanCmLT`=!)i>ZUmni&foI)K7R^>3MQK? zYlsAwGfvvz6g>hxtfN0Bicru6uav&Rv!jfVay5Qa;*X)tL2t&P-2G$SY!$kIHeTi&Z% z{=-fDUAH~+d$ypH-PPM$0F#ErCGwtB&yJh49n;gq7+@tYER@7VZn}BH%9g66j&L5l zQJlE=!ZLOo%{aRF5batU;AqDY)}dj?x;=Ol(%khEztf(Z%Y@Ta>wt@1wI?)#Iuss0 zHh$2jB-gbO{_eF(h}0_b<8s%oF>dyg!1)j4J;xyX@ylR zkgMgA-c8VsM{lQl>^|zvB3{f#QqS3oa@<-_n*y_5wGfVWHY3dG11eLFKE9t{c3^9Q zar|j8*LN&7b8YMnGc!9jpLcw}%nM9Y>w<;eJP&XhjjF;u}!snVuC6RVmE zs}%`SYo{V6Lb@mD8Sxx8!tIm^Ma+5-ZO`v(UYAuE{2h9ct<*|Tgb=#rLwSxpxpDMF zfQWIB!tw=1`&=7-)&LMh_j>m;r&sE#+0oYC)sM6!>w)3c*;)2)PFle@JOq~6xznHC-lc0|B| z%UunQ@3b849H&bb)T>qzPqVB$=^t|yED+vCmfE_Zuqk)l@&V4J^z;-F93|AzBb!6D zX9FgyScNV5p^8$T2127TX8L&4|=Z+7tHQDQeu=LRPP}y_Opv zBsbmEPX)`Fdmkpjc7v^xb=)J2U%I^QM98x_&!&9=c4;&w3P|Yhnn1=M8~-M*lR0D{ ziFBi(-D?n_HfN}E?}LGNrt9$fo^N!=wjucu0&a^0y&urzz~zOKVg4+hdg4=iAn30& z9(4cNXArSgi0}|$$K=_<@sMsd*r!Xf=49Uenpm^lS3G@#YR6cphSx1QeI%;#!<>o) zGf;FAEkqRgfo|BL-3!_GWDIqvkT4K@&^!RDD1>)S#4X_?Za)h(jBOiuQCJ}}E0h-t zHd}o5wLIV|Pd}RF&R*a&x9AIBfKHGxm?G%Io5#X^dQpwYrYkDckZ9B-(5CcAcihCl zG2!zlnF`Y=g$j|JaOC`{T&B9sKzzO<6bOI!ShGziWXw79{^_PtHy36at~4=Bobdp; z>1ui0(RAimsdo0-yc(6*v27LjPDW<-PkoMhgRB7GmX?I7dS5J(ozbxTnwqd4Qx&de zw3H${&^t5u*E3n#E2U7{v=gn4PR=;@QtyNGhvQ?O;$MAMwy*t!yL=A}ert=uLBg%B zBx_D$f4eyW4Jn0hloqx@;!UA~D1}Z+gTHj2RcQen|x}&%(&J#O%x$m3*Dkb88V%w$6QS9a}VhEzz1@ZQyla z%iHg+$!xXC)O(9|~)2FPWZpSks+X8Or}frI16_dM4D z)Xzu4zf&^%;9`v?j=?)Zikg4GRtmN%z49(itdi(J^KHQ@_o}_#v69iN+7MokQ*D!BFas+Gvp^mt3^KH>n8;3jUD{oN+byESq|vv}imT1fEOBs;PI-fWr0 ze+zXeJYr}3iLd2SzfbP}C`H}I@cu*HsanjWV*YW&h}#D*G=zL~GONfPlrYf0iSmmG zGIXes6^e`e-ayA?%xwNx$?(;=46i;tALD*JYZKim)5u>e7M zD7Yxrcvxxb85x-Q5y261j&IQ|Xo1yeo#_0qA?P7n`7whn)QW?~{1w71s^&G2;&Xb) zj+c$zUZg{|uMTsg%T4xd2JH_o@t?|2e&kBDRqb{tPR|uy+%o;lM$-(29Y_7>`-=I_ zH%DM_)v^AQLdhky$2IlEBw0lh92p>3>ORs3^iS)nQTvDeJ6lwNG;~@v6ZZuR`Ms}3 z$MJXlKhe@-v1KF`Q_mvO7ekE|Se|SMl$)ApVf!^moA}}|KeQ6hBK8JTP-o$QhZ0BbRxq8Z2cc~qM^HPY6c_~fIAwu$!~q7U=XO$@zZ z+ZmG+!+w|xdcc>P$U&V*iA>8wGo@7-DX!kOcX?B)-He-bs$)Y`sR>VC5>CzsMl&pw zYKjYM3TuifCT@0uQnLW~{6Wu5O6;vAUu=R}xjzv2bVX{6aBlXAZx$Ad1KfLniHa73 z4l3L;E{6yV80^j%SANg$HFP(Ow0b0I>wg+iEAH)KhN>Nj)O)4zNql?sU(Z~}LB{Os ztb@4QEV*h*6cwkKhqCNsM$1?9Yz=}$V=x(q?iY?Af8TBvpCzpWp?D4AxvnBZ4kb%n zE~)c&Pgc=J>bQS+cY`_b z_}&-HcWbP(;(@34c4&C3q7wIs_MpSiwB_cYlo$|Te%e;^>WNb~Y>f2@nJ>6)h;jR* zYUCl)2LCzvXzkeq8B-t93~7{KcoYO-r2{4V|3KbVDXTB$V5K zr`LGT8S;)#I1f?!34r7oU>xxP2i-^HCt`(601d+vfp|VZgbsHtGtAK61lxOd3>lk1 z;<@&W)e>eVe<6;>Pd!V8D)AyimhaeG4C6DfKwAYCl3CYCMM^rH^7bYVU!Di6q%{gCUm=^hY{?qS3pncTDddRHd3 z1KpGOq;B2dm68qnJxrQ0aa;s)N}@<&Y5t)zzA6Oj>~^eg!q&sS>U72S)xj~{((cWj zmMZoIaU8eg5M*nMR7u@6>(CX*bTSn;ZQZ!^8ZAt7y8}kYl;qL#G0fw{mqMMX22zi{ z`Klfveo(m)sw=RQ1YJ)OlLBvI{Ch}%pCmsbOPo=|1Vk_10Q2%599yIT^P+TM zprj!+*BwAapx74YHN-kEIg%ac$5Pdc6QeA z$a>S70BL=lK-zOpZA7l3_t83TC{n3(I*QHNA;->aFAs;;2s5F?0fI_FpyBY~$`Lug zmP7?W<3l2s|3g^Q&xDMY&q&_S%#@b)Y^vQ>K3GK(Tb{#$tiVhxHa1|3A3>4L2~F*M z4W691D!-j`c#g?|Fi_`p+k!6Z63-MjuK&J%Q97M|s(x8zXF zG<6?{;W@?pD%JG7sKh5Pg36)K-Ir4Y(5U1qBSA01FTxyuWmcB(z_SAWR8}#_S$1Rl z95AH~4%aIy&7mk-?hv-nM!_7_Ngk^c62J~NKkPt1K;(Mw%#9xbK)wwouUZS>*&WH+&u)vI|iIRnR!Bq*?+jp5CVBaApj$nusUju%l-6tt(j100Kf(f*P!g@Res zZ08Q-Scp(puhq9s`mlrp_fFn|$4_-a3%Djf;!T(q$Y~o550@#4GOY^Uq?8nXCI7Ca zwx|+yvnHv5Hzko%s?!Q{R(h~Y z4X^~gk_mY@K>1W}xhJbO zsv z$`gEK;Sy$9DJ+RPHmO{GwIAkPF55zP3EN%wn-y>in~ey;#VnN8CFFrB8XsAzFc*p~ zjuciMHv`Cb5>q5^GnF=pen?0IqyvnvI~}&xoZth7Xb^QqG1VVB8X%IKsl;*lNM;-G zHzJqEr>p`DdQD?24tso-gBK<+8i4n)F&W~Q-tarG0rksgtev6Q5(G{XBE;o&N6*A) z%5V+#FauBa#(>=9alHK$6Q=Gm2g^fj0HvPd>e8E)1@e{kO2g)LoabQx`&9hMMso{l zP3JNU9bwM+N5;go{Q<>d%zWNE2U&4h@g&~zOEa9AP<2)A1LW}~GXC?6S^-Pzh38K_ECGYcc9 zB%@@dq@^rS@D`+Gq#R`ev?{kE$@YJkjS9+_qVKar z{Q#tpPz;fWEt~w2SZf&QeVZV|>(e33ZLaM4eRG#rQJiAX1&^TbU(LpE_|8CK5u)-Y zC{v4jgKJz|84U`CXr9^NEO6&p_XPA9eD+C{Anr1VdBhC7GEwS(aw5sumv+mP@8ZX( z)()5NJWPE@G=d0E$vbsdQJZF2ExHx;0IWU$|qN*YFTCj(N0f1`c14YtO_!bM?%WUMJo$} zPxPCHMeM$>h9bwZx^G_3;;m+h-yu^@+B=Y+4Gpm zRJzCZqf4;LVYSTR#twcC^*vPg>!yOPtdZbtQb#lyF=1|!Kr{x1XCI2hcDRM2*<|7l zWMJjahnpaJ=|ouChlU>7#(st6Ax@LhA?tph>(6$KYEOKR;t5U>h071GpyrE97WHb1 zDrHXg?C_Q24;Fw)#waZQK4roB$&yjBcH*)-J;(LX1Pt}CUVcADUAT`oSmKlZRzUc7 zm66M9ykfCZ{nrPvy>58#3TzF+yNilaT$re$p7=Pg+f(WpahBITM*`9dh?n!H^t#JB zv*?NKe{M{2sXs_+?q)G*B@yii6ZlAX92?gk6+}-6Pr8he^jpmY`dy$ttt z4>ZB-D&TlI@RH$glizqBfiK}jIILNuf7%sfI}cWpI=@qVYL24 z(L+@mu&9+5$$u#x>ft{D1G!J56kCX%lw+?j?_=Ir5TmPaEXsX@@;;er{ga{E7NUe5iNTns+uDa)ffB;f|S%e$xu{yTE+Q;$a zdm}PiCd2%sS~|MXl%U;{uGI3z74NwBBNU$zixw9@M1fsFMlz$o3i=*P zScL7}k{Yu*xoC=v<1uNMXPk{kKy$b6{Ip_`UH(uX)CUSi2M+`upNylGP&E~4)=v@k z!2oSX800!mRF+|{4dsbXjCf5E74WQX1FlWon%M*x zn-u1vB7n75{w7@5GJXU>-%3KUiTM>^`8ZoZLMa{^)((&GbU2VN@ewyv*hXbGAIhLX z-A;76ARyB+QGdhV@3h`T6SIvzAS|g?z#bj=xjsmY%)6u>T0{Is)HX77=c(}A!~+1w zJ@cka+zm2>Uv&v7bc1M*@;Fd%!x#4r(MPxqk$!ZP4!tvGdbH?|TKw?udl(zUYdeoR zQ9gtSoCdigu1FwknO32+_HsV=)VGBcrl5|^P1KF%a_hs;u!UqpKUyBH!HQSUt!5># z1UHyWD~%(RX_>cAYU$a0@(!xR%rplai+j*`&<-ewP1aPL8!i~&A63Z2Bvnit%eOV> z;H4nv*!wSid!xl8G_|nBA?}z8F*@dx?A$U)Lkghc(c+U0d>2E+kIaOSP0E0kAz|%> zywQEZtk(>=**!!JXApS1!J*AyAVt!Gh8ob-N1B;<4&6fL&AT_;S(JZYFj5K7H{1_L z(%X;csxMmWE8P7yHMxIB2ZcYF>hOMp>3T?aiI8z>V6pZ@YsCQT^0Bz~=w4&rhc{D+ zq3}W9Ns7%L&Mlt$M03wTuvGk~JAh3H!}t+wcDdsKEiRh9Yo;%GlgE$esiQUmW3e!Q z^14?24tI+6$?EOlW_#^i2V^54o{?~H)&du;p>(=8XHg(6XWFfSROL9%R-1U_0kV+_ z&-Rhy=6OM0jZ12l=I5K#_pF3`%F-wPa%_YR1!gei`v82%doKdg&m_+Y`*|}IeBbR_ z*WZM=sO4ysAzyIPwebqNjNS zO2Vv;bj__Qm?BiT;p`*dM65XVS|S6 zxZ=F7@{h}4grnRL%W-H;8aF81b5ugBN->9&hZuVER&?})RhD+SvTn#tlD^{g z98G@d*}AA4Fmn|u_-lBQWlpahO;IuTSRy8v#aK*|Vj;S=`=&p01K`7hboyymB+c)L zi{y#LKi?y7g??BUKO;&bdxA^c@UcQC77pkBba+i(t0yEmbY*xNcLTYCmf2aj!FCgU zlje8hud^XntM@!o5N1Coe@2+f&}vy2N<7E2VOg(2V4)RCehBTDV4Ku_oDi|h#N(wV zdtJ^xPr7erH~@Pc0I21TS6QMl^~j0XY%wPzCX2t3o{x`?r|}Lt?71)_ZdJYB#Htpm zh~0mn=Ls=<19MTb#r%}!a?#e0=&KyHMm#w2@SZ2?nXC^VnWsZKCPlJ1%?2?}En>o{ zIF`H+AId36g}NqkhPAIKmiM>}SyeSUXD^4GdlbnW)>-k5BY;FoXhK=A>^qY~ul?4c zI97$wlZ@aa?B%8-oTI>oMRiw9vLNXSng{0Op#fM_4#SV?ds1-Ik5AIQ&kmFdJDVqA zS-jkfc6b#jTq*jQF?6~HD>_r*CzDf4MzzMsg%BB8#2ovuUod{ZCg>O?Amyrdu?(-QAv-(_e}+>WQbraPt`6rU zpn)$rTB2#Y8X_J~zNc~bZ^gNtH2#(v7NJGdm}26KZhBwvS+jPKTzpnaoF-pAWhk9i z_VJvHP*f!taWiMdbhpXtz9-tHh$ClYi$NLFdi{$@;3B~OON&~!9owssB{UcZF!pT8 zJzX74{=AB}a6U7#t|_9gGP7wy8w)h@$Z*T^;Rl5Rfi9RzP@2cwR; z?^L|1a2<{!k9vCiOeC8;xofYCm+u^cH?C)cUEk{ihIyU_VrKPItlTm9 zgwT1f(FCqzk$a9zi6=}CHb}TD*MtUQlb?wf)Y%Ght6L#8OH7F&s(b=@5Y;XnGd=H> z*`bJ#me_XqYzOZ?wG`RgwSTZ_^KpilQCjI!B!G*I{D7YZp7_Aoov0SrDn7! zX#OP8Kct=3oJKjwP#WFrf0d*=59@)IN?8Fg4?O3sm*%X&st!!2x3_S0!snA)>Es+Z zI+XRGE8ldx&T0-2VEj;-w7q;t=s|q1x-#Y)i*hD?%X~sfylvMQuJpOd!_Q`OXxkux z`TmCY7IKy1=f%O+ly{SN&??pQFmWslW?N|>k(3dpoS;Abg;xKEcBq@@xwU!RDLfZ| z!lt}if?|)DGtyvB_t+&CYFHiUK})I%P==-C)S4vY-N5NTe*X+1l6hH+5=*tW2&klt zbZ9Ic8Sba@zI_){z$t1kK~gMDn3U30(S$}Xdns01qroY2LXIkzeltEJX+qN)IgI&3 z7j@v(*>#~A{o8n>DABiCu;F-S9pl0P8FYrgOGxL-FQYIzc^8oGcb~H)Y9!uM_0Kb@ zYg=ULt7TWpXN72IT@uav#!zNT>3N}f4kj5@dgE1Zl`u=SLSJkhRI0avQw;#KZD|P#(#ciZ70%l$OMk$H=1|YU#;()b2|5$1;5(e z$v|#edg8^{1-rC;Yigm0P`tN=mmMtt)k1D@jEoz~FVqGVWYyJ| zwrqD(RBL-v#7^_`iSy!b(IwXXEwF$*ARM|1EOQ!W7iDvROuUE4^RHQu!@2Ms=*4;42vGd&hINyv#A9 zPY(o6%E50L+detnVx=**Ndg2Pke0~W0-Cmdo@PBT@xK9lwA_k5{qg|kaXNPTmH(Ac zzu`KLdOn$aZ;nETXKEZ0bGl6)UPo^#Bj-$n8Jj}*c8ZEkIo=3%3X4r3-jHUhV`*=M zWnl{3p$%K8zQwhXR`NjU{NaEdhuS=H4T@Ly;n0)WwJCt}zUKP~_#ptondE*>-qbK9 zV7`KSrhz9-cLz4ZBx);QSj9Vn=Zg|o->J@yc56F9UsCesEv@sb3Qnr?x*ZDNf|P+V z4yudD9ro6lG&_Jd4ev4aQr=C4$oD;EglJ8c58Bwo#6rBLYfQ?x489`u^n3Ab^-*7i z*uRs8h?FFk)`Y#YFzy0qbVO%iPV!)W7RaO5VqL<}k!ODbeJ9{?=QglmA1Avk!x5~! zU)i?W!4(l*~vhhxro-=2f^{Ah04eBVzZU@v( zsKeJr*m9O|qtr%RyFT8Z$wO-*YOC*Lpf9wN_hWXe1*J%q!8e#M#RjOUwW)3zgR=zU z{Fs-XV6LStF*^AHc!BWCvrQZgEmR8zhh{(RF0MZ!%M+9apL@8hT#g4IVX>H$LmPW4 zbI}HI*FbtE=fl>`JR@8u7>g-YuAAMrQ=b29Q^uXYZ5S+tOlk}=vG%tlIV#YlJ>L^z zU0!G#%)2iZQJygwB{WG{{$8k^iTaJxG|9sfK^?kruGsA!VBy;vzY}F4O%z-8z1dPC zXtg;hB7J!W!fM}WLaa@55oc@bM2TKEE>51{WZ5%)>KVbuFV zE;%Qnqfk*P0MQ%GA8Z-3yC8-yQ=2j$(-$+;{4X-l{j*-fF~ZKRrMPgK)TekIzKf_o zn|9IlbvE23XRSftv=wF7wh^?r$SGk-59l^}Ywt;xDExUhBQkyaHR*5}2x8xPU zgcKrzzF7Kr1%m!6JS-)(XiUiM{f2Y1{_2_jZ01Q#aw-ua-N<3F*bmY@3d_(wiE<;K zU`RyxT4Av}Z0GDt^0zBHkL?A9tL_&spX=O?>5(8s2#6E!<4HQC6j`9VVM68>rKU!c7w7^my28utsAx2P@%-t-r#5 z>xLn~VRKyKRrA3<^ULo@@cXuY!e5SMt(@($g2hUv-y4+uGvB|&PSurvZ9=l8refcQ zr|A-+i9c~Oc^e^}jnK;+mdyI+<}EIhitPjB+Y0jF*Fq#)t_(Sprn!K1jv85JVmPZ-rk<^-D+omo4p>xeYW(g*DWw`cx4_hP(C$ z0rnsD`K6E!1fh&xL>p}|{r5>hG_(J!t@-cv8M40Q&akhClC+%f366k9kBxX{XLR@*oA?N$QInt zAgAdJGB&uNvLAp%Gk>!LIsHc#G*giS)JMQdObd~hEX%|`3$cK*q$T|W@!v$s%w!hy zFXq&ycrged^W6U`3V>^z^cU}SCJEW4Qe2hg^n}`L}PV+ry2jx%vGPV*-Hx_R|T@?G@w*OWQ zEXmI^4D+`tyyj&9Cr(NebU+4*Wm(j}EO~%94y*;a$oZe7{;VKSIL9L71)xD34rK`f zME+0Nex2@rlFCHo108W7ah}EOi^%nM-d=hy2)6nAI!WNrw!R`8R#`Uq~SHR|_n3kh$|u&+j*&V~Yh+5cs#+4ZoCY|5`(y z|3zR{C;B})u&Bx6>r0m+35i*hfKC|pA6@!CJo7RA7Ar5~=@nopvICUG-5<&SMkWp{ z8?>Op23Za!mzBeS7|qey|BU9p_|PK+UZj9Y)-7DnLA9NrcV03B@$|o;`2+NOhh<)Z z5TLfXHbVjays*%R2GzFaL62GwG%6f_pU_FCdaHle)=cna*cR`6L1oVZ8>{nzd94fhg1(8}CW9|g3v%Vb&2BA_Q+ zANg8l^kUe!0qUk$i;9jET z`b#U^i&JN;f?6R5>JR(B6U}@lc{os&=AC!_WkEZ-2NGcUXPJLh5dIE|dD?Ob7qkYH`&4cRNIf8w?>B1@ z*Z#lHFu5a3a!OEXVx1%Hp(sH&N|1`fKYoA7xWAl|%t|?sKsvAl-AeOiT$NNG!E%7= zi2293`n&FbnF?ZAZ9#zIJ*Lo}XafyG_1|xJnP+mWAiecUhtH^gdp5+gs(!f&kU7fT zC4mlV`5)KI|J*PBHdZ9DdiM(Cd$5fVUK$j}AIcd?V=05=e;H=RNWDx!foBh7ASSt$ z87v6%2>I2{1k~$czu%>PNzwd5HqalIIbXJcqnUiZT**t@m?EABW ze!F;_l377zzL$Pk_zA-w8OY6Kb^0QEU@Vm#cnm6p@$ZHBPp|%}S>`MVg_RWDs{;-E z$YwS8lH$xGhE6+ZJ@VhzOX?pR`#VKoFsD_@OPv>F$eCP0?(2Sc|6479`n*;~FNS6? z+i`**L#f}#;cteS1hSymfrx@uUtezMU!pVZQb6WcznlN+ilE}0~)mNfA;o2 zIbZ^xRjtThc6iZb?C246=D&gB`OWyx9fkxNYFOpHl#^9l$HEU}+V*?szm*dxtYfwN z;614ySJTU%B6lkVrMet%T`sI7cOB`AM&p3?qte}By23ANf^(J7T z>^}sVXa8vqs`twU>~G(2##ZPrUDZ_~>hJ?(T=l#0Z$T%Gn_0mnsjc+j0NqWk@Lw)9 z>Mb>`cp%6N?4Ppy1_6Q~l`tT~ZgxhA1 zVRv^27AkhVGv~tYJ@`D|-|NTaubDGFXU?3s0(7!6JOiQc{7m+U2WSbyH&#}HfCz2O zNBZMb6|4?FW(;~9b)iG2-8i|46DAXP6pP5lh4)6?%pFls=mFeVi5*wxRn~ml{x}c8 zdRRg%CWe2;S}82>>F-kDtKw2l`&}1)6(HGjeSQtKAY&$n|3qP~wSLk52Owc~)QPSO zZC*M6zlv3DK@cpzlER&FPCuJo^NABMCTBgF%U$~2nsd)vE5Yhd%8v(3Gj8ebm6oJQ zO88xjfkw5~S=<9mH>MiE#9Cg2t!}5I56(qY7~||1Vsh ze-Ib*BnNrYm{_ETyP!rDb6D=R-j$Txnjap5Q&`)bW6!sQZ14oCLlGosx_mV&{bq9*76VTc7u+!lTW^)z?h$eZhd?V;kB z(ZeqmQ5_>JpFbFvKRGivL$WF-d@pJz?O0^}ZGdL3RcEVB*UEz404p?IFqRm}r2P2+_e!R`#ZVOe zo_?w!Cmo;G}auPD=V)$ju&-L3Lu)he%Z`t$@MiVM| zor3xe!`eap6CyC}O86J-5?-r%=i(z z+8oOHzX>PY{r85{}l#)$o}wjJ8m$Dq)QRAP!`^smu)v zntqAD*Bb)N9oE`fmD=+!M_`xc?fzs#PQ62JLYhis>oB<6e|}@O76e0{wfv$t3wauq zOdO=L0`#dbc{81t0o(wwY&3_J`;1`uBVuDp{x}E-_(_zML>S{u&`|ac#Q$X5?}DQwVW;X0I@=Z z&JHz)ep=SG zx~9SkXjR8x1{~)fZ%G1L%erFdBv~)hD1B@rwYFZbe8)rQWiRNNrBLk-f1!>I$aSDx^FC z(rIpdA6akQcvx^T+@cmN@;ft&{BkE3rs?0qWXG`(o-~s?wi+xlT->S>t$evvMKUS( zdz5TC055vj{A4(&O2OEK@=n3>N6WSVeWlIU#Zv)frWlNR39hQ>i2S;6%q+_%1xdKV zF|uqJ{QRT4eX;=Kf*4D1TO6D>lfmMiJNHy!xVXkR6YkVl*-4o4nkb7>PXI;>*7D+c zRhaT9gJ(l!uYlCt+FpJ415$4>k}!)?QpG^ZQ81fhxXcmjlG#^1-`WHCZn5@t+;NdI z*#!U#Ogbp3HMVeI{}0(TW)tM0=)TRJevJ=WG1AxT4slWMV+3y z(H1biim`y2Rxth+kh9vxEukIdF90ZKf48gL76UC{jL}yFy z4%-teVr0uuGXL5hYnK4Rs0t>d1qd~+I!@LGA*XlT8EXZQZCBxu{ zc3r+63ZQbaZgfpJ!HVZ6f$>5n$eQEKu{3_<6y53o|q6d<}pP0@_YW+DLGzh` zwNB2zQe%f`Rj|r}E1oRd2pC2$4m3j_WY#63`Ri1oECYmlHM)3&48YRF1JlGoD@auG z#)U~T)LdVu_lXYx?1ESiI`1UsrpQL4Emr4+9c~9OGsPM%E0_cg$fwF~0N@CdHZO8u zz;`Tdo#T>8(_}Sp5}Yt3yU!nhnjt1lxum;D)PKS??vB~%g z`-Pnl>N@$eWUZ0iHJ2{cLf1)U#@?&rg6|fCg+a$uSsg442FE^6wgqb~5|3QL#)MCo zx#C`GO!m0lSp2Bi;zySWxXg5!Den}EQ@#Z!dyRE>+v+Fn?|||~h^vJ1X@|->8Q>i- zz6`lP7NgC`h-I=qSZf7sto;imZp(h?7+h7SC&V@9zrkM#`LkLUiA{jFxdEebOJF=x z<7&TktEFj7vNyJ2zE@|E~RTtx~>yp%*~eV#)e_nJ$()?0E@`P1=YV| zq~yxXPxXD?=(i^FwY<-tU#o!<~yZ2WB?R07Aq6T6WS3 zScgoG7Rq*DnO~`s&GxyVa6QISqN0S`UL@NGL${CV-VO5~PJz1ohlMz8VET`PB^3WF z0hBB(W*^v0G9gD!$VOo0oNMzbGzd(qW=xC77;ZcwyK?R;rb@`T)3Q`_293+8sy~{0_*m;hCDHTEY8c8TAmI5^N8`m5% z2e2^3>h!sn>lEl?txL(o^)h67AW}MUNnmvlu@~q>2QC&<%D0(_(@#6^nG$Zt71?6I zG71eniTU#mLj*3-A<-+4hP$ zcMpmptoa9kY|Jff4SRsiZpl8i0-5^ENRgJdg3XqhVoj9$5{GCc)HJ!15a>V-k926R{hsR4(R7>3T>d|A>Q6rv*AZZ=Q&UFJ4!Vc#Mkcrrvt)G7wlQ zcGU_fq^fJgd`t(%-xjut2Ms%k(mh8MZD?`4)e$hd~c8=?S@~X^q16 zX%L~pbUxwL8wKDm&utws z8ObL-^(-6>asILheSTXqZp$_D zi?Bpp>!*0kt^~Ti3CUE8!s?o@HWj_Im+v|WS=c|~H%hxmb1U~JNcw~c1g%#1BtWT3 zU|+frp<503n3D_8ef}Mq+#D3~6c?pStm9^%1igfaS7U$c=EtxILo*n5Wu-iWR{*+G z+$yT*RP93}ZlVXa99?@rKIq+8EU2))raJsb7SR=x{VR{1nJ(Z^N5t)pvS1ZFJ1GTI z$TEJs1u0cV#NiI%Mdx{*u`s73h$mN}$Ag3Oh+@FMg}>(XpaJ)Ge1r+P5Fc?EGk>Yo z41<%v8lGojZ9tPFW$*m>h%4wmfdlhWcLMAeaUg+;=nQ`%R6oLuQm8TkOVE;LZ3aqS4tKNl-LyeM-bt5M90cm~;muspsPK zDT)s=J>oaEw>W**xsSm9V?j+iA6UODU7;5*F1$c_kIA|ai*h@V)kZTsVT{yRunBu*W= zGMHZlDE4ITiijh0v(&-w%}(HdG6bWR{|e9sBz;xHWi-=)4m~I3f)-C#Fq3X}q}=ms zBQ7BKnw0bgxxjrrsd#Yhydq?pty?0zu_C*%Y@oQ$ zcH4U$giIILMnYo<2Djl8({TP&9g6sXgj7i$nh%cDHRv$WBf*Y$3m;^@GSg1m-;CjS)0DE(;A4F+>5A$Gj;E`VM8Co&^^Ud zjINV|obYGT(U|V>BY@iMiTWh$e#9jcz*U4a_;>{zCLa!6Y28$e%QxX=#5DAE zt3e&!g@dSj#AXuqGbtdy0>C9)#L`d;GW1PEA?DZf1*dHB)Il9_5~Be~2X_%-PhAqx z0L6AcJ1Dmvh~1d+VJy1n!Wl&&*GeOf*a7S*y)TEh0NYQ!{*84(si)>4L&FvaO1Sh{ z>Bi){nS4CjeQfd6qe;NkP$mwA(u-n}T!}mc^WJiahi6BCT*7(?aHNYWKTA1>u%1=N zz8DX%GG1;7yTvXM{1r z0mNq?sWbp?L|mK7ol&#Z4lQZ=SlJI+Io7*ks^jf zI-M0L|BAlsa8?;~2bfM|Qk8buLCu>VBA4LWIP7cm=l8&LII}ipCT0E{hs`y4RFZ_N zA0~edoCN={Ru)6x=ZOPf#|htR307M{;qn8>PZLR}Nn3%RIEJ5cMe-p_aTS^gC{oUJ z0PH5mD&&JOm8VqN({mv3Hk?W2y6W*lEGWlVBTq*QoauSqNdXqP$XbimA(Vt0H_<6d zvhhQ#+!DYq`g_QK!{ioPN2JTLOijU^NXr@WI#{LWCQUOl0YRUMg%x*5Ib>wxvYB$U zYQe;Q#`k~^H^!={d~I8UyOJu;1^Mb*?oXQzT4dIsx~4HXlqRo+4ETJ@y!{2>3}9HD zBZ`;6`Dt=P&S9?nD?sgHs7ru-zv|E4}!+(v-jF7^#U2U<$TByWv;5>9(WHa~A9jNe26-4xO1btvqrzYY*dkusXeTA%h`|FuGbAB7 z^8HApx7uSp4@B6N1f7T}5rnqms(yka+zC766EWnPr?sCp9=yX&?AHH6M4#`+W6ti7 zC$Eo-k!OZs)(+s^=a`%=>iUpX2jz`0bB%EAH5!k}w`5~MY(frT&AFvd6cVnaP-Q~u z7s%&W01;XIP1iKY1=s3{Ehw%_s8}Vd@J7tfmd(M19wZdNcIyTCMvU2oIibtfL(Ha# z%LifAsYP_)pnE7K_SfW3F>*Iv(BtF|VV8L$)?tC#rkc)I>d^z?H@PoMYFI{f}G_#SV z^E3qIeb-@fZxjv(w5;CBJEK}Ndo>%@5!4#bIB40*2$9I#Px6;o6z^*_cgs7Vv8H@?{ zQ{6f)V?j@o#6CxtQ?z%i#V7Zak<$?&woA3RQGj6a7XqE0D093zaz4VY^S<0N9AN)G zqeTlK?clt8Gfwx3(UAstz3S1Vv+_^SoT~0oQGQyCQWA$|L=MN;ztiJ@UprvMo{4>( z16gtaX-r1UjvQbGZgJ~mU||zzX;{}24K3`L|L8?R%&6g~4NPi1dN2*i@Ncu+D;beLd}K?^w)?+) zcxMSR;Nf2ugElC%7>=Ch%!!61V@;$9qV1Wn)#4AZGw?4o9ib6h-77hB{?AuPxIgP6 z&w;|G54vu923RX)*%LYA1;DYVq_~VuYfMPv4Uq%QU@QDW^9}d$!sF$NbDJ*=CH$lJ z0x@na`S#h^IYx$Y%h-fG&yBo=O`K1Yy8B|@vVjWWe+g^E?}HJnv?CaEZhIr20~@~^ z4ru)p$TbAfnE^y>&_ig*2G{2>To@gg7nzS6B|n-C4p|97=qg@QP}Asq7Z5zKt{CPY zRG<%i;UXA=QjF}tl5hM!y%c^c2_HFEI} z!c)pC#KU9lu9HHKySNB$kUrQ2-pD@%a&DaKMA(6+)9volkrNz&W-rB@w&NWkXEAph z%6+m7c|;DT=-<0SBxKgp$X<9+!z`fMvL28#+A?Q2L`_?YYDFwcBbVue)`RaIzcLy8 zK7(1_GW=5G3ut_!T=cump0J#@{1$10rBSCkRwt|h`&mWz5q5)6Oe=mB;7K@DWyLoz z!R%SlBVK}~nN1#Q0)YzWZ>TUM+p8$XVmMq>D;BjYZC z*0|ax5{0!TlZ_NAOy8;>J%3@0ZD0y=QQ5?mbWj-b{dS^~&y9vH{oZDZyV#GrGxpkp z+n}^JVxuE?i1XKL3DcWLU4}Jb8A7qhFBioJTq#7^ zZLq!qjHwtODqo8VQt;_O$V?#7y|zMwb7Pml;6G6y`C@Sj*Of68u@-l0^9T!KTUW6X zN!9jBZ?ytQ)%jnff_CEu$5UBEu+^hEwh`DR)oLqdV2gtkft`5-c(_lxM;|?3D(zbebydxds4|Wq<+XuYz zTRH5!*|@Mp?YetwWT8GsWlW>kMw~@^By9GkIngyL}`k z_)?42eGhF>ZorkR(rhfg1Hx>x>)i#~R*6j|ZN!^}%BCtupODl%nh zlk7pJ2OjQo|GB}4wPAm6iD_L~V#(S*2l`&~ zl5{e#y*ur~^4@Q~n=Jq2WAc6TTfgp~j@tQ*p1phL%bnlPY)#(hv?k8DcI2PcX|n#Y zy>3YE_GuYgyg0vR*r(@P_v~|jx@1~sN9l{-H4YxiNbNc-tn11n z>Y{yTYgYbVE>4o;SDS%({n%%|liu?>Xyud1lJinEG9w zO6N>#>{Fx7m|>Id^qKMfOhRz|WqzOQr5)MO{DO3L|2)rK4Rs_9bWStr9L-Str^nk$w2+p5B=`=u8Enq{Zp;rg4fZWq>$Ox={4 zWZY%l&=dF8j$D2syJ3r!)!$xFd&cc>SaWCBjVe)#C-41r{Ho`K!9#DXA8CHe_sxrH zpIuL_xi~u4%5=s2?Azz;)Tx~-kA0Iie|Rl!RM(!BzO`9lW-y0u_-CDhuk2p4+P#%w zACKGBDI6+mJ8SC$_1zO!3^O)NO>|D4R;5~#2S1IC$-YH(FP${7z4;~R+~mO4(XG}! z3R&HK#-yx=Uac%9Hh7#fsQ60FfyX9QZ@qr#Elp^x&@st-T`V?zZMQLY^R($k@1G?7GFrqgkdj+4)a! zNor!}k_L6-`((^+&R@&uI6(c~*8Kd5&9^p&P3Re{ciy{o+ms7thkvHld1m(JTZgkd z*X$hJt-8J2!mc~hvS$|WNjuW$>$2HHW^5eeDtGK@9$XZ)&$~&?z{j7DtSlXQalz_( z0i){KHomhjbhK*7J4N>D=D7~PX3P(5u{rQ!`}ZD(i&}L^+&OCEEZ@$VGwvTH{~Q?X zaPdfX#MeDb21gva(Mvr_o-%l+(-XUSH@sI&bzU*^0^BuNo_mW9#Vz-=V+GVuYwWa6Y7nnS%eD9Li zG$M2J=+`0Baki%Ywt??66O&6Ewq`%h^?i2#*jV!p1s1Y3{i+3qxm-!EPpX(FcKxSMo`ucA(*trRXcAPdew}hWA$i?s_?>MLU#0Gy6TfXq zey}0N!@BvkrH>YF-zy25l5@DX<;zE{Uq1Boj2gZ<+V;VWA+7U=M5kZx*uF>;Yqb8P zV??p%sLsFY{G;4Iv)F9O(02!umVF!$Ysz0OdEa{O`RITA$64L)aK!oS;N$=FSy0r} zv-#YIi5GM9=5I>0ww~eDrO>-imc7|KY3KyCW8%Gb&n};It$Zn9+Wo6lYd-39ba2hp zU537%693e7!_4ek$)jqgkL~W$E4xwrhg%(t9=>YrdGTnjMRuvX`n;Q;<%h_BYNpK! zulu3-(fyJIxr-7XFTB;SwASK`IoIdZnPNM%XR7m(se^|0t*dV zx`yrSQ@v}rWOtsCSd`~{=u)q3`kw|X78z|H`Lj+;WY&lYmgM05Rwl1LzSx#tb>!O0 zmfxg%8V-FV-}-)#;rAMr_k;RPi=UM!)flu?jhrCAd1XhBY*qZ|8oX^`KX<3YN{c-; zJ~e9oyW0Jeau@T%_ltLq>+vw@beBeTOIlBz89INK^zqX-OAmb-vmxbuV)nC@(d@HyY(xs-j9S2K%(B6Wl)fqTT}4Z=Tn#G4eUP0f1Qi!>E6rA){9SOZ&+hh z+U9~y)WX(VhU7JRJ7<5^z`OSr#pRYZ3QzoGzGmDOmGNsIyMgcORKICA&WztbbB6rm z*Un?*HPYujsMpBp>--{aUqD3XpQjr?ln#M9Ct z{;hwF-@fLjm0#|@L-BsE`+7EuwRo8s?AUHf$0K7`v>B2SRcXij#IM88e>gZ*Z~V|r z2lpB{ohS|ReY5|P0U2Od_s{b9Ugwp;b1ygiWZh@T(>rbFylWeh-a3R^lsxF*JN@oe zhE1;gRDXQkbj|Z=JxtE+pQSO=#9KH;I^7OwoAu~ktre$-uQ*+O#m)vk)i-{zKC>$- ze@aW|6`pNc1@?;iUT=l7!Pup9J|uRoVSnDQRbX;dOYh>w+4X01N{f|wt$trC&E4a; zozdgQy)240?RD^c=xp@ZOmf`U4L*nCILkYv%fy!HU(PS&8%){DORZy;t$EdKW9JTX z?}7SJ^UUCX?)chA9a|iAc~~Sl%2l74+PmiBL4U^ViZtpP@a+9g&BWmi&VK5Y-0moR z2_>n@Cu5^$leV7zk=oHCu9HVx$9wIPyQc>(NIkK~e8(}zNuBJ2U+PcX6kgfzuE~kp zvqwMl8E2-~#RYeZ&PV&sN$FpI)UUo-p0)h!cpuklEAzfYt&2J3 zbE@sJ(d~x0gw60N^!`i+Uw;@7(Sa;qKU=C!o?;_~&`g6e&& z1}dj(>{@kEwh2y{dP+mffm737ov*Rtb7tIo zzs1$tb+I{r>5}H?mv%+Bdiy$>?sqhO?D;jTwAG+mdzv0SaOUx|8On&oAI&r{*eG8AQ|2A%S{Z<`pm6PwO&o*oA_&L?9*P?zl4SobYJ=A-1`X4iVjObHs`!FM@ zCwGcZxl}Ci-P$P@;$pAvx5`TrpjJI2u2m~k#J2p;J-ACn>td^pih)?SGw~Xr>}I*J z9&EZ74@LHRtdWo}fr@k33aPPv--$C&(z`GRG$_~yi$4Ax&@$nQA0M$GPr?+%xTG8Xe$b$oK=7!TAYD-7 zolAj7Br4&D!w?q28FSigXeL*vu|3v4H?IjUkNz;-23#UxdrLQhIe(6hK+g;qYZNb$ zyjNGp*ylh#gCUQ|*e(zwcifN5)?)YL@MuMxA`&Ur>3cR@4wSQ*#vCrpA6zdiNB%KM zu>j2BQ2E;YaiE++WuR{XUC^rpjTg(0`q6_(^Ht+vVD@&i_sXSi9NN_SJSS;-@CZQ^lIaS)HURGnj! zg)!ei+=$k>G?(L`G~^EfiY0e2V1@4qPLg%V0eevO%Vo;Vg=5$?1 zs;1&|il{2k+xa#taBvTR%VIJUxT>xfCA`N(*?UunUa;|!0(MS}4_=RWupYd&3hR$z zR6WizIKfTO2;#bOa48)`Yc|q^+`0^D6x3P6sCXf!(PXh%%RClT!bM(JTmovd3o3WU zlUWTIY7C=7(~P)_NlUh#U(Apkl4Q~4r#Yw>OD(Jtm z2xOZkmW{eRs|@fz^q2|X~Ai{mf&2h7-#?j_3HGrW)om& zm3V8G?Qse{LyE?aJB}SyKR>0E+o#l+3Q6bp#FQaKGk+A-)yYhM7y(`-6l2Vh^Yx$sX+ zbID0OF?HHlxfa#;wQEzK1)#o$jQY^hI!e6c6wV~YsUZ?BDXLJP+^DLYfs|{s_1QWL zD3ARglrap-7+z;p)igO=ebQu-yt+6E9{iFF<-WMSbN$dFy(t7&*)0$*p10q2jzN#8;nlM^*F(r+h_=)@%uSaB9_nM+)i_fZdezdyVv0-kU;RXg^72OA>Wa0kS|t z@~Yh;FCe%@%pFb{B6q=O`O0`bT~|36c^#O){k(AtP3*`_5&fHZR-wc2^Gpax$qTDg$0`5<(2!z)XliMisFg=c(Hew(F zJse?k2jGd)V^Rm@MI7rbNMCwc#+-wyP`NO1D zl!U%S0=d3A;d>~D;%?i$(WxdaLCNbF*m6N|7OGBs{FEBB|Cgl12RI3{4+H_M$o_O= z4Y7Fc5;zcn<5o3sag+WvC&m(R*NGz+78H1HmG{2_n?bzfGCX`iCJs{0Kw?IA9)Wlx zqLf8oh*9e!a!o!FkR|xG5|pet;U+{LptQt?SVs&yXd(q&G^waV9nVmIz_S;bH~?P) zf2-jXBO$MXl&Q$bZO_QrI8EID|6#r9kJ^|DuCCrKk)yUU~yF&3F!^sx(bm7f1N?;d)wKlT%vObscV1 zn$nV=2_w)tL_!wLR9?VPoj!T6^c?VTt|AY@V>47QxoOJZ=umY&^dE%R0{kk%>a3ux zrfZQO8OlkBH9&9c`yjybWw2NuDG$C{e929^-ppBRK^`tt`e6S5*<{EzJP5HH1pTl4 zPajpK%tmm^duWZKr|lc(1IDC^2LCr^`Fpoew-ECdWakQ{8OFic+QC~*Ar8J)96+lX zXJW8M*#@U_&P^p5#R zB|IduG}MH&$x<#yt$h4ixe7iG(jSJ>X@wa^xV{fssm|xXC^iI&gSQxZPo+wb^g!;Y@0z6w;(}JlqM!Hz`QHQtBt|ST8eKv{nr3w z>l#L;q$NvsepNolD4%~T=@-6qhK(VeX_=g<(-C>_Q|XFv zbIQbj5tg|37>`0nqz8SdJ^@yLcP~{4ww?mx=AP~h6k^293A*yp!jlpsRdYNNvw8fz zJJyhMl9(egIJVB%a~`9ylLA$iBu%RNgvtM@_w}I9Ajo4TT`_``CI1p5vKY#uy=#wCfU zquPg)@WZ!DGUtP_G)(kX;FUhag_AHBQb%RVN5Tk}oKsIY@Tl)!EzjfH3vUnpSB|8a)ip^~i~s!^7h(B3 zml|@x>F|PBno9M+2xyzGT2q20y))xrtX~SJ1Ys1iH(u2oRhtvkq|hE{H?8Q+LZ+n@ z-@d_1L3G(SaDr+r&X}J2jBBq3B|9+Th8DquO8~7Zj(+r4;@)$h#g*VNI?2kx=)A~Z zc#HDny@e+-7fe+(N9CXPd^H^3+nNm&bZD$7y5$27V957+hfUheU7!l~o~{Z+CTF_p zpT<3(SrwD0ZWiJ50L_Y{(GWT?ZuzHt&QzpL}xN}w_& z(sWfjJThuz-r|@OgvJtP6OKXF&36w=NU7wvu zSF5bC4(i^k>!R17BS+S0bf;Q5fHdakyvJ-0?{`~}kgz9+?VwW0?F3#D(UPmZC8i)a;`v=kKb~CvZM?1RglO+QD)1Kj7@| zDwb%};RSB_YM(LVQLXMet;zNrv4XBKrO5SJ3<-L&BoAnKGUudO*~;fy zOFjqKt;y9`3K!`fP`jxm zyvr}pGm*Hc>mkW{1O4>vf#fMBKOmY`R|L@h!TIp~*7zNbKq`DO;6J1ixe#EPXa0t1 zjnt^C&cd2)VCLp#%RwWPn4I#TT9GzZcfu5QY{2H@&OlQ7za~Ojvz34{`PV?xhHUjx z??7Lu@}bXq{NBP&X8Q-_EAQEsx#{{A>KYg)F&(7!@Sc_oVnrw9-`Pau;ij$BEe(Ou zhyih9Y`_GD3@rv#Wc8JOJb+L5L`-X(?MpS?mNkI5f6aKzf8la}x~UCUp7ekj->b8F zCTgie(AUBQ(2^tL^c4o^e=(7k3znR;v)YR9SjhuYA>1IdAPu^!m*WiOB46@)8Hiq| z;-phiUuHek-k1@R>ltpd1m}6dWCUiG5;+B?B)(B)kMh>~I)8PvF^rOMVM1%{XF4&x z0EYVtqmZBgbyxJN%#!C0H9>3b7_VYb%T^TV9^}Oc^>s8>z;BHO9wZ22;-vywd3jal zBZi@BTQt@+;};$Ae9DjiVJrfRk1Pb<`DmdzzQ$UuVubl>+cRaK57OmKH-*|4jrzRu zdrV7-O7-9 zcLK(x6&bJK3Ymr;P#@iHHAh0=b8p=-|4m3c-4i!J7yfsqpp9Q|{v9Bj@Du3}PE*uU zQg5<)F(#Y3FY-L_p2SW@$4s)|%KJQJSrNywCosw~?B->jnD_&qF~&JZ7s$*kKuV^n zQ_w~m^qi*;2T`k56jf{^{Hz>}dXh6k?SPLYJ*=C5_yOeVwc;L*_K1Qd2g92a>3p>d z`suIct8eK8FJGACUcupn77V7bB4ZD@^f;GOyC8#;n|$nU0SvOujS9%x97sx+sqdm4 zcGZ}2J`Z%zlhFaAL_PYsJY6>9^GrM{RWEzqCR3e?m1w})DlMsGdLE*Jx>M=`o(kSjPNdA?SC7?aVTcHZ%LMcWV1b#&2$+T_h=m|+_I zx?Wuw+Y8gB?p2E+s@ZF;3^856zy<2{YGcwfTTNg09GgBSx&}~VFIbkn5JXE9q-9P{ zZ&SCx_$YL#)1W$VHWBFQxC2_csgrVNPI~T8??;~=n?CU~erF3`0Aw(9Zl>)Cl%<^B zyVb|>aKzJqDbjTiO{*C1DZ6f|OB_S@saxZ;7kc?aXRJ=EFi8@$Ffu2t&uX_C z)G(}~8ic1jP#ThbSsjLpzX#hA&fpO#1F@2|Atoh$*VWx|hks_q@)9)OUHEDF*Ve*P za{h*TF1pm4BkQZ+)b7r>vRE-v4q#2ls$1#;GeGc(Xl0TKGA1z(1EH16H7OwQccmV% zgg*_hbC4s?)FFu5$gD$S+^2MBTI5)KlowZJxPF!%(1$dy2~SF;d{8&XHO8fBJBpeD zlRuagTJ{DtsHhAxA22P1GBjjypb2sMq#lKz5_7C~Aao><9?D#)7T=vq+7o5C`#{t^ zbme2YuWud%Ewk^KqE^aJ$4NQ=8&L*afqj$#xu+ks3U#^vmg2>9&?P>aq18Fx-YAvb*Ml2(k=m;$4A`v-WVeJ9uT2JMUwjcvdqC6xJ=DWvVn&J)%Y*Gk_5X4Y>|^@GP5;d(>S#uQYsJtr>SfQ@CR!($v49n~^b| zQQoMioIbT5JAk6xDkzFx(PwFzk^A0JuaMIEEgME&0!qyFd(pm>pbQ=vH6u37qP+1j z0J-E=O$P`@=2J%hg_PbpYAt3Y_eU%2uruaUAtTWjvsm^_`4T&{VZT?<-c5sdg8 z2dJsZp~9#k_;JGDv8uT45Q6=g1LYONkau;&_#Zwi7(RP*BkH{^B(y*Cn|*o*D^VLU zrs%asorco@xhlzd8}$+2FnIg3r^Vx5dV0&U#Y(|^#ResL)H<3&H|zAsD>DHk%dFsL z72+YN8pOlm4NyT}YZrao94HNXUf_Qe7W1--`;L?nU*ZHZk?XypL-2jIsmpEraZ{uZ zv$!rhBTqqj4?wUNUd-eMMSrOdSo+hwLO;O=BU9Qi!q8WfDFG{fC19E39+@H6(FIPn zK8ud-jLtDkGIMt)aE`w}I*JCP$c?#RSNJ4LT1@n0JY^qj`nVEybDoR(VJj|?-;hmnqO-Bt=8*BM&2$JsX~j;jE(l0E7u^U= zox9+?!EYFK3L7xOi;wuo3;DP-`YLK~)Yzdb@R`l$45W6}qYuJ-uK|T3ab6L95Cde; z(?yfAK|s%nWuDNbQ9q5A@{ukc@H7G5P#_)o=$e>CG8P70a{RLWPjKXQJOB z_%z%1qs{^NQAP`*2WWUYJl`IOz}st!6D>%+OVK|N^+N-T7<}F`SKPW2zgz|Y(s{}=U8PTlPU#jaz4*@xnG5v>Hv1ngZ0N+y!=I{G^nn3WCYmf%_aHDX?c z0uxAEl4B*&oiK=J{Au;W5$NNyDmwb={l9HFb;lwJ=lUnwk@Wl!osA#69r|f`l|``l z)?+&0B3~t*f1<15)H|<*&)1K@?FX^7%Wt5-nAY5Mea&>B|110SxCj_g13w*o`srB& zFQ@{vazH-wv@g{D=f%ha}E7AO0y=7 zEj44Y2o1a1dvh0no5vJpm~(JC=cSEtV!dFasfG)^R((=yeE`6Tj7!3NEUp0QHa*4T zgByCl!!KUdH7AhN82^i|ST!sYvqUAPlY5J3jevSnb%b8tK#MTmYA~l+5#v^w}C(2vmhF89LBBI>U za{$Pl6S>=5^8hQ;hfmk`Er3zmGm}x-l{EydPb_+9LNWb&bo!Vy7*ezq_?y;+z}M)9 zE~vBT^wMOYM}!|xR>c`>t$4=LdBm#q8mM-LYfQ-0KALT~(&_PLj@M#XZk!WuMbJxs zv=q}K@R9CVA*+VN;q1jjHCvEa{jRIO<9E2v{zZ(guynZh0oRIKWeKm#t{tY)V7K;> z-+)i}q6QxP(22w}ID{27jzWNCdKcx|`l9%*fWdxp46Q-eWm<~FFj!LsHRt-fkqi%m z)~=vA?Wb0_e#14Uq|ZprdCY$+a-a0x0S1g_+^g)!mu~bCV>QEYv$kWf=Sl2d#xR8x zD+Jwm(4z7ZFDNijjTXc$N@I;B!vTxD9#+8PQ~2prv4HbF`4GN5gW{{BHB)gXCi=+9 zzWCJ#=37}p%A*tj&YZMK&_v;|>#A*34}u{LSPcus4uD&7UXwLd$%k>8D!8AJ?)cdY zi-wjUkB$rN`Wg`kAZ)~vVZFKvhtFT(LvT7+Gy^SF0oImp*92p!{62;WX*NY;iEK3; z(9lK-Y-KUh>QoFnd~-CWd=8+Otvl8wYpSEGRv+E|Lp9*;5#y@JA>B?wsswPYv5n%l z(YZbzum8X_QnhOogcazBRwwZbH2cx5(^sy`#aA{l^|8{?$HV~Fj{nir1CM4e(%hjN zP?~i=@z|vUQ_6upbU97y%noE3uNjA0T<+HI_yEx23D!5uQVUw%fxpoVqwbw!P}!SM z32QXQ$YWy0oHs_mV>Y8jv_QEo9Qa<%q3Gbwt%vRJiIMPWuD5G7^z-yLZwJTD1w50# zn;tU-_R-L#S+iMGIW( zOwQ7nq3Ac;$27%nm>T_+D9f{sEjf{`S&co+uT$EajRV+B){n)?6}Aa@bxTN^+=bl` zTQ|3B)}SBoGcP)?1|q+iY9E-SFL;a^Wo6PYYehPI^LMGd_L)v2`cH+<0@`zJd7 zFm}o#R?2&{L0{Ya9X6GYUe+ANkKn3CHSBZ*xH={7lS6-jwhF+mQho^_*^`@hG&S+a zY+*H{$Cls)_)eCNjHt5Z_1ofF@lMYf5;F9$W+3KhGuQVs`lI+PZ@N!h@X`*j&LS_K zYDQyG+q{|^-y4kcvO+zq%jwduaHwHsvE~Wda?zkGM{#d<0|SmOfZ<#=_U3n*a5RPb zp1KWgw6kAkK%Js1mjU~I0567gJYqoigZM=$wpP<#n%61UY&$$r$7`Opr6Vn#K^@@AVtO?-f8M(!)gkbxa zSbUgqc1i8#ey}#G)mS_*`cwH_A|(>{m`FTW9P+!_)jkkxFPUINSZ$1Q0BcMRG>`Gb zhtCcdnC!8J-P@LK;=x7HDS*5C##mwX5a;4+fGZY-cuo}FiKQaq*nDwk%!3)dV*GKM zdC+S}aYrz4Ame(-Qh6Sf^8LC%RV%!!(4|j|gjVTIF7>Sny1{Q~=+wzb%@+Wgl)#6a zKcN?Pzp}3z)<46<8WmoBrD+DCjd_o*xQ%nae@tD(dHIujxM5SY z*0L&87L}Wb;E)er5JmVW90@EZVa^wHgM0uzzp|o14 zz>5^}7<2MtN=$cLk{`F+z73z~-zi??>R1%SpEf-vlpdn*c+4A&E_H$$C9iHdk_divD$#*f81E7dRqj%Z_I4K^?iAsoK#yvHqca+VNpMalU=vJ6XbQT>~E* zZ@oIk4xKLDT3yWzRQOHo6he~%Y1xtVH8I@~@cyEd1@!=kS)0>Zol}u|652BxC^DpBE zcoL8fauWuz#{-D)*sKY>_ORr2Ob)t2z`D(Iw!sClbkk*J%!WTqeJzlZw7T- z1|D>v!fZ&X->4e9)fxbkrcKkI1GCja4;B#1Lkd{r8av+wh|h}Ny)6dbO?Bug1}qOb z1m!#Q#}cMb62w|T$Jk4#vZUIba`3T$_TouFn}Dfs-@y~f{m!vB(2Ld#8I@K5d>>-? zhH}BTEKR~EsWF>S)&TQ3F8R%-yk3hPVfHidLLZwlwsZilTr7IU9>wa#;_`;)yFlTk z;*3~U5z}$)`o(s@*?jNt-Yzx4Dow@p7ZY}5$&lFH$ih^oeQo9e3mJ?Nbu5sKz*xF- zx2hu=QzGynd2A1qHrcrTBTta_4-=-M z;)$c_1w}F7rGx1faVQbiS8h@UyxQ+($&-jDdow4Ak7H&C?X{=~;V0a5f*MpzyJ z+kgMd=kW_O04XKT<6;|Q0vyOe$KL2(aFN z!BT}Rjg^w(1+lNu(L2V!y>S8jrhrL8qUVnHERB6=56o^lAhW=)uLU#}(WhnQ;-#^6 zyzMYdo(E6QhpnUB*xI;k81GPN489}$SgdRDt^^{Ibvt4=qI=DKd1HDi@S6{^}w4hXE^T zxsTAnf1isr=2s3!KYw#`n+3@&ip{`={p%jwhjgG5B5tyYm_j`6+5B*8;Yq5@)3J5& z)KtHO=8W+N6tNjlyGbRt@aZYHUN8i3$)C5`l#ER1e z1f|nj6<2_ddOO|vK5-qa5ckz#v?Vl20n(m-3skJQIUVCAWZ2}m3AnVh>!@@d2kN~k zPN~9XBSi@c!Hu}o(3Nn=HziJvPP{eP_?ir~)PdEKZYPrqxe{kg?#zfQ!a{1(^VoTt zVB)yu`X6kOC(Gi#p_lwKF5wW~>0>^rCoJhL9d{6?FMmmH=WK8WtTuI~!lgGZMtK~&HhwP-T5Vh6x|;ycrmZLM!q@R`G8Y8P z_A?N^ItkqsmyB(tYqeLL428j`iPz@kZvY~w1Mfc?&be^6Y$i!amxFO9QHO?BGdtmX zEfR57EdSCQDxUN$h+B`4Hvy_a$I{FEg=Y{L^JRg&lPv?ih}la;?hLO)zFOGba7y z2xUV)7Rz`sSr!c=Gl-MLkpqjkJr`;zr>D|ML1f zcSArq7sOplonMleJ8?ef3hF)1cd>nO2{_Z*RwpT+6^iGA=|lbS?U$t(k4@@~hGz`m z-6kftme-jWkM^YaW!wqWeznw@9PU4{ALgnkfhnH`a+q_C#|(qpZ*StJB4>BTG#P~r zpG#uH39~TO*JnVHaFO+fS&;Yd;%H6O+i%~^H2{9NLgv!inp`c7%R|F0beX+?11N9S zLB)pSFN9-<;m)tP?I_8z&Vf#N?2~O%mz~{2hIXHcAA;-T9a*N2ngbJG#VJRm(akc{ zs7XVaB}p-ezlmkmj)%i9Vbk{o9j)I?Nld{Hu11^1td*KL5p~E zoQ-N$R|ft9wB;a_P8BGS7L5R!E6&13i?`nW7g$~F3$ujEC;lwDXJe8*bQ=u4gc(}c zq2Vt?V;T)n;qG}#$9RHAe+{y}JmUd4vf>_}Z<%M5Es#XW_MCDyd=F%8w|FB|`SuBw z;_>4-JDJQ~ZXN-TyzU$CgZ#B#r>cZ`#)8$DP8?nug{K)6{_$ZLMaezt?#9Oc2_}m0 zq8T07mDCs%KLu-?ZI&DQ$RK$&6{ppI@$oXWmqX(p;%C;jCAZEjgwPo3DmDd%5iY?6 zV4ee(-~+wWms$|7(D=`ILrX6xXxAqomHSs?mNtw~)2>9Vh+l{ftZ*!y5(hdyAubN+ zhB`ekAOQPm;!AMkb*rz9x&kB5ujr3LD++-RgrsEHh%C65j+f>;3R=FRMXjJ<2Eu`OyWUIt~MI@tk-Y)Y8XYo%3;zWz)ZE ziOwgyfbnI1d~?Jw@A}fcI_T9!Jh^H0D#jSMB)%s4>YY&UGsfUbpZ-#Ac@1e_M&mgj zzaD8+DR{dj4QSZ^A2e*aEickw3R)lUisqP_`Pl)F!oB*-92E(T*dpYTno z2V%OUfC{UC!H2{{GT}}gjhB)!+41#}oOxo63H5;-dmfC@wqTwcx$z?r;ehMKJv{(n z1=BY87lf2O@ih_QROi*7i~%9;FM+i76exVy7e5CP`nL1x8v_VZCb2LS2zbnHgnfJO z%u0OD>hOQV3WFCOjW@v{N%+;HatSEvFq3nb!36}n)A6U#f3NrIVuhzTHvV7ox}T5l zigsT;UGG36py2qI-7Cm@@Jjp{q%iy0Ak|Kwu!Et1X|Mvq)f@56F!MGDtlh>5D6rpP z1_WPS=B1A-l!v4le`*5OI=4oTl8~r-@ddb?JZ7AbfD`mCa2?idv~vk+!jNw}5tA6q zT<|=~gZPzLTBRO&)M+{3;bVJRT%o5xX&!hMZ^CZ_JQFTrG#sv-_c*>7llYfONui`tUkF6z5Z8`<}MlVPIcoV8*QcyGhuX z&VCnP39n6CANJb+9=xWNxN)zmZ~2hPm|}kXh~I#btAP1@> z1Ys-XR(_KXtw73S;(1N99I45>Cc*NbL>ed1D#hX3kU{#8PMN2YD@Q{!T7;{j_`$!P!;#b`_)Xy z!z-S*7u0J^VDeeO>?ASKQg#`P@}Nvc9#&*Qw>_$ULQNF@hjDZp7Z9F3G523Qkh={N z=u33IQ3sCPgSg&XF*oUi*A~w;`QcNs_+1{o2-c{c3Ab=2-1Bhq;2U7Nq0FTtbPIYe zhZ@W)1v;BV(JCRy5Hds0zMbme!)MBVXnhr3 zT*R)b(_WCf&#TOAW3@c2@ec~EvZWU~Lq*l|Ebc{D}o`|j)?}{2@SBwp=!%kP)Q<2*Bi7h~zD)00-?ksT1k09c?r66TT)TyS&{4*bc z$IfCyC_$oVY3TZ)u@i8cSn)|~g~#R|+=+%GQEY#7)ackee4yIf#yQ~tKpiv-6{PD4|xD)4w96ZvYo_rR((1V<^hI-bd5 z(c)FH-SBdzP4dFTdZ0a(1k}$Ru%gg?D!P_!0|*L@wXu~kFxMC*bE^nsQ{ZnASz`k; zScfZJu8VcR>fFw}14mzgHVh?w*jVT)NX07DhosnZc-#p4IHB$i5dSVLQ!zqJj0NKl zWvQ`WQBS=Sw~V_7KlI{udl1-oZonT`Grj>FlOAipx=+8c0TJ;a=uzOK7&SY|;IG{T z^)!?Zzwb>u{TZ8xJIWBV!8Qq?plqO21j7ci7n73KU+M<&ydjr8m8^;@(tsD*a7k<}j7Qhn_z&}hcyz6#`b5r! z>m>MOU?*$T&R7ddSH|wZW@+0g72aillIn?#-l(Wz2w~j}l;5*A6uvHPimiv~ditL9 z3Uz_e0bE@TwT#J)ksJkbJuxTT^K5aadcb8bvB|Rpte7_&`fh*hV}ytlBEFpkh%^5< z4WN1p(fb^W{f0jdzSSb_2K;!6I4B#tzL_92`b_LM)bPFr&Lgh_&Q1)XXdnTUQKi-P1iXg`)^>DER?0x>BmSVmch!Y8{yGl;< zHReL^+k@Cfn5Pa~Uv>+g`II}Gc5OP4Iwc7%O9i+lKrB^7ph zWeg&Kux?i2HeyNAy8dB9@4ShfW)HEbX8PiVsSr=bRVr!4+?HhAx&>x-g4=9-LWNoG zw##uEOme?g4m7C1#~Xl^^L|il2N^bTHdH7b=Yx-d7o`u9PS;bb`AJG30%}c91L0%rBy6M z7g|)9JZ=s8Z5yZFXAK|`pN*n*7b})Ilh9`l>{m3*DQ+xUV(+`ZuN?rwwcsoUge&0{ zMz}KoXV0!fXc@P-)fl*Tv>dZ+CGg76vPNK5#K+b2CB0Y8l2aS6I3=DE`nA12I1bp< zlng>eLDq#H_KB;Br-EV2j*Z5Kx$RsSDr`N2a18H+2qtAuhxC!rZk6Nwuq83XW@-iw zs()G11xvK#0h}}485lPU!}vCRjRoUD@ChaN=ps&>>6Gem-|@Y4&AC1n*CAF-<&qcU z^`P;dsKZ>0HEFHjGoyDS;?|5Eb79E?Mg$ncVUYLC-)~{P!BebklUFOye2dlcnSysuiq_Z#$z+A{wn;|lKw0m4# zycC(gVE)S5uobN?TmTbY|8UKrM%*E=G;NWmn@2Z^p5>_hpA3EgF29y7oY4)`8UrG6;uIr*p&;jUK~!-zZYDxRx;C?m z1_(R{n}mSp_CZ1ckgH6FZyq71&gbI#Bd~UG)RKMxj32Nv4Xm6RWRxiTeB2ArW5L50 zc86j8>j5M}2_3rzgCc!KA7h$wA&skhSd%Xo;$%<)ux9xUSP~RYJ}6yi+lz6Tn9xg-I$4fI0VV4~af-}wM2vrzK&5cu#hATZ4M3$n08~vMc zdQ43>SpD`^2STcWq6q{z5yRccBOr;w^zo}j^Kw{*+svhp{sXR6Wxo@mm*G`X$o)7u zo(B%s-Cgeo{IZ(3L|VLdxNTGy&H|V-nYLlQjQ;f^PK*3qTR+GL-#6dk_~R4qB3L^i zYB}bAnu54Y1YSSs45ILbZy5GAz$!*c-_HeH871Dv%isWQH4_n&!N1Q(n*X`^+ZImmlPG3HSE9si0 z$R@Y>zC!eBOy4`C1wg$f+e+C9Ra`H(#qTYb4k@SZv1pN{iT_(;b!5 zP=xfB+mDO`5%8Gv@30g^SdL(imjAHZ&Z~5=QyVqfwfATvF z@2FQ*Srub*ohQB@{6Wu8#8rb9MG0_8kvCUUdSX>DwASkHWx%>tn?6^T1oNq(WK+E# z4-2I!AZY!PQI?NGtV9$<6jhauLfD)Ds4rEhqpXHBuQqYti312bbAdp#o@4v#jKFkZ z17#pu)4&^t;qzE9yu!3QvH`w@G(9)s5k?Vv34lQ{-__3>E9SJc&~%C`Tayoma_{ze^l5%lx7)S94L1;wTi zGk>Ev(YuxK;_X+Z2ZpN7bNiO|01W&`xwwVFBU>;oszR`DTF=b75KHs^HuOvfWsW-G9hv=@H8AxF(yX5AEL-)&!4n#ZJp- z7cAOiv~ZxAqm(BxOeOC5Ua%6t+Hz*WffX?gAKe)R^6rUIdLYH2?}U$K0Q4G1k(0OB z3K*;ntujt|7>)SZyIqUXdidd#JS;VfRZ?6U-PGV2T|lw9k``ZRCxwKp)k-y<7KeXp z*%r%zI^$6o{g(wQ;andqXc?jgWx#M!9)eu)cz~ADf;)TaKctIp` zsfQ(vnx@>2I&)9Gei%m_Ju+?PYXe#VHrG{X)x1<#?Dku$2{-i zyu>rp0N00-xbOs6nCBtC4x~Xdt(*?YP~JuIvWmgKVDDLG$+Ih;=@-Vj%!RNWZJdkS z(XW$I5hfUacE|(5BOX}!`=$CO@YxS zg7OkFsqXn`&q(;;$&zx3BP*UJP_+u-mz~(h%Np{Mmn+$@$PW9n{aOII=^Q!EA;795 zwMGooYo&4}#vqsNFS}qDI}T?n=8^+5`Vr7|r#|bH0l4jqYC7*R-k=6@M*@*0fE$F7 ztX&>y=^u=DKJqkXdrJMf)V0sp3 zO(MaIh||dZ%83|Db{%LGS|6NMX*%9PI*z+1$m<2)p2Zes;Vx)A=#bJD(`uX6lV-yi zuhe+1%pxKT->hI56g2sy@+tD$^}^AE4;Nf0Xrw$g!;(Hft=x}= zh=)xhBK|KHwmYDny~(M+J!~_a6X1DAjTsq~x9+b$+NEiMZZeIvg+t za2@A1DiL)QTgU_qRhYzNUGr;8)X%QFQ;^U;}7s}rQ|P$f0@tVW%R@c!A2j%+bO#*N@okGqYSU%>xz-etnePbu&i|L?AgLPO7uq$N7A5HsLbgfWu#Js z?G5k?8VTVlwbAQpVZZwbvAV=yAuE9zS@V3pjBa*RHN;#iFnjgk z`aqIz4<BxFlobc{*TmBHuk!GTPHw)e-Mb9$Pke+5wdPfa_%dELc1*Oie&uf4sZu zbK7$We$;9?Os(V0i7gI^dJ|Vx@H&AZ?r8;2J2J*kwF68-ThO`68t^gx5fH~`DKhg1 z<|j2gEd_5t0B_=#=;d^UziK*0oTs(}woU`z$2Vvk-ICr5CAu(1y}Xdkcxdaa0u)tM z`|yt7`+>WC_QKjY{zJ^-tO{ATBKeg(ZAm+N+<_hsRZ-lG!)I2li>*DgB{pNMEs^zA zJt6b1r7DN_NAwXSp=V0i&UM#?DoNoxg#&b#%<4CpZ=6o2s?vsP&!0- zmL>aMrFqeNEmhGd$69t?(_*B1Wi7pb);UfooifyIv2^Oj|SQY}q`8&AiA&xQaqMDN>T9Kk4SFGaN21;kh>x!GOGhHhHsz4p$e!pqS<=PhJKAvRYEjwiIbcH z08J|?xpC8Ga?>#rRP5t(^9K73!YL(kDKMCsUnp#TRsf`)Y{{;~sg7Ziq4}D2^$1}2 z#3dP`^cy}$6O<9_=|g{LR2R?*2OnMGj?*x)8?)Hd{tuLpy(z#ffQIW;ekPHWUCQ)@6L8lIH9QRL9Q5?su9YDQ_vJFJ0 zs6KFo;E|$=L-oA6m3lK4$nKC*FxWyvVg44pOak4?sa2{f6F17ErRpyeU{N27ZNpfv z#u(#6J|%!3R>;uVQ-^ew1K!nV%fH^mH*)2xmQ*e}J%)W2W8CSW`Kkk$p?+D`sx=PO z?{E6}RJ@_m;hCzPc(q=}=4uC=>Nkutac=#Lw-(u3aSI<@f1Vqiwo=stvxbOG<0^EA zP}YarBQR?y+9L!6b0X{A)iSbp_+D$;X^pBiZvW}YRjzgbSo|)E3A-t#YeOPtc{&h> zhFfIRV!eue0P@OW`CnL3cjHp6e-gJ5rfRVoU-&Z%CLDFEM93@;MehB|FmtwD-^*!PW^2@qez5XG^ugs9YRr)nM&nv`98 zhZex9h{42!NN^??&e@7^j%6x#+M{ZK2o^3KeIgPNdl3txaHG{S72CnK{?sS0pe_P8|1L;z=w z@xm76986einsZup#Rf=zY`X2(ejwMiWUsNfgo9}reQ`xq54#e}eQKC)3(?U+Tn8($ zkgTQ&Ji^H1dn#)({h+5k)#s_$IJlss{=bX>o#J<|c^+{OX9*~6d{6Z!CbngB@4Oxd zrtQRe^H0||=3lo?dODI0hvV#NooA|Z2t~{SGO@Myp}0||L_)5}^|Ti9cEj}+(LJ3d zBO~6Z9)mizDH`8=2nrl2R$#Gk#@$lLyNB(TG3PveNp!8L4)nrXl`XEiW`*Tp8(8%S zE|iE&#&}B2^|YncKC2F3VC@&vc`Od%tHkX)A~4+WjD&^Ey_j%XU-K+SvK)vxiM|6z z-eKQW4bhIwM~}JR5Y+ox9B4~QftFVSnVa$G>0Uz1QkK=;5uD9&j5kfx(eR zo2$c7nB)TwY%nUll@bOw(Gt)$!n3>BgrsQELq?sg)dC{AcJ`8H5g_XQ9}x|OMe#5$ zXxfxCYg*G@{S1S^gtH$yyaJoU1~U^jN5bwyavSnnFMDc`tFPmJRcm;+n^!@Nq2jVm ziP+PAKSuU%Cz8PLoz?7R)Q`;%n$H3Yc*XfW#^hor+z4O_a%LZVPhq#aIucXq!EL6^ zX$0!V8&;mjqC=d3V3xF%r}}SvLi?%Qn|^pfRvk1{0s;q8_!|S;h6mUy#hNSr@KSfO zg!8t}?q+I72xpfHZ9_O`XaK4GZC`aWcEIK~Jvd-HO$jCi%_>-s{XuF6A?+b57{)`$ z$oFLiYr51=?T!{V-*0TF52&i4l*J8*oLT}GRRpSs;uZY$6_y5^?u!-OVlg;A*j)|D ztfBT1vJM158M@z2m|c4>NIe7F=+_V0xO+N?beM}s90FDaFD4Fm+BMYsaE&icwA5q1 zIz#NP#-lTkbR|CH)fU2x$9N{z3Sgaib=6&Pci3~@ZCNK^n(tQ-`7Dh14HhyFp_SAh z5N1cbrYwW2mIi7c#PDpm-y>|_FAL^UEV@Yyg6;`kkXDFLKf`41WA8CGH$ZW_fdBsh zP5U%fw@0`g7Zc0k(~m}`70&t(stY*>LD_=O;Q%vp!R-i|?Bc6)<+NfG^=4$h_VvH2 zZUQ73oLh+$4+YFZ1<)$Z)vFP1;Z@)B_$(|~YFlM(2#R+Y6S97IS`pVChVrz2E44>? zz+kyp|I!UUTM*PnLUcIwR>#G2r0e>sJ&|yop6dB{KlO(57!kv)Li}^#9jQ;WIvQc$ z2fSN?g9Q$A+7`i9cSs2)k)zb*g&)sxlzix9wJVhkQrATc-`*{n*cdQel)_N4t-*+a zE*h*B(6>fhsC6w4KqNXbq4shQrxcqM@#mV9r>S~%Ujz$p>!S<< zux;Ezi2NOP`9jtr4QgL>*xa!30cPN^e5a)dtVkjPU>1Vx4Nk=ct-=f#_oHx)nW(;i zEG(HlS$PRqzz#{1oEPB|<^mcI3TT=$;DdfD^nra+{6m7u+)hFNo~qu5U&9%>XXKU@ zP*}?Km!JuC5NHXktF|Tj#cC^I(c2KS3hY{l=tu9cBiWOtT2aM(^$_GErRVVvV}K7A zP6&}gI6t;vSn1yj)x%Mv)<=W()d!8X10*K3P{a`hjxtLJz(gPOX5J$Kq>=<(=LaSU$FT03t&3SxZZ#Nd#WB0g6jCbA?1u#^{aKZcn3VG1ClbGNGpph4`-FMp>$ z@RBCA6G7ppIt2{BV2DY%{&t}|gcy6NjD=MoGjC|*!qZO}q;UHuVZK@$`gxD~3mTG6 z`MykPAnYa;2!5h*rLFd>U6A_m1}_S}16ck4Lfw^S9aL99F_Zt!xQDM|)=2rEF|wY8 zZO`Y3n%$Ro7};p>uK>1Oib-bekpM;j%!S#o;{7!?&et_WqzagN&^fH9l zTJ_Bj4M68+86*qlmCXGfA@-ZRQpD~ z8HrDxI6%G}V8?T?A{)VklPKN&})Tug&&R5$Bp_ZX$<>(_f4NKPswe@J)76`wV3Qp`8ii9Z;mSf>+^xeIi@57pY zVC(;X43j@=;rL0b?yScjVV(C2kDRZz}8Ar<<# zfDzS|k`p>L3W09{up_x`o(fHx&Kg^q9I0u5!uIlbJiP%3dskdZD{0J75(*dk*n~pj z*x`%@+KyXj0#NQA8FregAa}l$+{lBF1HctYcx4?->uRN0g+80sV&K{p;0cl&Egscq zc3aJ-MgZ}&;_m#jjo=NzYKi0w7e=^g8w$6X(EX&KwNo`?k=$kfp7~>eTt%s%+VL)| z>c<(H4hT_pNQ(v40Ad5T7mJpMLCl+_(I7ztpM(a)MB8EF}SKm4y$j}>__13{fErJuY^iBu3(&J zj%KNVIK)CI{e6q(9j0?F{<2zvHBZq;O}Vop1vfFETiDIJeI4gMo#P^xXiEAo z3MJ#kHVHC1aEImtqS#XZlleP9F;Xh(vbq`LSmqQ8{VLmbYs%n)DED^n`Vhoj@NYUc zii^OWMupYN)?^@tVH*rif5MWwamk%Xf}-F;J&$N|5v<#ns$=m8I96O3EfGv8IOt_u zlo_SIua5yPd509yV39{C3z3IHUY>+>;N}g@dqneo{(RT> zfM%7H6g(OllB;n*{f*8Wm4;ndHXJN31%1~j7@Tdp3~C> zbd9@=jD|kZ)W-8@m(!LnYl6ZOO_O8iQI>Wngj~R2O}s;(i}K_P&6{d~p_TWam0neY zXMd?C)y|H@3c?GrmX1neGsDe5E}9=egBEsOo{~)5|`yE0XIW+6{mp@9?p! z`$6UT@VA(Ck%M9Jo9L@+o#@R_?Ld@x$AyTi_+%D8=qd?D0Zfk&zcxOp?Ftb4{|$l> z60#oSJ$K)l+QA5{skLtNe+MReQ@rem&luSBLThWgAcAfAtwweE@6^*Pz>$mQ)iF|E zdwXyFe^M8F6?Qp6jlqEwO!X>HrvJXkfo`m))#Ce+Uq0w=;(1TQolH3d#U&OY^C{d1 z3xabPcouv%Kt|_k((U1yfR_u=^;_&fy&7q6p%#47 z&R4;2TT0a(DCBT|W6Q2Fx;pZ3fCtwU9}3@va^=GQM-2X ze*Z(D)rV5c!b&U12n93;@uKiohoG<6;yzy-tBlu@tl9>@wV?yMYYVXD)9Gt9{Z$Cd z|M;r3@j?;-=)3`1Pcyh4^!Zk!!8dT}%Rm7AQ>Zw;I$RH)9jI+#qW?B%@e6oCE`<1E zu_0!V_6X`m_G;=jz*4Rdi*u>MH_#;#1l&$)3O)b^t%ys#Yy}^{V@orC)3(MOZjakyZ8to1Y7Ju8^$-@?ccAUmIs>WcE zepy?IL}x=Ow!Kq|15Jq6_Q8=R+PQRcZ#Xrzt}GFnU!6{_Nn*-)Thq`P+7+nq8C8e9 z!(m4^B-|aJE*Zf{!C5b7lBZqjK=%Ij%!;<3r7ge+v-^3aYVW~X&H$$3eL=L`C^RCl zA>k`M0JQ&5 z$fSf*fX0UC!*vj_{)PdlW0z>HQJ#WV2m4xsJT6l582t$G&>PFNix4i`*9?X&!3RsY z*d&r-$sI!>ed4iJYe#Gxy&Xy3>v(%wdZm`VvRgerqW(5mkincqi58`ak_3_H`(71D z=69_*1ynLr!Tatb3+@4IcMev>0^~-8EYQ@A+6YWc(rSGA!v{?1f>Z?z?ka!61yXGs z(t8w7d-emBPv+=}c!eU%PnCOzKs?T{NraE=gQ1LG=|bOsR<72W5S(7SLN48Vmz43W|5IodEx>Tfi4DjfnAFpKM!7NKc!`_B?+ z$j}h)iX?QQ!GXTItR057q)TmgY$({$F3!J2Sm3Jjr$*ANL)}66`~^A(=-F%9MASyR zq4_<=gEmS@lnw}-#!BLFCSe`nq>U+DB^d)HyH0Ykz4f*LA@qL*q@Y7Zb*(R^IZwn%_E1<_1ojaMz6C&ED^zM_Wc2JL8*27i`x`Q`>00~KBY=tF zT#yjqVTvurV=gFa;lU|l|1=qW{9fA&U1pZky81m}b*^ylB19`x)br!U*w{AQ#echqc;$FZsKkH7+G-N0YmI7>PWb$at%=!-iY>ZTtf$Pdb zu(T?=`3Uyy&mN8OF=HAB_J3qEa@y#F7n}yZL093DV4am6AULQQ6=Dg-I+Ob*u!vnq zHiLyoFnlNBM?I_`$_ZQ;yVTQJA`ej?j=wht9#(NXn+OHlrxn#LxTN)cSR*eV2^m=mq!{n5px-*`u43{saO3+bZk zhrBMn7268ia&}1V(nY*FlM3U#3(ewdH(h_cSr~oAc4t3WPky2)za|v2CZ?L3m26hj z0CH=kR0B6W4TZD_upYs?5tc{4w>bb^ytAj;(By%-Nyzre8qNy*aMp0Cl_^e<5ShKO z9*|j+>;@3gV+QNCVf?xJ_qi8aK=ggk$7ND$C_eGo<0YpPN9x95j()z~sqURYgvC;E z0&^l`h9)$I;#@|zZ1}Y4<$jiQ_#e7!D1^6=>6i;b;HOhf5{K%Tk+?9;EYPeh=6Q7c z1YJ2~qv?emE3j3ljszPNwD}6D?SK2#74xz2oXYrhA{g5k&t!D6w@mPOi%$)1cS@9z zoc=l++DWTxgSb|$nR}-r;QA)TIm?s*jVns%cI_N%tQI_-iTna+KtJeLTKC!(g0$$Rp&;s7p7X#_!&ACvhSQb zb#el*Kc7>D$glB;Wn4Z)Q_i^G#LU#S#6b2)9{Hd-cv>5&&AZtC7$ejn0|F5ok`CNi zG_)0v$4?iSSa)_v5`3D6nuXGwxw?z!XqLNGUWdWa%%pCRf7&X1f_#ZC3wN30x;AIo zWjVJsigX6mje5e~GJ$5!+gIqqFbtjAdiNI}2tz&KQ-UU#gk#JZT_a&v3%qnr%hItH zieCNoBb{M)O5;Mjh#XWlV0X&)wi80k1EDOU*s2?j3*&Y#A*2^*20LksiHa5mLo@@X zXSVBDiTc+|8J}|i48My|3?`z<;xy7E0A?>lw!&bbS*el}VfbDv+H{w0EV6KQsg>I# zz;%RUL4=Fh#!pdR92)@7WZ7F2`g4@TQqq;jtSvlxf)H$F$fwOH9Ftbd? zKVT?JycTS7fV&diQ?!@zJr}%t0t;A2;?zK4;RErY^dfQMlZ!)Gn%)4@arn5#74cQHsSpgs) zEO-$KtH&U4IjVfA^Tvhf>~c?L1**Y1p-H05kP1HNoay@lT`vTydT>Wv698*0WjQ}H zVt2w|*T2zyMpnnA-*0sRSnVd|2YAGx09FH+WWhey}spA-b<|467D)qmAZM?(E` zo~8c|U>&5ue(qdW2wPUT-5wq8^dz->n_fQF|z=PZrgImpM8jG(?ufb}#)o9~-jK zS#K{ybi~_My`%mC?i?KqrDtQ~>}Sq6c+T1M#F!m=4+;oc;KretY1R!tk9u3GoPq4p zhzj~C=rC6E%D?Lm8al~om!rdie@zlL#>as~4)?Jm5%u7WW-V|1dqgl}cBQCyfWVH+ zMnwpWC5+CYFmeJ8w=%k_qP{(52;*JbfBO}}S1YMQAs*%!b)iESIBn2=0s86~Jmb=Z z6LL@w-%%q{G88>(ljxB?b_}@EoJhC=EElF%V~(-(RFlC<@L4?zXp0c z;U%&_!bTb7v}_$cdj`DnQ>~eA!A9OlZM)S8T-> zyw78Vmp9g1qH!*(-TXdIR2$9trU(PufPt{RP~aH|ZrN)R41_4xOurGg{$WcVIIV}R z|58Ph{(;jFSD94K~7(b~aoQj;(Yik_Hw6m-@9g5K5bTlTyV(43B2HxV#f`1C10GGTHL zi1ak8m);R6&slM5sToi{Ev0tWMiB#WE`k96S`&b_B>L$|wj^)VbW2*dpWYjh)&0@& zf*&B8%OMkS!V)!wT}2zg!8_2X2n9VhK>rkF`7mt5V4TR~!^t9AL$(5-2+Qq5^lQ-R zy476nnFvmYEp(>TN1-UhUP}$y_3#V#1>| zzmL*SL0KakMh%?|Xi7_=!748^O`pAHTEw=#~v=+j2?^!<_O%o?pi zS^`{>6j2tD85|ML`8W~%d#L|-F4CVs3`=4%w_tBVS4pG98XID$PGR)QTQtiulk=b4 z2eaJ5?FAx@!C}z|SAMZS>b&tJsN9@brnf2!7{2^<(9;t1eY#dj!xp;(-eHFY=pBV@ zhG9Xo6nLve_14J44&MQvafrrl_-o2F2&>HJ3F|Z$5k{HDz8+veup1nreeI}_% zYmk1Jl>V?Rlkv&NMTn{r2tHHoK(d^s?9n$x!&!4j`=kjN&Mt|=y78FbQK~30wKkCeoQ|Y zS9w$C5vg54&Y4njvV9AH1Ig{JkY}Gisjq_x-Q4Dmjq1QEx95TZw@${S3?%fUeRA}5 zaqz*?Uq_{b|(Gvlc4N@EI@hCU+?S9P@l&lJM4M@`ovyB zllsIRb#ZG=iKThJ5Q&$)4OCG|+zAoA`-H>qp+W)bRi`nv09v+LvO-B%-j7cNU_D z;cX+F`(XlP@Nrv`YZZ?LUe|~!aeJU5Rz<>3DHPVqqp4n;`{pY?{rpSns0;m_H7Stn zgb-m@j>J`fReUF9+$^(1Ch2~8d^Um|-PSyAHh^VHfr0lyZ56->fR&~BW#iM(c;0^+ zmy7j;CK8^@uAPct9fgpQm|gtpl;TJ&T;iiJ?Drqguv$lOtt`p211m+NdN%?FJG$2+ z{xI?|{m!r_TY(43^9pFS6}{~hUkfFkeX7^+@*wd&DT&zuFS~raJJFq*=0cMy#j|^Y zQ+=#I;XOgK$`bCvV(q>$aJUh|M&p?q0=|OELgJsJwAoQjlb?gM)|@ekwhXvcsU_?O z6gCWnoNVZuYnzLuN_1?KEod8PCKKAm;EnmT=JC0x^nMe3GtPq2 zxsN1?ri4+s`4QY(a|GQmhHdMxyG)8KaTwGnzty{g^)K*8o*79sLh zj0}a)p1>|VSnn8bgN#0%k<|Ya=%^A$TLjJ0(@bThvLs?2Oj`vnwZa@-Fdru3CTr8UGY@6uHxV z)8oIPBc6`iHts6efw_d36n4$}Na9*(^>=7Axu$v!51 zuS9eF?OFAwO0c6-QbH85z%Y~(6e`@VUT)n8-!|GBKL;a3yGGU>{sbm`rOdhr4+T+v zpbjV1aoKqubhue6M`m}Qr~%q|Uwl(s?ZMk_Qx{mk58QUa#}k|)Qmi-_pm8L=D{^`w zRb5aUI2|peE_Q+cQ|U4xOoI)BUgf6BXx54NTZrc7n#$*I0Gb#s^%ZHIg^eOK1XwVq z1*hZLh-l@|m}+}L^QAe>i)3Jx*dhc%q!vpkY;s+8_AzT3bs@e7Mue6VPDS*Ci0}|p zX)+kG((_MT4nhv#vNi@5&&%=kuntsDv#wPg*dTiONT6XihCk6j>X{e677fWQf5f24 zAkHYMOwI3HNYqV>t~7Kb1<@ifm9A6CY~kL7~y$ z2m;UXmo?u8z$>JziRDdU`{Lz{YdiYmeY_esuZ=O+vwj1rTO_gv3ZBcpkomBuyi78z z@eK$VCfB%QctR~9CIPP{@=7N#5AX8OPCdrEKaZEUaxY`6wOuq!UWFWLj&VSm12g4;3rY7M#B{urm z-Z_DNS0JZxV?W&CC0|-$%0y$zCw#|d)+1XlUbzb9d$mSM$|5O@K5(^?t&pCK8%uCa zXivCbIbj^y@c=T-Fc$bumWqd%Xwl5733;gRV;#0+Yz2MyFnySYfl7Ez&|j@okwo`P zu_tnUh6Vi+ns5$d$8W!_y>$`9EGuRHSP5O+4>A$zT{D5*GUsl-bRUmM`JB6o?86xF zK~{3MUV@FVcrsSaS?RxR-Gu76SY_;vmJWr*at01eF4j->Z7HCciePuAnhhQdV7sKi zz&cwB>!#qr2zo$N2v@p(tEM9W?z99P1-K*lAJM zi93z1`+j!;kPxY0jCMov?pKlt!Ko03>5s?+mJ)P2+3<%7m(z6q1g|E-6C&uXRtaZu z{fIZ-81`JB?qE-S;+$ngZA`# z`-CT`7zs#)NU|;TCjuKGayo3G6uK)SffC@0Z44%;6y5dkA5@pgc#@x+a{%^r3I-#dUUqx+G0x_Wc6DOh0;MoAsHK=V2jG= zp!nc!4a(rB4v1vIiv<=y7@A6SUu=RNhuci?jX#WyzFrd6%W+UnaGiz508PhodPky)%1t>CqA-pXnvxHAPGl0J9MSXXA4?sGGvm&32pM zV+hF!$I+NaYZBj`0qTGM8+C?;DyAenK^xfjAR_+^tXw|l>b&v^+nDvL1Vj8ZN>51VI3Q%Fr8z^XICaz3H39uR|F!70)`W9x1`kKG^jZ&OVNLTtgwA(%V< zDkMC@b*O5;yv1o)hxSr?Zte)9{kjUexe%{~4uGOEs|ArT+buA>{jY=#$b{R%QD3kt z(^kqQ+4UIPGe98rsk6JITX$LwVA)c<8#C`hJ;+FIY9YDmR>p47Y34x18u5IE>zgdPj>qos0pV+M@NsDnhn&3JNnLKFVNb$ssGyv;H+ z1gXH2SPZ{j1%6=_Y`>9JyF1@&k5%9eN?bLdfn9$-Ft!5rHA=!utjImbK5d1u|OpsxkE${QLAQOnn+~>4gXwugMk< z2!yGA`wzei(Vf>4M&PFJ?3m*>4B(=r%#4-uVgR^2dAU15L1*7gxQR8IjB}Hw--P9E z!PyE&xVV)Dc0YqH88S%gO0M5a*aWnbs(-nf1%()??oYg zXq6%?O+-3W_b9;)yISz$b*mXjAl20hcwPYMY}9J zS3%>l6|S12AYXznQBK`}`|v-%B(U$fy6-L>-2u=HhV?fYB(YY{Fpw}a_dOU@5>3LElPKTxpNrNl)iE7ikadB|`971}91KEIU<3qBDA1 zQ!5LDHO8mq)4FKzBjjVGB1AFaVRi<8Y@V{MnbNrw@GIw>gd<#B=0l$Cg!RCIEq&o& zn2woEoh~D1;m5iix!s9FP?#qIuq{39WMGe%%KO%u(HiJxOX|3=$DA#dEuB)%z`j;` zOm%;X0+glVES4i_Y*mZ0GdNNkH$ynKN$&IQf6W)}J-%=UPk=JM&c${*l+RpfJTMSW zLyLk8I$W7^={KH|ru_-_k~ z43b6doX3?Ng(mGWO^ojSYF;&5#XPb}#(W z6Q?LNhRvsV*+p1bfg~o@P?-WMbBxJ*2JcvT9=ySw+w6GR2xbXF-Y{q|AV0brU`Bcc zJvj5ecw4INYhc3{y@I~pIu2-7N}*xT@(@i~q25{?bmG&)0GH*c>XQQv`_MTjEbnL1_v&oeO*=ud8|kf>A$g-3@6!W*5TiL#6`Q!MC) zX$JPt<>rv3LvTLp(ElWWaCRf^Sc#*wE_7&`AsNL8wP^ez37}6%*>_P;qLFh9l~LjI z>)2~8fUsoK6w44G2+4$-o1mmn!Yi&4!(Ci-j~cDh@4%wxOHs#EMTpuQY8FV+ayM9# zu)3>kX!t^d1@eDpM(z6Mz<&YPq%G1VOQsnkF91z>R3qK9#K7vWgA)|dry#W8`+So& zP%O#BEg%UkSZ3Ib$5P$R(-~_45MLq}19Q}kdp3q90?IQdjZ)xb*m(amd+M^vFv9K(Z3>I#$z5_zdI zJoOw@)s{r6;3F~-*@kKORy6bM((hBjnumyAFSIb;W8%NqSKF9+oijW~<<~JcKX?k1 zUy7@qbK;kx@YJ&vuJtV0`(4T-b)pr`wM!%jyE5UKh!Nm~5M);f+lS@pXt%`WXteTyi!yLT zT_?_Hc~*_pl!CEP3!(kJ5?7#(%vMhuHywyNaJFC?F1li3O@y0R+c(7>;BJHKo3tU; z6cT+1M{UY1e630PXkS}QLG7uXZ(<8f$H&!p@mn*n18?p#i(>MiG@`fiwIOl~UpEX` z4)k2L#EQtrii0}^AK>FY$ZnDkruFP>(7N#*!nm-+k!Xn*SF8>g0hTzHvqX``*=PYK z1g&2yaV-*UIllQ|JrG^QEwzYi46}j}u2J2@=D0{bKiLK27gGmur!x^8Ycn>&-E5ec zgm9ax4l6el-~`SNMSQYuYz8N2$6>*VO;EfVnK%_ud~SHB$z(wBU5Yeo{y`LlwX*Xq z5?A3Z;k+S=S1W+_(|RS9EaID$>d?5#38&w~`!))1a@kvhswaaM;YSkqq2priu?-AK z%Y>1K*~s1=@KR-Bx5Q3(oE~uELmqyO<)h@jhAlx11@-QmxEB}dZSbt-1Qu$f)P934 z4@NiwaP}mpHdrZZEAJMaxE__a)^(I(9qONRE|COm(1=g1#PSS_AUpaq%a}Si(E^#- z`&Z&%{HjK4DVM>v&;o7h$M>?*{3j~^)e*h#dAuVYPX;6hp4oLJ7WJoIgN0$QxgZH zhzBnTrP_dq3&oX%k|_))q6O_RKat%I?0lYI6X(zBq(m&@)k(MFP&P2#o&5uRch=(Meg z*_aVd%GkDK3E22LE}<8}v4kG!2h#n!60f0QpHFUPdjbsGT`I~k|1k1>q#e|W*)|&5 zPj5}VvlEx2n;9ytjKF!1?K!qZ%43lZ(KylyhZ3)24%YCf*|vkga$en%Y7@ahS`sd# zO@dQ?iIdET3yI}X0Pi)*gmNIje5vCgOB^FFBsvI>&lGB$z&XU4mbse9?&fA4s?!ng z<|cvxnA*`OWRF|W*bhg}uxLxhWK5*tI(ZPLOAvp|#lU>A`v zSX&Sn6Qp%ayeswaNIF*z$or3KlyVl@Yr;C0)P%?dnJXD3sB#gn7yDLE>W$$i_wn2K zwy*|SQq1FNgpqa?_5d_H*~@61+DWZ22DI{eHMIrAfUl-6Y)X+=6=9MUG7!QJ7o{5} zX;61vgBPW!KzB?3HTof}3(3x`WSbEZZ%^MfPRhkY>|OU~j<>)EZ#OL|y-0N|02&cQ zKK6yX)s9ISDEusHRuf+f{>eG92-ui1T)}qrMqQJ>A=k4+yaT@ z?Afzp9xQG%sRWWOZZr^a5^~`Efi;QT1btV>`X&kZ;B47wzt@Z4c42nwl0x$Ih%uXB zD0EjL+7MV`8GSG|DFwOsAs;s`2}JeeL=~YZsv^^U6OwjgGB)?s>Ma?-cn!(^Ei3|` zR3~}bLy4rd-?ceEU^PcpGs&xQ=yA+V@TbMsnXprm-U8_I>NQ^9hw6gXbmh13y;iKj zgQTa!;INdbNs}=ag?C9Gj+Z}?Qu!9^cg?o)v!>D0lO7_NMf|(NYP{}MVbt_JdK{6^cgEjfxBJmKZW&ZYI*}ScA}%2 z+(__my=3$tNpfY)5hJ%B!PhWVxVXu2ZPb%~Uy`rzG6i3J!f0nXZLuIJ62-1|xyvj3 z>KYE@G#R;}EL@A^Y)!HeVs7Dm--wPg(i?1G5W3zicmw9qNQ(0!1j4P`c*Xd9 z$x-+K`HCbq3gD){YegJq&p%Hv#W`v32P~|6KHq`_I#4d8Yz? z3lTpWUcAa&bSnXx72sz__Jz%|C+&u%SkvK~lRS}rO2;XTzOU&OD@GzzNJU#q9X(V= z3$`YiBZ4=-$^I%00?gpJ;PhRLfM`O1i?#34q1Zu_tPwt^#Yq*;`^17ru@t7@Z-xQ< zq9e!b>G_>WP6*$v%Yv5*fN%6)1R#xS{-htZC&>)q)6<`hFavm;T`EPNg0nS8fZ-G7 zp2a~cQun&mXB}`S=$$0L?oWbY2a?#A39T)x%GL&WY#1*l$SoUu^a&?5_)PG#AUuVl6?gVbK>%#gbcvo zXF5O{FMOk`_`%rUrhc~c$BCrhTmjTS>BG}*kP?jSYElli@Iv~tP%~da{tymUbpPF? zeDw33)(&lQ!FF*%rb#6*Zz&k)XDe(-L%VyKH6J>zTP?7rZV!^!TO|A7{u+FX^xJ@ zlt4hgze{R{o0_7^jnRQXv#x1dEdeG(&c?URi#{cdN8p-Xb>s0l^jr?uB-4Qt{OstM zZ%G#rcG2Vj|04iPI1@JoD};l!+R(*j$-B`%CLBGz0Na}nbJ4{Fa5b{Kno>>=nyXW@11C*UsDTa*m7h7SSw7j> z9cZVR|FZZi%9Jd^?!kIGq2FYb7#XmS}m_pJGYJjIK|&zx0>cql?c^F|~$MX=oIN+AHiBnOeP>V4E(sI^etnB)+I zTRSc#9LEjvm!AKJYXRXr$(rXFz{e#oLr47hZ1A`x;D{?YUjGj;6PbEXOlA|_S5-P- zjaOfFxZo!O!}B-EdFB^}Q=jcgXiveG)`&|!j}~_5cz7^AmZ&V%tHKUXsA?LmO%6eJ z$G=ItCU z-kblJmAnT}<6jfWl3j2bzYC+v_dRF0xyc>!W6`M$T4~w)Qi4!^1#J?N~Td8y)8~;qRqA&L(|AkSn?9GLX z*TQ}~~ zNtF30h{f&?dsaA9(-&w=m)PYfREgOGuQmCOm!iS?^iqq*ZUFkP3WSy(7}E~lTE3L* zgwjNMUu@i(#FoAu$?ItNctXsTVb>VV%c*cMo!1QPi7BMSI|ux zn}NOH2e*suMWiomU=zZu!_3N4`N!mgsIU3dYy4_}Su19`1(e$g|B&kMr`94-+x+21 zX)W~Ol901gp{a4%Y#Z9_OLAL8^KOYn={A7oU)#@&x1CuE`+{7;xe=?b0|Lnpk-$dRj)czew-EZ7hr!F= zbn}$vnDGtpi0c*%9-xuvT_TxPr`8f80nUqt+ot5A%yqM(DkIl*B)FzfU}n$E;|)H( z4Z)rlb33U>#B*;_>ImtUVKB}DX6jT!KPbPYTg3_hmm>)WpVuQl&BKL+E%i62dF4~s zr)p=%&&)prTn2K6Eh4<+`V^3EW1v}8oJ239k?twok$Ph54Fz3+x@14e%+)D%&@LHa zHi}I~-Mv!|F!Qn#zT;qeFA3@t7G@p#;4AGfo(;i)rbzibi_=l-{XNL@RsQxw;SC>G z@bFJ*h3x*8Y|*O~uzN`g0bXJeKoCMgr@_mVM}a9$Xaz44r^R62ZzXlz^Ai@D(l((1 zj}A*=bGlQb_5Co>lANN9dJ@6_&YL`$m0X?GOvkM2Ox}fYULi$_>uFJz9N6mNZD|;`QC$Y5)4^uLr3*9`b&oL@x+#ZrwQjT zoL=B`Ja%$JvhlXR6={DD5+its508rFJ8fvlpp@0yXLUc>*-BA5sAcQn0_!K*Vj~gmT z$e0vo+J02ZP{fe3WyQ$_KISqa|O7y;lo~H!MZjSHJYdh zSYnT2uPF9tEWeq3$g%I2dr7_z|HyY!cG}L)o1G1T3w?#*PytvtBQ^`mO>xOVx3&ZD z9pnDYKFpD*;#w*p0}xo!q}j2J@hfZ3j?K>aLj_}LsEh(}p+s{&)={YDj5@j1K3zc@ zC&gOhqMOcC2V26TU&$Gv0YfIk05g2xZpifIR%GS$8UxMA@aASN+FhArnuyu}6-=yIBgnU?Mx&fyv~M8yZl|Gmy#1 zy|K%XX8D{cHaH+SQ)XQvt1A~&wIS!e>TT(Q1F-~QHOYRL)Bh9f;2%A0Xi9c0o3m*C zSN4-#0CtljDRETXLxqA$A+X;c9pq^ZLzq{>ZU9#`>A7REEzx*FGR`gz1LOI|mEL%b z5SE)Eno2@Z)eyMI2G6rl?U~q`Xb%e?Kf6>D1lQEK>x#b57^x)8t`-9MdwzMiSs8Lp z+)TXet{krj{_;Z3q`vRw!K>Wi^nmX!E6BVbpvYTrK6Vo_GB=jq#Tde0mXs`|6pNri zG#j5^VjTz{?{4%h2H4vi2NG$b7%+x-2nF@ZpG>D&_V~hM-Q0v>VtQRBX_59J+pwR@mE!BWV=mN;#`|+h%6-~bz`vyhe zduwe6oYYz*w+w>_!T^IpD1?74aY&nr+CGe}iYxN`wNXq}SkYW=MG|qa1PwzfUGhA( zE~b%1=kHCohg2#V3Q&gF$AeKgVf=)=Hn0D2(_gS>@aHxD$GG#irJDD#&k1L@a(oiVokIxxP7c7F+cP(rCDEN zAL91b=lt()o&c+|z5nc6MnT&+C&A4N#7c^OhR3{ACUH~z0E0UDoPLrYoQ)@ym5hXS zIE2)r1^#hgk?ZXKl_F07*ZpLQB4W{o(afn8Vq!`|LgSQ}4;`Mh;p7_tJ|w3*qJkR*TB{`$vGnrY)`v% zjB`TDiyD76F$2ncr?G@>9vI%$>k{XIz}f!ZU+@hT9#|qg%%#!`<0>+);Z@e|ak&UP z{rv1HdjPh#oZ!I$+X{mNu>LT&cidT&b6~sAsXIWmSGJ zR)bDnh{S2>Z#hv(80LZ9L^ZD-9LL@*eKq&)Q3@C=i22S&fuqo$X{hz3GFgW?-%(!)EK658M519qh_*eI5U?gZkoPu<)s-}Po z@`+Gxj*h#BSk&t}2je};fAxN>7X?wk5`#Qn{gU(G|9xFzMi_fUo^4{|SjA>sg}}WF zfEw@R5-{8~8JMu;2dpJ9VKq*Sdxrcv-uZU=31A43+ca69e({nxS2E01?M#=dj( z!F5;R!{9CO>erc(Weow0kBse+;X_nu@ovJl+L$jskB(Q8c?)J+(p@{^tnrJ=pPs|F z*n^fYfTB1f62HEv9>=*09(8b!uY7fuiq_l}*Au~FEqvjkhg{xgKXF1T{n(a&HW;W@lfC zWA`;*jB4VAuWsVFVT0*`T*@-S>RuiItf2ANuz+oV%IE^vHv^O;1vK^Wib1W&cYE!@&41yBK>QQ+kPmSVH0M>^aMWA57tJy| z0<};%YK&_TV9?jusOg)tGXOY>&qjghv1GC+wQ7GKto)pryZn$e$t~y@#G5olS91%>@ z1SH}lL>%*j8(MkruO&U|6u$tsy!+QCyv26BpE%7(7)8wp5iPKG4PRtbl)A<{A_G;k z?z=g{DrMV!N>^zwM74xGU3dwItZ}Z1g0`;~AAyLhyH;?)9O#K${szkqXDBL)kHR`v zk7q;V15d4g+7#qfoqOn5vILfWg@ni35syG`JDTMe&z`Uvcynj%!&SS}ith9eqQCw?+6c<0HGH=Tj*VOiC|&>Em? zN39yfKSO0L+%7D^F@;KwnA8=%2X7MG&fAe(ew*V=$25%}k3D4lMqN9BV*}3{H!s#i zNZ8JQ=2x7!gQFTr@SItev{Q@twaC10()K}H0LyI-i-Zlau^$4c5PT8`&fSiTHzyvc z11;&W@OXlv8+w%NOb5}O;<9EQ4YltWe;jw6a`7A5M}i0YamPuCqDq6dkkSTrKEbUm zo`PWkD%!4ld>#^YZ`8Lpj%|Fz9W#vKAvwS`9o;9MJptcuhtmHqSoci1jf3?Tu#E#@ z1=n`S0*pIU(zgTR=c4!uio51V1DfZux(BxI^d1Pz5fd_yx6hmQI7;gdb^0Z=Iy6Dm=9rhDn&SNDku-XnR z!dW;67?|6clbjLp*7W$4_)RE_Es0~ZH-Rh^a@;UG)J*WUCxxTEm86($N*{P$?YyIpDGybtr7+S z9;NtoSv5btIFDk z@f%R|fB79=y8uLgUanHl_>G+9?McR)&atCg)bX|Py{MSo+Pgo1xSDXb$EnQ_J)noy z+gxxzgZ78F@5%U7xQ`T(7T*TnEIK>>r#78|bCoobkr?%@nizhn3DF2kpDmBK@dw7u zg5T8r+YcVfh1pj|(*Tx2gq@0i0su>TGrIVfI`bV&JxyGY{DwsC8xfgJG3Fartx#{}wJ zb>IoK1SMT*mcYIc6b;u;!sDdygz1Rpi;!p<4QS@eF%9W#37Wtk;d_gShBXbJP$aOtuU62lg_XfH z6XimdSmO^(@T0*F3GB$XaOy#GY>$H7yo|^s%Eafqgn~XHCO*{3DS-{oy!+8}BtDY4 z?mxkWvhGj(u3<)_DL%~}PJV%g_hOthw>B6DvU>n79*IB>Yhms}-B}_pYJsxlE zi;Dd!7ZWf87d(K$O0-{SLK?yi`YHRa&FGL@*mh&O(hovF) z6F%X(f(M#5KMU*X$u$@8LcpA-4pEIvuo9GmA!!rrU?MF%PBAW7N!K+^*oX`-eQ2G$ z0VofaSty0Q;1O=@_pa`Hh{gX^a;sx)yAWUj6Bk=R@kKltv0=q6MkYj|yq?caYB2%i)kH2OWzSDA49J5i8EgTw>*jPNcGP`b zLPtC*Q#a(HU z$e$hLnZtO5`8Wt&e`bw5_`ur!1qtjGmOT^NoyS*LR?4iMwunt&-^sqT`EYCx%QJD$R)a~e%7n^EvmV=tzX7~%tiTJB;&gME29a4ew)HbsX2Y}FZ` zE-HpUBWavCjv*6@kSg*b%?Iaez}1RuofU0;BB3X%krrh>?E(7Wb3slRC7qR_3GhK> zEPgDD-Z)!9O;06!#=6Xnm`4jgf%f^P2_6Bv6CLs$fw_zg(6**y3KQla?Z^#vreZnl*Z;C=hCv~IH0pLgVJRZ`R_V!1Js{wdD;eg6B4ERc z_&^Ja+=vrrqh!pDj<5`0|nYo{G`eU|V$#*T!k*gs!f!vSzrBcXf9B^5VUtU%H1z5W-7n)hp#^kd7 zQ-X^89W&3FG+hNp9@DQ06LBZ(d!l>+)<{;!osJ;~YJj#S%$bazi=dN4L7$r@UPlSl z4t%`#DzFhIrydNpRArgi1y}ibi0F&ffJ3LiV3K>i`D zf;r=?9xu)rrweN)2IIn?=yv)9!NOgD8$)R1j2k``;;cf%vQA$0Z2@9FHS-%tE(M>5ynoir)Fy(&nualTgMZhxzK}f{b6t$e7*F}LtqBkB{@SB-xnB~cn1Kw zmFu+{OLni|&j?v?obT_rkO&9g%Ivx>4IZB8io1Ez+l@~u!Afy7h7km1_`d!ExAZx~ z7b)q^pA+q{F6nip(AgFo{ZHvYc<~E-$nbg2f_e^?^xgE3a@H7^cpe|M?-3vWE*}iR z*;7Kd%nJ@NGZW2etLcevO#ooc(&oo-2t#^L!n{Xmo5VzAvqz%Vl7}k)T2s49U;ik?S5nkse z>TCc*bf@jTv;ZAay{wvfayX1024c7Itynr$UqL@!P3(({?fl$yN?+hLm{Yg}0b>CW zsD!SuA@I~Xdwc}1xRT#)C1wMbR^#$|9fs)4e^ik!1a>@RLq!Jn@O5ULAo~gv?NJa> z&pglI136io(j;7nBg_Gwj=q=3T4CoOY2t;~H~nSuMmEu#6u(P!At@t#?MUJDEpSXz z$63<6hlvYtyUtyduZ#f<{&FXENCidah4JyYt-*`xFlewi@ez7W@TSSG4=`kNX^n(^ z{M15$4>mx5>e@Ds&jCbFuAU=-U=<-IupJeWtb{oUSa^hwwj~e0jQ%_E7!bc0kyked zWZw|Nvte`NWlvjtPGnE>#Z1f@)C>f@jT1EgV}duwMMWXqy%9;~sH4DjX~!Rcum{P3 zvf2@{OaU|!3kmf?=!WJH6}{!83wd&hbd?|RERORkX^c(M0mN`__3rEV8p}$#`cElg z0))-Q=j(SmCN;x>DtYBQ&2IwE+}gjage1adL5&IfrEikC5IG75MXB~cgX^$1~h^FVT9blOwDdnU|a7 zOwWZT)x&Rzx7(3tb%5V>+{2m@;<%&IPK}am@qBf=!Ic^~_`Z?Mg$prfgT3Ec$kkwn znITs^6_&J&#p0;p3kjfk$QA7*oU?Yoh`;d~?2$G}y)d_}`Ag3HaBv9hXfQa1gkhF4 zMs!Yc67sa@S`#jBfjgjhBXvQ$Bz%G9QJ;?W4}fbqajqr7!j3vkbs;b!Bxw;`tk}~& zsXrD0BK)4N?+ccKZ_*lJL9Bp83`(jZGzSDWLIM11NxtrhRM6R-lg?WKnm4;6He(L? zBi9(n@gSC908Lex?}foBOqHyn`+rROig{wiuPfetg#~Qja!L@Pn7c+^PjcDUFUb=d zSQj^1GSL)%)>P`^hM(&DC7IF*gOXNYb8N^Zn=07h{C{EPC=Z;BzOOx{X*sIrbK;z}Co6SPIqPeLfpZXqB{QbQ1ec8D6=b8HS7s za>8N>Z7D03!V17+j{|W_X3qQ+lT;A{$&8CDyEuT7UAUx!Gbq;T3v-WfUCvA4n=!q; zD2Yv3{Lub&O)uc&oz$4Z!A(m3V{R=(miLF&m=qI#a4ekrPVy4YSklDUq|un;pRZzV zHWBdrz(pjEiBjiq7hVDuOA_)JlHBbZ@YG7El@(8&6)}^_lJQmfd`VjIO2T#%GpSv8}< z2@Fms0@Akl?399bJerh>x*4}IbE*~u>?vpbxaTkwRdLNFhT8p9(m8aWkq_=$;n!Jv zE~_%iypWuMx#`hRXv0j;O{$70TANPa=msbb$T7h_n-#Y7GZ$i3LHHH6fha6V;1hU@ z*8M_~H*P1JD;z2Ef*6XoNsW3k+fH)!`@tX>z++FooL&qqel_6>jnISwI|sY9 z1Y?LY?#ImVgh)W(Ar!9*F)<^Zt|a9G3-8LWzO)NGOv&v<5^1pUUr|B`jQ<*c7X}8A zt4Vs~Km2+tMLGaZ2I2<(jR999whxjj(XH2$(h#`Z>f=_a06g)(0Snny{w7v5>t@mh zgwD=xJ4^q6q&ZLj{#I;DKW`HFHr9?_yp`mK&a=$pY5nP86!Cd(!)k%L_%V^jU@5FP5J~Rx^=^xk=;DpXhLSO|K+=y?-8b8gDE``R zL317_u^UpcJEm6q0(3|H8-jh$lQhVv$Dl=B`v5>J*r`$77#2CYyPpj?`sjo$K2dE+ zU0x>jLM(p`E??Lmu*7j#Bw}W1Ht-Fx!VYYl-guQn(Jq%&9olCjEc!DSq&Q#}+RE6a z9fdhfEz!}_I$gVrVcb!!+R6ING>-lz3L5h{X(bv)wN|Sh&H%$$FK1TFH&qM4r;68O zYQ&CR@n4gA;+hjZZa(b}Yql`XcF8nKhGEPGEYRT_(Z}Ne?Q1*%+)_qDu7wiE0Aq}=j?uOwhGRy9f(AA@?d^o!hQw1SvGwxgLxWpbMy;(K+2q1Xfyj@MK+=j>r zn3cs~2XiBlSN)ub;*y^Wg~>&^n5>+5bgkAA;8)M>@DeX(8xeBgEDVBE0E`ej1bx-r zYbIx*M-S)~RAUF&n6KPXn+Z9ly}z?i;0Do4TnRf0O!P_K4_I!*4O&WJC9+2WG?jFX zzmlA|0}Ba>%Cw_veUn$ z2evX;ZcD}zNhtzLA*mXAxqIDYHZO3*&wm~Z071z1tA)Nut|LSNTma6hrB53qv$;rm z$7T~vfPE`2X_V*z>lH|yg#GQOA_ac&FovROatJD6@3dZ7SPLxTBDutpO5ojuLEF*S z+2dReEs|OD&WYs@F4+QtXgLIEyud(3;Wk6yH|7WoAZVRD8pG7JWmDWoLztQ+cL2cs zlOc%Q5n|%VruAw<23gR>9h2vy7Bd1ruZ#sTgvp7a#0n}3&jE>eQG&)qBuAkZ1IN8> zjt?KGxSU2J2b@SHWY+LE@f2dRFyuh9nS##hoy<-^D~HW7#fLFQa^5dd1vLM`XG8$@ z5j=K+FsZt4at{>4sO!Nq@JWqV|7J#vfnWlU=YbX@lRx6}6>p9|{{YM1BWJ{7bvVc$ zy2P<-?aJ`vFK7WNyZ#*bHz=@xgO#w2Z_5! zT?s4!SUaJ}3VX#te6119s?)KFb%2F@4vmC`5+D4|!i0&*Y^aIdm>oVD0E@G=3|oan zad_@T_UV$T$rYH<9o1id4C?+Sr|$2J)56)w2U$ii-_l158n%?va4DY!-u^Ib5xT_` z)OlWVBh*vXyz=WBfS%5AW-4K}#982q^z3A~GQTjHT{}NNZ?IwjtkX?yPsM=C)D+G!o{WX>{#h-iO161Ft?0zkRkbJAkb#zAh+5i_A^|7vvRvgGRMnGs$NN!FmMDO@3( zHx3GJ^&?tR+a0|;v9xqX&XQQY8aVSJ;}^rcGaSrFQ`RK2?txlYt~J8$0omIf5Q{qr z1p)prDEZd<8&>)3KAcvDBtnD0C-Pp*j9pkNl7^+e0TghSgHKZW(>^m=T{$?;cz!2ypluO}!#f<#S zqvUS5=IyrHAiSGzDYIq@YmPul>o*>DE(8bK%~dufl;Fp`=<^TBJ#bB3C-i>X0M@iX z?x=y`lxX((`;wS@D{N`@w`BI^<39a;3BEzy@xR$?ZiN(ERD|=}tl=*Ktel+kAuMzv zgAe+1M^D$X7_FtPAWLfWXIi3a#Jr&bM97NaRty>(^6 z5HN+mjMFSR@kV^`x1hJ0q&!2KTc@O7IR!LVfopP$3kSn4`43yRI+ATq{9yuG)nq%8 z-)+7*Z5NjE77+-o)xjSD!Bn}d01?oPRw>&N;)Rz}SUNzs%5X{n;uHS(w)egFdiXK_ z+BR>mbYlAy9R`7mTMo|%0j$;G(Msri4ky%j{Cq?~ zmyb&!D9ZbJi(F96$K<* zP5t2uU)YqC zus-D&!r6Q}P_z-?+Wt2i*chwvxjm5dfG- zeIe%(EJ0`rTv*b1yHfh0H&}kyp~f!+E#v|%p4`MW(4c)Ojj_2`r)?37H<5n|ExY!A zph`m4r@(t*zooD%jHA1TxNQe!!#QRpiv}xeLJQBNw5kMzQq7tz@_{=c`Q2m)eK%?= zI`v+P2GzSSz;eoDQ12}+jgs)kvLNsUDhGb$^?30Gru%?g`k7Mk&{ajLmGG71aF%yKDIQ*MBQ~{vG~T$`lk{ z?)1K~C_FE@!$2un0%SdDr!QiHmF@7weJw<*EG{FLtel4xnqMzz7*$YR1@%|-j^Ezs zj(-N}50oo^;EhwZa%90n91&5;LcI~=*`-lu^43EL)_*L3X(N|mDVRw_fjm0K5>yk?C_ce1JN)(#)P`3Rs_}e_xcY;YbSKMiR*{g zq<#h1mlXTOt2X4E_`R z)s@iB(uTFJS`G|mAGaq;fKh1_X#R>OQbRFgF1~hkgbSbl0D=1PqZW14+Yzi&-A26+*LFfT zm8^udMRAs742+o9QM*FNy7~aZx`d9bci{gVNy08>Togz?#V;7E_IR1?25;TqBf})y z6GHA_dd43Adeu*Df(hR0;R}BF2EOx#JDf;ZZ83}ZlL&vc6DjDYwh_MFg@Ubc8<1I( z$Tn&foi{}N26@lzV7CKb$2lz*JN^loD1vXp)h?*9jQ;C(xq!y_;U*Fh;1F*C7gUMy z1IN;az{%>->H(;@wmUmI4*mzUXvYtBv!?>+MNXU& z>f*PQ9VxbYjoO;bd@)anS%wwuvPd0@vE<;Phv#veos!#h;^jbvFZWA>nK~YZd;hqB-os1W!AwGp zwVq@?2{EZ!rtL6li<+Gf=kGjv8V?s(nlQ>QyYlUExSE9^JjFW*9k;3Tf%^0jLAUn7 zhJhDOjKZRB8CVUHISd+Kn1iHmSO0;_Ua8FrxdhZ-a(jn_f9yPC7%B^4&+uf26A6eW z9vLLBl!ZVsHVBlAM19{`)E z3^CB4TL}hy=0woE#PM9)&Z^nFnE{F4l6?X0qin#qu*9DRpI6^R$!{1pFdSR{u5$j( z+W_^vq>jYPfk*dPjWY%G%Zz)acw@%>CcKbYa80eiJ3T%=x=Q$TF3uG&ECxu3-J22L z)R2PRR9C=a*VmE1n&D-m1n#%o!o?feNI|f9g(s`%Tk4~D`zrF6Ex+vm*eRUz8-b;X zg=+S-I&fWeKYxID$+;j01${%8)ISKtK+TnGbA`LJE$*vXS)xN57keyA9Or;}>51LP z$S?7@uePEgkJKt`f}MI`XR`k8tYM%M6c?&sAY7jMoeIAUUB zpuynh6|3(7WP$aL2{5;+TrvD{8VHB~A^s;`>db$G)^zxldI8odPyFQdZW0I-Cqi;y z1`cV=8?_rM&P6|Y6Amxph0inBO@GYQ;Eh7gTeSOud8rC&@m_t<65ROlrOE5}gY8Z# z`D#<*#@D{8+cCf8@Uct9{v>B{fEDRHCcqu8EWnp9-8Z!lcA<>4STLX#FjQ5_ykX7Y z#_i^d2!yQnpj=wbMAHwwV&SApi&_BS6gj;@Vq6CJ2al*>pboM83VxQq>;w6L0nJ$N6|r9!PwK=1&!Mp=SgJvHn( zpn}y~!hQo#oU?8a4+qLR1pR4L4b3aGp}l8kvYxFo9E3!m-_5{5X!tk0^F;Eeo>J21 zUK)1AzoyyCakBxs3m1?%nqoWyE4CL30D&cG)M~Dhp7+)0@J>lflLyPS;0^A+GE9Fr z1%=S+GwwziH8e_6oU+=CUTvspi5tr4_sa^~fS~ysU>qN1)JtB5Y2bmX<{CBu*UPVS zq6f$gGbE#Ovp*B7{T4;2cPvm&S<{yPmQl zk6LN=0v0Q8$3b{5#jtzFG{als)JD606fr*EGmD8VXsZX8T&W_^isX5;LN_A2qMh zy|xqvkH$|a!N!v^vDdP&d?-u+R`l1jF@+k^h@iDfY%~;Pj*nPF8ZuJTnI0UhX^#u- zX;R+B6Be2ySNu`-I#*dhV)cb6_}7cL9{^#m{8_UVHT60#AZH5*yO*4+!N+fZg0d1K z0D}kJK2r0888E%oyxV72urj?&;i_D@;mCAd8Z=(h8LK_k*~_+BLWY(gGkJ!BnCD=4 z+!?-YB_4-o$QCdlAtQwiwYK_&8XGcbj^->tKIr5(b0?Ufm8=P3I*AKINIEN8GavVm zszpP34+442lx7Iw;+~EFQv3Ou%@~OvTHfv08EACl1ju=~n42M)eG4_$@tnQJ%G85G z#Q#{ctaC|Bt(&!GTB=Jq{vOq)p=WUKV z_!`+4wnJo(05vCJheaqvLw3>KWrcV!Rqey$Fb`1eI6azXJ58tYJ#>U70cO$5Sy?cP8W25@t@CGv38BukTu zKX#t=<#!y6(NE^b_&HM~VkazxrBxz8N=ce_=wnIk_h`1F2|W)#`VxCiWZ#-Yxw1uC zQQHF=HY@9|k-xop4T8zxQYxNV0?kk*^y!4dnvu8P$Q<&QlIXJAxxl(Tv`DSsz@>V#$}S^!*ke~EM0`IZW_05)e9cM-No z3p(vL4I9MO;QjVR2LVFK1saLbF$>T7ps^CxDMH~)64eWi_8On=$DI{2YA>US;2A( zdZ---hAU?8FT;x6XuuUsq9y!x`L?yrIDMe2w0)%1KitSWKW!yixlnT#W8CVdtxpt! zdtiU95lxEO6k{p;t|l9gF`esA^UnaNyHfqL^QZo~#*IYW*PMbi-&@+lZyN-PFYsps ze@T=A0(L^NeJETe9lSb5LFT&8h2GZ(nmy>nqjJvHKL`X*f%pt)B%(td3WbiLFzGSM z0r505i&4~Hb3uvFRT zMF9ZMkmC~LqXD=QTP%(Es>wyJUk+DCoB<5{4JZkD$Sy+&YHO8CD72lRwDu-w3BsQr z)4vF>U%i!Mzf{`@Zz{yVzxJZc1yijp%_y(cA+FfbRWvIB7k(cyDheJKjWN|8LfA*S zOO(t11(w1#_7dIme9g@>H1OlgQl?8|WHp*>sXd3ESwap>&fN={sk7V{IusBE0ewOv z4ji?9QvobtD`&(Kk+Sm>Xw;TIs-$Ht8-1NatZ{5@WiEb7z;MqH^Od<(wXS4)SJ>&; zt&~|+w0JAUbinf2*&xB%usVYXB@P7NP(&mYkkrT6-MH(XudjjSzvWnlVasJ`Q>W@$ zcFD`?x=?#G@ZEznfLWdeBrA)F3mzb-o0oPR`t5?;fq#w#42!s8fCLM4|B4(4 z9#un4T<8No?KeCOod4tN*FPXYC(G?%EQdijxJ`%W7nV2m`9V7Xb++|~Lw@~10Gqim zFCh<&h-JuI3XQ5kD5a`;TK0_JKIPf&;{e4oITYU$MKiVn5rs43hXOy_&0)t$sc-iy zw(T6}7Q@+rxZ^N!nzqp11O87~*Q$l(wij~S2v%>|VSxs=)NVwt39a~f+5#{YjF?8v zrBru<;2sL20KWObBU0^KYa5{6S{KH)tq0J~T)dSC4!Rsm1cw-urFp9*ecoPs)f5iC zYZfkj%` zKub>IVZ(lRAyIZZCo*nTfF-#RcUtietg*qB>{nT<0$j<2dOBOWzK8Y#mQ>$-Y1X;` z_!(sUv@7zIQyqCq9JgCV@AT1r!(`;(;>E+hfx7TT6eH>qO(P~!t0KdlhAU}Uf2}Es zqT_-31z5!5i|(AB44}f{8lfgubk#uZYJ~kF6$cg^dHycA z5-9E-=fTL|+=hAZc?{IxD#Qf9A)6F$)MApKc04^0ll=1BiX>dJgAE8mLCrR6>*A*L zYs9&R_P|;kmk~(7CO*`{KoF$13jT2;w;Xj!@-+dTI6k;lyBjz61%ItI!P@mHj$a8H zRug2@5AW2rLa<|6w@OX`c9qKsq+pO+QUGJ6l2sj*>>a{<5ROr0u-$|a>U=;u3>$sB zNB6$b1U&G$)DaB&7UgM1za7;+vjfBOPku1@BK-WCS6ND&Rf-MjksbY^ATS^dMwfKU z(^_FPt9B#hA+{HM0LdD-Gy)5sowo$okZM<#+tOnN+Pa8fOiwG{+JFFgHXz^xV<4`i zZ7yoZAlQ>(iLrR4d%SV!lmR1)YwIdg*UQ?jSWhS)+U|$006UI@<#;Yfpew^)zy&MG z^SuGpiRNd_F0X3CFxsRqn7ODKK(FD1EWv>183P78;dW=dy~B#88*XXaAf6?`d39O? zo~c~j(r3ai#}9E*ZXKuCo`y zy7O*B1^!qU1le=NMpx33VX%qI2wZ?=UP+@7LY$0f_V8uHKZTe$-L7 z3ONs$f4KDo;5=Je11U?L#RCK9zqsnIVn|wWI{Ct8;QVj7kR%>Bzpq-bt%pT9j7#*d zYPx(3@lF-1*USU<_i#RlGG`?lkh!~%0$}ivmm_RO{+>FD1EaF;_zc<$8(?MQXEAX< z$qCdcg{@#AR-*5>_t(`!A6!LyKdu9Q6v(+QXN3#_1q5pmU}pbY+Svebh%;MG%Vj7= zbw!F@FKSgZH$*oI5v=Is^9e8BYzCh(*u4=1q{+1a8>*?Tn~g5hYI=>K;{bFE2g)&9 zj(XP9W#Fg%6-`%}wg4u70O zekiX4P9pG`9a~kv{7i-IfT0HY+iaVX#&*+9Lmo)|h5M!g4?Q^}0- zCzHw+mN~;akNF#XjBm&Pqk9PCSrhv-;iR>8KbEAWZo2;-(EHUSA?t+0xs zYKo#w+;PB#z8I$Kj}~*8{^9l$pz!7_Mj~2P1r$+e5Cz>fLdS+CuM8RAZ#PKgGUt?% zMY4>xgn?$ECVuqxC>=|}H~Q7J-wDvz`)4q82{c%15Q#7eG$r%i1vm&EJ#ZWm>@P}c zKUUYr0@P#cqB8jr^g4@^^daIiTh)ni5PFAmE zLPul{!Z*NUO{*=`xuVuRHqVW+hPCwOBrnmr1O-(u*0~|D=4jwi69DeS0ZY_|mMt!Z z0)5j8AoE@2*V$bMIPS9;`8_}1AagU?BvIGj6{Ou?*GJU~4lP*`Mr}h(eMG~`ZwbeF zTD)H8gysFOsdp-1A3#$nho#ZUiDXs|g!BLD#kO?RCS5C>`{VER`*Qr2AajRG{1zP( z9%@pPe)~oD1y3y7Gdysq2Y(c{|)P7m)YiE(Y$+0_SNwW^o30oQsnde_x3B~H zgp47*%1sR*In@I#1XXW;7$2E^R_BkonD)tuk#0aP|Nlthah63;As-;DX}xp0CkU~h z4zG^C&gYzjXA&VCNVAkFP-v|=%96y?PBEpi`MRbU^di>}Y}_2oMJ<>AvV$VRH(r&uLJ;tV~Rw>vn^D zZoG&O!2W~h@W(+J0+LvP6Fvc~2Z?B@XNt0--bK2l7~`C@!XmpELEvI`{_mT6YF%X}@gQzaF3-aZpH$eY1wF z%!vRkE1{qtCJeb@GZfVEJ)CBsP}}y_zTGRq5;~L&gOF5?y-0AaR5SA7v(EV+3bk1K zB88uIF0|_x-3APbo4+Jh#^)*UQkoILiMD}I1fUdq+oxLMWhNZF*#%Y&i#-%8#(2RP|d_Y;1D+&Q3UlP_6|HZJ?BY zA*CmN{ETRxszXATFFL-S0fdJ9A0c*ZVT2GuMdCZohWD^rrY^%5w5GST@>mAfCp^6+ z{Dp(Bl>8@FG|_Ta^+IP1>yz3OefUCymzA-{;k5LWWq=i{=m;vz23Y2nd0?ko#=0)& zJ}8J^IKD=$tiGxrRu?LC$Z&>Rvg|X5xaOD-v*5Y6-uR_!%%D_P8(?6BnX<7pgsoQG z83dbRUnY^7o@B?+~*38^FSdgIvK z7n|_0-L_nToFfUz4Q$jxP#^fND;)U|zY+ggJV`;X%}8B^+fyTpn+@?|+|R}jY$c%& zFjU6=D|kwHPU>B}l{@tH^@2OlFSj-1U)06Oo0E*_Kv&|vIntH}>r-pk!IImy-n7#b zw&Gyvgzqv^cJB*P#(oHM3iA|V(Y!jvjaY&&$8M7DsS+?4iM1hBjlnNJZeKNQFJ1)l zcjc zcG28RZu)r>aM--0XI?x3aYjUYUr9Y(9_;?Zh{h>vKq!$VLJ^J~uMbI2v&98Yq%c0M zD#>pbWJ#)oWGMcr-5$n{`IE@$K{mpf0m#Aa>#40VgXl1HTy`Ch({$q&C4RLb5sybEKr zJb>BNu*n!vnOKWLNa8UfNI|OV=h^M`N@HuiyY%6P@c zH?dpvz>yufxe%%@%1uOJwMu3rkwfqUwSno^)zdE@2D6M}*1lN{5Mw1i!aC`F^7 z(f(=o(XEdSR1tiNBaRCM5@6OFz<{HE3Wb*ZO!IUleGrtEjunH)KelzkmTo<_cnJpf zbw2EJnuCC=un?3(G1uw%$5MFP=!diz1>kAhC9A9`JQ4{`CAi#NPJ35%aCw|F+xj5%}Wh9Ex@^*YU-UhkZy zL&eWKH|7Y=7Edw0c5%x@mI=U{(<9x|lsF{MwRr=V51{;|T$&zpQCC)+NBV&KkG@ECzX`^=VUDq4O*+DBaE>vCO^Kf>~gK= z=tC#bka#cRe_ZOrHi8DoSqSQ%VYm!Bg_0)BPxD5>#H^oGqZSB8kP{3$fH9L6@%%Cp z(;1IBvlJxg(Ev*tl#rH#DRa@j_F*`JX`FF+iE*hE7o4q=)7GO!yKUHTE*UJ^PiFNc z@1LQ0gse<^08p1&9QykhY+P@-%}Xi<_G%h#9hF8S<72)1Daertdtp+4Mp^|lP2W}x z23mnM2Xp&1hej*{GSkj@7*vtI$V_8xhUIs8g)0C|!yO?x(2_^77;NFQAU_(jA#Dvt zgM<5C{ftVK@d%uBRpP}2U@e5Kk@y`Gbf}^kThiQ7hdVSKJlsKtyXACf@aj@DX0+mN z@NHOseEzHTXy~(K6vs|1%ryalxsWxs)PRTWOAA8-ZWr;sc^DY*DmgD@Zx|yQT6`ky zJW9cAoy}2{!ak|Lluee{mwQGXz-)w^ahU&m{GJwoS1|k?*Yv3ZI{3&PN_ZWBKN79~ z93P<|3QH}6FQ<75gT})LdRllc?Ho=pd3v$GRW|T(7er~;RsRi3s8DSJ)L=x^2Vv|FIX)Rg^_Hr3_OPn99XVI0w^BPA&v#G?q~)ZE-8j2@{|lZ*m4N z2RiTN#K(%hxN;8yLQ~L_chgoQrJ@fT?h63uEkmi~YJ_jFqYya}Piv5R!Da5&@N&b| zr)gCX&C#0mCb$8baoov(7af5S8_@fOXl?_VTH?kS{W@(X8o~D3m#$;)>T0=Fu%Qcx zfp&PGrboi(+U(1m1t7iU`2P;(LK}QdD?+d>A?<(s1Hi($iDD9d#pX!g;7UT+I4l~$ zM$X#%x>d>YTLP@^l4F&1bpor^N$!?u@OE9(-4=A4b-G{!iSU|VyFOnJ;bKS0(M|B2 zf+m^&(_C*7HXz-SJbilmpYC?y^g8ISfnU&K=k(fGz?yfr&ByX!`MtPfD7O$X3H4Z< z?ke1x29_#}n~J4|c~#QGagPh=@p4XGaD6O;8MAuv#yJueQBW86^hs!YofXb=yFv1u zDdTvg+p+Z8C2%)uq`yLK_oy2<1K+}(E8`o4W&EW?;f++EbTh13oZTFg@eaaFXHTOX zi+MyTtQB2SFTJTP?9H`S{BqC>5{WP=tay||DN);2>BF(I=wIZ}s0{=}6?Y`yWLt8H z7YIQ`Y6jkh$Qqqqi4?U@KLH3V7xeu5IBZN!xPqMo0gT{aIu#N45|2I$q5f8Jh86vx zV>&@$g{KZ4pa)@nhBX`25Zfh6`KSyNOVcaS)?L%rp_;Ccev@%plrc}XuK<9( z@NE_bb)Xx?8vi=I92N<7)!|=LTmZHd#?FSjMfhl+lKeh8{TQrz_pis(b3pv{c!O=nY~cD|_fGro0kNY33$(NIA1EBaOK8h`&917J8E z*QnN5i1|+4Pv{zrdn&xZ4EFW2eYQ4;(N)d@*apu;aTw5ez>~xZ z+G~1x0ru*Isk6J}frCGki+AihIb&vgboxEe-hn2=`d};ZEBG_A1cRf|<#W@2M7J69 z^D&!xu;?&3w_)QWR57rd2qE+E-bIve3~R);r2Q7B7o+XW&u=#A1uQy6#&*OnY004` z)r4OFjgr`TLSxRJg!Ev{YIF^DhXsNPS^^eh{Ij0N7{owBlGB@@zkNAbgT312B&Tqe zkHk3WVIc9+bStvXb&dA_;ny3YW{ zzvCkTV_N=B*N(0d(odna#r%~Pv=NqCEN5*Hi0dP}cJ#=a^jb)=*ZbEoRbt%T@5gzel)t8L$C6p$i;W+X01lsp<2VWjPbv8ix4m{k_F{}D0oSvYwDzg= zACPEMmzBLjK~<;Zh%(@?CAd-N{+_-BiTch9@ty`m$I1~kX{oPIg)`~3(CfEMdfnqI zP`NL6G-0>bad`@%ZY;J#hZLkwMoIpn2wYm$(8O7$6GkU_9P`2Vp5`_?`59=nt_025Y{uM*XLgVcE^8-_BDk7h}c%7%C&R_eQBk4#r;NjpfE+#gCN~q{W6LdFQ<+_zcxkxn1siu!jC7 zb*PCgT~(}Glx^Jf?9I1_rvskhiC4C4 z!;TBUumk<%p=WpeMsGY$)`NPlqhEKdVET^@OQm4K4h>#w@~)w;fI@n zL_Zek9`<}YtrO6_B)0$q*vjU5);M0v;YU?4fc208qp*GagsT4h+di8LU?aEX*7iMm zI0%o^F!y3(B`=2SE%9KwVP5?)*pjR+YQp7oWWjdHRwbP{M(Llk1N}4jQ~#W%I&$OD11og zUt!l!#^_n=V18YTci4L-`(P?w*<{NP5{iKfOOo;wa`hbx^nSQ^YDPzQ^+DQlXG`3E zQEQd-or2-@>WTi)L)m_3qKfv4*Jq(i-I-av7>ChX7`M8T!CfU-R3xVdv7@uK`fr#q zy-p0i^c8e*OfGY0x6U&s`NI{kLZY96(#zXyvrPicf*Xkn??!f)a?-6c=EX$xMXxr2~qH2HJbLH==@auPSNW`y&2d{Q$m;>e=DtFQl&r>(`zQQQ5Zn&sp2iBFJrQe7cUf+GV14A6>}E$=lY%{Zd*b&`l{XIjRgVfy zspH^M4ixpW8o?#zb>dUs<@Z4&pQ2cv|1W z9BShyKdkxN5dbgClx^XpLqcEbTi|L{BD~NVu-KDBHTuB|n+5tV$VcM~&R=mmw2=~{%u zW5uVOoG~EOzSp7^ACAA&49D~QD*%(p?{D>{NXE3t?a4DpqeuTI<^n(H_hat*V&_{g z0i2A;g@w{3wfQXWtsRW#$yj+Ks@8-3 z=0NF$T(o8BJERJ};)c}7p8VnnglrCs?6nz6saLpbQj&dv-F*XCdtv_${OW8NmDkUU zyag=J@2_9?222m1^Dw?%Y^Mv^2^~*DP8M9+qQBH4*_f)_8uiv;J!rR`Tum6QsSLCu z$s0P3)t0U3odD7fQ>HmIJOo{HvfSp1a$tD8N!FmvFev_N?Qq zF+g7S9cy+4AgUL!7miMcv{N{{3qw?qb1XdY(}u9&7fIzGB;&Dopq%AN@X!_QNC0lz zF8N(nI{;v=tPF6*URfq~BNK;1bPDoyRkk^8-ichp6&)VmsK=kMB7QEZ#Im~GAdQ71 zuo!!63R2LxuA~4tITAQ*Y94S>M=roHZDj4i8HjLtQPA8TWGH$c{d4}CAs~agax!3# zJbUa7H3=8Lk?iV4Ui^=;=YVQ5d0td{3%wT=u?vD-RP0@_cg5Znf9ly4``NKBNl3mx z=%Avft`$+wa#rk$4SN^t*#9&8g_0;6{=VnEdv}>WJ3Bi&-z)-qAD`xrZp@uw9uacE zML^&nVa*<_H-3eGw;*$N4Yi_yeTgw5+VHWqu^}MB3SLQTf`;}Zo_Ouw^-1NREwJA0 zIIauLJ7nQ#GM45ICO1(@?I&E5;qwYrIZC3Cx2(X3vh?pa-EmCv9L{-w&L2%W;g1a~ zR4JPQKd!~aJf0lJAE$&(>V{uwzU0Iz!paa#W7KpCsff2?y8<5E{Q)6sx>j?vwu4ZJ zu=UWJE>HJfk^$Q6z}p4j$AjsMxrEIg_Re#n<8R)_E!UA## zjc0Og(4qrCu04+&JI#h3s$)=72t5d1AiA)_BGL)1liq)PUI) zNpAyig&HlIb!-fzKXUvAq(WEdPS-9cSCLp_I&GvHh|T3C%{g-;*vhR=&#xjg&~(R_ z&D?^OTRYx)2D`#=!B?Z(Bgrc4j*%>G^l~Z$Yh_K2YFQ84YCjjUZkeAosTGrENz;|Y z6OB2z=J?(oAl@t>U7~4FyIWTKdC;0MyhB+cVd6&vwGz z^sVh{lhFuJ-QkrOaWmSY^s}L>{~@Mm$1m-UKEQ`+@g}Q88SxZNBuYOR5xj@oK``Gc z8(;4QwIuS0L97wMgxuLR3<5D`T9YA0@J8&E1LQBXOW>E6-RA=J7+xY#NS&dvq#+q3 z2Z76WK5uXefOEOP;7c_82+2e5YuUO_=5|ogEKW!g14rgr{9gLPMn6*${vR=dVPSq1 zu-sum-<%*-kb0TbpG+$Q^R)y}eS%og)&G%CWnta@n^NH>4t%@8 zQ9X8EO_{l+A=AE)cf5{4Bc?`L`5bA2Yz&Y+eb^X~Z08^$M=YX(m@tCs1a`~d=0$?v zZ8If5Q~fOI=L^IPakct(b)F~SI?M}TY?UbeTp2S)r2jTQcTL6N5;=!h9=EgXdt_3^x5% zBzL!;IezhMN!W92k8hCP$nLHC^_2qwxEV)i3JB_>1JyXwZwS`^t$DH`HJWpe)J60) z&TqYrue)+H90oD*0cnLxYs0EC8P$QtX`V$9LJ$^WDYC{hc-O%D35h{+Yg}8c5K#F% zuVlc%XK)XK4^gdYz;lv-lLTXGCj>KY^8xE=w?ck&ARY#<2m;7djaL^;z5 zUr0CP-{o}|s}LYOl*fM|EcN*zE+NZjl~+^%ooPQ&sht*(7-!)31w;iaLZ@tTqIZ6g z^LSVIYxBW?bFc?~@GjZ^D6GFJ$Y8&UQQqZ&!RdM#gr(sutUC{%T?w@>VC3*qp0uJn zBvCcc4QscPZm9-wEP;1^0ghV>k$}PyId-J|9HIh{iTjQY7yW?=?e8|V#ial|4wqMV zt2y5dV0nG#tV#;De2LEI+rGI!eo7|gEG4lbl$8m^$~^BVYhmO?Jc?pKN+cdp$e&X? z)A2t6%MhND*c3%n5(O-5p|!g7@}V(+Rpxm<+e!+En+dBfp>~isjja@Ag1h%L&)^um zdokdtmX*YiI?4cZj;lr4Bj<9@p%Whi3xPb&Stn;9ECE~`aM z!t24lfNM5S999Qqt`d9&+s?$ezIVGJ?dun{1^1X^b*d#u0gW4nB^347e)EIYA`Urhe3Tbc%CLj@QIC3 zV@|v~0xY=jSn$3M^Kc^oOCxgL)ZdIobdMtF5M^y&?#D{d15UY>-I_As3PRR(T&|r> zhrp1dzEO!tKWE*~M)5$OTYhAz0+c)?M6mORXQ*MLHX*`*s5gM1>+EHR?n1R=7H1WT zPofkc@TA`dMh!*_J{lWh9}3I8H7`>WGj0uWGhxt8{0M}3Q+8O?55Q72V{*)&`mU$Boj@3sH4l3JYqjGJ5-hs+bu3U$^v>w$t^jKNP z`yRH>Np9m-dicRo%}cKb=SCT$-NRjf{Eau1w;@!Q$afJQGU_d02zOoyPfIFc@?47r zQS6a3>uOV);SHe^PmCfo^q+;W_JRDr(l=fx{y<(LQ3NMM-$60VuE9kzET83wBJGOA z9gFoFcqmw5BjRoygC;b6c@)b5J!CUx{R40vcsl_)ogiv39iZ(kJqV8>p2|8hHO0%ExDoHDoc7)ZTxQYU)rZqy`% z{c!B*)d{7hPLpz?mLgbO?12UU53tn_qF6iYmcwJLCzhI;5c(2jt!W{Ja`&UC$w>Ii z{dJ%8Vql9JwBu&+t- zP^?$f!?EjKQq+H_5k=(RS>^KGh@so2u~-xiCTy9 z4m@IIhQo~~alC`V>A(be%&5_0hZ25_eG?_pfC^rdEf&xRIqO~2Yb4S8&YbWg098R> zpg}0XH5V5qyJLR#K}?a#PU>JN1qArDLWyMA@OBW*S4am85~92Tml(#MqjuxY(7kuO z<3F%s-tp>Nc!dZoRHFVr#0WVd-1u-MFv(-yS}TOg`4x2^l@yhiJR7TThj|-oArveY zB|>%YJlPi$3hs-e1yF+9J8)bYY9!r-urL2gTpS0maiyX-(^T33p?ce2^}(W6AkX2D z;vNerE93w7c}AO30Wc+=w~`J=GS7q0DmwxhPaboub^^u=5axft^nTD2Fy4L}=|D%o zp!{0qOMj?()M&#ozsBn%bVgO_d-S^Y6^^=`0;g%na~f7Q1G=8{zv|K`+(u@VdAKM7 za+KEa!onp zK7e`g^d$DGb@#8umOjl6k~YA=lWJo$7_Zozc;`5FZJV>M222kKo&^zaMXk=1bA(*f|A3b((S7{Cc z3oTxC!G}eD@B&E@aIG&0tO}J{pr#y~R&R@Cm*J(OoXUW$dPuDhxKlZ@6~E4?St?*U zy_fVfGCb2gXD5!I#KDXuN(;52CKQyk6>T!P?J$bz&^4Y-m^~xxt-bP_;Dtb6ok^+v;u9J$6CqdA)yS5ntLJBcEBJ0S!9X+*u3NGl+8Sl-tb zUx5C19(~MK81uG5%}qEYf;ATGT_){{0|qh{-tLdR#d~!6hWI2(X1gSe&pw=*`HIfJ!tW0vw zOATq3TG}7o?d7L#&-}sMpWts1S6Wc;)p8?wHIkPgwIt1DpPa-YS<-l^Gk$LO*TI%G z903^Lg3?03#G=4Wd;Hk~>rv~h;U_pJ`1hYNriG5i0S1;dB1!6noVoYtZSXsUmcn6D zMz$1Qu~mNZCQ!Vzpk^sjPnHf$HE~{-nLJM$qP;!fd|>TVV(tjuuqzV@I77}`ZodKai~L)X0`NG z3|_M1lLztGGsl9yJ0LxY@Q!5lpyL3KjVt=$Q2-M5&nI(Yac#XN@o&G?n1p3YEoi+A z=>bF+ccS9SbAawisnH4F%mU!BhL?K8J9JxlIxtgu3Vmka`Q0bbt$sr#t{7%T;KxP? zHxGdG*4(4gN%#)Zqv=uO2g9Z{TC2}T%cYAc1Q3`DA=Mhg!6IU()QWWfPnrtjq_gWk z-jEE=@IZUDk_8R2e9>DaTdqqDg{~IJdFRR**0kSgsX_3Q_Wa|j!Nw8WAP%HYg<^iVj=Po;u^mcL=@~r7s z@oOC|mw;H(Q5GOX+62I;`&CAtoy75L38u1(7>(99%sz;DZ7VIe*1-S|Y50)zM41&s zV;3C~N7|I3tqGM7EZ?QO`)rdu(+aMVhzw2{%bR#!n_iEzAxbkx4)cJxgBH@Klp)l!!oxv=1<-Npf8VLBmjsSX26{ zo@^DO8F0~UJhn#v)VkWz;R7@uAb2|jzBEqA05aTVa>1fiSUtW4MW8tmE6_^h`_H zF=V|Oxi#-7`TG{j))zCvwH?fS@$B2l&cUPmkxP2mv5_1ByM z8&Us$vWJ*SZm84ZEw*NaYYiOGp%0m)XmuJkOx77Y6qIvDbaMhD{qp808&1s{Zv!wG zDcMBkNYYFfnbKO5WwlV@7CuMM)&+$h=J^VgS2Zpd+!!9A!s}Qonl(*U5se zv>DyDR2GZe)U0FkEEc#Kqjeh8W}U>`UtGjZ9eRGXOoC#6>=nKqKV`7zh)vj9&1upY zP7r88I%u725H`McNeS6M0D?_lt;Sa!!f=ey7|+`?z`$16>Jb2K)@VWk>(+ucm5Q9q z9s4BC6*$ozPOXEiF#HLK%vDr|_pD`R^k2DbAUoY&+Bjz*2=iL20-%G2#gE|B&(^}631ap?7w<@mfvb)HKcv6QzalHK6FFxlIR9!Qh1+Ii$LbvYdPp2Q3Nz-}8M(;MCJ zO}fkjqpi=%5!WpNt_5$`0=O>7V1WP8x;V#v22UiBNCnKLtX?dI+pZZh6PmME_7ll9 z`ev4cXWlCMFu=3jAY$4p@Q=_#GWMi-{ngo(+5v0|hgBj{uZSZ4$doNWnwQ;{l%EW6 z+HGSx4#D7pD4fZJn zo_SWrUhxrzt39g#@NZ*=+d#z8{Lx6tfK3}NkWkw!**K)U$@@h6aR7W=A7v7H8&sTn zR|fMoF3bKySjW`Q2l0!=l{_y(4-^hpMpe1rkX6F~^mby@Y8MDV7qp5%zpJ=474FJ< zBBiv)%M2O=r8RoEY%OH?Vz@|AZDV7A0F-@_6Qu7Vg+(_}W} z@CvyhwR|EAL>|6dfAGfV>$MM+f8bikWElF-fQA0bL2g3#KbNh>AhGuB;~pCzNKDpE z$aM_WnyOyOuHtrgtHq>M2Oy+e;jM9S#@0e+RpdH5WvMlN_D+-QL42#Rlh74#e-*C1{YidWvo_jjf4&} zld}-f`Sj7@_@%-T4lo7(W%KS@m1$D}M_kt7IXk1&yk;RKUt2lz-|0^ikM#uLvm8pI zc!v>~-gS^SM)8)XK0Su6J6y5(i7OM}G|$lNahLlc z(bEloj;swt=kkamFm3KFS0KdGD-~KV0f_26-7s>8YGWX1?jvVU=k3Xrzrd?dOTBPG zehBAXRX!W(ZBMi4gh5N97w!Oq`%y#A8eg}#{O`t4fHT(%SF;x!3azE{`L7|w}8*_WlzBB87gXQY3 zIq3bdC8HoYwIZQC!?U&ygj<2=#W<*jW`)WdBKwsM>PO*o(HD857owq{%0o!~ppnP3 zH9%eay>~8kI-!r8eN#MX(-lwrrg$|^>Ozu2XuSYv@;dbNm=%4}PhJbDPdjp3g?T_7 zt?4H)nCI{2lPIp;Ua3@ILt!$+@2}2M-WfQG+n~1H`h= zyXC)V!*!*@g1#uE_r|hTr(yD+h@sl1AI^wjZK*H_VGU3pb8|r-heya?A%@g}iJmWh z)2PnkIWkHfZ45O=wU1$)AW&R;t&iiiek|4)SvAPNFV3s^IU?UeED9W-B!7)nGwY*G z0`a{kSKZQ%Sm4BJm4L8tnmzzC44kLR&*92-n)pvE{M2d>?`%`d_Ki^1^N-%+UZZ@ zJ^`@ygN!-|VDh041qAG)wCqaXS3U=lpFrp$l7I3!fN&RvG=aLVV7ba4c2m{&RaW%M zGWj&5>}+4x178bTujRWslp)Oupph%&lhNBlT-3+#S+~<#5mkpWLJ)v}NtkQo6OmAI za1)a*KBan*T>1`Re1cdLpYQ3VNd{k?d&}&1KtkUD8GmNmRWhd z*B#*3hL=zk7{{INBy#r3ZuY6{>D3_$E#alR?9wFbvCNbPE97$Qkeso{;_+Wl^vkGT z+%DSsq;I#$ZLz{1G&}t&g1p^Lr9dh4OOCuQzI9r2K;~#?;LfzTHN|9xLQ=!?&#&8X@^3Vne8TL)S4=BoZ9J{m+>^tf=`?7cAm_k%%@+|~q zdpuu-f0yS0)cPB<+vWh2y|$6HyaJ#MiQoBr2jZ15!Ga$DASN-3Y_BTMpky>Fu zYb}T|6B#B8F6X-tzZruqsByXINQ_^ub6q~J1!ldA>sR~PS@uE{XbW!l$%3o-mB`?m zP(wB}j9!BX!nS?cwF(e)D>VXVA)+G&BY7PdBxztAeFS6w$g!_FWda(UURP*mTo`RY zFXA7~%NOW?z=jibHjTc4ofQUMlUiqj=5}a;sHSHjVniD2S&#^sV;Y058(Bo#YrkfO z)?okBghpCKudx7JrWOCWGXd%ptzqIHvZ3>KpQjMfB>-kc40nnC)8l=39nXFtp@&_f z$6+S6=2hP_9YLn+zeRZQ5jm7b^%fGKV0@l2@9lhe5!fTz#|J>uoEj{vjWD6fL!$kR0W`4cy?3=Bp;`bB0&5W~7A7)Vd@&b1!qJg5 zAI6!|CZnVC@UH!~bmfIy(D^&`*jC{T#;T>S$BuQ7D+lf zDsFgo^HoR*I&S`rzKpp_o3=h*Qo%MxS}B?idHB$xIC&cXU$mVu2sv@+ttD?^^-R`m zWNb+~lk^=o9JW+fn3D&A@TnsX&U7HT*N@$lK@NUlfQ(Y;rr zDmEwG_?8C=rp7`V$}Mo7>k>f97N%j`RCDwsENsUQrm8VAFt>9m_XwJlgpY> zG8fW-UL_LxG+IKJy^P+BL~AXce+Wl4&*k8ubzVpR#6WO*m|tBP{8;FhNTo zSY!h2ALFAk9`JNwfPp{u>%ra4mI3gE_?C?(^vB2O034XIc-eVLLx?Ihv`)o;up~oc zN2ixl5CgDh^Uky~eiu?s<7!3EtGJ-6Sd*@X3XhU3i~rM@rW-0o;Gr$B@`gusK)=zv zLnf?W(N+vrh#VLIhZXi!#ClUjIF|8Zd)}Rm6Lp?wWna3I%$!{e4FML65(|c`k}*G>w0lsofCJO>-@$(cz>Ji~yJ! zz2T-{Q?gpy*xi~2usC9^$gDcB@FBBC3WOyg6%{T*lOcEjWSOpwr=kh+(RbLRv_^ny zoYvyj!G!~(n0yS&Ex_Wc~LDdy(`sKlfRo65F;8$A0bAj#Xy_$+t zWcwfg^bSjbZ5)zZB4v!pg6D9oXJlN3DKg$CkD8MF+KLO{m$%Ay@;eU;eLNsR1e(q) zY%Ri&BFq~RU|>${{WadH!`8*k1v269?C2bSg(1cot3KNg;9C#8dt!VQO`{M5u7(-C z75!3I(F7ZYpN*7kZUjleHmxQF9q+9?8f%sX^s1; z@T&!!V9eB6^gt>D%o>Gfm+5W(tWFk&!urB`%ZA@o6gLaQwu&ui>J^=je%u09!W*k% zOchV_%TRFipBO;b_Bt>c&wd51al(!d4PiqZJmMzX3jGKzoqo=|Nm;7_jO;xcHu}I6sbo>*(=hA?!=&gvu zA!kSYuZG~4mb@p#5KP?2i>UMzID>@2{AO zjN0cv9fQMlN9mrT+Q6#U{2?slXAV^~6J}1tk_KCfy9X(5;0{{v+JdRqfM|cMbFz-8 z(0k-T0Yf>Yxi)7>^j2VXoR)=kAi!1Y3zEqYUa0E`1^d>>s@}R$PXTVCmQr=R3R>GV zN}V%GaRVLdPCaje?Q_^{QqsyG@S2+lCdh!Mh4@nQu`!Avh~aEs_0++D;W{X)L=57*r!DtM3;-ZnU#4-JngRf>zLgMlR=ER-=l(H9#P6C|+kJY-e2wFJp3 zRu_SbzMp8qDhz-I&**+6GEQMA{D&V`(4TRN^?2BvIq%H8g&^l_tvvzcWOX?(jX6RY z(FL(aT@wMu(bcMgL>7Ryh>Ir_=N3vyy!kYY>u5c1It*QpT zpDF!Xp48f>_7Fm+qocU(P>5$f9fh{oq46?9u4BUCY<$qlAA1u4iT8mYOnlv^pY+IIqUK|TIz%f%ueNn zjM*q`@N^{*&Qn>^gu9Al2|^(G$IOkE;|@L7NXI;M>2*$0Xzh~dGq9}h7( zddkC4;4mU1?j+AhB_XfT5O!)#sfaYeWC{O0f}@ zF=^Vp)|)^XK0IX@Y7Ru zy8Vmd8KS9f(JDR<&|K!BsUSg@2l8%(Dln!tKSd`bVmhLSAF^lG#hBw4_b zgn}gP&~D~~y0*nVJcILNf=pAORu*@Juv;HCpru`SV%|?pt32VEsHRmY}14J=;)>}@*I+M;{VU;zjuUyO=WV7@C)`Gs?@uFi< z)bLx3Q3E{0iwv@lok#aIS9&As4K^xfsepC;QA5PQR!g{ZtP$d$rPr4w|mqhYTCrE@-|VvNrho?lUiB0S4{2Lv)fQlw0sv z30o+I2g2{7fnR^?FF6m=x8(UM#uia}q%0vJPgPFzkW|?er9U$-w|@{wf4k(BRfe#z zf;J;LDG*LE7op*?$_y0#bbOxlAh5oZCw!sXhzKwhp>YXHmbTV;me}h9ASk0Zo*)Ml zI50)Se=+i%b_Yc7!xJ4( zrmjY(?-Tdhsg_k!Fyj<>g0mgF5T4~8bju;-JJj45>-(AS0KqFB0$AUo@hC80go2;% zySMW#5WEdfa9GqL7y+>2`9}Mb%1D$x?z-c|^&ovmp7e#>Q|~M#n_ghm+Hfx>7>ZKy zOaKhBwJS;^bk^M+PJ8Q3vx^u9SQ`>LN9{sy+)&;|1XYcPPe+rt;7QKXkMwy;Yb0JQ z{cxv#ca<|x^bh?fx53AoTJc23%mWvVAY_-NJOUpPg% zbOAzx0n-lpm$AT}S!gu;Ntv5~VQi@)1j8VnQ|K{sAs^*#INI4WA8hxP<2e+R))|wH zCY!T`JV-Vkl^haTvO&m|um=GdM(el;Doj4SU-V2+Lh=!yFZn1$U_l`TxrSag zqQk3N8IXP4P+8Dx6$N%2elfaZT!LJBy@J8qQF$UhG2-S`+BZ>-i*9Cg`@laKnbz{w1ujn^LdphZ;2w0nslY;U-0@zWF%-Yx0kbm! z0(-L)AZ^-GxQWhHCCB7rY0kg3l`>Xi8!SlZ-|Yl;{0(Y5HhCk6T!|wxh2`aigsz^K zv^xY`9^i4wB2ZS8U_@m-g-Qrk&%VmZ&j40V@A5$~VWk|y1~{}6ZP-t^h8SMg=&?=j zUJK`)+Js>+i^gIZ9N3c3szbl-vWx-|$8kg?F(-w(f|UZ7QhG&52sext*zoHPLq6|_ z0^TR`L+5786LruGS~kvrcQ@rN zOjaymIzU-8SqC0nt!b_4LK9SnoBJ8B#-NU~B}W%%)|xrng@iQ{+(^hWK}Dz#oDe8Pod+#q{Dwpjn-Az(W{BA~!Pd0gE!>n>f4 zUe4WoSx_jTt4TXhd^`HzDuHEPN3Q4ZL~r13z6I>NkYM{*53=B?0B=lf5>k=T6H}H}XDu!-!-#+0S>e98t=4q%)eZ@i%4Fxm@P=R9_H8sOHS(T$e3PFVJUnbcz zZ^Z(ud$=BsYD>Q=*pi4yRb^WBtZ)Uzd_AwC3|s3L@PZ}A3>usz_@a@<##(>;01|!V z8Hoi3fN&PPAzy%jWLN{ebyawSSIj5295|Z`3CB%dNMIErRdRrVG4Z}Hm{YI2!X8XE zjyQ(9Mnkd@#7Q==G(wnXdEFNtA=5!quRhO&G$V({bYT>tU7iZ8V!SeK?2S?d9|1Xa zB9WJ3-D%28G4Mo`b^VMU^pk5AsMczLo7WKBN%}tM9P-K&E}-)`y|Z9Dt=<^KFnEcP zXT(Qg6S~mDzCHJ2CL7FgAx&MUk;;&SmxUV*wiiwQDP|Zaj@;~p8OD5l{F6LDKmmaV zGQBZp=WFbU)mL4Ha=(VI=2C^i!g+=m>>9i>z%`?k@zo$AtOC3R4fKr z*QCZ+Kr|_p{M6e)^&A&O_=&xD@xiCmQb|n!%%1qyQhU**E-H4r;;^Xv6+GYTKjt#| z0fDWM1@|n)FO~8kMr91l;;9}(tH(IxnY6Ch!Ot*|@n?VU7TqVHnD@5+b zLW^}x)l<~MjyATh(DAj0De0udVo|V>%1Q8s-5*|ofn)?*-z@1&e-&FlG_=NX^o8%G zQKplS1y?^TeoE-&x+<1zmTz*~v{c(L1r3};krQpA;4Kem)8dKDPH?ERJ*`wHQQ%G% z&u?Jj)rH3?%bgI4O4_NuA((T-(^uyKj918_5Dcqg5E}MrWV6%Y*RH%E6f;y6xTTe< zsD@!ppmt?WkB6!PP&_xw0k^P#rQ`+AB1VJzsU9JtnYR`!K!dL1$p?%E5`eIy5rb6b zxD?kX?O**Kz<7(90?Ta1WWPt|J8<3B;K|3TbErch{T~dOP@D9kJx8nN;!*TXnX=}q zK)4De+fF=+hLu%GgqpjskPL~36%7hkJx6{!)D{As0t;n$EEM>yA^9~=WlJNbt1hF8 zhV6FRhbk&vykoF}H`E-=*kuW359ajpEY(BAwc1MWu;+04Bkk6FOzFilB2;Ul9|IF`s*@hTELD+~G4Th+c4M;!dD?VNO@CR!Ncj z+Y!NM;(+^j9`{9BWLPlgCSGSDbB&KwT|_MBZ z!G!mDCS-{>^CG{!czk2|MR%F%HRcy1O8N3S?+IGO;fLWV0-5RTk z#y%SF54VHxI)(c&Co7pT9<~7n_{1z;bp-{e-|gOzgOF=v@dPLgKqPdR3Qs&LIw?&R zfO@0b(!(%+UC+~g;R_1o84fmPKB`;hktKU@BA?Htk%dzW(3rAI~l3`KhY-`Lj{^H5Y z3?81PvSWQ5^y>+6x3*k!_}p`V)pw^`n=sf5^Pnf-u&dgb4mhJ?6~dp7mayJI1gdsoC_1Hd|HQVJ+**iw%Ns#{3iXZenfrK=}{tX9yWuS!D+2XF7)eF;d& zD^pR32F^(1s87sG45HCI3DFT~*atCR+-u^9 z>4E;EDgZka-HMPdUzKLG%}>=Ll+bI_oYq)~YrwG~VJj}$I>wRpAu4@z{p!_v|<_yK4t~bbSsT%`jZone;V2GVN$xUNe=g#BGGycs3EWAbx zmLC*iu@O{|qQGN&Sd_4A8N-SaUxRly#7JMNpl8KoVtIzxq0zHl%tG{{N5e0c!4@7v zo)TNIx7U?dpk!_f23zI~ z3sfvT#V*L2Geys;(W&mYQXK&(AlQyxWFYB33U4PpcwY3D#sm<_rWlEkH62BVHVg@Y z1}9rOZCOk#a_$g#B^J8_xm`{}-D5>Gm_+!{4J%{ViT!G}`NWR^dz2TOnAHBuVjMLU zb68MLG=FUjJExD_*SH$y?fQD20w@Tv3&nnCDLsaZ=Of3#2#PHXxd84$q4|>?Qj!dp zf5nR~?h-;d860c7kdXNz z(ujco;i4`o3%dPs3@iWJZ6ddE4fD!xbp4H(JhW`&(#p><@ps_K3L(8VVN4Icik(|5 z{r_}7hNb`2r(F)goOl7x9}Afl5QAoGM7Jj3)`qn9lNeUE8ssv19U7j$l5fDOLNqpF z3mKdT%xL6`7*=v!Uf0JJt*>`$6hdKPSTj5YT^H;MF^TxdCAK>!0!X#;nBj(0~)o=X~55z<>(YnCLWtN zfKIq=@@z362C-2Kb2lSew`}Zb#4xDJ6qk#DA(CgIg7{co2)%)oL}(gk1-!$z)~_#3 zU%V)QgydvEZ(_1}Y$H^nbwt*SMxex*yeL@|H$t;f1=s{ip$U{t$a~V!YpmY>Po_T+ zm^ETR|K}|f+~|0@_*)=&4^GZOL3N>+ZV2~Ybk^74$?|w{C1e4wtZv~*t5uABiF34^ zR*f-x3rUAivb18JE4p6STZNq%5!GWAcsbH!``~A#X#>?bFJiC|yFpjfip@kRKJ9Prf7>d!Z_d3DV?yIw#ImOJv`QTo zV2hkBZ_T2+37L1%dT?C=*F7C$_oK7;W_N##je+?*0WgPSz!k-!;n@+fmh@@YSeAXQ zyWH3!2{4#)+>Lb_GYrl}iHJ4**gf_NYH{}=0;e^7k;|h-<1Ti=j7Dgnrz6>HT zs9&@`k=g3t7ew`D1KGui`39*pO`~`Quve?)I=mnBH52LYV$wZ$J3;_iM>~MQO zbdWj9Zp;H?IS|rKJe(4XvAX_>xhW{`3ZA^|fLp+=CR3qME@zc;x<=ji4#;c4lb7wU z3`5@W*rKircLI^mhDPm;O+v}X#Wy;Q{;xOuiK;6=V(|9%AX zc)izWLJ>0Yqs;jdr4gAAUDFi42f2&5{+{aa4}Pk}twXS6pcpPF?t7B?%V0Y)dmYP8 zGLzEG0#GfylMJf>i7Zi&ZwLB8ZpNnfSRd8fIv~Oc6LX>YjV!pU@Fbqq)aJD3H!-C7 z{V!$+ejuW^m!LQvA#`TponmxZIN_)U!R^@MU$Hr;nYpv9-0_PM?$NeLGmN$3$M^f? z)NGRsYM1h+EsXyhdZvsR?X^x z+b{fG3tdKUmw|=}gx2&t_Hk6dM}6eo-nap;xxVqTF1BkhPhkucG(BPpN#XRz&M9u~ zUD>yO`g?7P5Ec8(f_OJp8BtqrHEX-LwdF=9DQHD+4+0a+m1L!=lvGts&F=qx+-ljc zRQG=jSd&P?S=g9{)KatFwd8WmcbDewuQtN~kLa~mLoSA$N3@QbRd+0>c{I~|7s&ER z)P`f>R%%1@>x(LAIP7L0eI0Dsmhi@-bXkiQ)pV)j28=6&rEu_6zr_GUqKS4 zwxL3AwHfZ)EgM!j_5{Mx58j!+SlIOrQ)^nYpwE$AI^Db#P^(m}3e3QU6fn4=oWV=W z4aBwt?p;$+^dJCdTXccI&Rb@bj!?7c>JZ{u{{InO5t-Pn@L{Z))yZGQHgj zV(bY2g6Cc6kgZHDrm9(^Ld=-NZKY~d5cMD+3Ne5XkF(J5PJUU&_yUZ?lxiE^C ze-(=&h{v8n2FmQ|v%2dYJo)SGSSZGYZSls)^AYM?Og~#4UO5%N#L(Nguw}K{UHJ7? z(=BC9pl`v6wp^iJiq{cqE`RM^s^$fab4XUJbI>gZS8C{6s=ft{7_Yx$Esu4N__cyW zV8#aZN>paq8)tl_piI53R9bjg;bq1a^;tww_xX!DX92|yUQ}nt7%>rrap}Ro*O%>i{6f_!Z2niO#A^S3pf;6(|3Y8$OJ}NWVSw$&;)!`t~nEHhHJjQ zexw2k-=;Pt;Yn)8!V#S?K*I-~1c2dP@c+!n@g(&Q7@rY2dJ0_w9RexvSL@SX9Jo>Z z_xqC7=@3;qsgEC6{iolzf&VD}!8wcYC|n_>v=sF&pk%o4^_aEri*4{%n-ZIiS@?TF z^$W|5k=xW(?3w?q0@$?Q;Mp64h45rcntChzenI`_?^eQZlYaZX zj%3TWs&{~7vfPAKf7C=tl05|?R`afGz`2_Bb*H)eX_oy>{$}S}A-7tr`EKgrOvk6-EX&vhQ>)LOq~GkB3PFTgl|m!hsR5ZWM;e(y|PaoX9`?DTjaMe1>CopZE;g* z!P3lQ>i4FgmJ``a?qEoss{7kwYJoYe@RbTsB(DN@n2{S(lhp|Z2FVwFPWt(%0UCsf@alfG~R3MrAb%zPP_d%V9LY!LBAs)Z< z`%4#~m?lsN!P_X%pgOtxDbAL7orn5;>tE{ANb#-jw=P&hoT-bT&}0rI%OkG5uniC} zyV=s2rg1kAc0=x(zS*ULUEQFrfeBUF#l1qFdtElFk9~f>ku1h@f%P0H5ce|!s8K_& zyJ4X(LzmHFPzC1Fuxw$Xv6&4WTQ#n{8L+&>-OtGouGXNcmp**>&8 zj!sS21uI#+2|eq=T&L&B@y;aY7@VT6gv7l={ob3rzRnNeU?&F^n{5Eg)SR02k6VvT zBQuZBxIPv(WrhxwzD9j2X5u zCvmvY#wQFO0d7L}1;9$pn;K_DXN`?BN8R{UGdbo0y1BzaRVWZ+jh>$xXNg0khHTu> z2akT+N(L=Mq19j-nr^T6=&e{yc&z(lahy7H4iubj|2yt8UO=q>c~fx#wr<Dmvf4>=xZjB<4G3R-Ci za-1p|4bDVoTL28tKn{cparqdwqTlU_z#HGCx}a=6Ee2!_K+es$TNnc>*#DDo7|iUb zYvy7x5-A9WB!Mt{`Bx+|drV!PR(TNj5!E%SXUiF1_+D6~bPA|^P{anuJMO}d@b>HS z`9~LFBA)vcSJ4dSLiVaLH_8CCb5IL(KQZ|F#ZG+q0HvgX2Jxrx#q+8!Osn8KLfKlA z+=}nL4z#&h{0dAF7Y;hrW+cRkbl^;DJ1gRfbqQ6%EWn&vSjVr$Ddg+6L@mG9q3)#_*^tlMtJQ?X94|4E$+2`D?GIegk(DFn3|;#<;mdI@#eIZNBnKncTSsx z6}akUx(JGREYi2o-yWQN%glI3y0%LECuCsy%^OOLU8%b8MFtlx02G`uFF*``T_^sd zDQG>XVUIVT04!D;j8q+Z)0epw^$m(Yj~;b0Kl{ga@Tea!a#%}=MUjR!Y#sj?ndx(= z;elg-b(l6*ar_+19~=Z9N7M#vD9rK9>AJ4*uMzfD>rV%4ix&mZ^y_hFp}_6)#6^K^^sDsW#R6Iu|H#<+K5=U9Aid8C2Nf7p;Pf} zeo}DI;#{0T>0($4RHXg=3`=_V46G91;zHn(o_9d{2wmoNq!(9=)3x|YxNW?g;h2Wo zhIZnn#k;s|(D^y>_0WC3_OESd1xh->p;Nd+(9bX8YoTh7CcpH-Tcty~P(_;q9rH2% z33|-g?z_q!|7~ADGZd~a;idh$c6lYrgZm@_#dc+14oQ{Vu(r8rSm5(2wgnU z7T`%D7SiNeyd|w-lJE^tz4wY4fh_OkpehuU?A?@UC1e3U6XqNuSF3CjvQ6=wmu^pL z;J&`NI4a^h^k!AGhBZ~YCxn!P-<3Z*a94GR=4*?aUwpBJ{m$Pz;UJz72TVG>4ePo? zEJQcaOs{2!#LUJCX2h>r!XKZ5hg&%4{={FH`z2V=$Z81<@kNEThi0YWQ;|2c)~J>j zh`WAHs|0%rppjVM=^oU+-dJ$f2F1D6dH;m&sFQFF?=nKS%&vm3+y1NdYPnV(T!z4p zo6%d1MTqm;s}H9DF<$Fw2`#3|VC9wx=Y3y&kU%Cr^9K!iAfwn~r4Tn()O%SYWmZ#JU9H}jDo<3?ZF>Z1K0+`0^ z%fAnF#`5SCsUUx5LQ4d5O>FF40qD%vdaFc71@JivRE>HhxYD(Y62_uOTuU{(+7&#a zGRGsZbEFdWUz+e1mDX~^sGWQCD2)sy3C)BzzL*4tp3j7*s2V4zX{~h$o`@mkXz+#K z-9(#J3K(wSk3a9NG;0o!yP@TUCHRz+kW(YjpgdipN+^#{01Q8x-|+!Rc1({uH4`RP zMPH1tOo5la-I7eHWn#i3B=50sSJq1)FYv5U;8_~-LM|YKhi+bpf=lT5^n}BR?0L_s z_3_o_-=1D+1C=Mu9|Hc?SQJB;TrCh~1(%!u(YOk ze~8{a^udxv<=_-?ljq%2mZesu-sKZ-BDsm~pDk2C&RdI|_R13jwCYEK2Mw`IEQf}h zeXY@74*@Kd2gViw150vD{DRb?#=Tf`3&580z?i$ET8-#uuf*+0uFCpKCL6&|7V$!6 zp*f6%T)#r+%xj)#PTi{~<{(V{X?lkuF4g>(k?OPa`b?yLi4 zhGFdU=Q&xSE{$kLwCE$b{=37_N0#%rytpl~sSw_vVE^8ekjRG1-12yLdk4UF|5ek1P0aSQ{ouhR$B+Ey5ZwEt~}Smt zwNsxe*#f;0gasP5gJ$+la;3e>CLKo%iSdfNR{_Iho-r8Bapp-(CBCsOqi+JlEG-Bf z|H9=a1UC(Y){6u7Nfj`5eXn49x(sZa2YA~i`X#ODmSl*ob#RP{8Sc_jElN6$g34!< z+=M&L3iCgZ(UI=(NxFnGmU%YX4x{>F9v-$K_G^wc3zqr4ua(4NS>v3L6jab49x#Rp zArpYBkYB-ztZ2gqNo!C7JAW!!1%A+<=WtBB4lR<7Ag})Ke{@p zJa>Hgsw>b~R zLRUb}`(;Q{9&-7)-26`$fy=rTiq~s&Y*_@>d|c8;1WRx7wi(_IHsgU6cc1)JFS>DG(h!8b`)#$sAbtFcyUo)icOj}n zL85>MeFq|WkYGY*9ZZVDK$2u4_rnvb-kg+#BQEETh%2ueoHPq?nbCyfBCau>ZyR7f zSBh-)V3HFR&L@?_h#&c2T^J@4`mPxM>zfTmle=f@fzu>O*oNp(#(3b|Z$C^HzV~4H)z%uZ(L2V6dQ>c}aC} zv2BYR$Q*}!zc zkwNJ85}#9xY>?#ubIz09$xY|vKRw?_VM!QbC)v8y`yFvM@de#`y5fNb*RYV@Bha7{ z9p;|wimiB0SLQzY1~C8AYK_;~V1P(lK^lsFmc9n68tK7l)+ERaLcFa{@=Daewqb|s zs)78~Qj*X2O&);cf84BfG6+iXF1*L0>LjMLq^Y%&S$KPJwneA(+fDcq<0f~8yH_RhRx^W97*f_Vw4-6F-9)DB65 zUapDBH<9|4DC2qf3Q7kz4i?DPS_-5u2EK{&;3>%s)02PT%W{<_xIg}80MA_Twq9Hh zf@eR>(u41$T2qUe$?>Q(`FY(wEC;cOFFU?e0fb1Rk}EMZ#zH0_gJ)K;WDkqL zj5t+EwxqVplItK(^?x;;-VAu+h8D(C@BrY6LS);DI_crJaEthK` zlbw*}xXG>F{{jzQ#`9ndXUZW^_!mM4;w59`xI+@!Cn~uvQgS|Gm|f1gbS_PuI6(+5sreAZ7{f0*}1z)sUn)lZ`U))lTkfWpS2tl3j8|o z_{CVpoIZ0cNlI_trOS)K8_@Xb2p)&~~BVf@B=Z2#jvtSl|Ukqlp&+}`PDwv6eLOhx* z4BV>~s&1C$f_JU-c~*hys*#Y-u=EGNNwhqI9f|zqR^6o5dbr$YjcywBHe}q zKep`#bQ_h%WYs9pWx2`6GB>=EOH0yHSTG8sB|EFIMV0B6W<+DZCU->^X3y^*-xFA9 z#baSg4O)r#e@^xlB1ePG1#|ePnHazRS2m>ysv%}neohnMX|dMnQ>V;@5fIg2%}MEMh(nTB_@Lo zK;4H&9g{#be`R67cnosu?rk$7s-G!l)Urm34SG>!$Nz=c0Gfq7ZR%KJZa~U;qSxXkFfrYY7VI^9>I|;eSh;Xk{Jy=}qIt~)NFUZ9IQT82RQ6A6#qV#$c=~e8CAjMwL z*kUYb?1^7dV{h2IVv7X}v8|OCODu43$59rJcGlRz7+Y+Z*c;d@`k&eNC`W#`@BQ;U z@_nA~b2B?T`*~+(XJ==f>qUfr1R+-NEFrsP4c@r{UHpB5H|k+W%j2U;!4kIN1$68S z0tz$1X9~u`J0_QzL$bkNZbpJ?COFaNJrdR-$Bi?e_dRG3Ov^div2$nIv3CNq4&TZFd`WNGBY8!2P(26rgQw7=t+AHNvMM=^;>Iu z4R<$On6i%q7@E?;;R$SuGynP-TZ7^bf@B29OzEdz5{BZCCkMKuVzkjj0!kez(2hiP zH;Y|yu@%gE4$lPQM6h6F%C2m9C4qM>7R}$C*@H?kpnAwNfB3}; zi)Y}G87nbiyVcuE6X2aUGxI^GTWB!*u#0CekOK`|lW+!=`_I=#SJBo>Zu5w2O+rKZ z^SXo~xQaix$$NK%DcbR-$a;RTH4(gKfq|nwTM|r>y1PZ4hVMYkD4v*Qurnb^0&I;| z?@IUs1wLlJd>O8hVc!4++Q~TN0QZK2Fm2$=5tsrPrlA9DSGqLY94wYC*J6S15EQd< z^FAr|plhXlXmDZz+lM+nUNIl{p<_4(i$bK!@-Tld{(bEiFjFBsGgS_na2BeeZStV5 z842rAGd6YGuS8cR9Wfz#g|gKOIX5Ls8m~Ruwh_QNHld!S*8)=A$UE z(S*weD3AJV!bX%w)JnliR^lU zW#!0i@s)&TC`5zQxUQI38^JSM>|3~8yO5Vp4#V<~YT)Vs!nYEsGKj z`3{723o*D5Gik7^r_py4df+^_KlNYO1LoO~H&1461XwjFyY-jLhz8R-$RZo4!eMwv-ta8L8oM~eD44}&)c;KaYqUOF{zo$2 zRi<21iLXQ98d3N632r#%0GEq@qkZhlg%)InXw27yr)W_T4MWL=$x_h|6zzc6wD$9S<~ zF>xAnr)OeKoW8~EBlHv4F+ZLiW2h=xhN!|VC#J4oui}#^hTN_VI-oU?bV*tTPF$|t zc-qnLYbCZqwcQ@IGPk7^wwMqlKwOi8HOoTbH?4}fj~fulp-Du?M1OLpL82M84oDn@ zW17VlJ?;r(a&w+IX56nh?=q|9PR+s+H{jq4>x{}p;21P`ZDBpIfo8sVRK}8ZfEzRF z+9I(l3Ue}W@(2ttxk(EQdIj0a5Ih*coY|fBi7il&Ip5d)(gFnG<;)1WXGUyG7j{f! zy>`@&1MVJeVSOI4OLc>)ESxBAv(i>e9<8bKO7tf?6!_d+`OcR-COfPp& zoXtLy2M3l7fa&r#{J7aeGNIjS%-n)Kv!k%tljFcUF0BeR$edPiFc%7e4{TDf(w8m4 zq_dEO_|QMGC(2ZiTkj}l0BZ5<8-9Jr(UKk%M+psdIN2{vFS9V495tO;0othQ)*!S>ZXd9ci)!cA!aP6D@HT{eSLM z>IiIx^4K7%k&P8~k4ntLS@iDZv<-7d(n;TvDTxhf>*tY`H?W- z5yh)3Di?<+_a&N<1M3dE5s=1$j*d@!hSC(TT2aezX((_RgoDpK)mG6G2A{_p9C8vJ zDNLds;$uP=cjvD#?LTs_AG2CY$X?N z*47!=(xImko8y?j`|J$HHSEh9vqCAcTQGFDhQF2sjtcEad?+!e?iUl^;Zk}}j*c!h z99YOqd#?Z>WkLRT3PPWaenG zwf63Q|D}Zf2~#OB_z}k)Te@;`h~y$XN%O~J0w2=rHJlbhwUQT(X1}+W8RnWCc)`y_ z9a;i4O5XJC)5NcM`gkz#n>X$PxeWG9fV6SN;83l^5?zht=Z7F|E#BZA9;qwSUM~>^ zKYeWM6Qp(L(Y{PmiL?|ZT?gm8ZDCSlG=Y{pvMTf4odM-tA4(D(sM)*3XE^C|AKphx zPP&TVP_V=%eQwyWc+@yoaF$Altt&U7e|}0lfr59vwr;*5XB%CG#GQ!I^86Wv{24nn zJN3k4Ic}IGQ)fc>ZoJ;0Fp(d}k@t?cd&8iSX`#715{-Tr$G=Bll1?&X#zul255{sS zGC7OoRzF`i9b-AkE;t!hRw{wkk)Upg;32o53tZ(a zMYv%8zrE!!u5>Dmtqagj!?{LyE|VFQI%DF}$^LSd#d5H@nPpJwgTiPmK|lTcT3IJh zDmUN3TwqjFxs|Xk9t|EG53ph#Qv%2Aj&ws4`D$EJx%u(x25neKVQFG*LAFP0grU%_ zKNzj~>mc6R-&EcR6`*eaY%CV=NG8@q1vG9cXBo9sfgc00)I&O>#?-wbT+a5Y?x~6a zQc*937*&O$Raa*!Fkiq+pslUESuJ(fpTYDki)e;_Qe_w$y}PK#G=7+7JC0Xbx?)?n3c@Gijo4EIr(CD z*oArxmA^NIs+EOwl&cdW1n(5N0N8^(iB5=E?Jb_PdgT zoIDUz5)riRe0d!sm|C^eKc^WA0b6o-0s9=U_R&0)&_^}GR-t5t+>~5fD1QXPxvbq- zEb$Fiq7r^qV*Z_J5!S+-wy|lglWEzr^>$=w-qg;G)F^ zL)Vd|Op2SE&eYOKNWmIhF|)xmx^*V>4vd>Dw;{#L*fyc)9#IFzDHE({stifg3gf6a=V`$jLeFa`X!f_l7h1a^=Z{#8mC4rBz||nn=DzevGz6Rz#_huy6Z>4ZR;z1= z3goDrH8v3#7cy$I{2`1j|NZ;cI5v-pfz5ZP+(zgM0(Q^H^W9dNUSXHyEU6J@(AyHi!85SgHyL>H7 zF{tO6g3UmC1ODklMkV!nWmi_O1qs|C&jc=iFP_^JCn}{V3W{okTl3iC4qhLC;6+uD zD}4qOyuXVPcEh>z!=eA6pLNY)bE_#t=ipx2cXXaDxxQPz9r&9XZBU^n&D1|FZDjHS zXjx?9Mjph;vw-%?z4h(?GhEepnng9Ea?8DN>pfs39OLELz@YE%Kf0ko<*Xt@dQ+hY z7%<4l2rxJanq0i@>{c`|Jh+$JH=%zXbml5|P8MX&UU>#E2|n$nl)#_CE19`Z z{s2&9WwZL_f58qFf#rd#tI#!{`B7A~X1{zJ%+=-CVKrJ7>F{;u@A4wlZjMh9t_m-V zqu{Rkprg5b;b7(`__0Azs&GJ~)rKn>a7eC(!S-ZdqqvkD>!mf<$^rgy?j7 z7E!MR$g(-;WI+xEG7qHa_-Wbcml6~dd}w!^Ro;SHFY(9u`q@`_BElq_ktDB)q|+wU z8HmPUEf&83CRzHKRMtvkC1?f49^N>7vxHWvh%J19 zvEe9IDfcAm6y{IXeVY^W-wEi{omO}vA?i3=QN){hsyqpVa1XLun+UQS>6g8N9$H$0 z4=qh)BkyfcFIoeX94u5&3XvzYSaKo#(%DWRechTqMlYo=H zk&ChoiyxTiYbXn!gI_%Ll<=)J~;fUN;C_W8mge1B~l0A*em%l|T;8}Z4mv;cn|JBgzOrdwD8{Uh7k*q23nNR~X z)i5vn0;sLb1TkZL2ng{eMY*U%`zquQ6NTKj7CJ9fC zOY$W_Ym0LE4!%|jYhj6Lx{+U_bMW+F9CsNk6UvsM zz$9q~PGJ2Kv(+ttrY2_@(70+*0AzN;+I7vL+D))X`qu+SHY!dHy#!)!*DrQ8VjqxP zpK9tP)kaxAHQMiodLPM?l^v5+ti90d0>nGCMg64Vm`wJ z*kfH`0-Fr^68!PYb*2x;CA~)YFEWd}fY(}v>C8e$gi2qoI}Ml!x`#2tQs>=n4m5^; zxo)&*O43bKxaXEf*N%g{y?F{pun^hCq?*)jZIT@#=Bn%bpZ<%ODxy{(#`jW)Q8N}B z)1B*+nj>K9dj}j11ED1WLt)@QJiv(BpD+5f14ON@6;(_?7bhis_kS2l<^+psC))_t zmoYAHQ<~&PB26;P=)UBnZ#ad<;cbRs>K;!P^lUmQD+}TzPmM4T_OKIjt>uq)v9H&oYu0 zdjo^vSCYCe@rDLoohmcXwYe2qh`owmtLAc&4=VpchXL;YA9H8KJ8F7?bSN+2q>f#Y~S=QC~G#wR2q97FLDAd{81y1Uj|;Vgmtuq0~x)gD!SF@BW1t0S;0^~2 zmDUm@m(e(rWD6gV{P?KY1utRR`MhaE)bCGW;I=r|B-x&?W+3Jl9`Z3lK;(PjEJNsl z`pJLelBfT^We;NhFWxlaaYT`pUTK)j&eHpDadf~X#`g#HX@`QDse?1Bc4_vr3oxT` zycxldgUIvV$+m)U6JwxZ`Epy5eRUOFF6@z9iXV9YCSy&FLCkBsX`)l0MZJ@mAH093 zUiLpQxs$xfvECp+;UNgOFir(L+tOKmlTC2U^NP9Gah`Y`P47Ixf9*%WuIc8st2fMZ zmd+Pk1v2o!lD`mj2QW_;Oi!+do!l2UbnAt8g)Z1v8AJ@EnS){!1Sl-fYB*Di1<4z1 z0cjJOg*&f<62^12s?dV2wg0jG6C1J)Y8BdIHd<&&ivCz{O72`vGNJY{qJF0j-aip9 z5=a_Q#>xbTg_x)f@7et0;CffyRCs#SitfI%3=av|T8hfHA` zwb6o3|0j7`b%1}hw{1J(U~P5DVILW|q7d%b<0eX+QtkW6^HIE$_t(_JE=M{?%T=dD zZ$C_qFarLqbA4=sV0EyvMCTh88?RUJCqQ8?e7leFMX}pZQzEN9&YW(1ocsh6hEG}_ z=!g!Xeq}NLGidfx&^qYkpY-$*|Iy(8trJrk^CEd;b%=<*o&I-xWld<`;flj|xPnv) zV>0ArvWxKJL)?iLj93KSVZK+mvp1XmuhV%jh4tbdVWEs~K&mYbf0gWjU~S>l?}`jm z@l400>BJe;2+|UnrJ@eGIYa453*RKOO4-n#Zw@*Fw8MEO_+?0rNJ~rJCtqQfyM6X6 z3S@;k&bZ2Vxo38&NG50=;{ zzO&+27_Ajg$oNi5=&oq2cx~JOPC{IZA8!M7D4|oB4njJY*--r7NYWu)S(}1ZK4Fuz z>K;P_4gP`R!E{1|@Mj@LJ|wnRnvCwOsbFn;4$L@o!~_iP0$x2N-b+Ic z!9v_nd}$}#0ctE<-4wB|Aj81Gp({7ILi&jp?U${kqY&|&oj(B@2%y1&HVjsnb$}7x<+Wbx5%#HXk5<{McN<%G(p228}fs zE@k5Q%vUrbJz6WR$p1bk|4NUwR&2#C86QJK+Die40B~9{lA+a= zw)AZW#ax_VQ1w4QuP_8uA|G1VNpTmU<^M70prO#h53X!FK<^|>@xbe_tm}OH?uukY z-L;WNRLOukg%s-0HiXiM{tEWo>gDExA7Jbx2{k0E3^fw5U1>#41}hFD-X884{c9@V zZ5$78EYbvXpvcUHl0LpWm6J5UQg$ES|R;H1apc z3K8F{%PI{Q%)mi@?hb1-YmI^+LfY-=(sM7cxX(jKbnk*nY-$p~iK)=UJPeLV!9=-` zlFJIH0^Oqch_hJ!WLXgIE_dgNGg{ z;DZMKDn(x$`S*^E#-d?*%L58hpnGhHCdrSQrYl%asA`Y0>LWzPb97IjsReU7j#QSZ zVAl=ipY{yQ1~PmxULQh8_=#vyeFVrHX=Jvd4+3WOpe+*`!*E@AfT>u)sLvrr^${?2 zY44+o`8eTwU6yxR38Q!C2u+KQE5Z;k2OE4p1_5(|2N-7CaHJp+D}n2krZn-4BGD48 z(~yNd_M`xHJ_jq%beK6l(K;a~C&BlN)|t6bKnmNPH9PRx9xcpT9!NU8QnW&qIndtM z6*mzRsXNmDIu4lF!odUuvT3NDLutFa*@AZd<-q}d`~xDP9&Pe|A?$ez2)+yoiSJ(z+Je;_gvNVn0ufMyXF8N(|L-MhcSj4Em>>tYOcu6qCT z-$3%QJT%yk|w&Efe6&TmD(J(}z5TevW zTd{RmyU7LxCSaQZ7tcE>ok(E^MSbefQ8@?2{bX@_9hwT=FjqIIrV!>fF@fdWpKDxa zJHWt@2$v{3C|g#JJ;1%}N6#|6`hlSRfC=scBN*{Ae+aRMvKwMyz^S#HaZ_zj?BR#g zwXfttD7cVY2#ZMjJ4PR=Cnd9$4Qa$QWdl@`xqs^&xZROjMA@&~3>@(&N zU@wnjj|g)wKmqN@uPa>1=Rpcf`qOshVOQ8&H=k>=3q#ixTKKS6tz1d*)gwM6=#A2X zxLiA;?}QeAU`qv+lHH)V-lV|7aZ) zR3U?qH9#n`3pKJAB5Xrp!>E~+?L`$?%3Fx#-X)2(p1{bxIR1dZ-6JgvT9l*o#-aCr ztv~xY&<*6#{njC+DFI<^geV-J$iAky(0Ll=KpZ)&tvU<4M3?a9+`%JH9NCv>YHA$G z*Ci=dwC^#cwH0va`t3s_cX+0DJ+DdoMT^w3=|{;z;TS!_Btu3oUr-K3A?9@2`x#q3 z>uwvW0IK-w zEWH)^xkr{W?Qv6i&I#yiOo$qA2A)f=7pR|JteJVEbSD8n<+>0}QmQqXlB}9SOJ6EK zVbat-q3w<7Frh0vtzuw80f1+4C39N5%UuQ_ijf3SbWK=9+UtXo-R$f>=8W+(7)csA zjE(@EIX&@N>4t;mh4z160>skrQGN#aY;X!SG9!`mQ)|(mz9|Rc%B_n#vnLWbNW+H> z&sf-10#Ru76lVmHMazSaYXgYRNrDLZxRZ!PjXynOlfs0sXfm$ja1cToJ~#~$XOmI| zJto9^AwVcamJ)&xDrl*m+7lp@Z4iWjruwUa%ySGTWjdER| zurC`S7s)d^Q-jkh@uDDC9h778sQ8O`Q+NW87L7&uoSZY-r?4H=`QUa7{=3S$W|o4H zSdMrau;|pNI)JCAJUp=soNK62JwXG?)7qrO~DaksX!7 zF3vgs>=umq`CB}Mz)me{sF;*rv}gG0e<)k16xvGuHn*tp5V25eza2@XPuH#!?; zZ}zMc?ag27clJUgn)0B5bD-g|DN8WOS+k=~U|)d2G5s*8MlNni3lJiGLZQG|xmqnF zFC3^9ZN4*Q0pcRAuKCB6fQxhbt%=A1KOAx{HN}d2ew6MCZ_dp#qqS2~hNJE*V*1P; z1A-sm>5iS9v$zPjWZ;^On)WfQ&AbzwreM8}qI6#djwaZK?!g1Z(2Sbwu zI7i}r^%x0TXS*OkYGtvm>BEwr1i4R&PoQeMjc zP!3J)HFYr9dCZ%CpW5O?P>CWJGg8=8?Mj9%R@qSHkrZ15(Zn$$OgsQY(L4|_93vaj z)+ED^6t~N=psmk~Alfr0I(Qh!@=iyVD)yy(Hprl|)3R%qV@bUWQ~c4$eD3mTZ!17o zfBonZUlNWyl2VJDX`N?FAGpNNGww{&?rjl`{+rcf|30>S+^B-qgrQ<$}Pm z`F3#wTA%Yg;IMERS-2C~igbUv%~~}W$8WK7%rkUK+(-w6ZAWe|Qa7Q~?Npr^K&BMM zqWMYW0EAVHVoZ!HWhKPJ;LuQVwc4KgyQ>Z$Rtl4&LJk5}()61kv7$RROyxOGk)v>j@UY|gIPBa~|AQhCE zGz6a^IKf|cc5#{X>bKaO-V0N)1NyrA&Nt`|3{UYGvhS{(89T~?Yw}YwtmyA8RN=Uc zFBS1l-C-H4L7iL0Ua`vOyQfZWCAoYW;U@s6pTU?WYAWA(ycSrpySz44Wzii$S?HDS zstEjge*1Q6v>$vuLnU%>6=RdwH5ryd`^LT=`V>x8CE!#i@BQ-2uOO;q=v0|_)l8KW5*PpR=MjS;^2 zGOI+|G|so6Rxv8}TF%kwOGlw;;sr$%pl}G|p~&+aio1b9I;!6wY2zVW2^pQZO|=e9 z&_}zXNi!u(5UaT^3Jx{$$L*Ai2)DE0!I)&#I5Z~@mRGN1(8gRq4(_B$y2?VBAA~N{ncAY{*GZ=r|SC-b?ATLE?&!rlZ@MM)W8<-x*RIz<}_UgJv z4cVs$R4@>PF#K2m5w&QW92MIq|M)R~kU`$73L6=4EDDQ>T0t3!-banch4Q zP;;M$8gOGx*>nW&W~f4qJl~B(e^Nt5=^51zxE`|-qx}E7sjFf@U{hClX2=VYK3{U& z$uR3QD;j%V)ds!XyAehq-vg))>IapW`HA?daz(MMsP{G18pM_Ffl-I10j_v^b(Zvr zO-i*DVp~8QB&L31{M2^T?}dux(p*oku3=dIu$)az!3~%>Z3$l}qaR9Cvk@+DJDogY zNItPC6QnWQpwZGdsynFAfh#ZD8 zdZl?P>-B&6x<_hvgj2f)=PnNfI6dH)p>kV-%V9&k2d2uLL422I<8Nb+-6&4- zhd}a2w1z@acqm>N)H*pc(tB!(15KMG&SBZ5-b-h|93*o?qOp&hk?JBubRdDon_iwBW>Ch6v7x}G5t8Ni%lal|Pbj2_M&gez9_bc|xRJ^UX`KL!VM_uRrNR?q z^Hb;HdVTb5oM1>!s1gGT4Ei8sGTWLI2Loi@atsc^@JG~B{Mu9(aZhHnCY5>Bz)!{| z2o_%8Lm==G8Bk#GD~3Q9$c_#OlT-R(!a|^?1mcj))d-0IrSqRRgC*7;P^BUzknAMvz!nZE@*2=Q_bmm zW$Hd$xPd>c8*flz2z4hDY`WmaEDrv%tfD7@{E!trohBNf;%?N$kR%bCiM5tlqpoFX zB2w5q$Cq}_Og)W=(7f4bVo0utEsBif_~rN!->)gq;6FQ+`SRCI;x-$UDq>S3yFRA- zlE}p>YdS11)eUj=?&|*Lbpcn~dAKTr1sKv5kgSW&PPL$KPm8!}+IHkwLlQ&*6qFl< zmgl!VOLn#gNDa{sDKQVk0wBPHB})boNCsKc30G4i(T}||k#`>ffa=KE<(Hc;!S@GD z33)$HWxf9wcqSBMK3X~@!~!5Bt|=Vuu8pqkX+TNpO2pNg-<~TBNe?w;czq^&GXb!CZZm(QszF7DAJV)q?{hL|evu)0 zpCivzkoW19W-Iu#2{W>ylX|7G#E;X2rNxFMegaSokBq))F_`Z8xU|s^>*SBZfs$v(oJ2`eBxns(Vj7F=E;hCCF)S(qRvuI~C5E5nFf!NaX*JP~IW%6WdI8|#<(3IVL9j`VNwXz()6*xJ-M()&3(pXX(Q2xNi+P;ilp9fjRK%W+=%rCC-Gfcg#3 zKC#SD{J>D?e}$=PF)5U=Dy=sT-_p#hi9xZEfE?f@a@d=peX^&EV$#}Tm^A;-ZWcYj zKK-HJK2@U--&i>VzU-_F*Dnw2XK*WkPaFs0!7J3lycp|ZbunSp;HC+4B(tbxpS+v^{ zjc=G_>LgOD@WGQQ!48NWX&g;^f#YB8vii`UF#a+d&iJ^#v>+#~07u%sf3JBQjFipE z_=@4Gj~uR07w4zFWGlHge#SWWHX?(${jQ9N1qP-1 zwG6koF-*pB36xa&(|#w@*h6LiZoEGVd%oV2Nz78DZMibjk2+mQ3&C-F7zfsD3gdF0 zE=0{TT48QMnV+PzFfF+TTr=CBdE8SDncs<3lhooZPH>FSv`wC7t*vbYzvw^<{z@}< z1Z)j;aNK9<2%Q3g^-9jLMP-lD5>Z_9Hdz{}EC7XLfe&aSjJ$p=TmzCxR&|i*S7}~C z<6#haQ`q&F;z&-9?;pSrd4$e_RDm3nafEDr2W#n5oMtKH0|Pe_|48jl3ty!@L@u@8 zOrMV#>Tx_Sc$|eII8vK;Y0Hpo^ta9XFF2)Nh)^!wXnj53$IsmqR)`O7mK^%Wppzs%jE36N&1Y z?#VKZG_rm=yRURJCVKa5kXEWHD1-zBrn}IVjnb15DvxKRoHGb2Lewa%g$ZnwZb`ca zrnBRV%>#P&mx2lfsEopqs=u>XijGSX5o{!P$N>4#e$CQ{;8M6RulEX9lj|n#bA|v%fq#9uc z7vLom^2dilvjvt>#MsA{9vz#`s>uF*nRjm-%;yAef6r=^@jGFB?8v$)>DGenShg|4 z*3W4Z(wE@c<^&)75)B4N&hr8kie->KpcH2o#oz4UbZos12cKb!xtXV zqXQ5*1kk9&^j!#vZ@&!w8PnEWJfRO_BfHVbigZ_`o3rp2A6$5D8DRwuQEa!k$>_W) zkklYG!-m#QO}~rlal&G36MX%Jd+m^A0n2AmR-6VIY!aK1F^9g(NPmnOwci7p8li79 z(^=apc=~N>hBzsa4ck+C(&1U@fe5P?<}(GfVqQGwhSdcXO0^X$)hPJ41vsNG!)=mL z3MU;Ys(7`kGs0pwcx=Wj-GNMAMXg9wE|kT7{3E?5hT^l{)U7!J5cf*INvkGq!^(AJ zO?qCU&ctr8(u8LGnf?+XH+)OF_Zxs*49~E!Bsa35C6Cg#<9z0?s=eNzT1QbO(NjZ> z8sHg;3w3ywJ`X{&ETFc{5&+v;p7Fxs#|jQL>62p71vWN|70?9^=9wC-d8|zQ^J|ef z`Dy*HPo;s&x>u~n6`j^5CW*J^Hc8t08l2+ zE|sr74r?uh&%m7pB$=X6->r}D{u%wCF%LgwGK<7j3e;?9gn33FB4_Q9w!h%X>{1?b zu>6rJkHC_PnMqpYkg*MOOsVUPXRim$9MEs3L}M4#GQ*Reub&Z%Q>c4?Y?fi6Qgq7< z8{wzfaIQ>q8)c**S{x#d-&to+Y#rYy!;4-B%wSvoR$aVr;g(-AswU-QLer8E>P_c` zWH6^TWVcI*VewPs9N0%f`~=;P(-xc38_hC)#%X)*ONcNiwib|qHi%OCXIs(CmKi~a zo@-Oz)NKRkvE`Yca__`uLfduDSdOE671r@FD4HgqH%F{f^C9C`QMgpqEn@&Wwl!X# zBSr#P{?-o`F|3BQ_MjzwGkoyqti`FZE6w1IyGWi@!Ei|kf+`{}@^yEPJ6$|3gS7y> z-`-+9W+1b9A6W&lP%;lI5F$6{Igp~h8gp7>Vg}1Z-cy}Y<3lEPJR^}3w@w@3go7kD zLR>@0rV2CWLvoar0W_JC(GwNf#QwciPhj>)=L6JrBNRTsY+Ny7;wt+IR;(>A|A=?! z#OVv(jqvCYYSEnOg@qa3n2=20`SyBk5d1x_Agv-$6ot25hzKgl%znZ*M$r;Jq@EphrM#~#UO0Mi#Z(}(yUu4}W{u7ZOV-LWR4 zHGabP9lZD8#kl=C24AlWtYBdYMQX0J=lYE4n6>=rX`juQwQN##|KAxlD&l|4_%PK% ztco?0fg3a4p|i{OzdGVQ7_Qb~dZRRLd=-%hUxP4N1(z)jrCZauLm5+04H=f*8qWna zNQPGw7!=^FGc7*sGbpAakr^4bq*#?~i>5$mCsw=03IQOD8jh2m6nyuyK@k*Ap{7`!t?bqS6F|96Wr5jCKk9!XgXM___EO0Vi=N6DXsuX{QyDB+YTT{aS`5!$ z>bGLrUC`utJGI@I0n z7j3&4lHq1#&VuEN@*{t%XBjL`n&oS|V>RGiveJ>ncFi=w(Vc~Dzy<&`KgFFom1O*j zg1kSyp&v#}+{^haVnQ|)*aRVVa)-M#!_c08yNDg9Ye%;skX7=*!&4ht@-Cx44!%OO zr4B|fA9xm>g-vC1u+b)&3QJSH=*f>6zKEj>KaCH-FsfK0jAF{PAs5ALR&19mnJB}_SmZVzKj}CMx;wvM*?!a|`uYCP6RW%CuVo#gx?bEOx)=l!N zNhp-gzQrZHxp>_#1_4O$U5)zE*J^9)3A}x#CF;J@tudAhc(nBq& zKLV&`_QxYwCdmU3g*cq`zVXY-uZ!bJLPR@XpU!|ZjV7xOt=o-$kDxey-R|@N00k!{ zS&cAIM74zNUBHrDTUywcUPe6J>{>tUEa0IQ&)%?90Q+PjSJ2A&CZasD#h5yeqwG}m z$(|8oF!JVkEec72uLzfV=gb|}gT0YT0zj<>ei<;Zoe;eN4x-6`QTeTC>nM5?Kl$Rc zTw6>paofVMoIp^cOlUD%#-?^fPJkYoPK%M(m6x?@yais|R23{+Fk@4eQmReeW{b$# zz3>u2_n})8q#L_wYl6zAR9?+yL*LF7!J``e=@QllaKmus#h3+!8Er=4_k=xajDy$Y zS(-B8wOOT!tLPvEP`kQOE`tC-?|D{*IUN{{C6rtbHr+(=@Xh3`%BC7b;GBKExJQea z4hvYY6>DgduI9SZ-G}LDl)KNj&{0@Ei;s8f$!I|y9`3s`9Eco*R-2K}=*gM2NKCxO zff6~LfS?)|)a%`RDJNF$eRP=BnUfMszWffSsJoQ(DoU1T>@*gOYWW3faO1VAWOc-? zon;zj_u&3Hy)P0C8W*BX*JTE42Fyt!|~!&=3R z2+&z!xuh!r#My}XrJPf=EpGe{cD7iCx0L?Uk3DhYR}LU2ym4(yM_!_JFiRlo`>~fl zSg-<432sxkY)c|Of|t4Rh_1ycIE)!lWZ0DeB?&cZj`sju=!>Ux7Q(FK(`K6%0?d}^ zY%!{Q=yr(@My~s zK#-PX`{mTaB)TO%@{Y2SrBk~{A3%rml7}N~{!k%3+4(Wu4=dd)=w{F&0?0|7tiZeb zJ9z*?3@|Z-+!MHYhG^TJ)-lOsg}*=anYRn&DAkdpN^GP%8^*?g6%5c1W|>_OK-I#U z&F%yM8qWa`JN{=50CZwWV;wTrqw`Z9TiJRRKxZ^37$VH>g*VHzCXiur!;2+$bVvQn zF^HnjAy)_Dxh*e1!n;Mm1Q^%|6Lw(|f?d&%X_UDPm-Ocb>Vg<4i&X{(2gbpIP7KUs zCv+YU(j5&Bw#$fb2WPtD$afoVZ(?xB?I0AK!k~?H5t-R6lbzcYJ9wpHaBEPw4JBA{ zc$~{3?TD6{ta7{MnY5wk>q>YaVorw}*h4T`cU zd{Z&#@#b%GYmXl9h_q#M0EHk0+@+`Q{^ zTXWEnN(basOa+Utkd{K3+cBI`SorX@2|#Ab`_eHjBWU(RD+8h&q%otzCTFrZEaTeQ zq1}P_nvQv{GA4dlLi8TUB?_{S*m@ZnciNE)gEY2uz|_pH_=&HWI&^(MSRFrJdI^uY zpmr$pXUrzGEvhyNvq{f**(8VngM|(8cybxI4=WrYk>pCxEX!oIn7yu#+Kr`dlXy8K zbWCjKK_of{ZUo6zWmwQrD>J=Nci#s++Eo{(zmYe6?3gHW5PE|K>tbP!C-q;G`2kss zwf=P=cE8iz4C|UE3dZd({E!|G7&jd=MV|UIMew!;Y}whQZ7MD_I?x%vW!^v^_A;c~ z!CQc^ulj4<#AH+W0Z14MYhA*$#cnkBVCD>z*gP;R3=;rS1p)y=;qS2J5f&fBn$9u6 zj`a-jr6&?HSsoxf?Z*y=l?+s3M1|x`N7O~r-v3anz?F=dDv1H1`1}-a`n@WXWe|SY z_l=@mk`9+*4Pl{ zdH2>qaoe$1?+u-A2Y@eDJ(UyN(5Fu_H)AcDMUC&H7l3hd0ZH}7@3>uIgW3!6P|4u zO)?f}f`xRYGcB?LQ1na5ue}?=@I9+8aObkDHlzyh{UW3lOEampb=HC!&;;G^R}pJKlOA4>$ZSn-RN)avRLfh#Raa5R&ab{VMw)r$}L>9aA)Nn%me$!wg(s!N!LViMF8u~^+j~}f&Dr+i2 zsMFbke++{V%HSdl!M~UcaHD?Xve-@CMzN1gAAu0k5JDC~VlSMP6GhzQ)!Lk37;Yjd z9x_gW>?VuZW%ThB5k0*MX4n{p9vojL+=)SDGW497CZfl#*8SR2=plffAOWRd7g*rH zsa=*8jaZb$cA#N-3VXvKg&dsm)^{CRZ%I~11XAPk9Z&QIAgQE*REy<0*-a+`H=V%E z#bnLIji2$tK`mDRmTH&*qD`9@y|^cfwG_BvJ56TD&JRlLfdl!L2-DxT zKkG2UDB$tP>=j^%VtJMb_IwcB?$2_i!l5i1Bs+VdzT*Rc4tMv@l3O?=g&|q*UT3EQ z0YSs9O~B>C(X{t-vGvyP3URSY6F%DDHeI)6k*?9B@cqxhEko{*lN+!tB=`OsZ0JO_ z2zhSk+@Scxo7&}N{fOpm;4fXPW5}diM^(k#REP`B*L=wNwcs;)O@Y1?FEm;0aet>& z{dTfHKXwwW1qEG|U4I289QgeE|0mZds(r#+Na$I6=Tum3LZ$9uUV9f2L8)aXfw6zkqDLT zPc~jhsBoKRA;Kt3BoK!i^Te(lp80Z5UD%#c9Iid3zG7>u9mQGf+@xon+yBFlx|rve zSWi)rgWcBr#&qhdEIY)_&F0C6JODQ_9FHVcV~fO!6SVQxHL1q5#@8%%^moU}FW|p1 ze^uDvp0}KVc#4w#x4Ijem9$+4rXyn19J7LHB=k=Nw5Ba`i~23on69@{Z$S*buW>q! z0ESj`FjUS%7Oob%wb8YH>R%B0gM+Ue7zrBO$q)}Im*ZvE`hH;}B2#knteRWMieGIQoDjTWaqs)Eo zPy1CeBx1=#AcmmoI9yoD2vpBT+MLJ{7ch-{mp5OdiE;i^*;L&PVG_|~Lt`1hq!AA$ zEM>?>%Y&pNJL1<~vYpXZ&HRtEsasTTqIK=%T$p4`90XZ6yYj@N6}632Gxzgu`nzbf zFVeA0>}s{E&<@yG2tj{ncl)libcA{#uKjrDn}O(xq=RCV#6?g83l`CMQnN8?b^@0m zOPp(1M1w5Ehz751o6sra)lU!yv!V_^dkvG}hQoUnsoPd0A!YRZBsIGcJLG-j7+g!~ za2SV|X|s?lpg9z!W?lXIg$l#aX)WZU3IiI=>GFW)>?E}X4OyUOwr?1@s+0<7D9j)O zEse)-;R`YM$m>;H76}v0XtkAa{tRr_DU=vpz~E){$)w-&z{*V1Z)M7gOnz6}V>;4@ zz7*7^sOrd$e?GScZN>9GITrXtAT8dyCD4@3oKD=UX2ov5-|PM2Ffe$dvwzf$2H0^O z1qQ2e$ZEs79P0)YnLG;iu>pl^MKV%GdmK`C#IJsN$0wSOus+2)bv;!+S4_r;-&~#= z?yWY`?wV!PEKTi;xyg2a%s%f6ChiI^H;H|~2u_{OSF3yD7xI3_>h742?5VTqtvX@6 z>V#y11}@CPi_bYZ9<*bg+8-70F=gD@+Ms|rTm?X%{W9@gg$EaK^UYF{)sLv(A(xmh zTV~ zPFj*3t+61+yHpL$#tXGMB|EaKFn=EX>$bWC_wN@^A6tzVQj&PUV^=22c-fN0kJRSW z_pW*`O7CyC^voiVUOFC%1QBFp(Ifaiz3;18=v-&e%>h#J5QTVX7>+b1t<>4DP>78r zVEWKpY>@5sOwFznt#Em7VpuFx!9u%7fBiyjgP>RZJgJo%fPM|nD6#u#;(Wgz%M75< zWsBLPhXqN+hDAf=#H_bgLprQf-4cyd)L?myAHYauRdsHa@& zQ((g?;S$oWzem+e_9iD0K!&430vsB>QYa;Ci;52))Zj#0Q2a%n;u%uQ#J8d0f!QjA z&cAhTCF6~8$quLGgWC|GHK)BovRVH8+`ZoxOLnjrJ}bK^3a+KiZI;bWPIk<qGhqTJ>hbCss(<`kJHPX!`%2daS-zpWWQ7Bepy+`M@>>Q4{>vReD zkl20Mt~eL5R*l~7n!O1jl<)oXxQzgzLk2*oQa^tBaA@{KoXW6{ho%?=9wGh)1a}p! z%^b)b-)u8_F*2J)iViM^iw#1PmXEf<88*&iwe<%^W;aDpoqzdenZcm)AVJf!&4mDv z3=&ZHvV7^7DcLg-UrXQpu?E96NqjMJg4lBt*doQ0PMe;69TjtWddXlZfKdP#vxLzp zvj-Z4C?Wnj6yyknH&J5P&O6h#^Rn3)vGWqIrI6=>Hzg(es~+ zqkjTCU68<2+}~i0v==KOUSe&N%;>e1*=G?|+nk#<`V&xPRrP43l2OBMZ9>p(ynhI( zXlPRwCn73-mVcq-wG#ZgXhD27yZdg@VOJll$kLs9mB@i@siW>M`!gUXHh2{h(6 zr<>H->{?VWn>x$TK6ECB@kkmu+0X44Gs}FM1^fA3(Eikr4k%@Fgz+rtocGzRgm+=q zuj3Ib+#_U6A!-$*Da~euMSj%bvuJZ3=a2M8nCRAFR)tBqiYahdj7dX_pM$Rs1$11| zj}Gk-1FA_T-g5MHhmNAD<~dhzYxZjViS~EEz=ZJN!LGca2c?DHIolBv8%V|~yyeK< z&BJ0grAoh?7^HZ5{I@=s#^?34r*H@qgUdg>uwguwBQN4DKQ?<4Vjp5|r%6yw5-$Jq zX8Wq+)k)q902EHl2H}ruEJ|L9wMdfP{#oclW1HtRK(g;nyk~D2aWj>yKpr)g(K?5< z99!ag_ZFgGHz!?Xg;8N!Tj$iQ@F^4;=(Fh7A@9YSF0j&L^{=$pGmV8OuuNrH9P=D2 zvd#)x+2(i4S%5CZbXC3kYhcAA3RJpv>Nt?q8TQ2xAcUm|Iqu zw~^Wsi7_q6XGMFh%J~^l@@84;>P~=?E&2~H#Zm=Li8k=CrOt6VHh5ycRzV}55e__BlzZ_&YR*q38o zk+ZR*(FbxO5k_{e3c3vg7@6>D$5>fN;VUd)gG-6_^e0u0AEs)yZvNqnVO`R|C^!gX zU&Bc~g(@=kHgcU;ohRZYM9Dt+XowtGhqKB}@>$0;0v*$2G%W{K0NSSYTAwz$9_Yk? zcKHn}m|6)d-)OTqGTJXchXq2l@Avn>ERIy`e8?t&a758h)rej>nllb>B#wNT*~y?j zY6v0^A!>>V1cSaCGwi7RWKJ=%qX2XeNM8MEem2~A3}|qh>f-3Q*PliP@ z72{jbJ8yGXiEWekhzVHACLPKkHC!9OgV4nvbJ#)Xw~q6|42xor*n`3$`6P^D20h)@ z2oJI@>-TNiqt7DKTqC^0(eJ|Y8`l9Ab@WFq%)*e!#<`wC{wHm!#+LT<%C$ffHR$5_ z%Vsc7d>LI&4Oj&On&^|us;@$`>Mc$JDjVLp6W-Pnib@e+7Eq=N?{UQCLZ)m=x-lt= z%&kek*2-mRpT(;$Bpd){t#!`7bS*mtd-E&Wm$&D?^+o%V%1Z^avsE0qE{$!Ry9GZ9 zr*`XR%!fg)^D?a$lMdSWC>rM zQYl;zz(vUJ;xHpWbVD-wWn?aMLz7+J_V6FT}e`L4tsojzYH@VNj*TI^w)& zpKD2r7v?^}RT`oGz403Z5yDo`mv$yS_Kvax>gy7>2|Fe zx;@tl)mM+Ut8W1!BtKyyf@b!EzKyzAK0wn8{Q4^BhXHd0=sKye7wE| zWyXMJNArvi9D=~TpK@Z9#kun1(WWW6+YxkU26fhKM@Br*vAz+p3v;2t7+dms=J<`3 zLC>0o=v}u6xB37x^WzvN_KHHe#%;)px%tjCCO`K)0?;D({E4#wz&=(!cw>hY zvcGd3Y51+&(@18%Tipgj@@_ng!OaS-yu*reyCIrGO7XLbmO*=F(yEiH4h6I0gBbB_ z@@XSlze601PzW*Z|i;pzQwV!H&(qig)9|QHfFmab1R5J|vnZs2;7Xsn0<-wdE^U#FNXjpIv zaUvB03yfZ9>!>v)UbOjuyuG*<)qj6@25}-84vXeF9OSU3O$O(kMPk|RmUGc*wc$-0 z!yG}R>-BS97evb~Gq+-cLY#_0A+GJ9a3OKybK!h_WFEVHw6~FJz<&c{o#?U}1TEU( zJ5zW)G^yd#Ot?6Znr=q76A@sypFb)&1Os>F zV1$CxVOyl^FZnAF7+hDw3^yB&2JFdW)yAWye!KM!2GOP7%oPW1D^ycLKomq}_@#Fn%R zt0IXD3$GDiHdL0B7t74kgxZf&Kppw^jra)gL|M5+xw z#97LLh}cFk;(ngJ5b3GC;itU|lQ&s4g9?Rttd^!h&1FZ%gO2$x8e+2?;N?)>C&z-E zcgT07K9};kqRCk8v3D@$7o>0RBA3d2avomJW2xeWJ0_Vlg5(UZ%?W#15#{g@?t8%o zM$FA@zMIG18OpYm`5M$=p8^L~r`-Ab>SrVJ~F?0m6N ze(=`9Jh3>Q%jt07}UhzMHt$tIIlYbXj`UyDLyx* zTM$tNK;p^J{X7}=jYj-f(vKhWW?|~?&(gvyysEC$f6h==^mjkcgiNWKuYIddla$Kp z(;W!BhA^BCkmY~EdMwSR-i@$;RPq=S*N*XXV(*^7I|Ho3>1(5Nj|@f+lzP_8XB{dJ z%=`Mdv7wMLp>}@x8qDF@_t|vYAe@NO0+}-nsFTkQBa<&wuZJl-gAijv7;Sw0e0COT zIdW@%Jd5O=dQ*T6Yvl7=^rUu}=#+#96H-vr#t5eDwv-)p4$SX_Nbx-1-XCq2ZmEMF zq_CB-qDd|D3lSyP+Z23<@5npq&*X`X=cuN4{(i*tKX$R^l8t=v!w@3sqmkA=-{wdE z?VHbfra2Cq=xtcj8|B!1C=S8b+n!=4lB50enHBkc{L$kG34XsDY$Xf~dOlOAr^?C5#xSMUm9{CKLID)A|l5D%U-w{ zd}vh-HM58Fo8y?Y&7kikudlNmoNQA*G;TOS8^J{uEBdcIzZZ^pYJ$2m8dmO=aaQ-~ z+a%1WHoG!T;L5mc%Ppvu)hP1Y<5}gXQ$sWGojKi71|5`W)4gTO&F-_nGc0yl)^w6O z|2Q67ZZ%ovhtJG)=75IP|3)Gg-$3;5>~I@Of5+owO8ReDCRz2%(j&~v_&x@&6?7%v zjJcW>mqb_d_tMuvs1fOYHRVhwFlmqI>DW9x%ootJmxmtlG#jQsKmaE}9>n4lX!t{* z;g2<~{!ji`T-jHhm&1vYAzgpUS@3GXbp7PwVEPn50Z>#9&86vO6%-g6^%Oxq+Y3;n6MD8WhG*O?^!>9C*pp z1OG?`FNArRDb2&+mMuQywDoJ230=@w!%iS$;_6$WqND>Frl{Ur)|+n^8(@H9QCf#bAV5Pev72-tQ+}@M%#*K zbcDtNH8|~bSSg+^NVno)v~c&uliuyCVO<-{-*u0`gso&h9uhlQqix4?zrTjH{>q@!(&aU?mGeEK(Yy%K8TY+ z)iS>~sN)WWxv?(sXI|0dx-cWj4m+rgrZjS@rX>#a(B+kzR978#$&<;)uF}|N%+#l3-UA1(1o@C!72><>3-H<@*w8*!owl2SJ7F=j>H{? z_T=3*XxMhASFY;bD3~$7OCh@jgxe*%WKHG9G+rA;%TvqG@-UXINrynp4wrLb??gCI zcru&4b~Ex@-cBDtMjp?pv5*Ma{6ET`0<5X^eNiL?w$Vz9g$Wk6Vz*-JwXhqp8?jr! z;Ij|@>;&_(WyA&pwqawU*Df%x?f-qh4YqS+2md|~-23SFc7A!dt{_=yIwm$D7LBmu z$nxiNp^EXJHWDn*D6$>WO>vNNP5fGPIqI@sm&Uw$oA1Ch zCfa)Ew?}1Ak*@H@b;1k`;F&XAuHX^3B3mOyodWC>ELoiwE|`E1#Ni5^sglJG{h|xF zv!xpn6}jAsOdOkBlD<2WAaQnu>{0COYkP1ch4B$ClB&`8#n{NDw23+)q&N(V9`%Mc z0UjS1?-v+`-O(m2#9_s69+*g+xEzSRRQ)d6E_IN^<^7 zFz3<%RvKe3w1<%Jyr&?gVhO6wBNG?e}vsW zgdS`GWO)Z{3k<|ysp>_-Vw5d*(#^iZU~I6lUW}~7$=c$qB=&W}L>%5N!>=K-)mAW^ zXDc0rZn+7wk(*`X+IK}I)HVhYDB&#-k)qXH$m+*XM_RwvX`v!%-~3N4$0v-N|Un745buU7Oj$~&rq&yk&)#J=HY_BtjE6w}{sSf~Tp0_?B7wvfx z=(%vFV}3$hz@6$7ZJ#$lRdz8RRt(ZSiHN*k9vsE_l)ro^jyzf8xl3~x$WmYs2%P*7nk=&0WEIac!uYuyYunqyP-4p6<{P}aBhN(#J^6kB3&!VEof3n zc_$R2=JFdI{sHJhqt=-l)lqK&xO6*CZb3kH8C_u|Z-@Lg4sN3SLjeVnowkv`#!<~H zWWP8K6qfPB#7HU{Ad!coD6jX)`iO`kB~f1TlHBP|z|(1a`2+-s*&jqPfi^E(dL0Oj zca%pUFa26P*JAtEhCkZCi=M>P+O?tYi@%y+PdB>ASr$CkeO)UA?O_a>?;d(G^~=Zy zp;GO=(;7F0vAoOp2H!?0Xtuk2778%n>ARzt<^qlJ8bum~(F>6Gl{P(o7b58&ym#sf zo4vxEHLtAvFmh(OX^bUC!(3xy2&5QaUOopo`{Y$C2|4Q^;EWg4T*YA69AJq`TSsn3 zdsUKmMBs{(8h*ii>@NmP?^l+yTt8si(@>PHj$kxC!^KkRFQ5Vo?N`D3E?3hj`E1@g zb95G-G@DhdLUGvuVNZOr_F3p^Y0BERRFdM!N5HFx;LnaoYg%WGoPw| z*1ZC#FN|1TWx0$x1<3~^doyC3I-Ab9+=!l7DZxOc>HQY+zNoU;>s1emR{E)}Au3_u zndzky{-}q4=(bin&@C`hf86#LD6ol2f3%mr(zEJkMV&j!0}*VgUA)JiT}*z>;M{xj zDm^{gS$+(8i-=!0T&&2`?ZG-BREK<7C&4S~AjG8MhXY9L!-SHwe-HT@GvLImO5WSa zX2pu#g_gCTc{9Y|pb?OstM!t9MXoDq`)Az-VYl*}BA;u*#*XPL|A7gjuiw6__h4+S z@z{cNjA5i3f1tno7mjzmnEW2cpZH_EzTD`?zZxX}j;e5f@U+Su7{8A{KEKfDM^_mt z|BRe-i!PMD1*6v(k1mjs0_VSxi9OA#PyItc#x#!!?sq>deBk~PdU>?`9`fU`a`_BX z{BR)yu|Ih*PCgfhE_nU#Hq0-)T%k|0`k^~QbtU56E!la~B|(C!l1=a@w^}(KQ zm?ZCtLN}Y;zFgr&LJxQj09pN(#Z&<^cbW<{9N=uYV$6AXsg~t3JzV7hSi=pu>2k2# znwFX&?}^gwZP|IgsS=`tCvCp%ch+UKh#Lv!G;x-^KWcw_*Su?m=tW;sbg(pJuKYSO z`TI%Qu)=Ex8(3b~=|anCMY;L%dc_?evNfqcj0+(by{a-S%Oq_6W=^V~-Q`Jw*FaZY zW})1b+W`OKNHT|pyONxJawihHQ10PiWo3oF(7NCuM|jCGn1k<(AsCFXpqhp9vUpgf zOsz=2_YhPy`T5xxmISPq`*Q(<>%!L)eNI9~9JoZj4nPleEYV~gP&f@g1@XuyYXCLp zjsOC<@Pr5kER}D7Nu2HQ=Z7|kBPd49F34*z;^w6OGWi9dYcr@`$Bh7XPJ}KT5!A74 zP8u(lp9QGmAys>>2Z%EwP%!n&hibAyP64Xkv6j;j>ZAx%fqH<}O8GeuZ0e(O&yYhA z&F}gNX6>1Y5koq%+;x#`1#td+L{c&ib`ND&4^52(%M8sL{j%A-L=aUEWnMFZ&~ zRYXG8$<0Yfl>9spe9`CZXe3yK>1&f=(ah+xo2p{}!sssn^{1mN$Nhz+Ujy$qGkiK1 zA-2xEa0F2P7;ulzs`cDtt)d{?MBeQGC1NT4tgAlu}G_H<7C`(Ala=9J3ut~lG5Ik>Ea&i&YDMq?olGh-N zgLuH=s>5<}vwS1y$tixxL$tvq_%Rg#QJlOkd=wa0sTl)#|C4tkR$Jw50RBnZj?*Z? z1rd0R0v-JWfCM(FPzun1HSszuZ%=Hu$ylXjRoZuy5b@r_aNcL%<3U$!rk85Fk z9Q>Gw4ZSMf?3Z5x0=?h0>WHF=sR9cg$vwbScjEK`&evWa9(cY2Fnz zp1HxBLyVu}uWJ1)N!!8J51$xn!iq zak(XFLLu6R#W9Z_c6sxVzY^tTocs~Af1B5hXo@w{O=vsa)96^9iR_sC7>Y9ACVLGG zJtV>(NL`Cq9cLA5b&`~|DPj)E8jjUd_5D~`((HtMF_3EOvULasOHrW2@}&GCcvMb< zu>a5?BIEV>K73k1zGu$g@RWQl5G=nxrcx2>GJvWMKq-P5V1YW>T+tEMf?A{E^`lN6jaPU=j73#fVWcVp1-Kh z{-oM@`DI}6k(2jkRG3J=Rg6Nz>ww4dLffqwR0MNOnmSz9Sp|$mTx6O^$hD0w3YJ14 zayA1gx_EV}g-JrJ{;^8v0X3)~EQP5c^4Oq-f1`pO5p~T$q1Q!(ps5c$Z79|5} zG_1n6qJWS+9niK^`32COclRZ}e^omf6i31fS}N%2tcmvld0XPFlD7u+>~zaJh=C|p zN-z+0^mnP))alHd%heG`B)zcgpd-I(et{1&@|tv(VkR$G>sCa>u&Rnk^sNJgfP`dc z$PWYK_d?{y(0__7vJpzT8&PM<<3VvlAC8E`s4lY7>cmy5BmI;; zboX{w5_@)gDem%ux@H#SqDJmg0;cC|k;3o~P?@yyG*~R~oLw^joyywS69t1UN#!hg zHVh_p+r2^Y_=9nk%YfOEi(QB-d)%XW5;E+H`~oa|R5Z(=$fwkph<;he2$BrGD$j=D z6PA-c7`C>8;RS2BMljsGMYvKk=+-iL&hI+-5qC{~3|Ku{iVR0qEsSyeAy?FO`5hp* zeapo6$RAHG9)DdIWA$TH(r?JmgZ{miIohM*@|o1@f5%OEW3FefYOwT>dsE(&t&9kE zxY^1`*eiJ{I{uct4leKb#f?4p8yH>BTND8>(sg)tc}}|wCk`;!hQ7TmZ!ZI%QFL{? zRZ|8hi_02!XN3@=K&Ua&u<&+s|0zzxndZHbFO-2F&-${hVF;i<%tOyx;bBLu7;C=V zTwu_egbz-X(mTK8GjYTG?xGiPbrc@{FCF6T+&$q6+LZU4pGZWots9$1$48VdNA3dlAG-mQ>XD(VzJto~Cc0sYfo_jGu6hX( z#DQ=#6CDU>#)AItl2`#D56!-Gu5fs=n-%P+j!M#w1F}i~5PB>6*cbV{j$1 z!G`|pMuU_mgw#zV;9}Q+qtoD_iJS09O52`o-sAHg-^8wl;(-#KChlUZJ@&P)_wGf-!?)#mtZ01plm>My&(E2e$NVo|AC?kh!tdWq$yAo~av2BSe-0`{9uTlG} zK=c%E$HxFj&+JJ2hyy$SQz_vZ3_Qmhh&z;e3eDD`*G9EJXh9MVBsx;3orxK!wHl8% zwYUy|NydO|8^wQ#R_F2(>bVQ3Kpak&9lMU~T;LBTJ7+a$rI_ikgE_)Jlk*lX) zTYG6?{9)tq#&XYHUm$m!f08xbxi2vtx$IMS1%jM5GIgQc#r}_N0^LFIfS2H?!KV@}>8ittORXR_gH`_< z5&}_`2v#&?27dj4nOk{+pcFvYAylJl7KtMODpdpudR-k9BgnPStPQuAHylp%j?pHT zq;EFMb8^u4zogi2X>&p$6VdC=;U)_VMVUkz)Y%iWuy>dAp5Zx$iL; zutAp+;UPn9VkZ=4?}fu7djOgvrqLL*N26{fZb0JpeV)G^1yISRq5fce?8C%0R^UFf zhE4frq>yo4%Y=6225dr~eyf2*x;YPi4S$(<4Zw#tPbzFiNYYIjh z+D05sn&u|{0Q%RTwad8!qbnJYHe!4J7Gr7u1^g51gg-(~c!C;p!o3Cd$92{P2RVd7&FIgs8HO_vte>XzzeGnY|IP08|N0up zq#LIZkkger7aINuhmUVP(diZwC(yE}vQabfV;&*SLP|1#v zZ{BceS#9JpK%pS9=@{DYk+jbNhFeMZn4vaJUO9b>mq=Z)`9%4ne-Mx7Owtr1_jUJfnZkGfmGpe%F3v8sFU;( zeaYL(2PfRSjqEZ4kJ4J#H~K(Kj`Ef7{d~siuDC_HL7;dWH##Gneo` z^x5F1NiK!WRiZr=zFaU2@gV<9O!B7JnGFQli1?h~{Le`Y()CGe} zk(bSrT8%j%*ng2_KLQ zEia@L-auWQ^Vw4uzF>A)4inqvp-D=RKX!5OmJ~=pt-;|8tO@jn^3$M+Nwra9?=2^j zV!+icp)ke`A8MKagc}(!4J5idIjIJkc!t%pWG7HW6<*d5P-{MKE_} zTGCLgUh2D!)oKAzcV4H-GZlN~R0m4|_KF1Dchi<`y$`|bAqOk#B;?9YsfAIxd%JVY znj~Nf&KaQHa9Rw1A=|MZSJpyYQlxa*nxrq~VZ`;#w%7gxjjBULl+@hpmM_V>nrw*( zq%`w*(qX*Cu)N{_Mz4a2W+1P63PeV)E`Wt=Z)cM-P+d3uZ)D?ZU-g9(Ri3KLX^mjH z&;$7946rXbeKDz(1^C3Z&LbjQ0ET`rr{bBIKz~@BktKN#k}SDg0EI6>QnH?ZB_6ZN0vzD18{F~&;^*f03#rwyTEMjJkDMfpvC%Iz-xbDbDD|hfJ{IV#Y zES&B!CYu59a7J}!gay$aJZw#}GLr6rxqHw4>UI}A^AyiB|1`IbiN=R8<#?Zsl2B)L z(m`uLP;tAtY(IpK%E_1kJ_5Eog;LOxw~`bk0cu-VUeEu5do~wp%b;_em&p#-HLF6Z zjoK!qweKf|Ke(y3OJ)r_EO z*Zh^B^WG%wMOsTb-EOl6pw|8k6xTH#1)ZClv;*Bfrit9@Pm17m1rg&z$Gl5giCs~{ ziCf-H1{!sE@vZ*?EsL${$KY8U;Fbi>LhD&1Z>$ew z-76*?TVEfZdW{u88GKt;C|N?GHqDaDn**_DpMKkZ0YV3jYZ%M7SdesMLt7?OD^SOq zyBjvGg#_P?_sH&f;x{C_B4caf32ggxsku{fkRzDt>!Y7vn>j+kYj2V*oYKH*!`S39 zR2q_e9D}@GGnurD0=}74`r*>czO66nk(+eI;@##wM=?jh!B{@hOCyFbrC-4Re!Y zu-mvedbj-sC?J;Qcr?Le`MK1FPFRzy#dPnWTwE&-9I7e!h=D&eZ~j<2&h0dId9pc> z>0>t}&&OF_<)>s)I4D2Pbhd=WReg=K<5mI&H}YU2C#7q)C-=a{VCEpN+ucDi7QDv5 zM5WVVkdgW0lrFU6&g26UFv}Y0o8Wz5l8~|j)(t+!jLGFtc#(u#1;0zt;P~V>7_`Oe zEFX9e-1>G=Yi|f#Rp&)}k0&p|g}>!aZ4NC4{f1XDO_(Kagms}|Ny%oopyXNIckEpt znIR;J3unx^?Ffvu;oh9lS5^tVnUeevS2>Tl-{1HEYK$GPQxj;bTh{zCOjs8Zd?VSB z%C04U$C+E^_e9%=K-e67m}g^yqKeV7HM@Gd?EAVQ2T;qxG&MK+N4!0A&z|**yj`8p3;$ZDUd-H0oz^ zHB5=0UQL}<1>AjX1(Wb_XbW^%fWV6LxPa#Yuur1Z>{4=2=E!+dUfc&Zet@$0%;!gr zCGF^vvJtRmQvo(r_`v(0V1`nVJ;_NtQ+TD*EtlMA|x zt>VA+QdZ&DI6gX5o-+jou5Dm65ObwL4Z0B2!EsM7;&c-lFA2TVC1nvVK!5(vru71- zDEw(T4@JHv?YRd4Z^?ZImv+`EBDGt}Yi7h}>DiXrsNXm1J?z{(HUo^l_3tn0& zj7Gn>6d$Cq;?=Xp_z0VCQ8c*DN!VF!O;Ji{?y(dp0zdga=&>CDS1k&d4m_FC9wEw< z9GnmU5Z!nXJTHTfJixq!i%&)uoqsSzLaw`{x==ToV&(uCGG+Z;|HxaQ z;A@I>`;k_Kc)v{X;MyuNCr@msl+vY7Q~F_Do_%gYm%hM=nHYuz(-c)GVAx>+A((J+ zh%?@3{tmaYO-QW!o(L28XI@He%>7CIo7OD_I>O%400sKil?)hLn$CEi!dB7_jq6+; zcL!pOU7X|%c;JUhgs<0qOmRljE1S60!5!w-JkujiTsdK5xyUq}KL$@sgS%U6Rq*+? zK@k?T#(yd8Fd@FI_4amWP~Uyi!t44&B)da}sZcXbA)z^6Q|jT;&Erze5p_X%k9ev; z23U!Y{Rl18pr0uZF>Yh-rOrwKW_t*WpRvV{?O4Mcr8EgGp>W!fjP{q-|o;Xl18a9g&%g2WjX>Q-D~$1+EowY8prZyf@7o(YUOfUv4U!kiUWbYcm` zN1Wx)dfc=^8Yn0kqQw9PK4zrls0`F{$Z$v;3LC{5q&DYE-}0+~QXigi1g^GxjPT__*6lEp-^h;MrVYtpXj;C|AW0 zj1|kZcd9o4FucrW&^WpkwpSFKaROrRTx;j^Kp2LPRPlxx+Y`8~&pps!SCw04pasoy zQ?QRJEw9k{HTD8xpD>~T%-*5#4DXce0E5f(^dXP~^+DEDP*`&Al>&hrM2ZFRnYGlK zj`UH?Lxvsw6kq28!|TM<0lB6siTIsjp~KZ73zxu=brSzoVMF`+D&C@fSG#2`!?$lQ z^AczwEKy*It%H;w{3W?RQ2%OLUAk!<20PdI3Z}}iA6p@LRNQGr!z(G~;*_;>{Vy%> z4dBOrggnlVb@{1zHAPRfW5ia^&UJtyPCN_-;zbUu|z}nXxfh zJqo)4OOV`-tGKgz#BHtwpXRlq@9QY8qK?fHzV^xndarqYFVKqsk0s}G4eOd`lerRF ztDZuRh@y^o^u7#;4u}~`mo46>SaS1$D=Ws8CASr@*^&F^t0Z)I0|k3tCn-EGvKuJ= znHXCvq6~;EsBL4#zu0otO+CI0pFFoPU99n>9USFH(=iORX-@?~IW+%O|2Pxm*da!F zQq>G!jwzM^oF!)m(&z&wsJEg9zMT6b@m({l*l&b}HyB93gDcJGr`U>)Q2j@jN0s-g?3F|Fo}zJ9>vIbP1;5h_L@<6Xi<$LoC<>?$(75PX#~QCZS1-6d}ml-1kfB z4+7p=iSUN5Qj?BdqF91zJ2do2*8!lmtGtCV9ywjR6m&}AO`EJzbi?`g5L>4)wIQpe z`59Y^2bDh`$f*k-pn1JTaSZvZB=Ql-}>-+$hcwg^S z^g`fLt>VtL2H=W3$21A7MPPF9^%e;|y<0IKF>G9rI$$1P*z{Kz==yyMI|O@hDy7*+ z5Z0|It|{otA0fy?j|SLfc^3u2G)yNPRIQvs}kSVlEy_3%-}BQ(bG|Gm1O z24EG%z;Iqjf|3*!xIvFlF>D*R_%Vf=nUiSL8Gxbo-(kpM7?^5XozOYNfSm1R(*Z-> zzrsL6PbqSc@RW#Cos|IQ|94=AsN!D)%l<0)r2;UKtH(OeXA;v_XB7@;mhvr|NxuSE z+}~0A=Yql(!A6BYE&Tz&_Wm7M(j|pCg4Kws(eM?3ZT~AU?)4LN_UdxQ9hC53*&%k@X)xm%UEIitDmriJ+e1@lUR&Md;!b2QhRQmN#h+VAw6}4O{CM%iuq{zBb`4EGklIJLMQ`K8A)>Kh+JI4_PG< zrL&C`REIB3>!WnX>DVC2yDi_qY2Yxhcl(I7BGlwOM!#)G*DLjz`Uf!*TstRZKv94J)-D0HE7$vKG zBl=vivIqR4pU=eU0|9c5oD?v)QrIM1fxfQYQ#=B%Ayfpjp-}o&exFcft3u8Jv$GvA zU9_jMp-L5U{<>WSyIA1bOb=gZv&bgA0O7#>`h*8tSVw&)Oj#0VZsRP5bS(jva57ep zaMcQOc@^q2RoNTex*XlH4j&iYD+a+*B0!Ypet*VEKP)lb0O#@URx>Ai=XV22bE2(d{acpird*jsgOLJV4+; z1_XsmX{A}p0jRs#l6$eZwt}zjm_(y1Ci!S6FvEVNfXSv@KAcL|m1J&Hs5EaAk_&VudQ-E>`sMB4tagu=R4R&8mVBd*P&>30)Q} zG%&kb($M9~V01t~#gQ|Wf#h6Xo)rWiD-(I&p}2A@;ddz#R#qjU{;QP@&?BdPy;7zg zSaGCS6tECPYjB9CELj=39QLl)Dsv@(q2{89xHr&LoaY^65HP`BJuSdchI;Q%e#BDS zx&E$G*MM|3?|_xS2=LsiZaamMFGB#>l1|yJOhN(b?L7B^0|7k5bbzxH9WagDr>tQM z>7)Coqy!nLe4oCzFr*JZ60BBQkaBxc3OhN?5=qD_r3Vc;sr-xvOuFi0brTGD!t~N4 zn^3`Mh!-?qO_8wA_WSND5wgG@j!c zQyYCr`4*`)9~T>h7fM>24i{sv{Rzq%NX=q>v&VQwQ}CFXDQbR6N>>KfXj>25sX6+0 z)S^?AN70tf${fiCp!R|1i~?6;TZvKTfo6_$WvX&1E>ukSAkT4=doHhf^Wa!rWvZ-7 za)zf$=uEY87P@aU-wgw1fcvKN+*ja%tYcv2(uIBr9t@iJe~0n=#Fxc0u0vN z3&%kC+E?UbCHtV?`Ra2nV?7o91U$-uC@K^852>Z8&okvcOksg3sRQqT$;R-=7orCS z%f*8MO3}eDlvfbgclmkyL;&{V0SkD?N(kSmgu15N-ehLrUMY`T0tUZhWpBhoReULS z;)qq_w2#nk?}ZIgDH(fwoRlPeP%1$GXXn4{m;zNza5>`-PsKH3djd$_0o94OFHA+C z;lR5g1_gW?1OO|67vk7b=bC6oJ~hJQFW75sLi$Yh?K zY>SWtnw93f;kPx{)D9zke1p_zHUnv6`5TY!{wvfT+XClg2uM3ON*#;~F`J|+*S4?_ zbEUaSRl|Z9&fhU=XkNcm3v-xu#Qaouz6b6x%h)}1R~?YC@?`AEBNEzYP^uJjk8)V2 zm3F`p?*1C=DR2YK96O}wjSpsq>o2X|9Guz>quHkImwd4SiEf}+>rH;f#Xx1AUcHK3>IiwXLfYYrGl%7p?Bdv?Tx-kq4b7bWT) zRkb&E`6GCpfgn8alm}-(VMVhirG7*s`&BsQi)RphdHp00TDRF@kimhQTi`4t;Gf;* zw8@OrxfrRtmwQ@<0~@#sV^A&+nSLoGWO%BrULm=F3_iI5r&nn8IjIeC^=V4u+kG1V zQw@zxD!k59pjr4tJRG^9H|M9;Mt#IzX_Sd+y}p=*3xKPT6`vs7XD>*dg}})Z!=BCn zV0?Mnqy$)+m@>^tmj$U#wBw@G4;XU;CvBf_2VyRcw`e91A01c+%-w@>3=jJcQ_AR} zm8oo+QFg_Q4JklBhG)z|+>^$yPA!WG>dI5u{I`%LjscW`V;%%+)neAB{si}Ju3qZKiA;(h}A=u5$&O3(!n5USlv--fm8qw4y7`7eu&0OsXV3&E3 z#th?6fovLIHh|@z|dHa!FUN& z$5_}Wkq!-;J&ujzay$dg94MEaYK852<6jGA;K9(DU?USzscX-9(7*1amO|*D|4q%! z1L)a2Xn|a~b4!Enr-nNLgx$bNb=rcjRxo`A0#<51rM9CUA5z)T%|?>TmGP|DHXaS0 zC5usjVB3~`?NZ>jz3`ZXfFYJ3K+&a% zp54gL;%S98!38R=%nblfv8Ishi=&cWyokL0{;ySBi@@wdLc&X=+0r*9)1G3or2kN)giANuLf4MnUBI`pRi>xWEt3VpD!D6ONN z;Ehi2v@%$m%8-Z>X%=+2ZyMVX>U;X0?_XPj@eC&-%cmWcKmttI@~m78B)`xK#_WO> zbqP?`BF&z=SS}C_b_c_6-HB3~Tsv(x)|p!Y>UXn1-J4BUCSAhNg~M6EP{xpVNYsi* z3wo?>njL1559c3j#1mr`Os~QSaoJEw{WSLec-O7XO634>h7efSQ^uCZG;w()9vx|v zHUjJNr)l#J4TsSWc&DfMu1;{W#RUP^)?9@OfpET`ZHlpNhE6TgM&co#gwK7}j|B0L z^KvyW3XIuyuZX=GDBp#8wMnak9_QhdJ*yTd@r6DQ7P^XT#ECbca2IMZy=|H;9&mk< z<{N_Z_jZ3Mf*o+p>yYL^N_R+O3%T2V{8$2oHW7YIrX#lWX9=hC%IRc>!+_SbcE_|3 ztWzONqAdqQs`v;&Y{0;iUDup*O96u?g~f^?B_QyBxSF-^20F9U!*N-Q8sg1^@^hU@ z&cL+NWK)mAQf&d>@41(|yuvV>mybGB3L( znBV{pLm^r*V6de1|4Cz?e9k?oo!1{!v%vKHsu;oQ#pM9+GWvC3+H-upX6NGJ8&1Kr zu1tV2+XAA{@Ym#CR0%Zmqfj!nI2EmV+1{G?Nxm+d{jLxeCl_3 zTIIqfOZiwFX~2rKpwd9xVey$6E-*K`A7m`6fH^Pk!BRRj) z-08BDX&LBdy*^u9%LF&`;#FFKy;!>%zcUSPGoMVeqeoAt^~3c>kFgDv%^_vGl@}q7 z8)gJxZMYx)fpGeB75pwmejMB(r3+KiJ|Pclqcz*HY^Y6V?_#?BeAFYu<4t_#&eosN zg>zG0Xw(H!0V+>0>astL8gmcy-%q6vX1;V3Rw;I3TkUU6gK9$Sc*XP%JGeY7{RTUk*Y(=5nSIo%wt_Z9%sxfV{`6x^EE|INLBbwX$kp_lK6NHUf(mx0w#2-m8qU% z?(S5|dUZUEerH-@Hfv=R>2C*BFnaMmNvqpc0V)NUHA$y{Q37Cg1cdaY2~H{rHXhHe zTz0_wN($4G>PiL{Pbzg)?MJdc6=ocr17w@?f=8eq7Qju*tIAMW8I=+}qIJy{w~qiZ zOR;Hc!E!NSumK*bTUc)GD&E&5fNtDPFUvr@;%OKF^WtLbMzu@_uZ^ZWR9P_3nK$@rnSB&~YW67mPvAQp#C!+$zPS(}`T=^TAs!-pvgQEcYU@(Mx*@7j=&+Vv)jUT4(GR>h5eNw!*5_o+pxvik zhN&u}WWOfDn~lI|JrT*+g)t8G;!HC}s@P6a>#d#7{s;6#Z!fXkb+iQ|>aF8=^cYne zywV)(pS7VC?CPG-TUgf^3pg&==GT$uVu5+cNw_~(Wrm8~difNdIDQ;(V#ZT9-!{6F zKsw8ELE!uJ%}muHOb=ec=f_5a&NlM05)WFJ9+;0BFv!T7DYGQhe6FfHUIu=)-a0xM z-1V`Gz;;IGZZL{0$@ayncR;sEWL4)YkUv9!bAwaz=@uN;U;)TLE$Q7QDsNca?akiI3VEP8wLFfS*GzTRWp#}w?@(@eF5T@>DE`5!I`d5 zTn}a{k~@D)DYA8qY7IK-qjB5tePdhGg6j^Ov3)ouxf7kcR`nm&kdrF|kK<*Q01=@J z4)So3q6c*JZ`S&>1TRj%x9Do5fI zs`P=slaSN+cgd~5`^o&OTj1kJozh)N?lF}mao(aTbO8fSO2IwN(=a0Mn97#U-l95! z0iM?)c?9mPl;8z8&*pm3^GVpz*?U##7^mO*HTj9JD&ptIP56rtmWybEd!XrGLM8On zLDfghg{uPQJ$Vo2v*G1JQ!K!xUsX-q0qHW~^uHw`Lhj^G>2zObYP>{SgPYhEYf0#7 zl@lut0$j(=s+w`nVThE}xH!Rr!0j1p`tG#qAXcqm59_Tw01hSRITRlQ1q|M(f$;qa zwsIK!fHzo>FW4e~Q2Ri5Yp2s`jSXoMKHruGT~x87#@#Nq3Tq1(rio#I3hRqzr<%(u z_R!ethBfv^0@PtKD6=(L0R$i%xHmxDismJ%tWe+eMjdVY1)LRMR1h^AhfJ5J9n)0* z+Jd92-e$~9hDKnCX;;yO8hQ$My#r2k@#q0Qn6p3z3NoajpI=>ZqVrC0p;C~33|=5`-2yNaUCP;Zg>@;?XvtLxE&Elq3DMLZ z)i5vy&`cDo)qFJ6?T4xo!d9r(b&mvK7nshRth+RbE+OqUt6eDlr5cRo`q0Hziw8ov zu2@b)2Iw#Y$i&j=_H=@6`W~GAmEF>y{8A9RwpaiZsGO5_Lr<1PY9(~JbNWu?y!oh8 z{qg+PH=fi&<>ecVVX)(30gqmLT