From 1b3d7f1c209c467b458e5d74442376fd1e1b6234 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Wed, 8 Jul 2015 23:57:48 -0400 Subject: [PATCH 01/18] Fixed and added things --- .../src/mineplex/core/game/GameDisplay.java | 1 + .../src/nautilus/game/arcade/GameType.java | 4 +- .../game/games/lobbers/BombLobbers.java | 169 ++++++++++++++++++ .../game/games/lobbers/kits/KitCannoneer.java | 35 ++++ .../lobbers/kits/perks/PerkCraftman.java | 49 +++++ 5 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitCannoneer.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java index 196b046e2..c5230d28f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java @@ -27,6 +27,7 @@ public enum GameDisplay HideSeek("Block Hunt", Material.GRASS, (byte)0, GameCategory.CLASSICS, 20), HoleInTheWall("Hole in the Wall", Material.STAINED_GLASS, (byte) 2, GameCategory.ARCADE, 52), Horse("Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE, 21), + Lobbers("Bomb Lobbers", Material.TNT, (byte) 0, GameCategory.ARCADE, 53), 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.CHAMPIONS, 25),// Temp set to CHAMPIONS to fix UI bug 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 fe73d8673..b2b8e3d40 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -26,6 +26,7 @@ import nautilus.game.arcade.game.games.halloween.Halloween; import nautilus.game.arcade.game.games.hideseek.HideSeek; import nautilus.game.arcade.game.games.holeinwall.HoleInTheWall; import nautilus.game.arcade.game.games.horsecharge.Horse; +import nautilus.game.arcade.game.games.lobbers.BombLobbers; import nautilus.game.arcade.game.games.micro.Micro; import nautilus.game.arcade.game.games.milkcow.MilkCow; import nautilus.game.arcade.game.games.minestrike.MineStrike; @@ -84,6 +85,7 @@ public enum GameType HideSeek(HideSeek.class, GameDisplay.HideSeek), HoleInTheWall(HoleInTheWall.class, GameDisplay.HoleInTheWall), Horse(Horse.class, GameDisplay.Horse), + Lobbers(BombLobbers.class, GameDisplay.Lobbers), Micro(Micro.class, GameDisplay.Micro), MilkCow(MilkCow.class, GameDisplay.MilkCow), MineStrike(MineStrike.class, GameDisplay.MineStrike, "http://chivebox.com/file/c/assets.zip", true),// Temp set to CHAMPIONS to fix UI bug @@ -112,7 +114,7 @@ public enum GameType TurfWars(TurfForts.class, GameDisplay.TurfWars), UHC(UHC.class, GameDisplay.UHC), WitherAssault(WitherGame.class, GameDisplay.WitherAssault), - Wizards(Wizards.class, GameDisplay.Barbarians.Wizards, "http://chivebox.com/file/c/ResWizards.zip", true), + Wizards(Wizards.class, GameDisplay.Wizards, "http://chivebox.com/file/c/ResWizards.zip", true), ZombieSurvival(ZombieSurvival.class, GameDisplay.ZombieSurvival), Build(Build.class, GameDisplay.Build), diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java new file mode 100644 index 000000000..1a2b6aa02 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -0,0 +1,169 @@ +package nautilus.game.arcade.game.games.lobbers; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map.Entry; + +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilPlayer; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.GameType; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.GameTeam; +import nautilus.game.arcade.game.TeamGame; +import nautilus.game.arcade.game.games.lobbers.kits.KitCannoneer; +import nautilus.game.arcade.kit.Kit; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.bukkit.event.player.PlayerInteractEvent; + +public class BombLobbers extends TeamGame +{ + private NautHashMap _averageSpawns = new NautHashMap(); + + private NautHashMap _throwers = new NautHashMap(); + private NautHashMap _teams = new NautHashMap(); + + private List _allowed = new ArrayList(); + + public BombLobbers(ArcadeManager manager) + { + super(manager, GameType.Lobbers, new Kit[] + { + new KitCannoneer(manager) + }, new String[] + { + "Throw TNT to blow up your enemies!", + "Click with TNT to throw" + }); + + DamagePvP = false; + DamageSelf = false; + + WorldWaterDamage = 5; + + PrepareFreeze = false; + + TeamArmor = true; + TeamArmorHotbar = true; + } + + @EventHandler + public void loadTeamLocations(GameStateChangeEvent event) + { + if (event.GetState() == GameState.Live) + { + for (GameTeam team : _teamList) + { + _averageSpawns.put(team, UtilAlg.getAverageLocation(team.GetSpawns())); + } + } + } + + //Skywars code + @EventHandler + public void throwTNT(PlayerInteractEvent event) + { + if (!IsLive()) + return; + + Player player = event.getPlayer(); + + if (!IsAlive(player)) + return; + + if (!UtilInv.IsItem(player.getItemInHand(), Material.TNT, (byte) 0)) + return; + + event.setCancelled(true); + + UtilInv.remove(player, Material.TNT, (byte) 0, 1); + UtilInv.Update(player); + + TNTPrimed tnt = (TNTPrimed) player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()),TNTPrimed.class); + + UtilAction.velocity(tnt, player.getLocation().getDirection(), 2.0D, false, 0.0D, 0.1D, 10.0D, false); + + player.playSound(player.getLocation(), Sound.CREEPER_HISS, 3.0F, 1.0F); + + _throwers.put(tnt, player.getName()); + _teams.put(tnt, GetTeam(player)); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onTNTExplode(ExplosionPrimeEvent event) + { + if (!IsLive()) + return; + + if (!(event.getEntity() instanceof TNTPrimed)) + return; + + TNTPrimed tnt = (TNTPrimed) event.getEntity(); + + if (!_throwers.containsKey(tnt)) + return; + + Player thrower = UtilPlayer.searchExact(_throwers.get(tnt)); + + if (thrower == null) + { + if (_teams.get(tnt).IsTeamAlive()) + { + thrower = _teams.get(tnt).GetPlayers(true).get(0); + } + else + { + event.setCancelled(true); + + event.getEntity().remove(); + return; + } + } + + GameTeam throwerTeam = GetTeam(thrower); + GameTeam throwerSide = getSide(tnt.getLocation()); + + if (throwerTeam.GetName().equalsIgnoreCase(throwerSide.GetName())) + { + event.setCancelled(true); + + event.getEntity().remove(); + return; + } + + _allowed.add(thrower); + _throwers.remove(tnt); + _teams.remove(tnt); + + for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 8)) + { + if (Manager.canHurt(thrower, other)) + { + Manager.GetCondition().Factory().Explosion("Throwing TNT", other, thrower, 50, 0.1, false, false); + } + } + } + + private GameTeam getSide(Location entityLoc) + { + Location nearest = UtilAlg.findClosest(entityLoc, new ArrayList(_averageSpawns.values())); + for (Entry entry : _averageSpawns.entrySet()) + { + if (entry.getValue().equals(nearest)) + return entry.getKey(); + } + return null; + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitCannoneer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitCannoneer.java new file mode 100644 index 000000000..892a06285 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitCannoneer.java @@ -0,0 +1,35 @@ +package nautilus.game.arcade.game.games.lobbers.kits; + +import mineplex.core.itemstack.ItemBuilder; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.KitAvailability; +import nautilus.game.arcade.kit.Perk; + +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +public class KitCannoneer extends Kit +{ + + public KitCannoneer(ArcadeManager manager) + { + super(manager, "Cannoneer", KitAvailability.Free, 0, new String[] + { + "Once the ammunitions expert for", + "pirates, explosives are his specialty." + }, new Perk[] + { + new PerkCraftman() + }, EntityType.ZOMBIE, new ItemBuilder(Material.TNT).build()); + } + + @Override + public void GiveItems(Player player) + { + + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java new file mode 100644 index 000000000..b6d74ff5b --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java @@ -0,0 +1,49 @@ +package nautilus.game.arcade.game.games.lobbers.kits.perks; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.kit.Perk; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +public class PerkCraftman extends Perk +{ + private Recharge _recharge; + + public PerkCraftman() + { + super("Craftman", new String[] + { + C.cGray + "Recieve 1 TNT every 2 seconds. Maximum of 4." + }); + + _recharge = Recharge.Instance; + } + + @EventHandler + public void give(UpdateEvent event) + { + if (!Manager.GetGame().IsLive()) + return; + + for (Player player : Manager.GetGame().GetPlayers(true)) + { + if (!_recharge.usable(player, "TNT Give")) + continue; + + _recharge.use(player, "TNT Give", 2000, false, false); + + //Has 4 + if (UtilInv.contains(player, Material.TNT, (byte) 0, 4)) + continue; + + UtilInv.insert(player, new ItemBuilder(Material.TNT).setTitle(C.cGreen + "Throwing TNT").build()); + } + } + +} From 9e07be51c7fdb49512dc0ec6e6f98848ad512650 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Thu, 9 Jul 2015 12:03:56 -0400 Subject: [PATCH 02/18] Bug fixes --- .../game/games/lobbers/BombLobbers.java | 113 +++++++++++++++++- .../{KitCannoneer.java => KitJumper.java} | 13 +- .../lobbers/kits/perks/PerkCraftman.java | 16 ++- 3 files changed, 132 insertions(+), 10 deletions(-) rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/{KitCannoneer.java => KitJumper.java} (66%) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index 1a2b6aa02..abb1e9fb6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -1,29 +1,42 @@ package nautilus.game.arcade.game.games.lobbers; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.Map.Entry; +import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilInv; +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.explosion.ExplosionEvent; +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.GameTeam; import nautilus.game.arcade.game.TeamGame; -import nautilus.game.arcade.game.games.lobbers.kits.KitCannoneer; +import nautilus.game.arcade.game.games.lobbers.kits.KitJumper; import nautilus.game.arcade.kit.Kit; +import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.player.PlayerInteractEvent; @@ -40,7 +53,7 @@ public class BombLobbers extends TeamGame { super(manager, GameType.Lobbers, new Kit[] { - new KitCannoneer(manager) + new KitJumper(manager) }, new String[] { "Throw TNT to blow up your enemies!", @@ -56,6 +69,11 @@ public class BombLobbers extends TeamGame TeamArmor = true; TeamArmorHotbar = true; + + InventoryOpenChest = false; + InventoryOpenBlock = false; + + HungerSet = 20; } @EventHandler @@ -70,10 +88,12 @@ public class BombLobbers extends TeamGame } } - //Skywars code @EventHandler public void throwTNT(PlayerInteractEvent event) { + if (event.getAction() == Action.PHYSICAL) + return; + if (!IsLive()) return; @@ -154,7 +174,94 @@ public class BombLobbers extends TeamGame } } } + + //Doesn't seem to work for some reason + @EventHandler + public void removeLiquids(EntityExplodeEvent event) + { + System.out.println("EXPLOSION EVENT CALLED FROM ENTITYEXPLODEEVENT"); + if (!IsLive()) + return; + + Iterator iterator = event.blockList().iterator(); + + while (iterator.hasNext()) + { + if (iterator.next().isLiquid()) + { + System.out.println("REMOVED A LIQUID FROM THE EXPLOSION"); + iterator.remove(); + } + } + } + + @EventHandler + public void removeLiquids2(ExplosionEvent event) + { + System.out.println("EXPLOSION EVENT CALLED FROM EXPLOSIONEVENT"); + if (!IsLive()) + return; + + Iterator iterator = event.GetBlocks().iterator(); + + while (iterator.hasNext()) + { + if (iterator.next().isLiquid()) + { + System.out.println("REMOVED A LIQUID FROM THE EXPLOSION"); + + iterator.remove(); + } + } + } + + @EventHandler + public void updateParticles(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + if (!IsLive()) + return; + + for (Entry tnt : _teams.entrySet()) + { + if (tnt.getKey() != null && tnt.getKey().isValid() && !tnt.getKey().isOnGround()) + { + if (tnt.getValue().GetColor() == ChatColor.AQUA) + { + UtilParticle.PlayParticle(ParticleType.RED_DUST, tnt.getKey().getLocation().clone().add(0.0, 0.5, 0.0), -1, -1, 1, 1, 0, + ViewDist.LONG, UtilServer.getPlayers()); + } + else + { + UtilParticle.PlayParticle(ParticleType.RED_DUST, tnt.getKey().getLocation().clone().add(0.0, 0.5, 0.0), 0.0F, 0.0F, 0.0F, 0.0F, 3, ViewDist.LONG, UtilServer.getPlayers()); + } + } + } + } + + @EventHandler + public void preventCheating(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + if (!IsLive()) + return; + + for (Player player : GetPlayers(true)) + { + if (GetTeam(player) != getSide(player.getLocation())) + { + player.damage(500); + UtilPlayer.message(player, F.main("Game", "You were killed for trying to cheat!")); + continue; + } + } + } + private GameTeam getSide(Location entityLoc) { Location nearest = UtilAlg.findClosest(entityLoc, new ArrayList(_averageSpawns.values())); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitCannoneer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java similarity index 66% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitCannoneer.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java index 892a06285..ad38caeb1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitCannoneer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java @@ -6,22 +6,23 @@ import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.perks.PerkDoubleJump; import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; -public class KitCannoneer extends Kit +public class KitJumper extends Kit { - public KitCannoneer(ArcadeManager manager) + public KitJumper(ArcadeManager manager) { - super(manager, "Cannoneer", KitAvailability.Free, 0, new String[] + super(manager, "Jumper", KitAvailability.Free, 0, new String[] { - "Once the ammunitions expert for", - "pirates, explosives are his specialty." + "Use your jumping abilities to leap away from trouble!" }, new Perk[] { + new PerkDoubleJump("Double Jump", 1.2, 1.2, false, 6000, true), new PerkCraftman() }, EntityType.ZOMBIE, new ItemBuilder(Material.TNT).build()); } @@ -32,4 +33,4 @@ public class KitCannoneer extends Kit } -} +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java index b6d74ff5b..26b0b6e28 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java @@ -36,7 +36,7 @@ public class PerkCraftman extends Perk if (!_recharge.usable(player, "TNT Give")) continue; - _recharge.use(player, "TNT Give", 2000, false, false); + _recharge.use(player, "TNT Give", rechargeSeconds(), false, false); //Has 4 if (UtilInv.contains(player, Material.TNT, (byte) 0, 4)) @@ -45,5 +45,19 @@ public class PerkCraftman extends Perk UtilInv.insert(player, new ItemBuilder(Material.TNT).setTitle(C.cGreen + "Throwing TNT").build()); } } + + public long rechargeSeconds() + { + if (!Manager.GetGame().IsLive()) + return 0; + + if (Manager.GetGame().getGameLiveTime() > 60000) + return 2000; + + if (Manager.GetGame().getGameLiveTime() > 30000) + return 3000; + + return 4000; + } } From f812fd0530fc3f5c0729c8e3060c72ea08c39589 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Fri, 10 Jul 2015 16:31:37 -0400 Subject: [PATCH 03/18] Please push please --- .../game/games/lobbers/BombLobbers.java | 100 +++++--------- .../games/lobbers/events/TNTThrowEvent.java | 37 ++++++ .../game/games/lobbers/kits/KitDetonator.java | 124 ++++++++++++++++++ .../game/games/lobbers/kits/KitJumper.java | 2 +- .../lobbers/kits/perks/PerkCraftman.java | 28 ++-- 5 files changed, 202 insertions(+), 89 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/events/TNTThrowEvent.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index abb1e9fb6..026ac13a3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -1,8 +1,6 @@ package nautilus.game.arcade.game.games.lobbers; import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; import java.util.Map.Entry; import mineplex.core.common.util.F; @@ -15,7 +13,6 @@ 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.explosion.ExplosionEvent; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; @@ -23,6 +20,8 @@ import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.TeamGame; +import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; +import nautilus.game.arcade.game.games.lobbers.kits.KitDetonator; import nautilus.game.arcade.game.games.lobbers.kits.KitJumper; import nautilus.game.arcade.kit.Kit; @@ -30,15 +29,13 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; -import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.metadata.FixedMetadataValue; public class BombLobbers extends TeamGame { @@ -46,14 +43,13 @@ public class BombLobbers extends TeamGame private NautHashMap _throwers = new NautHashMap(); private NautHashMap _teams = new NautHashMap(); - - private List _allowed = new ArrayList(); - + public BombLobbers(ArcadeManager manager) { super(manager, GameType.Lobbers, new Kit[] { - new KitJumper(manager) + new KitJumper(manager), + new KitDetonator(manager) }, new String[] { "Throw TNT to blow up your enemies!", @@ -73,6 +69,12 @@ public class BombLobbers extends TeamGame InventoryOpenChest = false; InventoryOpenBlock = false; + ItemDrop = false; + + BlockPlace = false; + + Manager.GetExplosion().SetLiquidDamage(false); + HungerSet = 20; } @@ -107,20 +109,25 @@ public class BombLobbers extends TeamGame event.setCancelled(true); + UtilInv.remove(player, Material.TNT, (byte) 0, 1); UtilInv.Update(player); TNTPrimed tnt = (TNTPrimed) player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()),TNTPrimed.class); + tnt.setFuseTicks(60); + tnt.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), player.getUniqueId())); UtilAction.velocity(tnt, player.getLocation().getDirection(), 2.0D, false, 0.0D, 0.1D, 10.0D, false); player.playSound(player.getLocation(), Sound.CREEPER_HISS, 3.0F, 1.0F); - + _throwers.put(tnt, player.getName()); _teams.put(tnt, GetTeam(player)); + + Manager.getPlugin().getServer().getPluginManager().callEvent(new TNTThrowEvent(player, tnt)); } - @EventHandler(priority = EventPriority.HIGH) + @EventHandler public void onTNTExplode(ExplosionPrimeEvent event) { if (!IsLive()) @@ -138,17 +145,13 @@ public class BombLobbers extends TeamGame if (thrower == null) { - if (_teams.get(tnt).IsTeamAlive()) - { - thrower = _teams.get(tnt).GetPlayers(true).get(0); - } - else - { - event.setCancelled(true); + event.setCancelled(true); - event.getEntity().remove(); - return; - } + _throwers.remove(tnt); + _teams.remove(tnt); + + event.getEntity().remove(); + return; } GameTeam throwerTeam = GetTeam(thrower); @@ -158,61 +161,20 @@ public class BombLobbers extends TeamGame { event.setCancelled(true); + _throwers.remove(tnt); + _teams.remove(tnt); + event.getEntity().remove(); + return; } - _allowed.add(thrower); _throwers.remove(tnt); _teams.remove(tnt); - for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 8)) + for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 14)) { - if (Manager.canHurt(thrower, other)) - { - Manager.GetCondition().Factory().Explosion("Throwing TNT", other, thrower, 50, 0.1, false, false); - } - } - } - - //Doesn't seem to work for some reason - @EventHandler - public void removeLiquids(EntityExplodeEvent event) - { - System.out.println("EXPLOSION EVENT CALLED FROM ENTITYEXPLODEEVENT"); - if (!IsLive()) - return; - - Iterator iterator = event.blockList().iterator(); - - while (iterator.hasNext()) - { - if (iterator.next().isLiquid()) - { - System.out.println("REMOVED A LIQUID FROM THE EXPLOSION"); - - iterator.remove(); - } - } - } - - @EventHandler - public void removeLiquids2(ExplosionEvent event) - { - System.out.println("EXPLOSION EVENT CALLED FROM EXPLOSIONEVENT"); - if (!IsLive()) - return; - - Iterator iterator = event.GetBlocks().iterator(); - - while (iterator.hasNext()) - { - if (iterator.next().isLiquid()) - { - System.out.println("REMOVED A LIQUID FROM THE EXPLOSION"); - - iterator.remove(); - } + Manager.GetCondition().Factory().Explosion("Throwing TNT", other, thrower, 50, 0.1, false, false); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/events/TNTThrowEvent.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/events/TNTThrowEvent.java new file mode 100644 index 000000000..b6bebee11 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/events/TNTThrowEvent.java @@ -0,0 +1,37 @@ +package nautilus.game.arcade.game.games.lobbers.events; + +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +public class TNTThrowEvent extends PlayerEvent +{ + private static final HandlerList _handlers = new HandlerList(); + + private TNTPrimed _tnt; + + public TNTThrowEvent(Player thrower, TNTPrimed tnt) + { + super(thrower); + + _tnt = tnt; + } + + public TNTPrimed getTNT() + { + return _tnt; + } + + public static HandlerList getHandlerList() + { + return _handlers; + } + + @Override + public HandlerList getHandlers() + { + return getHandlerList(); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java new file mode 100644 index 000000000..9cde3f12f --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java @@ -0,0 +1,124 @@ +package nautilus.game.arcade.game.games.lobbers.kits; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilInv; +import mineplex.core.itemstack.ItemBuilder; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; +import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.KitAvailability; +import nautilus.game.arcade.kit.Perk; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +public class KitDetonator extends Kit +{ + + public KitDetonator(ArcadeManager manager) + { + super(manager, "Detonator", KitAvailability.Free, 0, new String[] + { + "He doesn't like to wait.", + "", + C.cYellow + "Left Click" + C.cGray + " lever to " + C.cGreen + "Decrease Fuse Time.", + C.cYellow + "Right Click" + C.cGray + " lever to " + C.cGreen + "Increase Fuse Time." + }, new Perk[] + { + new PerkCraftman() + }, EntityType.ZOMBIE, + new ItemBuilder(Material.LEVER).build()); + } + + @Override + public void GiveItems(Player player) + { + player.getInventory().setItem(1, new ItemBuilder(Material.LEVER).setTitle(F.item("Fuse Selector (Seconds)")).setAmount(2).build()); + } + + @EventHandler + public void setFuse(TNTThrowEvent event) + { + if (!Manager.GetGame().IsLive()) + return; + + if (!HasKit(event.getPlayer())) + return; + + ItemStack lever = event.getPlayer().getInventory().getItem(1); + + if (lever == null || lever.getType() == Material.AIR) + { + GiveItems(event.getPlayer()); + } + else + { + if (lever.getAmount() <= 0 || lever.getAmount() > 3) + { + GiveItems(event.getPlayer()); + } + else + { + event.getTNT().setFuseTicks(lever.getAmount() * 20); + } + } + } + + @EventHandler + public void changeFuse(PlayerInteractEvent event) + { + if (event.getAction() == Action.PHYSICAL) + return; + + if (!Manager.GetGame().IsLive()) + return; + + if (!Manager.IsAlive(event.getPlayer())) + return; + + if (!HasKit(event.getPlayer())) + return; + + if (event.getItem().getType() != Material.LEVER) + return; + + ItemStack lever = event.getPlayer().getInventory().getItem(1); + + if (lever.getAmount() <= 0 || lever.getAmount() > 3) + { + GiveItems(event.getPlayer()); + return; + } + + //Right + if (event.getAction().toString().contains("RIGHT")) + { + if (lever.getAmount() == 3) + { + return; + } + lever.setAmount(lever.getAmount() + 1); + UtilInv.Update(event.getPlayer()); + } + //Left + else + { + if (lever.getAmount() == 1) + { + return; + } + lever.setAmount(lever.getAmount() - 1); + UtilInv.Update(event.getPlayer()); + } + + event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), Sound.CLICK, 3.0F, 1.0F); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java index ad38caeb1..4b97e2985 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java @@ -24,7 +24,7 @@ public class KitJumper extends Kit { new PerkDoubleJump("Double Jump", 1.2, 1.2, false, 6000, true), new PerkCraftman() - }, EntityType.ZOMBIE, new ItemBuilder(Material.TNT).build()); + }, EntityType.ZOMBIE, new ItemBuilder(Material.IRON_AXE).build()); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java index 26b0b6e28..b99b833ae 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java @@ -1,6 +1,7 @@ package nautilus.game.arcade.game.games.lobbers.kits.perks; import mineplex.core.common.util.C; +import mineplex.core.common.util.F; import mineplex.core.common.util.UtilInv; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.recharge.Recharge; @@ -8,6 +9,7 @@ import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.kit.Perk; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -19,7 +21,7 @@ public class PerkCraftman extends Perk { super("Craftman", new String[] { - C.cGray + "Recieve 1 TNT every 2 seconds. Maximum of 4." + C.cGray + "Recieve 1 TNT every 2 seconds. Maximum of 3." }); _recharge = Recharge.Instance; @@ -35,29 +37,17 @@ public class PerkCraftman extends Perk { if (!_recharge.usable(player, "TNT Give")) continue; - - _recharge.use(player, "TNT Give", rechargeSeconds(), false, false); + + _recharge.use(player, "TNT Give", Manager.GetGame().getGameLiveTime() >= 60000 ? 3000 : (Manager.GetGame().getGameLiveTime() >= 3000 ? 4000 : 5000), false, false); //Has 4 - if (UtilInv.contains(player, Material.TNT, (byte) 0, 4)) + if (UtilInv.contains(player, Material.TNT, (byte) 0, 3)) continue; - UtilInv.insert(player, new ItemBuilder(Material.TNT).setTitle(C.cGreen + "Throwing TNT").build()); + UtilInv.insert(player, new ItemBuilder(Material.TNT).setTitle(F.item("Throwing TNT")).build()); + + player.getWorld().playSound(player.getLocation(), Sound.CHICKEN_EGG_POP, 3.0F, 1.0F); } } - - public long rechargeSeconds() - { - if (!Manager.GetGame().IsLive()) - return 0; - - if (Manager.GetGame().getGameLiveTime() > 60000) - return 2000; - - if (Manager.GetGame().getGameLiveTime() > 30000) - return 3000; - - return 4000; - } } From d0180910e9953b5ee647d0baccbf443c22d33527 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Sat, 11 Jul 2015 10:25:04 -0400 Subject: [PATCH 04/18] Added two new kits. --- .../game/games/lobbers/BombLobbers.java | 16 +- .../game/games/lobbers/kits/KitArmorer.java | 53 ++++++ .../game/games/lobbers/kits/KitDetonator.java | 44 +++-- .../game/games/lobbers/kits/KitJumper.java | 9 +- .../game/games/lobbers/kits/KitWaller.java | 37 ++++ .../games/lobbers/kits/perks/PerkWaller.java | 162 ++++++++++++++++++ 6 files changed, 289 insertions(+), 32 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index 026ac13a3..cbdc955e4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -21,8 +21,10 @@ import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.TeamGame; import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; +import nautilus.game.arcade.game.games.lobbers.kits.KitArmorer; import nautilus.game.arcade.game.games.lobbers.kits.KitDetonator; import nautilus.game.arcade.game.games.lobbers.kits.KitJumper; +import nautilus.game.arcade.game.games.lobbers.kits.KitWaller; import nautilus.game.arcade.kit.Kit; import org.bukkit.ChatColor; @@ -49,14 +51,15 @@ public class BombLobbers extends TeamGame super(manager, GameType.Lobbers, new Kit[] { new KitJumper(manager), - new KitDetonator(manager) + new KitArmorer(manager), + new KitDetonator(manager), + new KitWaller(manager) }, new String[] { "Throw TNT to blow up your enemies!", "Click with TNT to throw" }); - DamagePvP = false; DamageSelf = false; WorldWaterDamage = 5; @@ -73,6 +76,8 @@ public class BombLobbers extends TeamGame BlockPlace = false; + DamageFall = true; + Manager.GetExplosion().SetLiquidDamage(false); HungerSet = 20; @@ -153,11 +158,8 @@ public class BombLobbers extends TeamGame event.getEntity().remove(); return; } - - GameTeam throwerTeam = GetTeam(thrower); - GameTeam throwerSide = getSide(tnt.getLocation()); - if (throwerTeam.GetName().equalsIgnoreCase(throwerSide.GetName())) + if (GetTeam(thrower) == getSide(tnt.getLocation())) { event.setCancelled(true); @@ -172,7 +174,7 @@ public class BombLobbers extends TeamGame _throwers.remove(tnt); _teams.remove(tnt); - for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 14)) + for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 5)) { Manager.GetCondition().Factory().Explosion("Throwing TNT", other, thrower, 50, 0.1, false, false); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java new file mode 100644 index 000000000..de1651826 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java @@ -0,0 +1,53 @@ +package nautilus.game.arcade.game.games.lobbers.kits; + +import mineplex.core.common.util.C; +import mineplex.core.itemstack.ItemBuilder; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.KitAvailability; +import nautilus.game.arcade.kit.Perk; + +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class KitArmorer extends Kit +{ + + public KitArmorer(ArcadeManager manager) + { + super(manager, "Armorer", KitAvailability.Free, 0, new String[] + { + "He uses his expert armor-making", + "skills to block excess damage!", + "", + C.cGray + "Recieve " + C.cYellow + "Full Gold Armor" + }, new Perk[] + { + new PerkCraftman() + }, EntityType.ZOMBIE, + new ItemStack(Material.AIR)); + } + + @Override + public void GiveItems(Player player) + { + player.getInventory().setHelmet(new ItemBuilder(Material.GOLD_HELMET).setUnbreakable(true).build()); + player.getInventory().setChestplate(new ItemBuilder(Material.GOLD_CHESTPLATE).setUnbreakable(true).build()); + player.getInventory().setLeggings(new ItemBuilder(Material.GOLD_LEGGINGS).setUnbreakable(true).build()); + player.getInventory().setBoots(new ItemBuilder(Material.GOLD_BOOTS).setUnbreakable(true).build()); + } + + @Override + public void SpawnCustom(LivingEntity ent) + { + ent.getEquipment().setHelmet(new ItemBuilder(Material.GOLD_HELMET).build()); + ent.getEquipment().setChestplate(new ItemBuilder(Material.GOLD_CHESTPLATE).build()); + ent.getEquipment().setLeggings(new ItemBuilder(Material.GOLD_LEGGINGS).build()); + ent.getEquipment().setBoots(new ItemBuilder(Material.GOLD_BOOTS).build()); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java index 9cde3f12f..6c8c3768f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java @@ -2,6 +2,8 @@ package nautilus.game.arcade.game.games.lobbers.kits; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilInv; import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; @@ -14,9 +16,9 @@ import nautilus.game.arcade.kit.Perk; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; @@ -37,12 +39,18 @@ public class KitDetonator extends Kit }, EntityType.ZOMBIE, new ItemBuilder(Material.LEVER).build()); } - + @Override public void GiveItems(Player player) { player.getInventory().setItem(1, new ItemBuilder(Material.LEVER).setTitle(F.item("Fuse Selector (Seconds)")).setAmount(2).build()); } + + @Override + public void SpawnCustom(LivingEntity ent) + { + + } @EventHandler public void setFuse(TNTThrowEvent event) @@ -75,9 +83,6 @@ public class KitDetonator extends Kit @EventHandler public void changeFuse(PlayerInteractEvent event) { - if (event.getAction() == Action.PHYSICAL) - return; - if (!Manager.GetGame().IsLive()) return; @@ -87,38 +92,29 @@ public class KitDetonator extends Kit if (!HasKit(event.getPlayer())) return; - if (event.getItem().getType() != Material.LEVER) + if (!UtilInv.IsItem(event.getItem(), Material.LEVER, (byte) 0)) return; - ItemStack lever = event.getPlayer().getInventory().getItem(1); - - if (lever.getAmount() <= 0 || lever.getAmount() > 3) - { - GiveItems(event.getPlayer()); - return; - } + int amount = event.getPlayer().getInventory().getItem(1).getAmount(); //Right - if (event.getAction().toString().contains("RIGHT")) + if (UtilEvent.isAction(event, ActionType.R)) { - if (lever.getAmount() == 3) - { + if (amount >= 3) return; - } - lever.setAmount(lever.getAmount() + 1); + + UtilInv.insert(event.getPlayer(), new ItemBuilder(Material.LEVER).setTitle(F.item("Fuse Selector (Seconds)")).build()); UtilInv.Update(event.getPlayer()); } //Left - else + else if (UtilEvent.isAction(event, ActionType.L)) { - if (lever.getAmount() == 1) - { + if (amount <= 1) return; - } - lever.setAmount(lever.getAmount() - 1); + + UtilInv.remove(event.getPlayer(), Material.LEVER, (byte) 0, 1); UtilInv.Update(event.getPlayer()); } - event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), Sound.CLICK, 3.0F, 1.0F); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java index 4b97e2985..20e73f9cd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java @@ -10,6 +10,7 @@ import nautilus.game.arcade.kit.perks.PerkDoubleJump; import org.bukkit.Material; import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; public class KitJumper extends Kit @@ -30,7 +31,13 @@ public class KitJumper extends Kit @Override public void GiveItems(Player player) { - + + } + + @Override + public void SpawnCustom(LivingEntity ent) + { + } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java new file mode 100644 index 000000000..b427930a1 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java @@ -0,0 +1,37 @@ +package nautilus.game.arcade.game.games.lobbers.kits; + +import mineplex.core.common.util.F; +import mineplex.core.itemstack.ItemBuilder; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkWaller; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.KitAvailability; +import nautilus.game.arcade.kit.Perk; + +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +public class KitWaller extends Kit +{ + + public KitWaller(ArcadeManager manager) + { + super(manager, "Waller", KitAvailability.Free, 0, new String[] + { + "When the times get tough,", + "build yourself a wall!" + }, new Perk[] + { + new PerkWaller() + }, EntityType.ZOMBIE, + new ItemBuilder(Material.SMOOTH_BRICK).setUnbreakable(true).build()); + } + + @Override + public void GiveItems(Player player) + { + player.getInventory().setItem(1, new ItemBuilder(Material.STONE_SPADE).setAmount(3).setTitle(F.item("Wall Builder")).build()); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java new file mode 100644 index 000000000..187ab2a49 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java @@ -0,0 +1,162 @@ +package nautilus.game.arcade.game.games.lobbers.kits.perks; + +import java.util.HashSet; +import java.util.Set; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilInv; +import mineplex.core.explosion.ExplosionEvent; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; +import nautilus.game.arcade.kit.Perk; + +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.TNTPrimed; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.player.PlayerInteractEvent; + +public class PerkWaller extends Perk +{ + private BlockFace[] axis = { BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST }; + + private Set _tnt = new HashSet(); + + private Set _wallBlocks = new HashSet(); + + public PerkWaller() + { + super("Waller", new String[] + { + C.cYellow + "Click Block" + C.cGray + " with shovel to " + C.cGreen + "Place Wall", + C.cGray + "Walls can absorb 1 hit before breaking.", + C.cGray + "TNT that touches a wall will explode instantly." + }); + } + + @EventHandler + public void onThrow(TNTThrowEvent event) + { + _tnt.add(event.getTNT()); + } + + @EventHandler + public void onExplode(EntityExplodeEvent event) + { + if (_tnt.contains(event.getEntity())) + { + _tnt.remove(event.getEntity()); + } + } + + @EventHandler + public void onPlace(PlayerInteractEvent event) + { + if (!UtilEvent.isAction(event, ActionType.R_BLOCK)) + return; + + if (!Manager.GetGame().IsLive()) + return; + + if (!Manager.IsAlive(event.getPlayer())) + return; + + if (!Kit.HasKit(event.getPlayer())) + return; + + if (!UtilInv.IsItem(event.getItem(), Material.STONE_SPADE, (byte) 0)) + return; + + _wallBlocks.addAll(buildWall(event.getClickedBlock().getLocation(), event.getPlayer().getLocation().getYaw(), getFace(event.getPlayer().getLocation().getYaw()))); + } + + @SuppressWarnings("deprecation") + @EventHandler + public void explode(ExplosionEvent event) + { + if (!Manager.GetGame().IsLive()) + return; + + for (Block block : event.GetBlocks()) + { + if (_wallBlocks.contains(block.getLocation())) + { + if (block.getData() != 2) + { + block.setData((byte) 2); + } + } + } + } + + @EventHandler + public void explodeTNT(UpdateEvent event) + { + if (!Manager.GetGame().IsLive()) + return; + + if (event.getType() != UpdateType.FAST) + return; + + for (TNTPrimed tnt : _tnt) + { + for (Block near : UtilBlock.getInRadius(tnt.getLocation(), 1.5F).keySet()) + { + if (_wallBlocks.contains(near.getLocation())) + { + tnt.setFuseTicks(0); + } + } + } + } + + private Set buildWall(final Location source, final float playerYaw, final BlockFace facing) + { + Set allWallBlocks = new HashSet(); + Set baseWallBlocks = new HashSet(); + + Location centerWallBlock = source.getBlock().getRelative(facing).getRelative(BlockFace.UP).getLocation(); + + float leftYaw = playerYaw - 90; + float rightYaw = playerYaw + 90; + + BlockFace leftSide = getFace(leftYaw); + BlockFace rightSide = getFace(rightYaw); + + baseWallBlocks.add(centerWallBlock.getBlock().getRelative(leftSide).getRelative(leftSide).getLocation()); + baseWallBlocks.add(centerWallBlock.getBlock().getRelative(leftSide).getLocation()); + baseWallBlocks.add(centerWallBlock); + baseWallBlocks.add(centerWallBlock.getBlock().getRelative(rightSide).getLocation()); + baseWallBlocks.add(centerWallBlock.getBlock().getRelative(rightSide).getRelative(rightSide).getLocation()); + + for (Location base : baseWallBlocks) + { + for (int height = 0 ; height < 3 ; height++) + { + allWallBlocks.add(base.clone().add(0, height, 0)); + } + } + for (Location block : allWallBlocks) + { + block.getBlock().setType(Material.SMOOTH_BRICK); + block.getWorld().playEffect(block, Effect.STEP_SOUND, 1.0F); + } + return allWallBlocks; + } + + private BlockFace getFace(float yaw) + { + if (yaw < 0) + yaw = yaw * (-1); + + return axis[Math.round(yaw / 90F) & 0x3]; + } +} From 616c444c16d0bc7f595b93eb907d146a0e6c66dc Mon Sep 17 00:00:00 2001 From: Mysticate Date: Sun, 12 Jul 2015 18:15:33 -0400 Subject: [PATCH 05/18] Added some things and stuff --- .../game/games/lobbers/BombLobbers.java | 11 ++++++-- .../game/games/lobbers/kits/KitArmorer.java | 20 +++++++++++-- .../games/lobbers/kits/perks/PerkWaller.java | 28 +++++++++++++------ 3 files changed, 45 insertions(+), 14 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index cbdc955e4..822efa06e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -56,11 +56,16 @@ public class BombLobbers extends TeamGame new KitWaller(manager) }, new String[] { - "Throw TNT to blow up your enemies!", - "Click with TNT to throw" + "Fight against your enemies using", + "the power of explosives!", + "", + "Left click TNT to throw at your enemy.", + "Last team alive wins!", + "Kaboom!" }); DamageSelf = false; + DamageTeamSelf = false; WorldWaterDamage = 5; @@ -174,7 +179,7 @@ public class BombLobbers extends TeamGame _throwers.remove(tnt); _teams.remove(tnt); - for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 5)) + for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 14)) { Manager.GetCondition().Factory().Explosion("Throwing TNT", other, thrower, 50, 0.1, false, false); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java index de1651826..be7f2c64a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java @@ -1,6 +1,7 @@ package nautilus.game.arcade.game.games.lobbers.kits; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; @@ -31,14 +32,23 @@ public class KitArmorer extends Kit }, EntityType.ZOMBIE, new ItemStack(Material.AIR)); } - + @Override - public void GiveItems(Player player) + public void ApplyKit(Player player) { + UtilInv.Clear(player); + + for (Perk perk : GetPerks()) + perk.Apply(player); + + GiveItemsCall(player); + player.getInventory().setHelmet(new ItemBuilder(Material.GOLD_HELMET).setUnbreakable(true).build()); player.getInventory().setChestplate(new ItemBuilder(Material.GOLD_CHESTPLATE).setUnbreakable(true).build()); player.getInventory().setLeggings(new ItemBuilder(Material.GOLD_LEGGINGS).setUnbreakable(true).build()); player.getInventory().setBoots(new ItemBuilder(Material.GOLD_BOOTS).setUnbreakable(true).build()); + + UtilInv.Update(player); } @Override @@ -50,4 +60,10 @@ public class KitArmorer extends Kit ent.getEquipment().setBoots(new ItemBuilder(Material.GOLD_BOOTS).build()); } + @Override + public void GiveItems(Player player) + { + + } + } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java index 187ab2a49..211110b66 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java @@ -1,6 +1,7 @@ package nautilus.game.arcade.game.games.lobbers.kits.perks; import java.util.HashSet; +import java.util.Iterator; import java.util.Set; import mineplex.core.common.util.C; @@ -75,7 +76,9 @@ public class PerkWaller extends Perk if (!UtilInv.IsItem(event.getItem(), Material.STONE_SPADE, (byte) 0)) return; - _wallBlocks.addAll(buildWall(event.getClickedBlock().getLocation(), event.getPlayer().getLocation().getYaw(), getFace(event.getPlayer().getLocation().getYaw()))); + UtilInv.remove(event.getPlayer(), Material.STONE_SPADE, (byte) 0, 1); + + _wallBlocks.addAll(buildWall(event.getClickedBlock().getLocation(), event.getPlayer().getLocation().getYaw())); } @SuppressWarnings("deprecation") @@ -85,13 +88,18 @@ public class PerkWaller extends Perk if (!Manager.GetGame().IsLive()) return; - for (Block block : event.GetBlocks()) + Iterator iterator = event.GetBlocks().iterator(); + + while (iterator.hasNext()) { + Block block = iterator.next(); + if (_wallBlocks.contains(block.getLocation())) { if (block.getData() != 2) { block.setData((byte) 2); + iterator.remove(); } } } @@ -108,7 +116,7 @@ public class PerkWaller extends Perk for (TNTPrimed tnt : _tnt) { - for (Block near : UtilBlock.getInRadius(tnt.getLocation(), 1.5F).keySet()) + for (Block near : UtilBlock.getInRadius(tnt.getLocation(), 2.0F).keySet()) { if (_wallBlocks.contains(near.getLocation())) { @@ -118,8 +126,11 @@ public class PerkWaller extends Perk } } - private Set buildWall(final Location source, final float playerYaw, final BlockFace facing) + @SuppressWarnings("deprecation") + private Set buildWall(final Location source, final float playerYaw) { + BlockFace facing = getFace(playerYaw + 180F); + Set allWallBlocks = new HashSet(); Set baseWallBlocks = new HashSet(); @@ -147,16 +158,15 @@ public class PerkWaller extends Perk for (Location block : allWallBlocks) { block.getBlock().setType(Material.SMOOTH_BRICK); - block.getWorld().playEffect(block, Effect.STEP_SOUND, 1.0F); + block.getBlock().setData((byte) 0); + + block.getWorld().playEffect(block, Effect.STEP_SOUND, block.getBlock().getType()); } return allWallBlocks; } private BlockFace getFace(float yaw) { - if (yaw < 0) - yaw = yaw * (-1); - - return axis[Math.round(yaw / 90F) & 0x3]; + return axis[Math.round(yaw / 90f) & 0x3]; } } From df6065978615de643e472a26cc090fe68afa9932 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Mon, 13 Jul 2015 12:14:25 -0400 Subject: [PATCH 06/18] Core edits --- .../game/games/lobbers/BombLobbers.java | 25 ++++++++++++++++++ .../games/lobbers/kits/perks/PerkWaller.java | 26 ------------------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index 822efa06e..89b3fe351 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -1,6 +1,7 @@ package nautilus.game.arcade.game.games.lobbers; import java.util.ArrayList; +import java.util.Iterator; import java.util.Map.Entry; import mineplex.core.common.util.F; @@ -13,6 +14,7 @@ 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.explosion.ExplosionEvent; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; @@ -31,6 +33,7 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; @@ -231,6 +234,28 @@ public class BombLobbers extends TeamGame } } + + @SuppressWarnings("deprecation") + @EventHandler + public void damageBlocks(ExplosionEvent event) + { + if (!Manager.GetGame().IsLive()) + return; + + Iterator iterator = event.GetBlocks().iterator(); + + while (iterator.hasNext()) + { + Block block = iterator.next(); + + if (block.getData() == 0) + { + block.setData((byte) 2); + iterator.remove(); + } + } + } + private GameTeam getSide(Location entityLoc) { Location nearest = UtilAlg.findClosest(entityLoc, new ArrayList(_averageSpawns.values())); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java index 211110b66..82c0f2290 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java @@ -1,7 +1,6 @@ package nautilus.game.arcade.game.games.lobbers.kits.perks; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; import mineplex.core.common.util.C; @@ -9,7 +8,6 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilInv; -import mineplex.core.explosion.ExplosionEvent; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; @@ -81,30 +79,6 @@ public class PerkWaller extends Perk _wallBlocks.addAll(buildWall(event.getClickedBlock().getLocation(), event.getPlayer().getLocation().getYaw())); } - @SuppressWarnings("deprecation") - @EventHandler - public void explode(ExplosionEvent event) - { - if (!Manager.GetGame().IsLive()) - return; - - Iterator iterator = event.GetBlocks().iterator(); - - while (iterator.hasNext()) - { - Block block = iterator.next(); - - if (_wallBlocks.contains(block.getLocation())) - { - if (block.getData() != 2) - { - block.setData((byte) 2); - iterator.remove(); - } - } - } - } - @EventHandler public void explodeTNT(UpdateEvent event) { From 1e1cf6403deec95f121fb874dc9b481ba6383a01 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Tue, 14 Jul 2015 13:31:41 -0400 Subject: [PATCH 07/18] Added achievements --- .../core/achievement/Achievement.java | 46 ++++++ .../core/achievement/AchievementCategory.java | 21 +-- .../game/games/lobbers/BombLobbers.java | 131 ++++++++++++++++-- .../game/games/lobbers/kits/KitArmorer.java | 2 +- .../game/games/lobbers/kits/KitDetonator.java | 6 +- .../game/games/lobbers/kits/KitWaller.java | 2 +- .../games/lobbers/kits/perks/PerkWaller.java | 4 +- .../games/lobbers/trackers/Tracker6Kill.java | 38 +++++ .../lobbers/trackers/TrackerBestTeam.java | 51 +++++++ .../lobbers/trackers/TrackerBlastProof.java | 35 +++++ .../lobbers/trackers/TrackerNoDamage.java | 69 +++++++++ .../lobbers/trackers/TrackerTNTThrown.java | 26 ++++ 12 files changed, 402 insertions(+), 29 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/Tracker6Kill.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBestTeam.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBlastProof.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerNoDamage.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerTNTThrown.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java index a1d818cca..a058b7496 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java @@ -630,6 +630,52 @@ public enum Achievement new String[]{"Kill 2 enemies while blinded from", "a single flashbang"}, new int[]{1}, AchievementCategory.MINE_STRIKE), + + //Bomb Lobbers + BOMB_LOBBERS_WINS("Master Bomber", 1200, + new String[]{"Bomb Lobbers.Wins"}, + new String[]{"Win 100 games of Bomb Lobbers"}, + new int[] {100}, + AchievementCategory.BOMB_LOBBERS), + + BOMB_LOBBERS_PROFESSIONAL_LOBBER("Professional Lobber", 1000, + new String[]{"Bomb Lobbers.Thrown"}, + new String[]{"Throw 2000 TNT"}, + new int[]{2000}, + AchievementCategory.BOMB_LOBBERS), + +// BOMB_LOBBERS_REKT_X3("Rekt x3", 800, +// new String[]{"Bomb Lobbers.3Kill"}, +// new String[]{"Kill 3 players with one explosion"}, +// new int[]{1}, +// AchievementCategory.BOMB_LOBBERS), + + BOMB_LOBBERS_ULTIMATE_KILLER("Ultimate Killer", 800, + new String[]{"Bomb Lobbers.Killer"}, + new String[]{"Kill 6 players in a single game"}, + new int[]{1}, + AchievementCategory.BOMB_LOBBERS), + + BOMB_LOBBERS_EXPLOSION_PROOF("Jelly Skin", 1000, + new String[]{"Bomb Lobbers.JellySkin"}, + new String[]{"Win a game without taking any damage."}, + new int[]{1}, + AchievementCategory.BOMB_LOBBERS), + + BOMB_LOBBERS_BEST_TEAM("The Best Team", 800, + new String[]{"Bomb Lobbers.BestTeam"}, + new String[]{"Win a game without losing a teammate"}, + new int[]{1}, + AchievementCategory.BOMB_LOBBERS), + + BOMB_LOBBERS_BLAST_PROOF("Blast Proof", 800, + new String[]{"Bomb Lobbers.BlastProof"}, + new String[]{"Win 20 games using Armorer"}, + new int[]{20}, + AchievementCategory.BOMB_LOBBERS) + + +// BOMB_LOBBERS_ ; private String _name; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java index d777224ac..bffc840e7 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java @@ -32,11 +32,11 @@ public enum AchievementCategory UHC("Ultra Hardcore", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, - Material.GOLDEN_APPLE, 0, GameCategory.SURVIVAL, "Extra Class Skills"), + Material.GOLDEN_APPLE, 0, GameCategory.SURVIVAL, null), WIZARDS("Wizards", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, - Material.BLAZE_ROD, 0, GameCategory.SURVIVAL, "Extra Class Skills"), + Material.BLAZE_ROD, 0, GameCategory.SURVIVAL, "Witch Doctor Kit"), CASTLE_SIEGE("Castle Siege", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, new StatDisplay("Kills as Defenders"), new StatDisplay("Deaths as Defenders"), @@ -45,7 +45,7 @@ public enum AchievementCategory BLOCK_HUNT("Block Hunt", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, - Material.GRASS, 0, GameCategory.CLASSICS, null), + Material.GRASS, 0, GameCategory.CLASSICS, "Infestor Kit"), SMASH_MOBS("Super Smash Mobs", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, @@ -57,7 +57,7 @@ public enum AchievementCategory DRAW_MY_THING("Draw My Thing", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.GEMS_EARNED }, - Material.BOOK_AND_QUILL, 0, GameCategory.CLASSICS, null), + Material.BOOK_AND_QUILL, 0, GameCategory.CLASSICS, "Extra Tools Kit"), CHAMPIONS("Champions", new String[] {"Champions Domination", "Champions TDM"}, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, @@ -74,7 +74,7 @@ public enum AchievementCategory DRAGON_ESCAPE("Dragon Escape", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.GEMS_EARNED }, - Material.DRAGON_EGG, 0, GameCategory.ARCADE, null), + Material.DRAGON_EGG, 0, GameCategory.ARCADE, "Digger Kit"), SHEEP_QUEST("Sheep Quest", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, @@ -86,7 +86,7 @@ public enum AchievementCategory ONE_IN_THE_QUIVER("One in the Quiver", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, - Material.BOW, 0, GameCategory.ARCADE, null), + Material.BOW, 0, GameCategory.ARCADE, "Slam Shooter Kit"), SUPER_PAINTBALL("Super Paintball", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, @@ -110,7 +110,7 @@ public enum AchievementCategory SNAKE("Snake", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, - Material.WOOL, 4, GameCategory.ARCADE, null), + Material.WOOL, 4, GameCategory.ARCADE, "Reversal Snake Kit"), BACON_BRAWL("Bacon Brawl", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, @@ -118,9 +118,12 @@ public enum AchievementCategory MICRO_BATTLE("Micro Battle", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, - Material.LAVA, 0, GameCategory.ARCADE, null); + Material.LAVA, 0, GameCategory.ARCADE, null), + + BOMB_LOBBERS("Bomb Lobbers", null, + new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, + Material.TNT, 0, GameCategory.ARCADE, "Waller Kit"); - private String _name; private String[] _statsToPull; private StatDisplay[] _statDisplays; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index 89b3fe351..41027947d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -17,6 +17,9 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.explosion.ExplosionEvent; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.combat.CombatComponent; +import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; @@ -27,6 +30,11 @@ import nautilus.game.arcade.game.games.lobbers.kits.KitArmorer; import nautilus.game.arcade.game.games.lobbers.kits.KitDetonator; import nautilus.game.arcade.game.games.lobbers.kits.KitJumper; import nautilus.game.arcade.game.games.lobbers.kits.KitWaller; +import nautilus.game.arcade.game.games.lobbers.trackers.Tracker6Kill; +import nautilus.game.arcade.game.games.lobbers.trackers.TrackerBestTeam; +import nautilus.game.arcade.game.games.lobbers.trackers.TrackerBlastProof; +import nautilus.game.arcade.game.games.lobbers.trackers.TrackerNoDamage; +import nautilus.game.arcade.game.games.lobbers.trackers.TrackerTNTThrown; import nautilus.game.arcade.kit.Kit; import org.bukkit.ChatColor; @@ -48,7 +56,10 @@ public class BombLobbers extends TeamGame private NautHashMap _throwers = new NautHashMap(); private NautHashMap _teams = new NautHashMap(); + + private NautHashMap _kills = new NautHashMap(); + @SuppressWarnings("unchecked") public BombLobbers(ArcadeManager manager) { super(manager, GameType.Lobbers, new Kit[] @@ -66,10 +77,8 @@ public class BombLobbers extends TeamGame "Last team alive wins!", "Kaboom!" }); - DamageSelf = false; - DamageTeamSelf = false; - + WorldWaterDamage = 5; PrepareFreeze = false; @@ -83,12 +92,67 @@ public class BombLobbers extends TeamGame ItemDrop = false; BlockPlace = false; - - DamageFall = true; - + Manager.GetExplosion().SetLiquidDamage(false); HungerSet = 20; + + registerStatTrackers(new Tracker6Kill(this), new TrackerBestTeam(this), new TrackerBlastProof(this), new TrackerNoDamage(this), new TrackerTNTThrown(this)); + } + + public void addKill(Player player) + { + _kills.put(player, _kills.containsKey(player) ? _kills.get(player) + 1 : 1); + } + + public void addAssist(Player player) + { + _kills.put(player, _kills.containsKey(player) ? _kills.get(player) + .5 : .5); + } + + public double getKills(Player player) + { + if (_kills.containsKey(player)) + { + return _kills.get(player); + } + else + { + _kills.put(player, 0.0); + return 0; + } + } + + @EventHandler + public void onKill(CombatDeathEvent event) + { + if (!IsLive()) + return; + + Player dead = UtilPlayer.searchExact(((Player) event.GetEvent().getEntity()).getName()); + + if (!IsAlive(dead)) + return; + + for (CombatComponent damager : event.GetLog().GetAttackers()) + { + Player killer = UtilPlayer.searchExact(damager.GetName()); + + if (killer == null || !killer.isOnline()) + continue; + + if (IsAlive(killer)) + { + if (event.GetLog().GetKiller() == damager) + { + addKill(killer); + } + else + { + addAssist(killer); + } + } + } } @EventHandler @@ -234,8 +298,16 @@ public class BombLobbers extends TeamGame } } + @EventHandler + public void nerfTNT(CustomDamageEvent event) + { + if (event.GetCause().toString().contains("EXPLOSION")) + { + event.AddMod("Armor", "Damage Nerf", -(event.GetDamage() * .333), false); + } + } + - @SuppressWarnings("deprecation") @EventHandler public void damageBlocks(ExplosionEvent event) { @@ -248,14 +320,49 @@ public class BombLobbers extends TeamGame { Block block = iterator.next(); - if (block.getData() == 0) - { - block.setData((byte) 2); - iterator.remove(); - } + if (!shouldRemoveFromExplosion(block)) + continue; + + event.GetBlocks().remove(block); } } + //Boolean = remove + @SuppressWarnings("deprecation") + public boolean shouldRemoveFromExplosion(Block block) + { + //Stone + if (block.getTypeId() == 1) + { + block.setTypeId(4); + return false; + } + + //Stone Brick + else if (block.getTypeId() == 98) + { + block.setData((byte) 2); + return false; + } + + //Grass + else if (block.getTypeId() == 2) + { + block.setTypeId(3); + return false; + } + + //Wood Planks + else if (block.getTypeId() == 5) + { + block.setData((byte) 2); + return false; + } + + //Other + return true; + } + private GameTeam getSide(Location entityLoc) { Location nearest = UtilAlg.findClosest(entityLoc, new ArrayList(_averageSpawns.values())); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java index be7f2c64a..47ecd4222 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java @@ -20,7 +20,7 @@ public class KitArmorer extends Kit public KitArmorer(ArcadeManager manager) { - super(manager, "Armorer", KitAvailability.Free, 0, new String[] + super(manager, "Armorer", KitAvailability.Gem, 2000, new String[] { "He uses his expert armor-making", "skills to block excess damage!", diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java index 6c8c3768f..82213872f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java @@ -27,9 +27,9 @@ public class KitDetonator extends Kit public KitDetonator(ArcadeManager manager) { - super(manager, "Detonator", KitAvailability.Free, 0, new String[] + super(manager, "Detonator", KitAvailability.Gem, 4000, new String[] { - "He doesn't like to wait.", + "He doesn't like to wait. Max fuse of 3 and min fuse of 2.", "", C.cYellow + "Left Click" + C.cGray + " lever to " + C.cGreen + "Decrease Fuse Time.", C.cYellow + "Right Click" + C.cGray + " lever to " + C.cGreen + "Increase Fuse Time." @@ -109,7 +109,7 @@ public class KitDetonator extends Kit //Left else if (UtilEvent.isAction(event, ActionType.L)) { - if (amount <= 1) + if (amount <= 2) return; UtilInv.remove(event.getPlayer(), Material.LEVER, (byte) 0, 1); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java index b427930a1..f8b7e136f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java @@ -17,7 +17,7 @@ public class KitWaller extends Kit public KitWaller(ArcadeManager manager) { - super(manager, "Waller", KitAvailability.Free, 0, new String[] + super(manager, "Waller", KitAvailability.Achievement, 0, new String[] { "When the times get tough,", "build yourself a wall!" diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java index 82c0f2290..81b16ed8d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java @@ -35,9 +35,7 @@ public class PerkWaller extends Perk { super("Waller", new String[] { - C.cYellow + "Click Block" + C.cGray + " with shovel to " + C.cGreen + "Place Wall", - C.cGray + "Walls can absorb 1 hit before breaking.", - C.cGray + "TNT that touches a wall will explode instantly." + C.cYellow + "Click Block" + C.cGray + " with shovel to " + C.cGreen + "Place Wall" }); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/Tracker6Kill.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/Tracker6Kill.java new file mode 100644 index 000000000..ee8bc27f5 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/Tracker6Kill.java @@ -0,0 +1,38 @@ +package nautilus.game.arcade.game.games.lobbers.trackers; + +import mineplex.core.common.util.UtilServer; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.game.games.lobbers.BombLobbers; +import nautilus.game.arcade.stats.StatTracker; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +public class Tracker6Kill extends StatTracker +{ + + public Tracker6Kill(Game game) + { + super(game); + } + + @EventHandler + public void onEndgame(GameStateChangeEvent event) + { + if (event.GetState() != GameState.End) + return; + + if (getGame() instanceof BombLobbers) + { + for (Player player : UtilServer.getPlayers()) + { + if (((BombLobbers) getGame()).getKills(player) >= 6.0) + { + addStat(player, "Killer", 1, true, false); + } + } + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBestTeam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBestTeam.java new file mode 100644 index 000000000..fb37cc3ae --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBestTeam.java @@ -0,0 +1,51 @@ +package nautilus.game.arcade.game.games.lobbers.trackers; + +import mineplex.core.common.util.NautHashMap; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.game.GameTeam; +import nautilus.game.arcade.stats.StatTracker; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +public class TrackerBestTeam extends StatTracker +{ + private NautHashMap _teams = new NautHashMap(); + + public TrackerBestTeam(Game game) + { + super(game); + } + + @EventHandler + public void onGameStart(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Prepare) + return; + + for (GameTeam team : getGame().GetTeamList()) + { + _teams.put(team, team.GetPlayers(true).size()); + } + } + + @EventHandler + public void onGameEnd(GameStateChangeEvent event) + { + if (event.GetState() != GameState.End) + return; + + for (GameTeam team : getGame().GetTeamList()) + { + if (_teams.get(team) == team.GetPlayers(true).size()) + { + for (Player player : team.GetPlayers(true)) + { + addStat(player, "BestTeam", 1, true, false); + } + } + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBlastProof.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBlastProof.java new file mode 100644 index 000000000..7d4e8f627 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBlastProof.java @@ -0,0 +1,35 @@ +package nautilus.game.arcade.game.games.lobbers.trackers; + +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.game.games.lobbers.kits.KitArmorer; +import nautilus.game.arcade.stats.StatTracker; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + +public class TrackerBlastProof extends StatTracker +{ + + public TrackerBlastProof(Game game) + { + super(game); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onGameEnd(GameStateChangeEvent event) + { + if (event.GetState() != GameState.End) + return; + + for (Player winner : getGame().getWinners()) + { + if (getGame().GetKit(winner) instanceof KitArmorer) + { + addStat(winner, "BlastProof", 1, false, false); + } + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerNoDamage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerNoDamage.java new file mode 100644 index 000000000..7ad9f8550 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerNoDamage.java @@ -0,0 +1,69 @@ +package nautilus.game.arcade.game.games.lobbers.trackers; + +import java.util.HashSet; +import java.util.Set; + +import mineplex.core.common.util.UtilPlayer; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.stats.StatTracker; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + +public class TrackerNoDamage extends StatTracker +{ + private Set _noDamage = new HashSet(); + + public TrackerNoDamage(Game game) + { + super(game); + } + + @EventHandler + public void onGameStart(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Prepare) + return; + + for (Player player : getGame().GetPlayers(true)) + { + _noDamage.add(player.getName()); + } + } + + @EventHandler + public void onGameEnd(GameStateChangeEvent event) + { + if (event.GetState() != GameState.End) + return; + + for (String name : _noDamage) + { + Player player = UtilPlayer.searchExact(name); + + if (player == null || !player.isOnline()) + continue; + + addStat(player, "JellySkin", 1, true, false); + } + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onDamage(CustomDamageEvent event) + { + if (!getGame().IsLive()) + return; + + if (event.GetDamageePlayer() == null || !event.GetDamageePlayer().isOnline()) + return; + + if (_noDamage.contains(event.GetDamageePlayer().getName())) + { + _noDamage.remove(event.GetDamageePlayer().getName()); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerTNTThrown.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerTNTThrown.java new file mode 100644 index 000000000..0aa2d93e6 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerTNTThrown.java @@ -0,0 +1,26 @@ +package nautilus.game.arcade.game.games.lobbers.trackers; + +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; +import nautilus.game.arcade.stats.StatTracker; + +import org.bukkit.event.EventHandler; + +public class TrackerTNTThrown extends StatTracker +{ + + public TrackerTNTThrown(Game game) + { + super(game); + } + + @EventHandler + public void onThrow(TNTThrowEvent event) + { + if (!getGame().IsLive()) + return; + + addStat(event.getPlayer(), "Thrown", 1, false, false); + } + +} From 2dc2b8792c30f223381387b11a6be6b7a438d195 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Fri, 17 Jul 2015 17:01:24 -0400 Subject: [PATCH 08/18] Fixes, updates --- .../game/games/lobbers/BombLobbers.java | 121 ++++++++---------- .../game/games/lobbers/kits/KitArmorer.java | 2 +- .../game/games/lobbers/kits/KitDetonator.java | 2 +- .../game/games/lobbers/kits/KitWaller.java | 5 +- .../lobbers/kits/perks/PerkCraftman.java | 27 ++-- .../lobbers/trackers/TrackerBlastProof.java | 3 + 6 files changed, 81 insertions(+), 79 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index 41027947d..4452e6ddf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -15,11 +15,12 @@ import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.explosion.ExplosionEvent; +import mineplex.core.projectile.IThrown; +import mineplex.core.projectile.ProjectileUser; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.CombatComponent; import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; @@ -37,11 +38,12 @@ import nautilus.game.arcade.game.games.lobbers.trackers.TrackerNoDamage; import nautilus.game.arcade.game.games.lobbers.trackers.TrackerTNTThrown; import nautilus.game.arcade.kit.Kit; -import org.bukkit.ChatColor; +import org.bukkit.EntityEffect; 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.entity.TNTPrimed; import org.bukkit.event.EventHandler; @@ -49,8 +51,9 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.Vector; -public class BombLobbers extends TeamGame +public class BombLobbers extends TeamGame implements IThrown { private NautHashMap _averageSpawns = new NautHashMap(); @@ -72,12 +75,11 @@ public class BombLobbers extends TeamGame { "Fight against your enemies using", "the power of explosives!", - "", "Left click TNT to throw at your enemy.", - "Last team alive wins!", - "Kaboom!" + "Last team alive wins!" }); - DamageSelf = false; + DamageFall = true; + DamageEvP = true; WorldWaterDamage = 5; @@ -195,6 +197,7 @@ public class BombLobbers extends TeamGame tnt.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), player.getUniqueId())); UtilAction.velocity(tnt, player.getLocation().getDirection(), 2.0D, false, 0.0D, 0.1D, 10.0D, false); + Manager.GetProjectile().AddThrow(tnt, event.getPlayer(), this, -1L, true, false, false, .2F); player.playSound(player.getLocation(), Sound.CREEPER_HISS, 3.0F, 1.0F); @@ -265,15 +268,7 @@ public class BombLobbers extends TeamGame { if (tnt.getKey() != null && tnt.getKey().isValid() && !tnt.getKey().isOnGround()) { - if (tnt.getValue().GetColor() == ChatColor.AQUA) - { - UtilParticle.PlayParticle(ParticleType.RED_DUST, tnt.getKey().getLocation().clone().add(0.0, 0.5, 0.0), -1, -1, 1, 1, 0, - ViewDist.LONG, UtilServer.getPlayers()); - } - else - { - UtilParticle.PlayParticle(ParticleType.RED_DUST, tnt.getKey().getLocation().clone().add(0.0, 0.5, 0.0), 0.0F, 0.0F, 0.0F, 0.0F, 3, ViewDist.LONG, UtilServer.getPlayers()); - } + UtilParticle.PlayParticle(ParticleType.RED_DUST, tnt.getKey().getLocation().clone().add(0.0, 0.5, 0.0), tnt.getValue().GetColorBase().getRed(), tnt.getValue().GetColorBase().getGreen(), tnt.getValue().GetColorBase().getBlue(), 1, 0, ViewDist.LONG, UtilServer.getPlayers()); } } } @@ -293,21 +288,11 @@ public class BombLobbers extends TeamGame { player.damage(500); UtilPlayer.message(player, F.main("Game", "You were killed for trying to cheat!")); - continue; } } } - @EventHandler - public void nerfTNT(CustomDamageEvent event) - { - if (event.GetCause().toString().contains("EXPLOSION")) - { - event.AddMod("Armor", "Damage Nerf", -(event.GetDamage() * .333), false); - } - } - - + @SuppressWarnings("deprecation") @EventHandler public void damageBlocks(ExplosionEvent event) { @@ -320,47 +305,22 @@ public class BombLobbers extends TeamGame { Block block = iterator.next(); - if (!shouldRemoveFromExplosion(block)) + //Stone + if (block.getType() == Material.STONE) + { + block.setType(Material.COBBLESTONE); + iterator.remove(); continue; - - event.GetBlocks().remove(block); - } - } + } - //Boolean = remove - @SuppressWarnings("deprecation") - public boolean shouldRemoveFromExplosion(Block block) - { - //Stone - if (block.getTypeId() == 1) - { - block.setTypeId(4); - return false; + //Stone Brick + if (block.getType() == Material.SMOOTH_BRICK && block.getData() != 2) + { + block.setData((byte) 2); + iterator.remove(); + continue; + } } - - //Stone Brick - else if (block.getTypeId() == 98) - { - block.setData((byte) 2); - return false; - } - - //Grass - else if (block.getTypeId() == 2) - { - block.setTypeId(3); - return false; - } - - //Wood Planks - else if (block.getTypeId() == 5) - { - block.setData((byte) 2); - return false; - } - - //Other - return true; } private GameTeam getSide(Location entityLoc) @@ -373,5 +333,34 @@ public class BombLobbers extends TeamGame } return null; } - + + @Override + public void Collide(LivingEntity target, Block block, ProjectileUser data) + { + if (!(target instanceof Player) || !(data.GetThrower() instanceof Player)) + return; + + if (GetTeam((Player) target) == GetTeam((Player) data.GetThrower())) + return; + + data.GetThrown().setVelocity(new Vector()); + + if (target != null) + { + UtilAction.velocity(target, UtilAlg.getTrajectory2d(data.GetThrown().getLocation(), target.getLocation()), .2, false, 0, 0.2, .4, true); + target.playEffect(EntityEffect.HURT); + } + } + + @Override + public void Idle(ProjectileUser data) + { + + } + + @Override + public void Expire(ProjectileUser data) + { + + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java index 47ecd4222..b9184ad47 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java @@ -28,7 +28,7 @@ public class KitArmorer extends Kit C.cGray + "Recieve " + C.cYellow + "Full Gold Armor" }, new Perk[] { - new PerkCraftman() + new PerkCraftman(5000) }, EntityType.ZOMBIE, new ItemStack(Material.AIR)); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java index 82213872f..8536d1afb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java @@ -35,7 +35,7 @@ public class KitDetonator extends Kit C.cYellow + "Right Click" + C.cGray + " lever to " + C.cGreen + "Increase Fuse Time." }, new Perk[] { - new PerkCraftman() + new PerkCraftman(6000) }, EntityType.ZOMBIE, new ItemBuilder(Material.LEVER).build()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java index f8b7e136f..7d9d760e8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java @@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.lobbers.kits; import mineplex.core.common.util.F; import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkWaller; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; @@ -14,7 +15,6 @@ import org.bukkit.entity.Player; public class KitWaller extends Kit { - public KitWaller(ArcadeManager manager) { super(manager, "Waller", KitAvailability.Achievement, 0, new String[] @@ -23,7 +23,8 @@ public class KitWaller extends Kit "build yourself a wall!" }, new Perk[] { - new PerkWaller() + new PerkWaller(), + new PerkCraftman(6000) }, EntityType.ZOMBIE, new ItemBuilder(Material.SMOOTH_BRICK).setUnbreakable(true).build()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java index b99b833ae..686cd1186 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java @@ -5,11 +5,11 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilInv; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.kit.Perk; import org.bukkit.Material; -import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -17,37 +17,46 @@ public class PerkCraftman extends Perk { private Recharge _recharge; + private final long _giveTime; + public PerkCraftman() + { + this(4000); + } + + public PerkCraftman(long giveTime) { super("Craftman", new String[] { - C.cGray + "Recieve 1 TNT every 2 seconds. Maximum of 3." + C.cGray + "Recieve 1 TNT every " + C.cYellow + giveTime / 1000 + C.cGray + " seconds. Maximum of 3." }); _recharge = Recharge.Instance; + _giveTime = giveTime; } @EventHandler public void give(UpdateEvent event) { + if (event.getType() != UpdateType.FAST) + return; + if (!Manager.GetGame().IsLive()) return; for (Player player : Manager.GetGame().GetPlayers(true)) { - if (!_recharge.usable(player, "TNT Give")) + if (!Kit.HasKit(player)) continue; - - _recharge.use(player, "TNT Give", Manager.GetGame().getGameLiveTime() >= 60000 ? 3000 : (Manager.GetGame().getGameLiveTime() >= 3000 ? 4000 : 5000), false, false); - //Has 4 + if (!_recharge.use(player, "Bomb Give", _giveTime, false, false)) + continue; + + //Has 3 if (UtilInv.contains(player, Material.TNT, (byte) 0, 3)) continue; UtilInv.insert(player, new ItemBuilder(Material.TNT).setTitle(F.item("Throwing TNT")).build()); - - player.getWorld().playSound(player.getLocation(), Sound.CHICKEN_EGG_POP, 3.0F, 1.0F); } } - } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBlastProof.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBlastProof.java index 7d4e8f627..af23a5b37 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBlastProof.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/trackers/TrackerBlastProof.java @@ -24,6 +24,9 @@ public class TrackerBlastProof extends StatTracker if (event.GetState() != GameState.End) return; + if (getGame().getWinners() == null) + return; + for (Player winner : getGame().getWinners()) { if (getGame().GetKit(winner) instanceof KitArmorer) From 8b2b4c28265139fe86b9db2a40a31300a41d0853 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Sun, 19 Jul 2015 15:51:34 -0400 Subject: [PATCH 09/18] Added to MPS --- Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java | 2 +- .../src/nautilus/game/arcade/managers/GameHostManager.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java index c5230d28f..dbb06498f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java @@ -27,7 +27,7 @@ public enum GameDisplay HideSeek("Block Hunt", Material.GRASS, (byte)0, GameCategory.CLASSICS, 20), HoleInTheWall("Hole in the Wall", Material.STAINED_GLASS, (byte) 2, GameCategory.ARCADE, 52), Horse("Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE, 21), - Lobbers("Bomb Lobbers", Material.TNT, (byte) 0, GameCategory.ARCADE, 53), + Lobbers("Bomb Lobbers", Material.FIREWORK_CHARGE, (byte) 0, GameCategory.ARCADE, 53), 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.CHAMPIONS, 25),// Temp set to CHAMPIONS to fix UI bug diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java index ccb1c54ae..482dab324 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java @@ -84,6 +84,7 @@ public class GameHostManager implements Listener ultraGames.add(GameType.SneakyAssassins); ultraGames.add(GameType.TurfWars); ultraGames.add(GameType.Spleef); + ultraGames.add(GameType.Lobbers); //Hero Games heroGames.add(GameType.ChampionsDominate); From b4df9f47c55702db6c6c94d61622efef3fec5d13 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Tue, 21 Jul 2015 11:01:45 -0400 Subject: [PATCH 10/18] Added a mortar kit ;o (Please don't fire me b2) --- .../game/games/lobbers/BombLobbers.java | 101 ++++++++++----- .../lobbers/events/TNTPreExplodeEvent.java | 52 ++++++++ .../game/games/lobbers/kits/KitMortar.java | 36 ++++++ .../lobbers/kits/perks/PerkCraftman.java | 2 +- .../games/lobbers/kits/perks/PerkMortar.java | 116 ++++++++++++++++++ .../kits/perks/PerkMorterCraftman.java | 55 +++++++++ 6 files changed, 332 insertions(+), 30 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/events/TNTPreExplodeEvent.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitMortar.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMortar.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMorterCraftman.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index 4452e6ddf..fd518af67 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -8,6 +8,7 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; @@ -26,10 +27,12 @@ import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.TeamGame; +import nautilus.game.arcade.game.games.lobbers.events.TNTPreExplodeEvent; import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; import nautilus.game.arcade.game.games.lobbers.kits.KitArmorer; import nautilus.game.arcade.game.games.lobbers.kits.KitDetonator; import nautilus.game.arcade.game.games.lobbers.kits.KitJumper; +import nautilus.game.arcade.game.games.lobbers.kits.KitMortar; import nautilus.game.arcade.game.games.lobbers.kits.KitWaller; import nautilus.game.arcade.game.games.lobbers.trackers.Tracker6Kill; import nautilus.game.arcade.game.games.lobbers.trackers.TrackerBestTeam; @@ -57,8 +60,7 @@ public class BombLobbers extends TeamGame implements IThrown { private NautHashMap _averageSpawns = new NautHashMap(); - private NautHashMap _throwers = new NautHashMap(); - private NautHashMap _teams = new NautHashMap(); + private NautHashMap _tnt = new NautHashMap(); private NautHashMap _kills = new NautHashMap(); @@ -70,6 +72,7 @@ public class BombLobbers extends TeamGame implements IThrown new KitJumper(manager), new KitArmorer(manager), new KitDetonator(manager), + new KitMortar(manager), new KitWaller(manager) }, new String[] { @@ -188,25 +191,38 @@ public class BombLobbers extends TeamGame implements IThrown event.setCancelled(true); - UtilInv.remove(player, Material.TNT, (byte) 0, 1); UtilInv.Update(player); - TNTPrimed tnt = (TNTPrimed) player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()),TNTPrimed.class); - tnt.setFuseTicks(60); + TNTPrimed tnt = (TNTPrimed) player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), TNTPrimed.class); tnt.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), player.getUniqueId())); + tnt.setFuseTicks(60); UtilAction.velocity(tnt, player.getLocation().getDirection(), 2.0D, false, 0.0D, 0.1D, 10.0D, false); - Manager.GetProjectile().AddThrow(tnt, event.getPlayer(), this, -1L, true, false, false, .2F); - - player.playSound(player.getLocation(), Sound.CREEPER_HISS, 3.0F, 1.0F); - - _throwers.put(tnt, player.getName()); - _teams.put(tnt, GetTeam(player)); - - Manager.getPlugin().getServer().getPluginManager().callEvent(new TNTThrowEvent(player, tnt)); - } + Manager.GetProjectile().AddThrow(tnt, player, this, -1L, true, false, false, .2F); + player.playSound(player.getLocation(), Sound.CREEPER_HISS, 3.0F, 1.0F); + + Manager.getPlugin().getServer().getPluginManager().callEvent(new TNTThrowEvent(player, tnt)); + + _tnt.put(tnt, player.getName()); + } + + public boolean hasThrower(TNTPrimed tnt) + { + return _tnt.containsKey(tnt); + } + + public void addThrower(Player player, TNTPrimed tnt) + { + _tnt.put(tnt, player.getName()); + } + + public String getThrower(TNTPrimed tnt) + { + return _tnt.get(tnt); + } + @EventHandler public void onTNTExplode(ExplosionPrimeEvent event) { @@ -218,17 +234,16 @@ public class BombLobbers extends TeamGame implements IThrown TNTPrimed tnt = (TNTPrimed) event.getEntity(); - if (!_throwers.containsKey(tnt)) + if (!_tnt.containsKey(tnt)) return; - Player thrower = UtilPlayer.searchExact(_throwers.get(tnt)); + Player thrower = UtilPlayer.searchExact(_tnt.get(tnt)); if (thrower == null) { event.setCancelled(true); - _throwers.remove(tnt); - _teams.remove(tnt); + _tnt.remove(tnt); event.getEntity().remove(); return; @@ -238,21 +253,30 @@ public class BombLobbers extends TeamGame implements IThrown { event.setCancelled(true); - _throwers.remove(tnt); - _teams.remove(tnt); + _tnt.remove(tnt); event.getEntity().remove(); return; } - _throwers.remove(tnt); - _teams.remove(tnt); + TNTPreExplodeEvent preExplode = new TNTPreExplodeEvent(thrower, tnt); + Manager.getPlugin().getServer().getPluginManager().callEvent(preExplode); - for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 14)) + if (preExplode.isCancelled()) { - Manager.GetCondition().Factory().Explosion("Throwing TNT", other, thrower, 50, 0.1, false, false); + event.setCancelled(true); + tnt.remove(); } + else + { + for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 14)) + { + Manager.GetCondition().Factory().Explosion("Throwing TNT", other, thrower, 50, 0.1, false, false); + } + } + + _tnt.remove(tnt); } @EventHandler @@ -264,12 +288,31 @@ public class BombLobbers extends TeamGame implements IThrown if (!IsLive()) return; - for (Entry tnt : _teams.entrySet()) + for (Entry tnt : _tnt.entrySet()) { - if (tnt.getKey() != null && tnt.getKey().isValid() && !tnt.getKey().isOnGround()) - { - UtilParticle.PlayParticle(ParticleType.RED_DUST, tnt.getKey().getLocation().clone().add(0.0, 0.5, 0.0), tnt.getValue().GetColorBase().getRed(), tnt.getValue().GetColorBase().getGreen(), tnt.getValue().GetColorBase().getBlue(), 1, 0, ViewDist.LONG, UtilServer.getPlayers()); - } + if (tnt.getKey() == null) + continue; + + if (!tnt.getKey().isValid()) + continue; + + if (UtilEnt.isGrounded(tnt.getKey()) || tnt.getKey().isOnGround()) + continue; + + Player thrower = UtilPlayer.searchExact(tnt.getValue()); + + if (thrower == null) + continue; + + if (!IsPlaying(thrower)) + continue; + + GameTeam team = GetTeam(thrower); + + if (team == null) + continue; + + UtilParticle.PlayParticle(ParticleType.RED_DUST, tnt.getKey().getLocation().clone().add(0.0, 0.5, 0.0), team.GetColorBase().getRed(), team.GetColorBase().getGreen(), team.GetColorBase().getBlue(), 1, 0, ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/events/TNTPreExplodeEvent.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/events/TNTPreExplodeEvent.java new file mode 100644 index 000000000..e79bc6f5c --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/events/TNTPreExplodeEvent.java @@ -0,0 +1,52 @@ +package nautilus.game.arcade.game.games.lobbers.events; + +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +public class TNTPreExplodeEvent extends PlayerEvent implements Cancellable +{ + private static final HandlerList _handlers = new HandlerList(); + + private boolean _cancelled = false; + + private TNTPrimed _tnt; + + public TNTPreExplodeEvent(Player thrower, TNTPrimed tnt) + { + super(thrower); + + _tnt = tnt; + } + + public TNTPrimed getTNT() + { + return _tnt; + } + + @Override + public void setCancelled(boolean flag) + { + _cancelled = flag; + } + + @Override + public boolean isCancelled() + { + return _cancelled; + } + + public static HandlerList getHandlerList() + { + return _handlers; + } + + @Override + public HandlerList getHandlers() + { + return getHandlerList(); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitMortar.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitMortar.java new file mode 100644 index 000000000..52f24b832 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitMortar.java @@ -0,0 +1,36 @@ +package nautilus.game.arcade.game.games.lobbers.kits; + +import mineplex.core.itemstack.ItemBuilder; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; +import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkMortar; +import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkMorterCraftman; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.KitAvailability; +import nautilus.game.arcade.kit.Perk; + +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +public class KitMortar extends Kit +{ + public KitMortar(ArcadeManager manager) + { + super(manager, "Mortar", KitAvailability.Gem, 6000, new String[] + { + "He loves the big guns." + }, new Perk[] + { + new PerkMortar(), + new PerkCraftman(), + new PerkMorterCraftman() + }, EntityType.ZOMBIE, new ItemBuilder(Material.FIREBALL).build()); + } + + @Override + public void GiveItems(Player player) + { + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java index 686cd1186..9373d293b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java @@ -28,7 +28,7 @@ public class PerkCraftman extends Perk { super("Craftman", new String[] { - C.cGray + "Recieve 1 TNT every " + C.cYellow + giveTime / 1000 + C.cGray + " seconds. Maximum of 3." + C.cGray + "Recieve 1 TNT every " + C.cYellow + giveTime / 1000 + " Seconds." + C.cGray + " Maximum of 3." }); _recharge = Recharge.Instance; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMortar.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMortar.java new file mode 100644 index 000000000..e79aaefff --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMortar.java @@ -0,0 +1,116 @@ +package nautilus.game.arcade.game.games.lobbers.kits.perks; + +import java.util.HashSet; +import java.util.Set; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilInv; +import nautilus.game.arcade.game.games.lobbers.BombLobbers; +import nautilus.game.arcade.game.games.lobbers.events.TNTPreExplodeEvent; +import nautilus.game.arcade.kit.Perk; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.Vector; + +public class PerkMortar extends Perk +{ + private Set _scatter = new HashSet(); + + public PerkMortar() + { + super("Mortar", new String[] + { + C.cYellow + "Right Click" + C.cGray + " Fireball to " + C.cGreen + "Fire Mortar", + "Mortars will explode after " + C.cYellow + "2 Seconds", + "releasing 3 more TNT, each with a 3 second fuse.", + "Your TNT will not scatter if it is grounded." + }); + } + + @EventHandler + public void throwTNT(PlayerInteractEvent event) + { + if (event.getAction() == Action.PHYSICAL) + return; + + if (!Manager.GetGame().IsLive()) + return; + + if (!(Manager.GetGame() instanceof BombLobbers)) + return; + + BombLobbers l = (BombLobbers) Manager.GetGame(); + + Player player = event.getPlayer(); + + if (!Manager.IsAlive(player)) + return; + + if (!UtilInv.IsItem(player.getItemInHand(), Material.FIREBALL, (byte) 0)) + return; + + event.setCancelled(true); + + UtilInv.remove(player, Material.FIREBALL, (byte) 0, 1); + UtilInv.Update(player); + + TNTPrimed tnt = (TNTPrimed) player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), TNTPrimed.class); + tnt.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), player.getUniqueId())); + tnt.setFuseTicks(40); + + UtilAction.velocity(tnt, player.getLocation().getDirection(), 2.0D, false, 0.0D, 0.1D, 10.0D, false); + Manager.GetProjectile().AddThrow(tnt, player, l, -1L, true, false, false, .2F); + + player.playSound(player.getLocation(), Sound.CREEPER_HISS, 3.0F, 1.0F); + + l.addThrower(player, tnt); + } + + @EventHandler + public void onExplode(TNTPreExplodeEvent event) + { + if (!Manager.GetGame().IsLive()) + return; + + if (!Kit.HasKit(event.getPlayer())) + return; + + if (event.getTNT().isOnGround() || UtilEnt.isGrounded(event.getTNT())) + return; + + if (!(Manager.GetGame() instanceof BombLobbers)) + return; + + BombLobbers l = (BombLobbers) Manager.GetGame(); + + event.setCancelled(true); + + if (_scatter.contains(event.getTNT())) + { + _scatter.remove(event.getTNT()); + return; + } + + for (int i = -1 ; i < 2 ; i++) + { + TNTPrimed tnt = (TNTPrimed) event.getTNT().getWorld().spawn(event.getTNT().getLocation(), TNTPrimed.class); + tnt.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), event.getPlayer().getUniqueId())); + tnt.setFuseTicks(60); + + UtilAction.velocity(tnt, event.getTNT().getVelocity().add(new Vector(i / 5, 0, i / 5)).normalize(), 2.0D, false, 0.0D, 0.1D, 10.0D, false); + Manager.GetProjectile().AddThrow(tnt, event.getPlayer(), l, -1L, true, false, false, .2F); + + l.addThrower(event.getPlayer(), tnt); + _scatter.add(tnt); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMorterCraftman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMorterCraftman.java new file mode 100644 index 000000000..9ea4ddd91 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMorterCraftman.java @@ -0,0 +1,55 @@ +package nautilus.game.arcade.game.games.lobbers.kits.perks; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilInv; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.kit.Perk; + +public class PerkMorterCraftman extends Perk +{ + private Recharge _recharge; + + public PerkMorterCraftman() + { + super("Morter Craftman", new String[] + { + "You will recieve 1 mortar every " + C.cYellow + "10 Seconds.", + "Maximum of 1." + }); + + _recharge = Recharge.Instance; + } + + @EventHandler + public void give(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + if (!Manager.GetGame().IsLive()) + return; + + for (Player player : Manager.GetGame().GetPlayers(true)) + { + if (!Kit.HasKit(player)) + continue; + + if (!_recharge.use(player, "Mortar Give", 10000, false, false)) + continue; + + //Has 1 + if (UtilInv.contains(player, Material.FIREBALL, (byte) 0, 1)) + continue; + + UtilInv.insert(player, new ItemBuilder(Material.FIREBALL).setTitle(F.item("Mortar")).build()); + } + } +} From b9762bddc422cab2a532cd9a21a3f036c09ddfbe Mon Sep 17 00:00:00 2001 From: Mysticate Date: Wed, 22 Jul 2015 16:50:57 -0400 Subject: [PATCH 11/18] Fixes --- .../src/mineplex/core/game/GameDisplay.java | 2 +- .../core/projectile/ProjectileManager.java | 23 +++-- .../core/projectile/ProjectileUser.java | 30 ++++--- .../game/games/lobbers/BombLobbers.java | 24 +++--- .../game/games/lobbers/kits/KitDetonator.java | 84 +++++++++++++++---- .../games/lobbers/kits/perks/PerkWaller.java | 2 +- 6 files changed, 116 insertions(+), 49 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java index dbb06498f..65e1d6da4 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java @@ -27,7 +27,7 @@ public enum GameDisplay HideSeek("Block Hunt", Material.GRASS, (byte)0, GameCategory.CLASSICS, 20), HoleInTheWall("Hole in the Wall", Material.STAINED_GLASS, (byte) 2, GameCategory.ARCADE, 52), Horse("Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE, 21), - Lobbers("Bomb Lobbers", Material.FIREWORK_CHARGE, (byte) 0, GameCategory.ARCADE, 53), + Lobbers("Bomb Lobbers", Material.FIREBALL, (byte) 0, GameCategory.ARCADE, 53), 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.CHAMPIONS, 25),// Temp set to CHAMPIONS to fix UI bug diff --git a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileManager.java b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileManager.java index a3e3fb661..132500dc8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileManager.java @@ -1,15 +1,13 @@ package mineplex.core.projectile; -import java.util.HashSet; import java.util.Iterator; import java.util.Map.Entry; import java.util.WeakHashMap; import mineplex.core.MiniPlugin; import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.disguise.DisguiseManager; -import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; import org.bukkit.Effect; import org.bukkit.Sound; @@ -35,7 +33,7 @@ public class ProjectileManager extends MiniPlugin { _thrown.put(thrown, new ProjectileUser(this, thrown, thrower, callback, expireTime, hitPlayer, hitBlock, idle, false, - null, 1f, 1f, null, 0, null, null, hitboxGrow)); + null, 1f, 1f, null, 0, null, null, 0F, 0F, 0F, 0F, 1, hitboxGrow)); } public void AddThrow(Entity thrown, LivingEntity thrower, IThrown callback, @@ -43,7 +41,7 @@ public class ProjectileManager extends MiniPlugin { _thrown.put(thrown, new ProjectileUser(this, thrown, thrower, callback, expireTime, hitPlayer, hitBlock, idle, pickup, - null, 1f, 1f, null, 0, null, null, hitboxGrow)); + null, 1f, 1f, null, 0, null, null, 0F, 0F, 0F, 0F, 1, hitboxGrow)); } public void AddThrow(Entity thrown, LivingEntity thrower, IThrown callback, @@ -52,7 +50,7 @@ public class ProjectileManager extends MiniPlugin { _thrown.put(thrown, new ProjectileUser(this, thrown, thrower, callback, expireTime, hitPlayer, hitBlock, idle, false, - sound, soundVolume, soundPitch, effect, effectData, effectRate, null, hitboxGrow)); + sound, soundVolume, soundPitch, effect, effectData, effectRate, null, 0F, 0F, 0F, 0F, 1, hitboxGrow)); } public void AddThrow(Entity thrown, LivingEntity thrower, IThrown callback, @@ -61,7 +59,7 @@ public class ProjectileManager extends MiniPlugin { _thrown.put(thrown, new ProjectileUser(this, thrown, thrower, callback, expireTime, hitPlayer, hitBlock, idle, false, - sound, soundVolume, soundPitch, effect, effectData, effectRate, particle, hitboxGrow)); + sound, soundVolume, soundPitch, effect, effectData, effectRate, particle, 0F, 0F, 0F, 0F, 1, hitboxGrow)); } public void AddThrow(Entity thrown, LivingEntity thrower, IThrown callback, @@ -70,7 +68,16 @@ public class ProjectileManager extends MiniPlugin { _thrown.put(thrown, new ProjectileUser(this, thrown, thrower, callback, expireTime, hitPlayer, hitBlock, idle, false, - sound, soundVolume, soundPitch, null, 0, effectRate, particle, hitboxMult)); + sound, soundVolume, soundPitch, null, 0, effectRate, particle, 0F, 0F, 0F, 0F, 1, hitboxMult)); + } + + public void AddThrow(Entity thrown, LivingEntity thrower, IThrown callback, + long expireTime, boolean hitPlayer, boolean hitBlock, boolean idle, + Sound sound, float soundVolume, float soundPitch, ParticleType particle, float pX, float pY, float pZ, float pS, int pC, UpdateType effectRate, float hitboxMult) + { + _thrown.put(thrown, new ProjectileUser(this, thrown, thrower, callback, + expireTime, hitPlayer, hitBlock, idle, false, + sound, soundVolume, soundPitch, null, 0, effectRate, particle, pX, pY, pZ, pS, pC, hitboxMult)); } @EventHandler diff --git a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java index a19cf5caa..6c94d9e00 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java @@ -1,16 +1,13 @@ package mineplex.core.projectile; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; 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 mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; import net.minecraft.server.v1_7_R4.AxisAlignedBB; import net.minecraft.server.v1_7_R4.MathHelper; import net.minecraft.server.v1_7_R4.MovingObjectPosition; @@ -25,7 +22,6 @@ import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftLivingEntity; import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -46,7 +42,14 @@ public class ProjectileUser private Sound _sound = null; private float _soundVolume = 1f; private float _soundPitch = 1f; + private ParticleType _particle = null; + private float _particleX = 0F; + private float _particleY = 0F; + private float _particleZ = 0F; + private float _particleS = 0F; + private int _particleC = 1; + private Effect _effect = null; private int _effectData = 0; private UpdateType _effectRate = UpdateType.TICK; @@ -57,8 +60,8 @@ public class ProjectileUser long expireTime, boolean hitPlayer, boolean hitBlock, boolean idle, boolean pickup, Sound sound, float soundVolume, float soundPitch, Effect effect, int effectData, UpdateType effectRate, - ParticleType particle, - double hitboxMult) + ParticleType particle, float particleX, float particleY, + float particleZ, float particleS, int particleC, double hitboxMult) { Throw = throwInput; @@ -76,6 +79,11 @@ public class ProjectileUser _soundVolume = soundVolume; _soundPitch = soundPitch; _particle = particle; + _particleX = particleX; + _particleY = particleY; + _particleZ = particleZ; + _particleS = particleS; + _particleC = particleC; _effect = effect; _effectData = effectData; _effectRate = effectRate; @@ -95,7 +103,7 @@ 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(), _particleX, _particleY, _particleZ, _particleS, _particleC, ViewDist.LONG, UtilServer.getPlayers()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index fd518af67..329e33c5b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -32,7 +32,6 @@ import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; import nautilus.game.arcade.game.games.lobbers.kits.KitArmorer; import nautilus.game.arcade.game.games.lobbers.kits.KitDetonator; import nautilus.game.arcade.game.games.lobbers.kits.KitJumper; -import nautilus.game.arcade.game.games.lobbers.kits.KitMortar; import nautilus.game.arcade.game.games.lobbers.kits.KitWaller; import nautilus.game.arcade.game.games.lobbers.trackers.Tracker6Kill; import nautilus.game.arcade.game.games.lobbers.trackers.TrackerBestTeam; @@ -44,7 +43,6 @@ import nautilus.game.arcade.kit.Kit; import org.bukkit.EntityEffect; 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; @@ -72,7 +70,7 @@ public class BombLobbers extends TeamGame implements IThrown new KitJumper(manager), new KitArmorer(manager), new KitDetonator(manager), - new KitMortar(manager), +// new KitMortar(manager), new KitWaller(manager) }, new String[] { @@ -188,7 +186,7 @@ public class BombLobbers extends TeamGame implements IThrown if (!UtilInv.IsItem(player.getItemInHand(), Material.TNT, (byte) 0)) return; - + event.setCancelled(true); UtilInv.remove(player, Material.TNT, (byte) 0, 1); @@ -199,9 +197,7 @@ public class BombLobbers extends TeamGame implements IThrown tnt.setFuseTicks(60); UtilAction.velocity(tnt, player.getLocation().getDirection(), 2.0D, false, 0.0D, 0.1D, 10.0D, false); - Manager.GetProjectile().AddThrow(tnt, player, this, -1L, true, false, false, .2F); - - player.playSound(player.getLocation(), Sound.CREEPER_HISS, 3.0F, 1.0F); + Manager.GetProjectile().AddThrow(tnt, player, this, -1L, true, false, true, .2F); Manager.getPlugin().getServer().getPluginManager().callEvent(new TNTThrowEvent(player, tnt)); @@ -218,9 +214,17 @@ public class BombLobbers extends TeamGame implements IThrown _tnt.put(tnt, player.getName()); } - public String getThrower(TNTPrimed tnt) + public void removeThrower(TNTPrimed tnt) { - return _tnt.get(tnt); + _tnt.remove(tnt); + } + + public Player getThrower(TNTPrimed tnt) + { + if (_tnt.get(tnt) == null) + return null; + + return UtilPlayer.searchExact(_tnt.get(tnt)); } @EventHandler @@ -312,7 +316,7 @@ public class BombLobbers extends TeamGame implements IThrown if (team == null) continue; - UtilParticle.PlayParticle(ParticleType.RED_DUST, tnt.getKey().getLocation().clone().add(0.0, 0.5, 0.0), team.GetColorBase().getRed(), team.GetColorBase().getGreen(), team.GetColorBase().getBlue(), 1, 0, ViewDist.LONG, UtilServer.getPlayers()); + UtilParticle.PlayParticle(ParticleType.RED_DUST, tnt.getKey().getLocation().clone().add(0.0, 0.6, 0.0), team.GetColorBase().getRed(), team.GetColorBase().getGreen(), team.GetColorBase().getBlue(), 1, 0, ViewDist.LONG, UtilServer.getPlayers()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java index 8536d1afb..f0ad0da20 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java @@ -1,12 +1,17 @@ package nautilus.game.arcade.game.games.lobbers.kits; +import java.util.Map.Entry; + import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilInv; import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.lobbers.BombLobbers; import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; import nautilus.game.arcade.kit.Kit; @@ -16,23 +21,26 @@ import nautilus.game.arcade.kit.Perk; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; public class KitDetonator extends Kit { + private NautHashMap _fuseTimes = new NautHashMap(); public KitDetonator(ArcadeManager manager) { super(manager, "Detonator", KitAvailability.Gem, 4000, new String[] { - "He doesn't like to wait. Max fuse of 3 and min fuse of 2.", - "", + "He doesn't like to wait. ", C.cYellow + "Left Click" + C.cGray + " lever to " + C.cGreen + "Decrease Fuse Time.", - C.cYellow + "Right Click" + C.cGray + " lever to " + C.cGreen + "Increase Fuse Time." + C.cYellow + "Right Click" + C.cGray + " lever to " + C.cGreen + "Increase Fuse Time.", + "Maximum fuse time of " + C.cYellow + "6 Seconds.", + "Minimum fuse time of " + C.cYellow + "2 Seconds.", }, new Perk[] { new PerkCraftman(6000) @@ -43,13 +51,7 @@ public class KitDetonator extends Kit @Override public void GiveItems(Player player) { - player.getInventory().setItem(1, new ItemBuilder(Material.LEVER).setTitle(F.item("Fuse Selector (Seconds)")).setAmount(2).build()); - } - - @Override - public void SpawnCustom(LivingEntity ent) - { - + player.getInventory().setItem(1, new ItemBuilder(Material.LEVER).setTitle(F.item("Fuse Selector (Seconds)")).setAmount(3).build()); } @EventHandler @@ -69,14 +71,13 @@ public class KitDetonator extends Kit } else { - if (lever.getAmount() <= 0 || lever.getAmount() > 3) + if (lever.getAmount() < 2 || lever.getAmount() > 6) { GiveItems(event.getPlayer()); } - else - { - event.getTNT().setFuseTicks(lever.getAmount() * 20); - } + + event.getTNT().setFuseTicks(lever.getAmount() * 20); + _fuseTimes.put(event.getTNT(), lever.getAmount() * 20); } } @@ -100,7 +101,7 @@ public class KitDetonator extends Kit //Right if (UtilEvent.isAction(event, ActionType.R)) { - if (amount >= 3) + if (amount >= 6) return; UtilInv.insert(event.getPlayer(), new ItemBuilder(Material.LEVER).setTitle(F.item("Fuse Selector (Seconds)")).build()); @@ -116,5 +117,52 @@ public class KitDetonator extends Kit UtilInv.Update(event.getPlayer()); } event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), Sound.CLICK, 3.0F, 1.0F); - } + } + + @EventHandler + public void respawnBombs(UpdateEvent event) + { + if (!(Manager.GetGame() instanceof BombLobbers)) + return; + + BombLobbers l = (BombLobbers) Manager.GetGame(); + + if (!Manager.GetGame().IsLive()) + return; + + for (Entry entry : _fuseTimes.entrySet()) + { + if (entry.getKey() == null || !entry.getKey().isValid()) + return; + + //If it will need respawning + if (entry.getValue() > 60) + { + //If it's near 60 ticks + //2 tick leeway + if (entry.getKey().getFuseTicks() >= 60 && entry.getKey().getFuseTicks() <= 62) + { + Player player = l.getThrower(entry.getKey()); + + if (player == null) + { + continue; + } + + TNTPrimed newTNT = entry.getKey().getWorld().spawn(entry.getKey().getLocation(), TNTPrimed.class); + newTNT.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), player.getUniqueId())); + newTNT.setVelocity(entry.getKey().getVelocity()); + newTNT.setFuseTicks(59); + + Manager.GetProjectile().AddThrow(newTNT, player, l, -1L, true, false, true, .2F); + + entry.getKey().remove(); + l.removeThrower(entry.getKey()); + _fuseTimes.remove(entry.getKey()); + + l.addThrower(player, newTNT); + } + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java index 81b16ed8d..7f696aa22 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java @@ -88,7 +88,7 @@ public class PerkWaller extends Perk for (TNTPrimed tnt : _tnt) { - for (Block near : UtilBlock.getInRadius(tnt.getLocation(), 2.0F).keySet()) + for (Block near : UtilBlock.getInRadius(tnt.getLocation(), 3.0F).keySet()) { if (_wallBlocks.contains(near.getLocation())) { From e6386744444c1ebce9d3d7af121d5bf793c9e191 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Wed, 22 Jul 2015 20:17:19 -0400 Subject: [PATCH 12/18] Fixed fuse on detonator --- .../game/games/lobbers/kits/KitDetonator.java | 59 +++++++++++-------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java index f0ad0da20..304ccf255 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java @@ -12,6 +12,7 @@ import mineplex.core.itemstack.ItemBuilder; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.lobbers.BombLobbers; +import nautilus.game.arcade.game.games.lobbers.events.TNTPreExplodeEvent; import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; import nautilus.game.arcade.kit.Kit; @@ -30,7 +31,7 @@ import org.bukkit.metadata.FixedMetadataValue; public class KitDetonator extends Kit { - private NautHashMap _fuseTimes = new NautHashMap(); + private NautHashMap _respawnTimes = new NautHashMap(); public KitDetonator(ArcadeManager manager) { @@ -77,7 +78,11 @@ public class KitDetonator extends Kit } event.getTNT().setFuseTicks(lever.getAmount() * 20); - _fuseTimes.put(event.getTNT(), lever.getAmount() * 20); + + if (lever.getAmount() > 3) + { + _respawnTimes.put(event.getTNT(), System.currentTimeMillis() + 3000); + } } } @@ -130,39 +135,41 @@ public class KitDetonator extends Kit if (!Manager.GetGame().IsLive()) return; - for (Entry entry : _fuseTimes.entrySet()) + for (Entry entry : _respawnTimes.entrySet()) { if (entry.getKey() == null || !entry.getKey().isValid()) return; //If it will need respawning - if (entry.getValue() > 60) + if (System.currentTimeMillis() >= entry.getValue()) { - //If it's near 60 ticks - //2 tick leeway - if (entry.getKey().getFuseTicks() >= 60 && entry.getKey().getFuseTicks() <= 62) - { - Player player = l.getThrower(entry.getKey()); - - if (player == null) - { - continue; - } - - TNTPrimed newTNT = entry.getKey().getWorld().spawn(entry.getKey().getLocation(), TNTPrimed.class); - newTNT.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), player.getUniqueId())); - newTNT.setVelocity(entry.getKey().getVelocity()); - newTNT.setFuseTicks(59); + Player player = l.getThrower(entry.getKey()); - Manager.GetProjectile().AddThrow(newTNT, player, l, -1L, true, false, true, .2F); - - entry.getKey().remove(); - l.removeThrower(entry.getKey()); - _fuseTimes.remove(entry.getKey()); + if (player == null) + continue; - l.addThrower(player, newTNT); - } + TNTPrimed newTNT = entry.getKey().getWorld().spawn(entry.getKey().getLocation(), TNTPrimed.class); + newTNT.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), player.getUniqueId())); + newTNT.setVelocity(entry.getKey().getVelocity()); + newTNT.setFuseTicks(60); + + Manager.GetProjectile().AddThrow(newTNT, player, l, -1L, true, false, true, .2F); + + entry.getKey().remove(); + l.removeThrower(entry.getKey()); + _respawnTimes.remove(entry.getKey()); + + l.addThrower(player, newTNT); } } } + + @EventHandler + public void onExplode(TNTPreExplodeEvent event) + { + if (_respawnTimes.containsKey(event.getTNT())) + { + _respawnTimes.remove(event.getTNT()); + } + } } From 91db076053c51f444549b1af67c0fbe7da48a422 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Thu, 23 Jul 2015 09:28:35 -0400 Subject: [PATCH 13/18] Fixed lobbers icon in stats --- .../src/mineplex/core/achievement/AchievementCategory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java index bffc840e7..0f823efe0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java @@ -122,7 +122,7 @@ public enum AchievementCategory BOMB_LOBBERS("Bomb Lobbers", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, - Material.TNT, 0, GameCategory.ARCADE, "Waller Kit"); + Material.FIREBALL, 0, GameCategory.ARCADE, "Waller Kit"); private String _name; private String[] _statsToPull; From 06d4de16cf058be7f051a1d54bad01354a7c601b Mon Sep 17 00:00:00 2001 From: Mysticate Date: Thu, 23 Jul 2015 13:34:11 -0400 Subject: [PATCH 14/18] Changed particle methods --- .../game/games/lobbers/BombLobbers.java | 54 +++++++++++++++---- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index 329e33c5b..9d5c7eb58 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -40,6 +40,7 @@ import nautilus.game.arcade.game.games.lobbers.trackers.TrackerNoDamage; import nautilus.game.arcade.game.games.lobbers.trackers.TrackerTNTThrown; import nautilus.game.arcade.kit.Kit; +import org.bukkit.ChatColor; import org.bukkit.EntityEffect; import org.bukkit.Location; import org.bukkit.Material; @@ -58,7 +59,7 @@ public class BombLobbers extends TeamGame implements IThrown { private NautHashMap _averageSpawns = new NautHashMap(); - private NautHashMap _tnt = new NautHashMap(); + private NautHashMap _tnt = new NautHashMap(); private NautHashMap _kills = new NautHashMap(); @@ -70,7 +71,7 @@ public class BombLobbers extends TeamGame implements IThrown new KitJumper(manager), new KitArmorer(manager), new KitDetonator(manager), -// new KitMortar(manager), +// new KitMortar(manager), << Spare time kit for Bobbeh new KitWaller(manager) }, new String[] { @@ -201,7 +202,7 @@ public class BombLobbers extends TeamGame implements IThrown Manager.getPlugin().getServer().getPluginManager().callEvent(new TNTThrowEvent(player, tnt)); - _tnt.put(tnt, player.getName()); + _tnt.put(tnt, new BombToken(player)); } public boolean hasThrower(TNTPrimed tnt) @@ -211,7 +212,7 @@ public class BombLobbers extends TeamGame implements IThrown public void addThrower(Player player, TNTPrimed tnt) { - _tnt.put(tnt, player.getName()); + _tnt.put(tnt, new BombToken(player)); } public void removeThrower(TNTPrimed tnt) @@ -224,7 +225,7 @@ public class BombLobbers extends TeamGame implements IThrown if (_tnt.get(tnt) == null) return null; - return UtilPlayer.searchExact(_tnt.get(tnt)); + return UtilPlayer.searchExact(_tnt.get(tnt).Thrower); } @EventHandler @@ -241,7 +242,7 @@ public class BombLobbers extends TeamGame implements IThrown if (!_tnt.containsKey(tnt)) return; - Player thrower = UtilPlayer.searchExact(_tnt.get(tnt)); + Player thrower = UtilPlayer.searchExact(_tnt.get(tnt).Thrower); if (thrower == null) { @@ -292,7 +293,7 @@ public class BombLobbers extends TeamGame implements IThrown if (!IsLive()) return; - for (Entry tnt : _tnt.entrySet()) + for (Entry tnt : _tnt.entrySet()) { if (tnt.getKey() == null) continue; @@ -303,7 +304,8 @@ public class BombLobbers extends TeamGame implements IThrown if (UtilEnt.isGrounded(tnt.getKey()) || tnt.getKey().isOnGround()) continue; - Player thrower = UtilPlayer.searchExact(tnt.getValue()); + BombToken token = tnt.getValue(); + Player thrower = UtilPlayer.searchExact(token.Thrower); if (thrower == null) continue; @@ -316,7 +318,41 @@ public class BombLobbers extends TeamGame implements IThrown if (team == null) continue; - UtilParticle.PlayParticle(ParticleType.RED_DUST, tnt.getKey().getLocation().clone().add(0.0, 0.6, 0.0), team.GetColorBase().getRed(), team.GetColorBase().getGreen(), team.GetColorBase().getBlue(), 1, 0, ViewDist.LONG, UtilServer.getPlayers()); + //A is current + //B is previous + token.B = token.A; + token.A = tnt.getKey().getLocation(); + + if (token.A == null || token.B == null) + continue; + + //Adapted from static lazer code + double curRange = 0; + double distance = Math.abs(token.A.distance(token.B)); + + while (curRange <= distance) + { + Location newTarget = token.B.add(UtilAlg.getTrajectory(token.B, token.A).multiply(curRange)); +// Location newTarget = player.getEyeLocation().add(player.getLocation().getDirection().multiply(curRange)); + + //Progress Forwards + curRange += 0.2; + + if (team.GetColor() == ChatColor.AQUA) + { + for (int i = 0 ; i < 5 ; i++) + UtilParticle.PlayParticle(ParticleType.RED_DUST, newTarget.clone().add(0.0, 0.5, 0.0), -1, 1, 1, 1, 0, + ViewDist.LONG, UtilServer.getPlayers()); + } + else + { + for (int i = 0 ; i < 5 ; i++) + UtilParticle.PlayParticle(ParticleType.RED_DUST, newTarget.clone().add(0.0, 0.5, 0.0), 0, 0, 0, 0, 1, + ViewDist.LONG, UtilServer.getPlayers()); + } + + //UtilParticle.PlayParticle(ParticleType.RED_DUST, newTarget.clone().add(0.0, 0.6, 0.0), team.GetColorBase().getRed(), team.GetColorBase().getGreen(), team.GetColorBase().getBlue(), 1, 0, ViewDist.LONG, UtilServer.getPlayers()); + } } } From 365968f41d386386b07caa105fdc8f2047ea958b Mon Sep 17 00:00:00 2001 From: Mysticate Date: Thu, 23 Jul 2015 16:26:43 -0400 Subject: [PATCH 15/18] Added a bomb token thing --- .../arcade/game/games/lobbers/BombToken.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombToken.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombToken.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombToken.java new file mode 100644 index 000000000..eed18640a --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombToken.java @@ -0,0 +1,16 @@ +package nautilus.game.arcade.game.games.lobbers; + +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public class BombToken +{ + public final String Thrower; + public Location A = null; + public Location B = null; + + public BombToken(Player player) + { + Thrower = player.getName(); + } +} From 5d87d9e1e49c8646aed4e39a4f7c09327f01be11 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Sat, 25 Jul 2015 02:01:55 -0400 Subject: [PATCH 16/18] . --- .../game/arcade/game/games/lobbers/BombLobbers.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index 9d5c7eb58..a05ed1cc3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -171,6 +171,15 @@ public class BombLobbers extends TeamGame implements IThrown } } + @EventHandler + public void disableFlying(GameStateChangeEvent event) + { + for (Player player : GetPlayers(true)) + { + player.setAllowFlight(false); + } + } + @EventHandler public void throwTNT(PlayerInteractEvent event) { From a002da4c0f6d8e42e850310e4a6bcab1551263fb Mon Sep 17 00:00:00 2001 From: Mysticate Date: Sat, 25 Jul 2015 03:21:56 -0400 Subject: [PATCH 17/18] Redid how lobbers works --- .../game/games/lobbers/BombLobbers.java | 131 +++++++++++++++--- .../arcade/game/games/lobbers/BombToken.java | 4 + .../game/games/lobbers/kits/KitArmorer.java | 2 +- .../game/games/lobbers/kits/KitDetonator.java | 89 ++---------- .../game/games/lobbers/kits/KitJumper.java | 30 ++-- .../game/games/lobbers/kits/KitWaller.java | 2 +- .../lobbers/kits/perks/PerkCraftman.java | 14 +- .../games/lobbers/kits/perks/PerkMortar.java | 4 +- 8 files changed, 160 insertions(+), 116 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index a05ed1cc3..96bef6555 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -8,6 +8,7 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; 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.UtilInv; import mineplex.core.common.util.UtilParticle; @@ -15,6 +16,7 @@ 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; import mineplex.core.explosion.ExplosionEvent; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; @@ -214,21 +216,6 @@ public class BombLobbers extends TeamGame implements IThrown _tnt.put(tnt, new BombToken(player)); } - public boolean hasThrower(TNTPrimed tnt) - { - return _tnt.containsKey(tnt); - } - - public void addThrower(Player player, TNTPrimed tnt) - { - _tnt.put(tnt, new BombToken(player)); - } - - public void removeThrower(TNTPrimed tnt) - { - _tnt.remove(tnt); - } - public Player getThrower(TNTPrimed tnt) { if (_tnt.get(tnt) == null) @@ -292,6 +279,104 @@ public class BombLobbers extends TeamGame implements IThrown _tnt.remove(tnt); } + + @EventHandler + public void updateTNT(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + if (!IsLive()) + return; + + for (Entry tnt : _tnt.entrySet()) + { + if (tnt.getKey() == null) + continue; + + if (!tnt.getKey().isValid()) + continue; + + BombToken token = tnt.getValue(); + Player thrower = UtilPlayer.searchExact(token.Thrower); + + if (thrower == null) + continue; + + if (!IsPlaying(thrower)) + continue; + + if (!token.Primed) + { + if (tnt.getKey().getFuseTicks() <= 20) + { + //Respawn + TNTPrimed newTNT = tnt.getKey().getWorld().spawn(tnt.getKey().getLocation(), TNTPrimed.class); + newTNT.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), thrower.getUniqueId())); + newTNT.setVelocity(tnt.getKey().getVelocity()); + newTNT.setFuseTicks(60); + + Manager.GetProjectile().AddThrow(newTNT, thrower, this, -1L, true, false, true, .2F); + + tnt.getKey().remove(); + + _tnt.remove(tnt.getKey()); + _tnt.put(newTNT, token); + } + } + } + } + + @EventHandler + public void blockCollision(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + if (!IsLive()) + return; + + for (Entry tnt : _tnt.entrySet()) + { + if (tnt.getKey() == null) + continue; + + if (!tnt.getKey().isValid()) + continue; + + BombToken token = tnt.getValue(); + Player thrower = UtilPlayer.searchExact(token.Thrower); + + if (thrower == null) + continue; + + if (!IsPlaying(thrower)) + continue; + + if (!token.Primed) + { + //8+ insta explode + if (UtilTime.elapsed(token.Created, 8000)) + { + token.Primed = true; + tnt.getKey().setFuseTicks(0); + continue; + } + else if (UtilTime.elapsed(token.Created, 3000)) + { + for (Block block : UtilBlock.getSurrounding(tnt.getKey().getLocation().getBlock(), true)) + { + if (block.getType() != Material.AIR) + { + token.Primed = true; + tnt.getKey().setFuseTicks(0); + break; + } + } + } + } + } + } @EventHandler public void updateParticles(UpdateEvent event) @@ -429,9 +514,23 @@ public class BombLobbers extends TeamGame implements IThrown @Override public void Collide(LivingEntity target, Block block, ProjectileUser data) { - if (!(target instanceof Player) || !(data.GetThrower() instanceof Player)) + if (!(data.GetThrown() instanceof TNTPrimed)) return; + TNTPrimed tnt = (TNTPrimed) data.GetThrown(); + + if (_tnt.containsKey(tnt)) + { + _tnt.get(tnt).Primed = true; + tnt.setFuseTicks(0); + } + + if (!(data.GetThrower() instanceof Player)) + return; + + if (!(target instanceof Player)) + return; + if (GetTeam((Player) target) == GetTeam((Player) data.GetThrower())) return; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombToken.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombToken.java index eed18640a..a7eb4efd7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombToken.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombToken.java @@ -5,12 +5,16 @@ import org.bukkit.entity.Player; public class BombToken { + public final long Created; public final String Thrower; public Location A = null; public Location B = null; + public boolean Primed = false; public BombToken(Player player) { Thrower = player.getName(); + + Created = System.currentTimeMillis(); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java index b9184ad47..47ecd4222 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java @@ -28,7 +28,7 @@ public class KitArmorer extends Kit C.cGray + "Recieve " + C.cYellow + "Full Gold Armor" }, new Perk[] { - new PerkCraftman(5000) + new PerkCraftman() }, EntityType.ZOMBIE, new ItemStack(Material.AIR)); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java index 304ccf255..bba5fd8e5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java @@ -1,18 +1,13 @@ package nautilus.game.arcade.game.games.lobbers.kits; -import java.util.Map.Entry; - import mineplex.core.common.util.C; import mineplex.core.common.util.F; -import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilInv; import mineplex.core.itemstack.ItemBuilder; -import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.game.games.lobbers.BombLobbers; -import nautilus.game.arcade.game.games.lobbers.events.TNTPreExplodeEvent; import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; import nautilus.game.arcade.kit.Kit; @@ -20,31 +15,26 @@ import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import org.bukkit.Material; -import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.FixedMetadataValue; public class KitDetonator extends Kit { - private NautHashMap _respawnTimes = new NautHashMap(); - public KitDetonator(ArcadeManager manager) { super(manager, "Detonator", KitAvailability.Gem, 4000, new String[] { "He doesn't like to wait. ", - C.cYellow + "Left Click" + C.cGray + " lever to " + C.cGreen + "Decrease Fuse Time.", - C.cYellow + "Right Click" + C.cGray + " lever to " + C.cGreen + "Increase Fuse Time.", - "Maximum fuse time of " + C.cYellow + "6 Seconds.", - "Minimum fuse time of " + C.cYellow + "2 Seconds.", + C.cYellow + "Left Click" + C.cGray + " lever to " + C.cGreen + "Decrease Velocity", + C.cYellow + "Right Click" + C.cGray + " lever to " + C.cGreen + "Increase Velocity", + "Maximum Velocity of " + C.cYellow + "3.", + "Minimum Velocity of " + C.cYellow + "1.", }, new Perk[] { - new PerkCraftman(6000) + new PerkCraftman() }, EntityType.ZOMBIE, new ItemBuilder(Material.LEVER).build()); } @@ -52,7 +42,7 @@ public class KitDetonator extends Kit @Override public void GiveItems(Player player) { - player.getInventory().setItem(1, new ItemBuilder(Material.LEVER).setTitle(F.item("Fuse Selector (Seconds)")).setAmount(3).build()); + player.getInventory().setItem(1, new ItemBuilder(Material.LEVER).setTitle(F.item("Velocity Selector")).build()); } @EventHandler @@ -72,17 +62,12 @@ public class KitDetonator extends Kit } else { - if (lever.getAmount() < 2 || lever.getAmount() > 6) + if (lever.getAmount() < 1 || lever.getAmount() > 3) { GiveItems(event.getPlayer()); } - - event.getTNT().setFuseTicks(lever.getAmount() * 20); - if (lever.getAmount() > 3) - { - _respawnTimes.put(event.getTNT(), System.currentTimeMillis() + 3000); - } + UtilAction.velocity(event.getTNT(), event.getPlayer().getLocation().getDirection(), lever.getAmount(), false, 0.0D, 0.1D, 10.0D, false); } } @@ -106,70 +91,20 @@ public class KitDetonator extends Kit //Right if (UtilEvent.isAction(event, ActionType.R)) { - if (amount >= 6) + if (amount >= 3) return; - UtilInv.insert(event.getPlayer(), new ItemBuilder(Material.LEVER).setTitle(F.item("Fuse Selector (Seconds)")).build()); + UtilInv.insert(event.getPlayer(), new ItemBuilder(Material.LEVER).setTitle(F.item("Velocity Selector")).build()); UtilInv.Update(event.getPlayer()); } //Left else if (UtilEvent.isAction(event, ActionType.L)) { - if (amount <= 2) + if (amount <= 1) return; UtilInv.remove(event.getPlayer(), Material.LEVER, (byte) 0, 1); UtilInv.Update(event.getPlayer()); } - event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), Sound.CLICK, 3.0F, 1.0F); - } - - @EventHandler - public void respawnBombs(UpdateEvent event) - { - if (!(Manager.GetGame() instanceof BombLobbers)) - return; - - BombLobbers l = (BombLobbers) Manager.GetGame(); - - if (!Manager.GetGame().IsLive()) - return; - - for (Entry entry : _respawnTimes.entrySet()) - { - if (entry.getKey() == null || !entry.getKey().isValid()) - return; - - //If it will need respawning - if (System.currentTimeMillis() >= entry.getValue()) - { - Player player = l.getThrower(entry.getKey()); - - if (player == null) - continue; - - TNTPrimed newTNT = entry.getKey().getWorld().spawn(entry.getKey().getLocation(), TNTPrimed.class); - newTNT.setMetadata("owner", new FixedMetadataValue(Manager.getPlugin(), player.getUniqueId())); - newTNT.setVelocity(entry.getKey().getVelocity()); - newTNT.setFuseTicks(60); - - Manager.GetProjectile().AddThrow(newTNT, player, l, -1L, true, false, true, .2F); - - entry.getKey().remove(); - l.removeThrower(entry.getKey()); - _respawnTimes.remove(entry.getKey()); - - l.addThrower(player, newTNT); - } - } - } - - @EventHandler - public void onExplode(TNTPreExplodeEvent event) - { - if (_respawnTimes.containsKey(event.getTNT())) - { - _respawnTimes.remove(event.getTNT()); - } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java index 20e73f9cd..ec0a9cbe7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitJumper.java @@ -1,6 +1,7 @@ package nautilus.game.arcade.game.games.lobbers.kits; import mineplex.core.itemstack.ItemBuilder; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.lobbers.kits.perks.PerkCraftman; import nautilus.game.arcade.kit.Kit; @@ -10,8 +11,9 @@ import nautilus.game.arcade.kit.perks.PerkDoubleJump; import org.bukkit.Material; import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; public class KitJumper extends Kit { @@ -20,7 +22,8 @@ public class KitJumper extends Kit { super(manager, "Jumper", KitAvailability.Free, 0, new String[] { - "Use your jumping abilities to leap away from trouble!" + "Use your jumping abilities to leap away from trouble!", + "You take no fall damage." }, new Perk[] { new PerkDoubleJump("Double Jump", 1.2, 1.2, false, 6000, true), @@ -33,11 +36,22 @@ public class KitJumper extends Kit { } - - @Override - public void SpawnCustom(LivingEntity ent) + + @EventHandler + public void onDamage(CustomDamageEvent event) { - + if (!Manager.GetGame().IsLive()) + return; + + if (!(event.GetDamageeEntity() instanceof Player)) + return; + + if (!HasKit(event.GetDamageePlayer())) + return; + + if (event.GetCause() == DamageCause.FALL) + { + event.SetCancelled("Jumper no fall damage"); + } } - -} \ No newline at end of file +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java index 7d9d760e8..022fb8b75 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitWaller.java @@ -24,7 +24,7 @@ public class KitWaller extends Kit }, new Perk[] { new PerkWaller(), - new PerkCraftman(6000) + new PerkCraftman() }, EntityType.ZOMBIE, new ItemBuilder(Material.SMOOTH_BRICK).setUnbreakable(true).build()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java index 9373d293b..9c1e6fc8a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java @@ -16,23 +16,15 @@ import org.bukkit.event.EventHandler; public class PerkCraftman extends Perk { private Recharge _recharge; - - private final long _giveTime; - + public PerkCraftman() - { - this(4000); - } - - public PerkCraftman(long giveTime) { super("Craftman", new String[] { - C.cGray + "Recieve 1 TNT every " + C.cYellow + giveTime / 1000 + " Seconds." + C.cGray + " Maximum of 3." + C.cGray + "Recieve 1 TNT every so often. Maximum of 3." }); _recharge = Recharge.Instance; - _giveTime = giveTime; } @EventHandler @@ -49,7 +41,7 @@ public class PerkCraftman extends Perk if (!Kit.HasKit(player)) continue; - if (!_recharge.use(player, "Bomb Give", _giveTime, false, false)) + if (!_recharge.use(player, "Bomb Give", (long) (1000 * (8 - Math.floor(Manager.GetGame().getGameLiveTime() / 20))), false, false)) continue; //Has 3 diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMortar.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMortar.java index e79aaefff..db295ff13 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMortar.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkMortar.java @@ -72,7 +72,7 @@ public class PerkMortar extends Perk player.playSound(player.getLocation(), Sound.CREEPER_HISS, 3.0F, 1.0F); - l.addThrower(player, tnt); +// l.addThrower(player, tnt); } @EventHandler @@ -109,7 +109,7 @@ public class PerkMortar extends Perk UtilAction.velocity(tnt, event.getTNT().getVelocity().add(new Vector(i / 5, 0, i / 5)).normalize(), 2.0D, false, 0.0D, 0.1D, 10.0D, false); Manager.GetProjectile().AddThrow(tnt, event.getPlayer(), l, -1L, true, false, false, .2F); - l.addThrower(event.getPlayer(), tnt); +// l.addThrower(event.getPlayer(), tnt); _scatter.add(tnt); } } From d295cead09e3b752bb758ff7a63983d024005be4 Mon Sep 17 00:00:00 2001 From: Mysticate Date: Sat, 25 Jul 2015 04:18:18 -0400 Subject: [PATCH 18/18] Final stuff --- .../game/games/lobbers/BombLobbers.java | 35 ++++++++++--------- .../{KitDetonator.java => KitPitcher.java} | 24 +++++++++---- .../lobbers/kits/perks/PerkCraftman.java | 26 ++++++++++++-- .../games/lobbers/kits/perks/PerkWaller.java | 21 ----------- 4 files changed, 60 insertions(+), 46 deletions(-) rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/{KitDetonator.java => KitPitcher.java} (84%) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java index 96bef6555..ce716f561 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/BombLobbers.java @@ -24,6 +24,7 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.CombatComponent; import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; @@ -32,7 +33,7 @@ import nautilus.game.arcade.game.TeamGame; import nautilus.game.arcade.game.games.lobbers.events.TNTPreExplodeEvent; import nautilus.game.arcade.game.games.lobbers.events.TNTThrowEvent; import nautilus.game.arcade.game.games.lobbers.kits.KitArmorer; -import nautilus.game.arcade.game.games.lobbers.kits.KitDetonator; +import nautilus.game.arcade.game.games.lobbers.kits.KitPitcher; import nautilus.game.arcade.game.games.lobbers.kits.KitJumper; import nautilus.game.arcade.game.games.lobbers.kits.KitWaller; import nautilus.game.arcade.game.games.lobbers.trackers.Tracker6Kill; @@ -43,7 +44,6 @@ import nautilus.game.arcade.game.games.lobbers.trackers.TrackerTNTThrown; import nautilus.game.arcade.kit.Kit; import org.bukkit.ChatColor; -import org.bukkit.EntityEffect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -52,6 +52,7 @@ import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.metadata.FixedMetadataValue; @@ -72,7 +73,7 @@ public class BombLobbers extends TeamGame implements IThrown { new KitJumper(manager), new KitArmorer(manager), - new KitDetonator(manager), + new KitPitcher(manager), // new KitMortar(manager), << Spare time kit for Bobbeh new KitWaller(manager) }, new String[] @@ -289,8 +290,11 @@ public class BombLobbers extends TeamGame implements IThrown if (!IsLive()) return; - for (Entry tnt : _tnt.entrySet()) + Iterator> iterator = _tnt.entrySet().iterator(); + while (iterator.hasNext()) { + Entry tnt = iterator.next(); + if (tnt.getKey() == null) continue; @@ -516,15 +520,7 @@ public class BombLobbers extends TeamGame implements IThrown { if (!(data.GetThrown() instanceof TNTPrimed)) return; - - TNTPrimed tnt = (TNTPrimed) data.GetThrown(); - - if (_tnt.containsKey(tnt)) - { - _tnt.get(tnt).Primed = true; - tnt.setFuseTicks(0); - } - + if (!(data.GetThrower() instanceof Player)) return; @@ -537,10 +533,9 @@ public class BombLobbers extends TeamGame implements IThrown data.GetThrown().setVelocity(new Vector()); if (target != null) - { UtilAction.velocity(target, UtilAlg.getTrajectory2d(data.GetThrown().getLocation(), target.getLocation()), .2, false, 0, 0.2, .4, true); - target.playEffect(EntityEffect.HURT); - } + + Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 6.0, false, false, true, "Throwing TNT", "Throwing TNT Direct Hit"); } @Override @@ -554,4 +549,12 @@ public class BombLobbers extends TeamGame implements IThrown { } + + public void knockbackIncrease(CustomDamageEvent event) + { + if (event.GetCause() != DamageCause.ENTITY_EXPLOSION && event.GetCause() != DamageCause.BLOCK_EXPLOSION) + return; + + event.AddKnockback("Explosion", 1.5D); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitPitcher.java similarity index 84% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitPitcher.java index bba5fd8e5..8e69a8499 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitDetonator.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitPitcher.java @@ -21,13 +21,14 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -public class KitDetonator extends Kit +public class KitPitcher extends Kit { - public KitDetonator(ArcadeManager manager) + public KitPitcher(ArcadeManager manager) { - super(manager, "Detonator", KitAvailability.Gem, 4000, new String[] + super(manager, "Pitcher", KitAvailability.Gem, 4000, new String[] { - "He doesn't like to wait. ", + "He can easily pitch the perfect shot for any occasion.", + "", C.cYellow + "Left Click" + C.cGray + " lever to " + C.cGreen + "Decrease Velocity", C.cYellow + "Right Click" + C.cGray + " lever to " + C.cGreen + "Increase Velocity", "Maximum Velocity of " + C.cYellow + "3.", @@ -42,7 +43,7 @@ public class KitDetonator extends Kit @Override public void GiveItems(Player player) { - player.getInventory().setItem(1, new ItemBuilder(Material.LEVER).setTitle(F.item("Velocity Selector")).build()); + player.getInventory().setItem(1, new ItemBuilder(Material.LEVER).setTitle(F.item("Velocity Selector")).setAmount(3).build()); } @EventHandler @@ -67,7 +68,7 @@ public class KitDetonator extends Kit GiveItems(event.getPlayer()); } - UtilAction.velocity(event.getTNT(), event.getPlayer().getLocation().getDirection(), lever.getAmount(), false, 0.0D, 0.1D, 10.0D, false); + UtilAction.velocity(event.getTNT(), event.getPlayer().getLocation().getDirection(), getVelocity(lever.getAmount()), false, 0.0D, 0.1D, 10.0D, false); } } @@ -107,4 +108,15 @@ public class KitDetonator extends Kit UtilInv.Update(event.getPlayer()); } } + + private double getVelocity(int amount) + { + if (amount == 1) + return 1.5; + + if (amount == 2) + return 1.75; + + return 2.0; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java index 9c1e6fc8a..7e89b427f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkCraftman.java @@ -22,7 +22,7 @@ public class PerkCraftman extends Perk super("Craftman", new String[] { C.cGray + "Recieve 1 TNT every so often. Maximum of 3." - }); + }, false); _recharge = Recharge.Instance; } @@ -40,8 +40,9 @@ public class PerkCraftman extends Perk { if (!Kit.HasKit(player)) continue; - - if (!_recharge.use(player, "Bomb Give", (long) (1000 * (8 - Math.floor(Manager.GetGame().getGameLiveTime() / 20))), false, false)) + //If game time is 56 seconds - 56000 + //8 - 1 + if (!_recharge.use(player, "Bomb Give", getRechargeTime(), false, false)) continue; //Has 3 @@ -51,4 +52,23 @@ public class PerkCraftman extends Perk UtilInv.insert(player, new ItemBuilder(Material.TNT).setTitle(F.item("Throwing TNT")).build()); } } + + private long getRechargeTime() + { + long ingame = Manager.GetGame().getGameLiveTime(); + + if (ingame <= 20000) + return 8000; + + if (ingame <= 40000) + return 7000; + + if (ingame <= 60000) + return 6000; + + if (ingame <= 620000) + return 5000; + + return 4000; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java index 7f696aa22..afb0e8b47 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/perks/PerkWaller.java @@ -77,27 +77,6 @@ public class PerkWaller extends Perk _wallBlocks.addAll(buildWall(event.getClickedBlock().getLocation(), event.getPlayer().getLocation().getYaw())); } - @EventHandler - public void explodeTNT(UpdateEvent event) - { - if (!Manager.GetGame().IsLive()) - return; - - if (event.getType() != UpdateType.FAST) - return; - - for (TNTPrimed tnt : _tnt) - { - for (Block near : UtilBlock.getInRadius(tnt.getLocation(), 3.0F).keySet()) - { - if (_wallBlocks.contains(near.getLocation())) - { - tnt.setFuseTicks(0); - } - } - } - } - @SuppressWarnings("deprecation") private Set buildWall(final Location source, final float playerYaw) {