From ca4eec20ed5f7b6c3b656754fcb681bb7df47cc5 Mon Sep 17 00:00:00 2001 From: Chiss Date: Sat, 15 Nov 2014 19:31:56 +1100 Subject: [PATCH] Wither Assault update --- .../mineplex/core/common/util/UtilAlg.java | 38 ++- .../core/gadget/gadgets/MorphGeno.java | 6 +- .../Mineplex.Hub/src/mineplex/hub/Hub.java | 2 +- .../classcombat/Skill/Assassin/Illusion.java | 185 ++++++++++++ .../game/classcombat/Skill/SkillFactory.java | 17 +- .../ClassCombatCreatureAllowSpawnEvent.java | 31 ++ .../nautilus/game/arcade/ArcadeManager.java | 2 +- .../game/arcade/addons/CompassAddon.java | 2 +- .../src/nautilus/game/arcade/game/Game.java | 18 ++ .../game/games/christmas/Christmas.java | 2 - .../arcade/game/games/wither/WitherGame.java | 273 ++++++++++++------ ...tHumanBlinder.java => KitHumanArcher.java} | 29 +- ...manRepairman.java => KitHumanBuilder.java} | 24 +- .../game/games/wither/kit/KitHumanRunner.java | 14 +- .../games/wither/kit/KitWitherMinion.java | 116 ++++++++ .../kit/{KitWither.java => KitWitherWeb.java} | 18 +- .../game/arcade/kit/perks/PerkIronShell.java | 76 +++++ .../kit/perks/PerkWitherArrowBlind.java | 2 +- .../arcade/kit/perks/PerkWitherArrows.java | 13 +- .../arcade/kit/perks/PerkWitherAttack.java | 2 +- .../arcade/kit/perks/PerkWitherMinion.java | 4 +- .../game/arcade/managers/GameManager.java | 4 +- .../arcade/managers/GamePlayerManager.java | 10 +- 23 files changed, 726 insertions(+), 162 deletions(-) create mode 100644 Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java create mode 100644 Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/event/ClassCombatCreatureAllowSpawnEvent.java rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/{KitHumanBlinder.java => KitHumanArcher.java} (52%) rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/{KitHumanRepairman.java => KitHumanBuilder.java} (53%) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherMinion.java rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/{KitWither.java => KitWitherWeb.java} (81%) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkIronShell.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java index 364261023..536c06808 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java @@ -188,5 +188,41 @@ public class UtilAlg return cross(vec, getRight(vec)); } - + public static Location getAverageLocation(ArrayList locs) + { + if (locs.isEmpty()) + return null; + + Vector vec = new Vector(0,0,0); + double amount = 0; + + for (Location loc : locs) + { + vec.add(loc.toVector()); + amount++; + } + + vec.multiply(1d/amount); + + return vec.toLocation(locs.get(0).getWorld()); + } + + public static Vector getAverageBump(Location source, ArrayList locs) + { + if (locs.isEmpty()) + return null; + + Vector vec = new Vector(0,0,0); + double amount = 0; + + for (Location loc : locs) + { + vec.add(UtilAlg.getTrajectory(loc, source)); + amount++; + } + + vec.multiply(1d/amount); + + return vec; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphGeno.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphGeno.java index c8b2a82fa..356f7fe7b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphGeno.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphGeno.java @@ -25,19 +25,19 @@ public class MorphGeno extends MorphGadget public MorphGeno(GadgetManager manager) { - super(manager, "Farewell Genocide604", new String[] + super(manager, "Genocide604", new String[] { "Say goodbye to Genocide604 by burping", "and eating a lot.", " ", C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Burp", - " ", + " ", C.cRed + C.Bold + "WARNING: " + ChatColor.RESET + "This is a temporary item!", }, 10, Material.SKULL_ITEM, (byte)3); - _profile = new ProfileLoader(UUIDFetcher.getUUIDOf("SFox").toString(), "SFox").loadProfile(); + _profile = new ProfileLoader(UUIDFetcher.getUUIDOf("Genocide604").toString(), "Genocide604").loadProfile(); } @Override diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index 8aca8be18..b3d9a4ea0 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -123,7 +123,7 @@ public class Hub extends JavaPlugin implements IRelation energy.setEnabled(false); ItemFactory itemFactory = new ItemFactory(this, blockRestore, conditionManager, damage, energy, fire, throwManager, webServerAddress); - SkillFactory skillManager = new SkillFactory(this, damage, this, combatManager, conditionManager, throwManager, blockRestore, fire, new Movement(this), teleport, energy, webServerAddress); + SkillFactory skillManager = new SkillFactory(this, damage, this, combatManager, conditionManager, throwManager, disguiseManager, blockRestore, fire, new Movement(this), teleport, energy, webServerAddress); ClassManager classManager = new ClassManager(this, clientManager, donationManager, skillManager, itemFactory, webServerAddress); ClassShopManager shopManager = new ClassShopManager(this, classManager, skillManager, itemFactory); 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 new file mode 100644 index 000000000..a59f02ce2 --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java @@ -0,0 +1,185 @@ +package mineplex.minecraft.game.classcombat.Skill.Assassin; + +import java.util.HashMap; + +import net.minecraft.util.com.mojang.authlib.GameProfile; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.entity.Skeleton; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.inventory.ItemStack; + +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.core.updater.UpdateType; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; +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.disguise.disguises.DisguisePlayer; +import mineplex.minecraft.game.classcombat.Skill.SkillActive; +import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.classcombat.event.ClassCombatCreatureAllowSpawnEvent; +import mineplex.minecraft.game.core.condition.Condition.ConditionType; + +public class Illusion extends SkillActive +{ + private HashMap _active = new HashMap(); + + public Illusion(SkillFactory skills, String name, ClassType classType, SkillType skillType, + int cost, int levels, + int energy, int energyMod, + long recharge, long rechargeMod, boolean rechargeInform, + Material[] itemArray, + Action[] actionArray) + { + super(skills, name, classType, skillType, + cost, levels, + energy, energyMod, + recharge, rechargeMod, rechargeInform, + itemArray, + actionArray); + + SetDesc(new String[] + { + "Block to go invisible, and create an", + "illusion of yourself that runs towards", + "your target location.", + "", + "Invisibility ends if you release Block", + "or your Illusion is killed.", + "", + "Lasts up to #2#2 seconds.", + }); + } + + @Override + public String GetEnergyString() + { + return "Energy: #30#-5 and #10#-2 per Second"; + } + + @Override + public boolean CustomCheck(Player player, int level) + { + if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + { + UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); + return false; + } + + return true; + } + + @Override + public void Skill(Player player, int level) + { + //Spawn + ClassCombatCreatureAllowSpawnEvent enableEvent = new ClassCombatCreatureAllowSpawnEvent(true); + UtilServer.getServer().getPluginManager().callEvent(enableEvent); + + Skeleton skel = player.getWorld().spawn(player.getLocation(), Skeleton.class); + skel.teleport(player.getLocation()); + UtilEnt.Vegetate(skel); + UtilEnt.silence(skel, true); + + ClassCombatCreatureAllowSpawnEvent disableEvent = new ClassCombatCreatureAllowSpawnEvent(false); + UtilServer.getServer().getPluginManager().callEvent(disableEvent); + + skel.getEquipment().setHelmet(player.getInventory().getHelmet()); + skel.getEquipment().setChestplate(player.getInventory().getChestplate()); + skel.getEquipment().setLeggings(player.getInventory().getLeggings()); + skel.getEquipment().setBoots(player.getInventory().getBoots()); + skel.getEquipment().setItemInHand(Math.random() > 0.5 ? player.getItemInHand() : new ItemStack(Material.IRON_AXE)); + + //Disguise + DisguisePlayer disguise = new DisguisePlayer(skel, ((CraftPlayer)player).getHandle().getProfile()); + Factory.Disguise().disguise(disguise); + + //Invis + Factory.Condition().Factory().Cloak(GetName(), player, player, 2 + 2*level, false, true); + + _active.put(player, skel); + + //Inform + UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill(GetName()) + ".")); + } + + @EventHandler + public void Energy(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for (Player cur : GetUsers()) + { + if (!_active.containsKey(cur)) + continue; + + Skeleton skel = _active.get(cur); + + if (Factory.Condition().GetActiveCondition(cur, ConditionType.CLOAK) == null || + !cur.isBlocking() || + !Factory.Energy().Use(cur, GetName(), 0.5 - (getLevel(cur) * 0.1), true, true) || + skel == null || + !skel.isValid()) + { + end(cur); + continue; + } + else + { + if (UtilEnt.isGrounded(skel) && + (!UtilBlock.airFoliage(skel.getLocation().add(skel.getLocation().getDirection()).getBlock()) || + !UtilBlock.airFoliage(skel.getLocation().add(skel.getLocation().getDirection().multiply(2)).getBlock()))) + { + UtilAction.velocity(skel, 0.6, 0.4, 1, false); + } + + UtilEnt.CreatureMoveFast(skel, cur.getTargetBlock(null, 0).getLocation().add(0, 2, 0), 1.8f); + } + } + } + + @EventHandler + public void illusionDeath(EntityDeathEvent event) + { + if (_active.containsValue(event.getEntity())) + { + event.getDrops().clear(); + event.getEntity().remove(); + } + } + + private void end(Player cur) + { + Factory.Condition().EndCondition(cur, null, GetName()); + + Skeleton skel = _active.remove(cur); + if (skel == null) + return; + + //Ploop + UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, skel.getLocation().add(0, 1, 0), 0.3f, 0.3f, 0.3f, 0.06f, 30); + + for (int i=0 ; i<2 ; i++) + skel.getWorld().playSound(skel.getLocation(), Sound.FIZZ, 2f, 0.4f); + + skel.remove(); + } + + @Override + public void Reset(Player player) + { + end(player); + } +} diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java index 0c9301900..bff765694 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java @@ -9,6 +9,7 @@ import java.util.List; import mineplex.core.MiniPlugin; import mineplex.core.blockrestore.BlockRestore; import mineplex.minecraft.game.core.condition.ConditionManager; +import mineplex.core.disguise.DisguiseManager; import mineplex.core.donation.repository.GameSalesPackageToken; import mineplex.core.energy.Energy; import mineplex.core.movement.Movement; @@ -44,6 +45,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory private CombatManager _combatManager; private ConditionManager _conditionManager; private ProjectileManager _projectileManager; + private DisguiseManager _disguiseManager; private BlockRestore _blockRestore; private Fire _fire; private Movement _movement; @@ -54,7 +56,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory private HashMap _skillSalesPackageMap; public SkillFactory(JavaPlugin plugin, DamageManager damageManager, IRelation relation, - CombatManager combatManager, ConditionManager conditionManager, ProjectileManager projectileManager, + CombatManager combatManager, ConditionManager conditionManager, ProjectileManager projectileManager, DisguiseManager disguiseManager, BlockRestore blockRestore, Fire fire, Movement movement, Teleport teleport, Energy energy, String webAddress) { super("Skill Factory", plugin); @@ -66,6 +68,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory _conditionManager = conditionManager; _projectileManager = projectileManager; _blockRestore = blockRestore; + _disguiseManager = disguiseManager; _fire = fire; _movement = movement; _teleport = teleport; @@ -164,6 +167,13 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory 0, 0, true, new Material[] {Material.IRON_SWORD, Material.GOLD_SWORD, Material.DIAMOND_SWORD}, new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK})); +// +// AddSkill(new Illusion(this, "Illusion", ClassType.Assassin, SkillType.Sword, +// 1, 4, +// 30, -5, +// 0, 0, true, +// new Material[] {Material.IRON_SWORD, Material.GOLD_SWORD, Material.DIAMOND_SWORD}, +// new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK})); //Axe AddSkill(new Blink(this, "Blink", ClassType.Assassin, SkillType.Axe, @@ -700,6 +710,11 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory return _blockRestore; } + public DisguiseManager Disguise() + { + return _disguiseManager; + } + public Fire Fire() { return _fire; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/event/ClassCombatCreatureAllowSpawnEvent.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/event/ClassCombatCreatureAllowSpawnEvent.java new file mode 100644 index 000000000..97ccfe772 --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/event/ClassCombatCreatureAllowSpawnEvent.java @@ -0,0 +1,31 @@ +package mineplex.minecraft.game.classcombat.event; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ClassCombatCreatureAllowSpawnEvent extends Event +{ + private static final HandlerList handlers = new HandlerList(); + + private boolean _allow; + + public ClassCombatCreatureAllowSpawnEvent(boolean allow) + { + _allow = allow; + } + + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + + public boolean getAllowed() + { + return _allow; + } +} 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 add6d903a..23404cac7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -226,7 +226,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation ItemFactory itemFactory = new ItemFactory(_plugin, _blockRestore, _conditionManager, damageManager, energy, _fire, _projectileManager, webAddress); _skillFactory = new SkillFactory(plugin, damageManager, this, _damageManager.GetCombatManager(), - _conditionManager, _projectileManager, _blockRestore, _fire, new Movement(plugin), teleport, + _conditionManager, _projectileManager, _disguiseManager, _blockRestore, _fire, new Movement(plugin), teleport, energy, webAddress); _classManager = new ClassManager(plugin, clientManager, donationManager, _skillFactory, itemFactory, webAddress); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/addons/CompassAddon.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/addons/CompassAddon.java index aee607ab3..6b3790988 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/addons/CompassAddon.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/addons/CompassAddon.java @@ -43,7 +43,7 @@ public class CompassAddon extends MiniPlugin @EventHandler public void Update(UpdateEvent event) { - if (event.getType() != UpdateType.SEC) + if (event.getType() != UpdateType.FASTER) return; if (Manager.GetGame() == null) 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 c9dcd7481..fd937a025 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 @@ -38,6 +38,7 @@ import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.event.ClassCombatCreatureAllowSpawnEvent; import mineplex.minecraft.game.core.combat.DeathMessageType; import nautilus.game.arcade.ArcadeFormat; import nautilus.game.arcade.ArcadeManager; @@ -1254,4 +1255,21 @@ public abstract class Game implements Listener { return Manager; } + + @EventHandler + public void classCombatCreatureAllow(ClassCombatCreatureAllowSpawnEvent event) + { + CreatureAllowOverride = event.getAllowed(); + } + + public boolean isInsideMap(Location loc) + { + return !( + loc.getX() >= WorldData.MaxX || + loc.getX() <= WorldData.MinX || + loc.getZ() >= WorldData.MaxZ || + loc.getZ() <= WorldData.MinZ || + loc.getY() >= WorldData.MaxY || + loc.getY() <= WorldData.MinY); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java index 8444bc135..54a9c44fd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java @@ -54,8 +54,6 @@ public class Christmas extends SoloGame private ArrayList _barrier = new ArrayList(); - private ArrayList _lastScoreboard = new ArrayList(); - private long _gameTime = 900000; public Christmas(ArcadeManager manager) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/WitherGame.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/WitherGame.java index 86d54146f..7b1ea5e15 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/WitherGame.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/WitherGame.java @@ -1,32 +1,38 @@ package nautilus.game.arcade.game.games.wither; +import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.bukkit.ChatColor; -import org.bukkit.Color; -import org.bukkit.FireworkEffect.Type; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.util.Vector; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilFirework; +import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; import mineplex.core.data.BlockData; -import mineplex.core.recharge.Recharge; +import mineplex.core.itemstack.ItemStackFactory; 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.PlayerDeathOutEvent; +import nautilus.game.arcade.events.PlayerKitGiveEvent; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.TeamGame; import nautilus.game.arcade.game.games.wither.kit.*; @@ -39,23 +45,15 @@ public class WitherGame extends TeamGame implements IBlockRestorer private GameTeam _runners; private GameTeam _withers; - private double _witherFactor = 3; + private double _witherFactor = 2.5; - private long _gameTime = 240000; - private int _pointGoal = 50; - private int _points = 0; + private int _yLimit = 0; - private int _witherY = 60; - - private Location _spawnA; - private Location _spawnB; - - private Location _safeA; - private Location _safeB; - - private Location _boatA; - private Location _boatB; + private long _gameTime = 300000; + private int _livesPerPlayer = 3; + private HashMap _lives = new HashMap(); + private HashSet _blocks = new HashSet(); public WitherGame(ArcadeManager manager) @@ -64,43 +62,50 @@ public class WitherGame extends TeamGame implements IBlockRestorer new Kit[] { - new KitHumanRunner(manager), - new KitHumanBlinder(manager), - new KitHumanRepairman(manager), + //new KitHumanRunner(manager), + new KitHumanArcher(manager), + new KitHumanBuilder(manager), new NullKit(manager), - new KitWither(manager), + new NullKit(manager), + new KitWitherMinion(manager), + //new KitWitherWeb(manager), + //new KitWitherWeb(manager), }, new String[] { - C.cGreen + "Humans" + C.cWhite + " Escape to the Beacon", - C.cGreen + "Humans" + C.cWhite + " Win by reaching Beacon 100 times", + + C.cGreen + "Humans" + C.cWhite + " Find Armor Upgrades to help surive!", + C.cGreen + "Humans" + C.cWhite + " 5 Lives per Player", + C.cGreen + "Humans" + C.cWhite + " Win by surviving for 5 minutes", " ", - C.cRed + "Withers" + C.cWhite + " Stop Humans from reaching the Beacon", - C.cRed + "Withers" + C.cWhite + " Win after 4 Minutes", + C.cRed + "Withers" + C.cWhite + " Moves very slowly when near ground", + C.cRed + "Withers" + C.cWhite + " Kill all the Humans within 5 Minutes", }); - - this.DeathOut = false; + + this.DeathOut = true; this.DamageTeamSelf = false; this.DamageSelf = false; + this.DeathSpectateSecs = 4; this.HungerSet = 20; + this.WorldBoundaryKill = false; + + this.CompassEnabled = true; + this.CompassGiveItem = false; this.KitRegisterState = GameState.Prepare; + + _help = new String[] + { + C.cRed + C.Bold + "This game is in early stages of development!", + + }; } @Override public void ParseData() { - _witherY = WorldData.GetDataLocs("RED").get(0).getBlockY(); - - _safeA = WorldData.GetDataLocs("YELLOW").get(0); - _safeB = WorldData.GetDataLocs("YELLOW").get(1); - - _boatA = WorldData.GetDataLocs("GREEN").get(0); - _boatB = WorldData.GetDataLocs("GREEN").get(1); - - _spawnA = WorldData.GetDataLocs("BLUE").get(0); - _spawnB = WorldData.GetDataLocs("BLUE").get(1); + _yLimit = WorldData.GetDataLocs("RED").get(0).getBlockY(); } @EventHandler @@ -138,7 +143,7 @@ public class WitherGame extends TeamGame implements IBlockRestorer @EventHandler public void teamBalance(UpdateEvent event) { - if (!IsLive()) + if (!InProgress()) return; if (event.getType() != UpdateType.FAST) @@ -159,6 +164,8 @@ public class WitherGame extends TeamGame implements IBlockRestorer public void setWither(Player player, boolean forced) { + _lives.remove(player); + SetPlayerTeam(player, _withers, true); //Kit @@ -177,6 +184,58 @@ public class WitherGame extends TeamGame implements IBlockRestorer player.getWorld().strikeLightningEffect(player.getLocation()); } } + + @EventHandler + public void playerDead(final PlayerDeathOutEvent event) + { + Player player = event.GetPlayer(); + + if (_lives.containsKey(player)) + { + int lives = _lives.get(player); + + if (lives <= 1) + return; + + _lives.put(player, lives - 1); + + UtilPlayer.message(player, F.main("Game", "You have " + F.elem(C.cGreen + C.Bold + lives + " Lives Remaining") + ".")); + + event.setCancelled(true); + } + } + + @EventHandler + public void gameStart(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Live) + return; + + UtilTextMiddle.display(C.cGreen + "Humans Hiding", "12 Seconds until Assault", 10, 80, 10); + + for (Player player : _withers.GetPlayers(true)) + { + Manager.GetCondition().Factory().Blind("Game Start", player, null, 12, 0, false, false, false); + } + } + + @EventHandler + public void playerLivesDisplay(PlayerKitGiveEvent event) + { + if (!_runners.HasPlayer(event.GetPlayer())) + return; + + //Player Lives + if (!_lives.containsKey(event.GetPlayer())) + _lives.put(event.GetPlayer(), _livesPerPlayer); + + int lives = _lives.get(event.GetPlayer()); + + if (lives <= 0) + return; + + event.GetPlayer().getInventory().setItem(8, ItemStackFactory.Instance.CreateStack(Material.BONE, (byte)0, lives, C.cGreen + C.Bold + lives + " Lives Remaining")); + } @Override public void EndCheck() @@ -194,16 +253,16 @@ public class WitherGame extends TeamGame implements IBlockRestorer //Wither Win if (UtilTime.elapsed(this.GetStateTime(), _gameTime)) - winner = _withers; + winner = _runners; //Runner Win - if (_points >= _pointGoal) - winner = _runners; + if (_runners.GetPlayers(true).isEmpty()) + winner = _withers; //Set Win if (winner != null) { - AnnounceEnd(_withers); + AnnounceEnd(winner); for (GameTeam team : GetTeamList()) { @@ -232,6 +291,10 @@ public class WitherGame extends TeamGame implements IBlockRestorer if (event.getType() != UpdateType.FAST) return; + + int lives = 0; + for (int i : _lives.values()) + lives += i; //Wipe Last Scoreboard.Reset(); @@ -245,8 +308,8 @@ public class WitherGame extends TeamGame implements IBlockRestorer Scoreboard.Write(_withers.GetColor() + "" + _withers.GetPlayers(true).size() + " Players"); Scoreboard.WriteBlank(); - Scoreboard.Write(C.cYellow + C.Bold + "Escapes"); - Scoreboard.Write(_points + " / " + _pointGoal); + Scoreboard.Write(C.cYellow + C.Bold + "Human Lives"); + Scoreboard.Write(lives + " / " + (_lives.size() * _livesPerPlayer)); Scoreboard.WriteBlank(); Scoreboard.Write(C.cYellow + C.Bold + "Time Left"); @@ -255,12 +318,23 @@ public class WitherGame extends TeamGame implements IBlockRestorer Scoreboard.Draw(); } + @Override + public GameTeam ChooseTeam(Player player) + { + if (CanJoinTeam(_withers)) + return _withers; + + return _runners; + } + @Override public boolean CanJoinTeam(GameTeam team) { if (team.equals(_withers)) + { return team.GetSize() < getRequiredWithers(); - + } + return team.GetSize() < GetPlayers(true).size() - getRequiredWithers(); } @@ -270,26 +344,74 @@ public class WitherGame extends TeamGame implements IBlockRestorer } @EventHandler - public void witherBump(UpdateEvent event) + public void witherMovement(UpdateEvent event) { if (!IsLive()) return; - if (event.getType() != UpdateType.TICK) + if (event.getType() != UpdateType.FASTER) return; for (Player player : _withers.GetPlayers(true)) { - if (player.getLocation().getY() < _witherY) - { - player.setVelocity(new Vector(0, 0.6, 0)); - - if (Recharge.Instance.use(player, "Wither Bump", 5000, false, false)) - UtilPlayer.message(player, F.main("Game", "Withers cannot descend past this point.")); - } + ArrayList collisions = new ArrayList(); + + //Fly Speed + if (player.getLocation().getY() > _yLimit) + { + player.setFlySpeed(0.06f); + } + else + { + double speed = (_yLimit - player.getLocation().getY()) * 0.075; + + player.setFlySpeed(Math.max(0.015f, 0.06f - (float)speed)); + } + + //Bump + for (Block block : UtilBlock.getInRadius(player.getLocation().add(0, 0.5, 0), 1.5d).keySet()) + { + if (!UtilBlock.airFoliage(block)) + { + collisions.add(block.getLocation().add(0.5, 0.5, 0.5)); + } + } + + Vector vec = UtilAlg.getAverageBump(player.getLocation(), collisions); + + if (vec == null) + continue; + + UtilAction.velocity(player, vec, 0.6, false, 0, 0.4, 10, true); + +// if (player.getLocation().getY() < _yLimit + 6) +// UtilAction.velocity(player, new Vector(0, 1, 0), 0.6, false, 0, 0, 10, true); } } + @Override + public void addBlocks(Set blocks) + { + Iterator blockIter = blocks.iterator(); + + while (blockIter.hasNext()) + { + Block block = blockIter.next(); + + if (block.getType() == Material.BEDROCK || block.getType() == Material.IRON_BLOCK) + blockIter.remove(); + + else if (!isInsideMap(block.getLocation())) + blockIter.remove(); + +// else if (UtilAlg.inBoundingBox(block.getLocation(), _safeA, _safeB) || UtilAlg.inBoundingBox(block.getLocation(), _spawnA, _spawnB)) +// blockIter.remove(); + } + + for (Block block : blocks) + _blocks.add(new BlockData(block)); + } + @Override public void restoreBlock(Location loc, double radius) { @@ -309,46 +431,29 @@ public class WitherGame extends TeamGame implements IBlockRestorer } } - @Override - public void addBlocks(Set blocks) + @EventHandler + public void playerQuit(PlayerQuitEvent event) { - Iterator blockIter = blocks.iterator(); - - while (blockIter.hasNext()) - { - Block block = blockIter.next(); - - if (UtilAlg.inBoundingBox(block.getLocation(), _safeA, _safeB) || UtilAlg.inBoundingBox(block.getLocation(), _spawnA, _spawnB)) - blockIter.remove(); - } - - for (Block block : blocks) - _blocks.add(new BlockData(block)); + _lives.remove(event.getPlayer()); } @EventHandler - public void boatEscape(UpdateEvent event) + public void livesUpdate(UpdateEvent event) { if (!IsLive()) return; - if (event.getType() != UpdateType.TICK) + if (event.getType() != UpdateType.FASTER) return; - for (Player player : _runners.GetPlayers(true)) + Iterator playerIter = _lives.keySet().iterator(); + + while (playerIter.hasNext()) { - if (UtilAlg.inBoundingBox(player.getLocation(), _boatA, _boatB)) - { - _points++; - - UtilFirework.playFirework(player.getLocation(), Type.BALL, Color.LIME, true, true); - - player.teleport(_runners.GetSpawn()); - - Announce(C.cGreen + C.Bold + player.getName() + " escaped!"); - - AddGems(player, 4, "Escapes", true); - } + Player player = playerIter.next(); + + if (!player.isOnline() || !_runners.HasPlayer(player)) + playerIter.remove(); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanBlinder.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanArcher.java similarity index 52% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanBlinder.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanArcher.java index d6731e4fc..73ef95176 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanBlinder.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanArcher.java @@ -4,20 +4,21 @@ import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.perks.PerkFletcher; +import nautilus.game.arcade.kit.perks.PerkRopedArrow; import nautilus.game.arcade.kit.perks.PerkWitherArrowBlind; -public class KitHumanBlinder extends Kit +public class KitHumanArcher extends Kit { - public KitHumanBlinder(ArcadeManager manager) + public KitHumanArcher(ArcadeManager manager) { - super(manager, "Human Blinder", KitAvailability.Free, + super(manager, "Human Archer", KitAvailability.Free, new String[] { @@ -26,7 +27,10 @@ public class KitHumanBlinder extends Kit new Perk[] { - new PerkWitherArrowBlind(4) + new PerkRopedArrow("Roped Arrow", 1, 4000), + new PerkWitherArrowBlind(3), + new PerkFletcher(4, 4, true), + }, EntityType.ZOMBIE, null); @@ -38,24 +42,15 @@ public class KitHumanBlinder extends Kit { player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD)); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BOW)); - player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.ARROW, 8)); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP)); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP)); - - player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)); - player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); - player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); - player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); - - Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 8, false, false); + + Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 6, false, false); } @Override public void SpawnCustom(LivingEntity ent) { - ent.getEquipment().setHelmet(new ItemStack(Material.CHAINMAIL_HELMET)); - ent.getEquipment().setChestplate(new ItemStack(Material.CHAINMAIL_CHESTPLATE)); - ent.getEquipment().setLeggings(new ItemStack(Material.CHAINMAIL_LEGGINGS)); - ent.getEquipment().setBoots(new ItemStack(Material.CHAINMAIL_BOOTS)); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanRepairman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanBuilder.java similarity index 53% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanRepairman.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanBuilder.java index 874921f12..b4920e54f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanRepairman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanBuilder.java @@ -4,7 +4,6 @@ import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -12,12 +11,13 @@ import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.perks.PerkBlockRestorer; +import nautilus.game.arcade.kit.perks.PerkIronShell; -public class KitHumanRepairman extends Kit +public class KitHumanBuilder extends Kit { - public KitHumanRepairman(ArcadeManager manager) + public KitHumanBuilder(ArcadeManager manager) { - super(manager, "Human Repairman", KitAvailability.Free, + super(manager, "Human Builder", KitAvailability.Free, new String[] { @@ -26,6 +26,7 @@ public class KitHumanRepairman extends Kit new Perk[] { + new PerkIronShell(), new PerkBlockRestorer() }, EntityType.ZOMBIE, @@ -37,23 +38,16 @@ public class KitHumanRepairman extends Kit public void GiveItems(Player player) { player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE)); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SPADE)); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP)); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP)); - - player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)); - player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); - player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); - player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); - - Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 8, false, false); + + Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 6, false, false); } @Override public void SpawnCustom(LivingEntity ent) { - ent.getEquipment().setHelmet(new ItemStack(Material.CHAINMAIL_HELMET)); - ent.getEquipment().setChestplate(new ItemStack(Material.CHAINMAIL_CHESTPLATE)); - ent.getEquipment().setLeggings(new ItemStack(Material.CHAINMAIL_LEGGINGS)); - ent.getEquipment().setBoots(new ItemStack(Material.CHAINMAIL_BOOTS)); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanRunner.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanRunner.java index 3db11acb2..485cbac84 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanRunner.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitHumanRunner.java @@ -40,21 +40,13 @@ public class KitHumanRunner extends Kit player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE)); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP)); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP)); - - player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)); - player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); - player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); - player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); - - Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 8, false, false); + + Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 6, false, false); } @Override public void SpawnCustom(LivingEntity ent) { - ent.getEquipment().setHelmet(new ItemStack(Material.CHAINMAIL_HELMET)); - ent.getEquipment().setChestplate(new ItemStack(Material.CHAINMAIL_CHESTPLATE)); - ent.getEquipment().setLeggings(new ItemStack(Material.CHAINMAIL_LEGGINGS)); - ent.getEquipment().setBoots(new ItemStack(Material.CHAINMAIL_BOOTS)); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherMinion.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherMinion.java new file mode 100644 index 000000000..dd9a5e227 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherMinion.java @@ -0,0 +1,116 @@ +package nautilus.game.arcade.game.games.wither.kit; + +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilServer; +import mineplex.core.disguise.disguises.DisguiseWither; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.KitAvailability; +import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.perks.*; + +public class KitWitherMinion extends Kit +{ + public KitWitherMinion(ArcadeManager manager) + { + super(manager, "Wither Minion", KitAvailability.Free, + + new String[] + { + "" + }, + + new Perk[] + { + new PerkWitherArrows(), + new PerkWitherAttack(), + new PerkWitherMinion() + }, + EntityType.WITHER, + null); + + } + + @Override + public void GiveItems(Player player) + { + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD, (byte)0, 1, + C.cYellow + C.Bold + "Left-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Wither Skull")); + + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_SWORD, (byte)0, 1, + C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Skeletal Minions")); + + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.COMPASS, (byte)0, 1, + C.cYellow + C.Bold + "Human Finder X-9000")); + + //Disguise + DisguiseWither disguise = new DisguiseWither(player); + + if (Manager.GetGame().GetTeam(player) != null) + disguise.SetName(Manager.GetGame().GetTeam(player).GetColor() + player.getName()); + else + disguise.SetName(player.getName()); + + disguise.SetCustomNameVisible(true); + Manager.GetDisguise().disguise(disguise); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void witherDamageCancel(CustomDamageEvent event) + { + if (event.IsCancelled()) + return; + + Player player = event.GetDamageePlayer(); + if (player == null) + return; + + if (HasKit(player)) + event.SetCancelled("Wither Immunity"); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void witherMeleeCancel(CustomDamageEvent event) + { + if (event.IsCancelled()) + return; + + Player player = event.GetDamagerPlayer(true); + if (player == null) + return; + + if (!HasKit(player)) + return; + + if (event.GetCause() != DamageCause.ENTITY_ATTACK) + return; + + event.SetCancelled("Wither Melee Cancel"); + } + + @EventHandler + public void witherFlight(UpdateEvent event) + { + for (Player player : UtilServer.getPlayers()) + { + if (!HasKit(player)) + continue; + + if (player.isFlying()) + continue; + + player.setAllowFlight(true); + player.setFlying(true); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWither.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherWeb.java similarity index 81% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWither.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherWeb.java index e906d36e6..57b313748 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWither.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherWeb.java @@ -9,7 +9,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilServer; -import mineplex.core.disguise.disguises.DisguiseBlaze; +import mineplex.core.disguise.disguises.DisguiseWither; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -18,13 +18,12 @@ import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.perks.*; -import nautilus.game.arcade.kit.perks.data.IBlockRestorer; -public class KitWither extends Kit +public class KitWitherWeb extends Kit { - public KitWither(ArcadeManager manager) + public KitWitherWeb(ArcadeManager manager) { - super(manager, "Wither", KitAvailability.Free, + super(manager, "Wither Trapper", KitAvailability.Free, new String[] { @@ -36,9 +35,8 @@ public class KitWither extends Kit new PerkWitherArrows(), new PerkWitherAttack(), new PerkWitherWeb(), - new PerkWitherMinion() }, - EntityType.ZOMBIE, + EntityType.WITHER, null); } @@ -51,12 +49,9 @@ public class KitWither extends Kit player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, C.cYellow + C.Bold + "Left-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Web Blast")); - - player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_SWORD, (byte)0, 1, - C.cYellow + C.Bold + "Left-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Skeletal Minions")); //Disguise - DisguiseBlaze disguise = new DisguiseBlaze(player); + DisguiseWither disguise = new DisguiseWither(player); if (Manager.GetGame().GetTeam(player) != null) disguise.SetName(Manager.GetGame().GetTeam(player).GetColor() + player.getName()); @@ -113,7 +108,6 @@ public class KitWither extends Kit player.setAllowFlight(true); player.setFlying(true); - player.setFlySpeed(0.1f); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkIronShell.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkIronShell.java new file mode 100644 index 000000000..dcdbbac20 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkIronShell.java @@ -0,0 +1,76 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.HashMap; + +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.recharge.Recharge; +import nautilus.game.arcade.kit.Perk; + +public class PerkIronShell extends Perk +{ + public PerkIronShell() + { + super("Iron Shell", new String[] + { + C.cYellow + "Right-Click" + C.cGray + " with Spade to use " + C.cGreen + "Iron Shell" + }); + } + + @EventHandler + public void Activate(PlayerInteractEvent event) + { + if (event.isCancelled()) + return; + + if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + if (UtilBlock.usable(event.getClickedBlock())) + return; + + if (!event.getPlayer().getItemInHand().getType().toString().contains("_SPADE")) + return; + + Player player = event.getPlayer(); + + if (!Kit.HasKit(player)) + return; + + if (!Recharge.Instance.use(player, GetName(), 60000, true, true)) + return; + + //Sphere + Block block = player.getLocation().getBlock(); + HashMap blocks = UtilBlock.getInRadius(block.getLocation().add(0.5, 0.5, 0.5), 6d); + for (Block cur : blocks.keySet()) + { + if (UtilMath.offset(block.getLocation(), cur.getLocation()) <= 5) + continue; + + //Doors + if (cur.getY() < block.getLocation().getY() + 2) + if (cur.getX() == block.getX() || cur.getZ() == block.getZ()) + continue; + + //None Below + if (cur.getY() < block.getLocation().getY()) + continue; + + Manager.GetBlockRestore().Add(cur, 42, (byte)0, 12000); + } + + + //Inform + UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + ".")); + } +} 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 2009937a1..6073b0d51 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 @@ -96,7 +96,7 @@ public class PerkWitherArrowBlind extends Perk boolean hit = false; for (Player player : getWitherTeam().GetPlayers(true)) { - if (UtilMath.offset(player.getLocation().add(0, 2, 0), arrow.getLocation()) < _proximityHit) + if (UtilMath.offset(player.getLocation().add(0, 1, 0), arrow.getLocation()) < _proximityHit) { Manager.GetCondition().Factory().Blind(GetName(), player, null, 4, 0, false, false, false); 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 396f82d7d..ed4732d48 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 @@ -41,17 +41,17 @@ public class PerkWitherArrows extends Perk if (!player.isBlocking()) { - player.setExp((float) Math.min(0.999, player.getExp()+(1f/40f))); + player.setExp((float) Math.min(0.999, player.getExp()+(1f/30f))); } else if (player.getExp() > 0) { - player.setExp((float) Math.max(0, player.getExp()-(1f/40f))); + player.setExp((float) Math.max(0, player.getExp()-(1f/30f))); - for (int i=0 ; i<2 ; i++) + for (int i=0 ; i<1 ; i++) { Arrow arrow = player.getWorld().spawnArrow( player.getEyeLocation().add(player.getLocation().getDirection()), - player.getLocation().getDirection(), 2, 12); + player.getLocation().getDirection(), 2, 6); arrow.setShooter(player); @@ -64,7 +64,6 @@ public class PerkWitherArrows extends Perk } } - @EventHandler public void update(UpdateEvent event) { @@ -77,10 +76,12 @@ public class PerkWitherArrows extends Perk { Arrow arrow = arrowIter.next(); - if (!arrow.isValid() || arrow.getTicksLived() > 60 || arrow.getLocation().getY() < 0) + if (!arrow.isValid() || arrow.getTicksLived() > 60 || arrow.getLocation().getY() < 0 || arrow.isOnGround()) { arrow.remove(); arrowIter.remove(); + + UtilParticle.PlayParticle(ParticleType.LAVA, arrow.getLocation(), 0, 0, 0, 0, 1); } else if (arrow.getTicksLived() > 1) { 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 07273c31c..32aecef65 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 @@ -145,7 +145,7 @@ public class PerkWitherAttack extends Perk //Damage Event Manager.GetDamage().NewDamageEvent(player, (LivingEntity)skull.getShooter(), null, - DamageCause.CUSTOM, 10 * scale, true, true, false, + DamageCause.CUSTOM, 8 * players.get(player) * scale, true, true, false, UtilEnt.getName((LivingEntity)skull.getShooter()), GetName()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherMinion.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherMinion.java index aa901d054..d58ec59ad 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherMinion.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherMinion.java @@ -109,7 +109,7 @@ public class PerkWitherMinion extends Perk } @EventHandler(priority = EventPriority.LOWEST) - public void witherMeleeCancel(CustomDamageEvent event) + public void witherFallCancel(CustomDamageEvent event) { if (event.IsCancelled()) return; @@ -117,7 +117,7 @@ public class PerkWitherMinion extends Perk if (event.GetCause() != DamageCause.FALL) return; - if (_ents.contains(event.GetDamageeEntity())) + if (!_ents.contains(event.GetDamageeEntity())) return; event.SetCancelled("Minion Fall Damage"); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java index e15eebcf7..2260e9aaf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java @@ -391,8 +391,10 @@ public class GameManager implements Listener Player player = queueIterator.next(); if (!game.CanJoinTeam(team)) + { break; - + } + queueIterator.remove(); if (!game.IsPlaying(player)) 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 4a3c9e96a..c45e80ebb 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 @@ -329,12 +329,18 @@ public class GamePlayerManager implements Listener Donor donor = Manager.GetDonation().Get(player.getName()); if (kit.GetAvailability() == KitAvailability.Free || //Free + Manager.isYoutuber(player) || //YouTube - (kit.GetAvailability() == KitAvailability.Achievement && - Manager.GetAchievement().hasCategory(player, kit.getAchievementRequirement())) || //Achievement + + (kit.GetAvailability() == KitAvailability.Achievement && //Achievement + Manager.GetAchievement().hasCategory(player, kit.getAchievementRequirement())) || + donor.OwnsUnknownPackage(Manager.GetGame().GetName() + " " + kit.GetName()) || //Green + Manager.GetClients().Get(player).GetRank().Has(Rank.HELPER) || //STAFF + donor.OwnsUnknownPackage(Manager.GetServerConfig().ServerType + " ULTRA") || //Single Ultra (Old) + Manager.GetServerConfig().Tournament) //Tournament { Manager.GetGame().SetKit(player, kit, true);