From 60cdae5c042465b92e9be3ca2e1aba7d59aa8462 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 8 Jan 2018 14:46:06 +0000 Subject: [PATCH] Move perks into SkywarsPerks for less copied code --- .../src/nautilus/game/arcade/GameType.java | 6 +- .../arcade/game/games/skywars/Skywars.java | 163 +++++----------- .../game/games/skywars/kits/KitAir.java | 68 ++++--- .../game/games/skywars/kits/KitEarth.java | 30 +-- .../game/games/skywars/kits/KitFire.java | 50 +++-- .../game/games/skywars/kits/KitIce.java | 22 ++- .../game/games/skywars/kits/KitMetal.java | 24 +-- .../skywars/kits}/perks/PerkDirtCannon.java | 161 ++++----------- .../skywars/kits/perks/PerkFireBurst.java | 68 +++++++ .../skywars/kits/perks/PerkIceBridge.java | 79 ++++++++ .../skywars/kits}/perks/PerkMagnetism.java | 154 +++------------ .../skywars/kits/perks/PerkVoidSaver.java | 70 +++++++ .../games/skywars/kits/perks/SkywarsPerk.java | 77 ++++++++ .../skywars/modes/kits/KitElementalist.java | 20 +- .../skywars/module/ZombieGuardianModule.java | 28 ++- .../arcade/game/modules/MapCrumbleModule.java | 30 ++- .../game/modules/chest/ChestLootModule.java | 23 +++ .../game/modules/chest/ChestLootPool.java | 39 ++-- .../game/modules/generator/Generator.java | 7 +- .../modules/generator/GeneratorModule.java | 38 +++- .../game/arcade/kit/perks/PerkFireBurst.java | 146 -------------- .../game/arcade/kit/perks/PerkIceBridge.java | 184 ------------------ .../game/arcade/kit/perks/PerkKnockback.java | 49 ++--- .../game/arcade/kit/perks/PerkVoidSaver.java | 138 ------------- 24 files changed, 691 insertions(+), 983 deletions(-) rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/{kit => game/games/skywars/kits}/perks/PerkDirtCannon.java (55%) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkFireBurst.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkIceBridge.java rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/{kit => game/games/skywars/kits}/perks/PerkMagnetism.java (54%) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkVoidSaver.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/SkywarsPerk.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFireBurst.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkIceBridge.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkVoidSaver.java 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 4338bb0df..3cfbb5831 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -90,8 +90,6 @@ import nautilus.game.arcade.game.games.skyfall.SoloSkyfall; import nautilus.game.arcade.game.games.skyfall.TeamSkyfall; import nautilus.game.arcade.game.games.skywars.SoloSkywars; import nautilus.game.arcade.game.games.skywars.TeamSkywars; -import nautilus.game.arcade.game.games.skywars.modes.Elementalist; -import nautilus.game.arcade.game.games.skywars.modes.OverpoweredSkywars; import nautilus.game.arcade.game.games.skywars.modes.SkySmash; import nautilus.game.arcade.game.games.skywars.modes.UHCSkywars; import nautilus.game.arcade.game.games.smash.SoloSuperSmash; @@ -276,11 +274,9 @@ public enum GameType new GameMode(OverpoweredGladiators.class, GameType.Gladiators, "OP Gladiators"), new GameMode(ChampionsGladiators.class, GameType.Gladiators, "Champions Gladiators"), new GameMode(SmashGladiators.class, GameType.Gladiators, "Smash Gladiators"), - new GameMode(OverpoweredSkywars.class, GameType.Skywars, "OP Skywars"), new GameMode(UHCSkywars.class, GameType.Skywars, "UHC Skywars"), new GameMode(SkySmash.class, GameType.Skywars, "Sky Smash"), - new GameMode(Elementalist.class, GameType.Skywars, "Elementalist"), - new GameMode(TeamBuild.class, GameType.Build, "Team Master Builders"), + new GameMode(TeamBuild.class, GameType.Build, "Team Master Builders"), new GameMode(DukesOfDecoration.class, GameType.Build, "Dukes Of Decoration"), new GameMode(GodBattles.class, GameType.UHC, "God Battles"), new GameMode(BloodDiamonds.class, GameType.UHC, "Blood Diamonds"), diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/Skywars.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/Skywars.java index 82da5aa9a..b69527e68 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/Skywars.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/Skywars.java @@ -7,6 +7,7 @@ import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.enchantments.Enchantment; @@ -24,11 +25,13 @@ import org.bukkit.event.block.LeavesDecayEvent; import org.bukkit.event.enchantment.EnchantItemEvent; import org.bukkit.inventory.ItemStack; +import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilServer; import mineplex.core.explosion.ExplosionEvent; import mineplex.core.itemstack.EnchantedBookBuilder; import mineplex.core.recharge.Recharge; @@ -64,7 +67,7 @@ public abstract class Skywars extends Game { // ./parse 19 30 56 - private long _crumbleTime = 150000; + private static final long CRUMBLE_TIME = TimeUnit.SECONDS.toMillis(100); private OreHider _oreHider; @@ -137,15 +140,23 @@ public abstract class Skywars extends Game new EXPForKillsModule() .register(this); + + manager.GetCreature().SetDisableCustomDrops(true); } @Override public void ParseData() { - parseCreatePlayerWebs(); - new MapCrumbleModule() - .setEnabled(true) + .setEnableAfter(CRUMBLE_TIME, () -> + { + Announce(C.cGreenB + "The world begins to crumble...", false); + + for (Player player : UtilServer.getPlayersCollection()) + { + player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 1, 1); + } + }) .register(this); new ZombieGuardianModule() @@ -182,7 +193,7 @@ public abstract class Skywars extends Game setupLoot(); } - protected void setupLoot() + private void setupLoot() { new ChestLootModule() .registerChestType("Island", WorldData.GetDataLocs("BROWN"), @@ -355,6 +366,7 @@ public abstract class Skywars extends Game .addItem(new ItemStack(Material.LAVA_BUCKET), 80) .addItem(new ItemStack(Material.WATER_BUCKET)) .addItem(new ItemStack(Material.ENDER_PEARL), 1, 2) + .addItem(new ItemStack(Material.MUSHROOM_SOUP)) .setAmountsPerChest(1, 2) .setProbability(0.8), @@ -377,46 +389,6 @@ public abstract class Skywars extends Game .build(); } - private void parseCreatePlayerWebs() - { - // Store which chests are closest to which spawn - NautHashMap> islandWebs = new NautHashMap>(); - - // Allocate chests to their nearest spawn point - for (Location webLoc : WorldData.GetCustomLocs("30")) - { - // Gets the spawn point closest to the current chest - Location closestSpawn = UtilAlg.findClosest(webLoc, GetTeamList().get(0).GetSpawns()); - - if (UtilMath.offset2d(webLoc, closestSpawn) > 8) - continue; - - // Ensure the list exists - if (!islandWebs.containsKey(closestSpawn)) - islandWebs.put(closestSpawn, new ArrayList()); - - // Add this chest location to the spawn - islandWebs.get(closestSpawn).add(webLoc); - } - - // Create 2 Webs - for (ArrayList webs : islandWebs.values()) - { - for (int i = 0; i < 2; i++) - { - if (!webs.isEmpty()) - { - webs.remove(UtilAlg.Random(webs)); - } - } - - for (Location loc : webs) - { - loc.getBlock().setType(Material.AIR); - } - } - } - @EventHandler public void informLeapCooldown(GameStateChangeEvent event) { @@ -425,7 +397,7 @@ public abstract class Skywars extends Game return; } - String message = F.main("Game", "Your " + F.skill("Leap") + " is on a 30 second cooldown."); + String message = F.main("Game", "Your " + F.skill("Leap") + " is on a " + F.time("20 second") + " cooldown."); for (Player player : GetPlayers(true)) { @@ -434,7 +406,7 @@ public abstract class Skywars extends Game if (kit instanceof KitAir || kit instanceof KitElementalist) { player.sendMessage(message); - Recharge.Instance.use(player, "Leap", 30000, true, false); + Recharge.Instance.use(player, "Leap", 20000, true, false); } } } @@ -510,25 +482,25 @@ public abstract class Skywars extends Game } @EventHandler - public void onBlockBurn(BlockBurnEvent event) + public void blockBurn(BlockBurnEvent event) { event.setCancelled(true); } @EventHandler - public void onBlockDecay(LeavesDecayEvent event) + public void blockDecay(LeavesDecayEvent event) { event.setCancelled(true); } @EventHandler - public void onBlockFade(BlockFadeEvent event) + public void blockFade(BlockFadeEvent event) { event.setCancelled(true); } @EventHandler - public void onBlockSpread(BlockSpreadEvent event) + public void blockSpread(BlockSpreadEvent event) { event.setCancelled(true); } @@ -558,33 +530,30 @@ public abstract class Skywars extends Game } @EventHandler(priority = EventPriority.MONITOR) - public void onBlockBreakBonusDrops(BlockBreakEvent event) + public void blockBreakBonusDrops(BlockBreakEvent event) { event.setExpToDrop(0); Block block = event.getBlock(); + ItemStack toDrop = null; - if (block.getType() == Material.WEB) + switch (block.getType()) { - event.setCancelled(true); - block.setType(Material.AIR); - - for (int i = 0; i < 1 + UtilMath.r(2); i++) - block.getWorld().dropItemNaturally(block.getLocation().add(0.5, 0.5, 0.5), new ItemStack(Material.STRING)); + case WEB: + toDrop = new ItemStack(Material.STRING, 1 + UtilMath.r(2)); + break; + case GRAVEL: + toDrop = new ItemStack(Material.FLINT, 1 + UtilMath.r(3)); + break; + case IRON_ORE: + toDrop = new ItemStack(Material.IRON_INGOT); + break; } - else if (block.getType() == Material.GRAVEL) - { - event.setCancelled(true); - block.setType(Material.AIR); - for (int i = 0; i < 1 + UtilMath.r(3); i++) - block.getWorld().dropItemNaturally(block.getLocation().add(0.5, 0.5, 0.5), new ItemStack(Material.FLINT)); - } - else if (block.getType() == Material.IRON_ORE) + if (toDrop != null) { event.setCancelled(true); - block.setType(Material.AIR); - block.getWorld().dropItemNaturally(block.getLocation().add(0.5, 0.5, 0.5), new ItemStack(Material.IRON_INGOT)); + block.breakNaturally(toDrop); } } @@ -609,73 +578,33 @@ public abstract class Skywars extends Game // } @EventHandler - public void onBlockBreakTNTSpawner(BlockBreakEvent event) - { - Material material = event.getBlock().getType(); - if (material == Material.IRON_BLOCK || material == Material.REDSTONE_BLOCK) - { - event.setCancelled(true); - } - } - - @EventHandler - public void onCustomDamageToLevel(CustomDamageEvent event) + public void projectileDamage(CustomDamageEvent event) { event.SetDamageToLevel(false); - } - //TODO REIMPLEMENT -// @EventHandler -// public void onEntityDeathMobLoot(EntityDeathEvent event) -// { -// // Zombie Loot -// if (event.getEntity() instanceof Zombie && _zombies.containsKey((Zombie) event.getEntity())) -// { -// event.getDrops().clear(); -// -// double r = Math.random(); -// -// if (r > 0.80) -// event.getDrops().add(_middleArmor.getLoot()); -// else if (r > 0.60) -// event.getDrops().add(_middleTool.getLoot()); -// else if (r > 0.40) -// event.getDrops().add(_middleProjectile.getLoot()); -// else -// event.getDrops().add(_middleFood.getLoot()); -// } -// // Chicken Loot -// else if (event.getEntity() instanceof Chicken) -// { -// event.getDrops().clear(); -// -// event.getDrops().add(new ItemStack(Material.FEATHER, 1 + UtilMath.r(4))); -// } -// } - - @EventHandler - public void onCustomDamageProjectile(CustomDamageEvent event) - { - if (event.GetProjectile() == null) + if (!IsLive() || event.GetProjectile() == null) { return; } - if (event.GetProjectile() instanceof Egg || event.GetProjectile() instanceof Snowball) + boolean egg = event.GetProjectile() instanceof Egg; + boolean snowball = event.GetProjectile() instanceof Snowball; + + if (egg || snowball) { - event.AddMod(event.GetDamagerPlayer(true).getName(), (event.GetProjectile() instanceof Egg ? "Egg" : "Snowball"), 0.5, true); + event.AddMod(event.GetDamagerPlayer(true).getName(), (egg ? "Egg" : "Snowball"), 0.5, true); } } @EventHandler - public void onExplosion(ExplosionEvent event) + public void explosion(ExplosionEvent event) { _oreHider.Explosion(event); event.GetBlocks().removeIf(block -> block.getType() == Material.CHEST || block.getType() == Material.ANVIL); } @EventHandler - public void onBlockBreakOreReveal(BlockBreakEvent event) + public void blockBreakOreReveal(BlockBreakEvent event) { _oreHider.BlockBreak(event); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitAir.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitAir.java index 2722c0a8f..d5e7db031 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitAir.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitAir.java @@ -3,24 +3,28 @@ package nautilus.game.arcade.game.games.skywars.kits; import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.ProgressingKit; import nautilus.game.arcade.kit.perks.PerkDoubleJump; -import nautilus.game.arcade.kit.perks.PerkVoidSaver; +import nautilus.game.arcade.game.games.skywars.kits.perks.PerkVoidSaver; public class KitAir extends ProgressingKit { private static final String DOUBLE_JUMP = "Leap"; - - private static final String[] DESCRIPTION = { - "Start with " + C.cGreen + "Wood Sword" + C.cGray + " and " + C.cGreen + "Eye of Ender", + + private static final String[] DESCRIPTION = { + "Start with " + C.cGreen + "Wood Sword" + C.cGray + " and " + C.cGreen + "Eye of Ender", "", "Right Click " + C.cGreen + "Eye of Ender" + C.cWhite + " to teleport back to your", "last safe location", @@ -28,36 +32,40 @@ public class KitAir extends ProgressingKit "", C.cYellow + "Tap Jump Twice" + C.cWhite + " to " + C.cGreen + DOUBLE_JUMP, }; - + + private static final ItemStack SKILL_ITEM = new ItemBuilder(Material.EYE_OF_ENDER) + .setTitle(C.cGreen + "Eye of Ender") + .build(); + private static final Perk[][] PERKS = { { - new PerkVoidSaver(), - new PerkDoubleJump(DOUBLE_JUMP, 1, 1, true, 30000, true) + new PerkVoidSaver(SKILL_ITEM), + new PerkDoubleJump(DOUBLE_JUMP, 1, 1, true, 25000, true) }, { - new PerkVoidSaver(), - new PerkDoubleJump(DOUBLE_JUMP, 1, 1, true, 29000, true) + new PerkVoidSaver(SKILL_ITEM), + new PerkDoubleJump(DOUBLE_JUMP, 1, 1, true, 24000, true) }, { - new PerkVoidSaver(), - new PerkDoubleJump(DOUBLE_JUMP, 1.1, 1, true, 29000, true) + new PerkVoidSaver(SKILL_ITEM), + new PerkDoubleJump(DOUBLE_JUMP, 1.1, 1, true, 23000, true) }, { - new PerkVoidSaver(), - new PerkDoubleJump(DOUBLE_JUMP, 1.1, 1, true, 28000, true) + new PerkVoidSaver(SKILL_ITEM), + new PerkDoubleJump(DOUBLE_JUMP, 1.1, 1, true, 22000, true) }, { - new PerkVoidSaver(), - new PerkDoubleJump(DOUBLE_JUMP, 1.2, 1, true, 28000, true) + new PerkVoidSaver(SKILL_ITEM), + new PerkDoubleJump(DOUBLE_JUMP, 1.2, 1, true, 21000, true) }, { - new PerkVoidSaver(), - new PerkDoubleJump(DOUBLE_JUMP, 1.2, 1, true, 27000, true) + new PerkVoidSaver(SKILL_ITEM), + new PerkDoubleJump(DOUBLE_JUMP, 1.2, 1, true, 20000, true) }, }; - - private static final String[][] UPGRADE_DETAILS = + + private static final String[][] UPGRADE_DETAILS = { { reduceCooldown(DOUBLE_JUMP, 1) @@ -76,7 +84,7 @@ public class KitAir extends ProgressingKit }, }; - private static final ItemStack[] PLAYER_ITEMS = { new ItemStack(Material.WOOD_SWORD), new ItemBuilder(Material.EYE_OF_ENDER).setTitle(C.cGreen + "Eye of Ender").build() }; + private static final ItemStack[] PLAYER_ITEMS = { new ItemStack(Material.WOOD_SWORD), SKILL_ITEM }; private static final ItemStack IN_HAND = new ItemStack(Material.EYE_OF_ENDER); @@ -90,11 +98,27 @@ public class KitAir extends ProgressingKit { player.getInventory().addItem(PLAYER_ITEMS); } - + @Override public boolean showUpgrades() { return true; } - + + @EventHandler + public void fallDamage(CustomDamageEvent event) + { + if (event.GetCause() != DamageCause.FALL) + { + return; + } + + Player player = event.GetDamageePlayer(); + + if (HasKit(player)) + { + event.SetCancelled("Air Kit Fall Damage"); + } + } + } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitEarth.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitEarth.java index e0be58991..c9d4a28b3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitEarth.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitEarth.java @@ -9,12 +9,13 @@ import mineplex.core.achievement.Achievement; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; +import mineplex.core.itemstack.ItemBuilder; + import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.skywars.kits.perks.PerkDirtCannon; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.ProgressingKit; -import nautilus.game.arcade.kit.perks.PerkDirtCannon; -import nautilus.game.arcade.kit.perks.PerkKnockback; public class KitEarth extends ProgressingKit { @@ -27,35 +28,34 @@ public class KitEarth extends ProgressingKit C.cGreen + UtilTime.convertString(20000, 0, TimeUnit.SECONDS) + C.cWhite + ".", "You take " + C.cGreen + "25" + C.cWhite + "% knockback while on the ground." }; - + + private static final ItemStack SKILL_ITEM = new ItemBuilder(Material.DIRT) + .setTitle(C.cGreen + "Throwable Dirt") + .setGlow(true) + .build(); + private static final String DIRT_CANNON = "Throwable Dirt"; private static final String KNOCKBACK = "Knockback"; private static final Perk[][] PERKS = { { - new PerkDirtCannon(1), - new PerkKnockback(0.75, true) + new PerkDirtCannon(SKILL_ITEM, 1), }, { - new PerkDirtCannon(1.1), - new PerkKnockback(0.75, true) + new PerkDirtCannon(SKILL_ITEM, 1.1), }, { - new PerkDirtCannon(1.2), - new PerkKnockback(0.75, true) + new PerkDirtCannon(SKILL_ITEM, 1.2), }, { - new PerkDirtCannon(1.3), - new PerkKnockback(0.75, true) + new PerkDirtCannon(SKILL_ITEM, 1.3), }, { - new PerkDirtCannon(1.4), - new PerkKnockback(0.75, true) + new PerkDirtCannon(SKILL_ITEM, 1.4), }, { - new PerkDirtCannon(1.5), - new PerkKnockback(0.75, true) + new PerkDirtCannon(SKILL_ITEM, 1.5), }, }; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitFire.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitFire.java index 06360a85a..6a63256a9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitFire.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitFire.java @@ -4,54 +4,61 @@ import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.itemstack.ItemBuilder; + import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.games.skywars.kits.perks.PerkFireBurst; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.ProgressingKit; -import nautilus.game.arcade.kit.perks.PerkFireBurst; public class KitFire extends ProgressingKit { - private static final String[] DESCRIPTION = { - "Start with " + C.cGreen + "Wood Sword" + C.cGray + " and " + C.cGreen + "Blaze Rod", + private static final String[] DESCRIPTION = { + "Start with " + C.cGreen + "Wood Sword" + C.cGray + " and " + C.cGreen + "Blaze Rod", "", C.cYellow + "Right Click" + C.cWhite + " with Blaze Rod to use " + C.cGreen + "Fire Burst", - "Sends out a pulse of fire that deals " + C.cGreen + 5 + C.cWhite + " damage to", - "all players within " + C.cGreen + 4 + C.cWhite + " blocks.", - "Cooldown " + C.cGreen + UtilTime.convertString(40000, 0, TimeUnit.SECONDS) + C.cWhite + "." + "Sends out a pulse of fire that deals " + C.cGreen + 5 + C.cWhite + " damage to", + "all players within " + C.cGreen + 4 + C.cWhite + " blocks.", + "Cooldown " + C.cGreen + UtilTime.convertString(30000, 0, TimeUnit.SECONDS) + C.cWhite + "." }; - + + private static final ItemStack SKILL_ITEM = new ItemBuilder(Material.BLAZE_ROD) + .setTitle(C.cGreen + "Fire Burst") + .build(); + private static final String FIRE_BURST = "Fire Burst"; - + private static final Perk[][] PERKS = { { - new PerkFireBurst(40000, 4, 5) + new PerkFireBurst(SKILL_ITEM, 30000, 6, 6) }, { - new PerkFireBurst(39000, 4, 5) + new PerkFireBurst(SKILL_ITEM, 29000, 6, 6) }, { - new PerkFireBurst(38000, 4, 5) + new PerkFireBurst(SKILL_ITEM, 28000, 6, 6) }, { - new PerkFireBurst(37000, 4, 6) + new PerkFireBurst(SKILL_ITEM, 27000, 6, 6) }, { - new PerkFireBurst(36000, 4, 6) + new PerkFireBurst(SKILL_ITEM, 26000, 6, 6) }, { - new PerkFireBurst(35000, 4, 6) + new PerkFireBurst(SKILL_ITEM, 25000, 6, 6) }, }; - - private static final String[][] UPGRADE_DETAILS = + + private static final String[][] UPGRADE_DETAILS = { { reduceCooldown(FIRE_BURST, 1) @@ -61,7 +68,6 @@ public class KitFire extends ProgressingKit }, { reduceCooldown(FIRE_BURST, 1), - increase(FIRE_BURST, "Damage", 25) }, { reduceCooldown(FIRE_BURST, 1) @@ -72,26 +78,28 @@ public class KitFire extends ProgressingKit }; - private static final ItemStack[] PLAYER_ITEMS = { new ItemStack(Material.WOOD_SWORD), new ItemBuilder(Material.BLAZE_ROD).setTitle(C.cGreen + "Fire Burst").build() }; + private static final ItemStack[] PLAYER_ITEMS = { new ItemStack(Material.WOOD_SWORD), SKILL_ITEM }; private static final ItemStack IN_HAND = new ItemStack(Material.BLAZE_ROD); + private static final PotionEffect FIRE_RESISTANCE = new PotionEffect(PotionEffectType.FIRE_RESISTANCE, Integer.MAX_VALUE, 0, false, false); + public KitFire(ArcadeManager manager) { super(manager, "Fire", "skywarsminer", KitAvailability.Gem, 4000, DESCRIPTION, PERKS, UPGRADE_DETAILS, EntityType.ZOMBIE, IN_HAND); - } @Override public void GiveItems(Player player) { player.getInventory().addItem(PLAYER_ITEMS); + player.addPotionEffect(FIRE_RESISTANCE); } - + @Override public boolean showUpgrades() { return true; } - + } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitIce.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitIce.java index c565ed750..eb4b9c39d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitIce.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitIce.java @@ -13,7 +13,7 @@ import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.ProgressingKit; -import nautilus.game.arcade.kit.perks.PerkIceBridge; +import nautilus.game.arcade.game.games.skywars.kits.perks.PerkIceBridge; public class KitIce extends ProgressingKit { @@ -25,28 +25,32 @@ public class KitIce extends ProgressingKit "Lasts for " + C.cGreen + UtilTime.convertString(4000, 0, TimeUnit.SECONDS) + C.cWhite + ".", "Cooldown " + C.cGreen + UtilTime.convertString(30000, 0, TimeUnit.SECONDS) + C.cWhite + "." }; - + + private static final ItemStack SKILL_ITEM = new ItemBuilder(Material.ICE) + .setTitle(C.cGreen + "Ice Bridge") + .build(); + private static final String ICE_BRIDGE = "Ice Bridge"; private static final Perk[][] PERKS = { { - new PerkIceBridge(30000, 4000) + new PerkIceBridge(SKILL_ITEM, 30000, 4000) }, { - new PerkIceBridge(29000, 4000) + new PerkIceBridge(SKILL_ITEM, 29000, 4000) }, { - new PerkIceBridge(28000, 5000) + new PerkIceBridge(SKILL_ITEM, 28000, 5000) }, { - new PerkIceBridge(27000, 5000) + new PerkIceBridge(SKILL_ITEM, 27000, 5000) }, { - new PerkIceBridge(26000, 6000) + new PerkIceBridge(SKILL_ITEM, 26000, 6000) }, { - new PerkIceBridge(25000, 6000) + new PerkIceBridge(SKILL_ITEM, 25000, 6000) }, }; @@ -71,7 +75,7 @@ public class KitIce extends ProgressingKit }, }; - private static final ItemStack[] PLAYER_ITEMS = { new ItemStack(Material.WOOD_SWORD), new ItemBuilder(Material.ICE).setTitle(C.cGreen + "Ice Bridge").build() }; + private static final ItemStack[] PLAYER_ITEMS = { new ItemStack(Material.WOOD_SWORD), SKILL_ITEM }; private static final ItemStack IN_HAND = new ItemStack(Material.ICE); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitMetal.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitMetal.java index a5e4be83e..abe123d8c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitMetal.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/KitMetal.java @@ -13,7 +13,7 @@ import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.ProgressingKit; -import nautilus.game.arcade.kit.perks.PerkMagnetism; +import nautilus.game.arcade.game.games.skywars.kits.perks.PerkMagnetism; public class KitMetal extends ProgressingKit { @@ -26,36 +26,38 @@ public class KitMetal extends ProgressingKit C.cGreen + C.Italics + "Metal" + C.cGray + C.Italics + " means Gold/Chainmail/Iron armor.", "", "Any player in your line of sight is drawn to you.", - "The velocity that they are drawn towards you is", - "based on how much metal armor they are wearing", "Cooldown " + C.cGreen + UtilTime.convertString(15000, 0, TimeUnit.SECONDS) + C.cWhite + ".", "", "For each piece of metal armor you wear you gain", "an additional " + C.cGreen + "0.5" + C.cWhite + " hearts.", }; - + + private static final ItemStack SKILL_ITEM = new ItemBuilder(Material.REDSTONE_COMPARATOR) + .setTitle(C.cGreen + "Magnet") + .build(); + private static final String MAGNET = "Magnet"; private static final String POWER = "Power"; private static final Perk[][] PERKS = { { - new PerkMagnetism(15000, 10, 1) + new PerkMagnetism(SKILL_ITEM, 15000, 12, 1) }, { - new PerkMagnetism(15000, 10, 1.1) + new PerkMagnetism(SKILL_ITEM, 15000, 12, 1.1) }, { - new PerkMagnetism(15000, 10, 1.2) + new PerkMagnetism(SKILL_ITEM, 15000, 12, 1.2) }, { - new PerkMagnetism(15000, 10, 1.3) + new PerkMagnetism(SKILL_ITEM, 15000, 12, 1.3) }, { - new PerkMagnetism(15000, 10, 1.4) + new PerkMagnetism(SKILL_ITEM, 15000, 12, 1.4) }, { - new PerkMagnetism(15000, 10, 1.5) + new PerkMagnetism(SKILL_ITEM, 15000, 12, 1.5) }, }; @@ -78,7 +80,7 @@ public class KitMetal extends ProgressingKit }, }; - private static final ItemStack[] PLAYER_ITEMS = { new ItemStack(Material.WOOD_SWORD), new ItemStack(Material.STONE_PICKAXE), new ItemBuilder(Material.REDSTONE_COMPARATOR).setTitle(C.cGreen + "Magnet").build() }; + private static final ItemStack[] PLAYER_ITEMS = { new ItemStack(Material.WOOD_SWORD), new ItemStack(Material.STONE_PICKAXE), SKILL_ITEM }; private static final ItemStack IN_HAND = new ItemStack(Material.REDSTONE_COMPARATOR); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDirtCannon.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkDirtCannon.java similarity index 55% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDirtCannon.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkDirtCannon.java index ffb4cbb54..961d7c733 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDirtCannon.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkDirtCannon.java @@ -1,6 +1,4 @@ -package nautilus.game.arcade.kit.perks; - -import java.util.Iterator; +package nautilus.game.arcade.game.games.skywars.kits.perks; import org.bukkit.Material; import org.bukkit.block.Block; @@ -8,17 +6,11 @@ import org.bukkit.entity.FallingBlock; 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.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; -import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilTime; @@ -28,78 +20,57 @@ import mineplex.core.projectile.ProjectileUser; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.game.Game; -import nautilus.game.arcade.game.games.skywars.TeamSkywars; -import nautilus.game.arcade.kit.Perk; -public class PerkDirtCannon extends Perk implements IThrown +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.skywars.TeamSkywars; + +public class PerkDirtCannon extends SkywarsPerk implements IThrown { private static final int GIVE_DELAY = 20000; private static final int MAX_DIRT = 4; - private static final long COOLDOWN = 500; + private static final long COOLDOWN = 500; - private static final ItemStack DIRT_ITEM = new ItemBuilder(Material.DIRT).setTitle(C.cGreen + "Throwable Dirt").setGlow(true).build(); - private long _lastDirt; private double _targetKnockback; - - public PerkDirtCannon(double targetKnockback) + + public PerkDirtCannon(ItemStack itemStack, double targetKnockback) { - super("Throwable Dirt", new String[] { - }); + super("Throwable Dirt", itemStack); + _targetKnockback = targetKnockback; _lastDirt = 0; } - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) + @Override + public void onUseItem(Player player) { - if (event.getAction() != Action.RIGHT_CLICK_AIR) - { - return; - } - - Player player = event.getPlayer(); - - if (player.getItemInHand() == null) - { - return; - } - - if (!DIRT_ITEM.isSimilar(player.getItemInHand())) - { - return; - } - - if (!hasPerk(player)) - { - return; - } - if (!Recharge.Instance.use(player, GetName(), COOLDOWN, true, true)) { return; } - - int amount = player.getInventory().getItemInHand().getAmount() - 1; - - if (amount == 0) - { - player.getInventory().remove(DIRT_ITEM); - } - else - { - player.getItemInHand().setAmount(Math.min(MAX_DIRT - 1, amount)); - } - - @SuppressWarnings("deprecation") + + player.setItemInHand(UtilInv.decrement(player.getItemInHand())); + FallingBlock fallingBlock = player.getWorld().spawnFallingBlock(player.getEyeLocation().add(player.getLocation().getDirection()), Material.DIRT, (byte) 0); fallingBlock.setDropItem(false); fallingBlock.setVelocity(player.getLocation().getDirection().multiply(2)); Manager.GetProjectile().AddThrow(fallingBlock, player, this, -1, true, true, true, true, false, 1); } - + + @EventHandler + public void live(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Live) + { + return; + } + + _lastDirt = System.currentTimeMillis(); + } + @EventHandler public void onUpdate(UpdateEvent event) { @@ -107,7 +78,7 @@ public class PerkDirtCannon extends Perk implements IThrown { return; } - + if (UtilTime.elapsed(_lastDirt, GIVE_DELAY)) { for (Player player : Manager.GetGame().GetPlayers(true)) @@ -116,73 +87,23 @@ public class PerkDirtCannon extends Perk implements IThrown { continue; } - - player.getInventory().addItem(DIRT_ITEM); + + player.getInventory().addItem(_itemStack); } - + _lastDirt = System.currentTimeMillis(); } } - + @EventHandler public void onEntityChangeBlock(EntityChangeBlockEvent event) - { + { if (event.getBlock().getType() == Material.DIRT) { event.setCancelled(true); } } - - @EventHandler - public void onBlockPlace(BlockPlaceEvent event) - { - if (!hasPerk(event.getPlayer())) - { - return; - } - - if (DIRT_ITEM.isSimilar(event.getItemInHand())) - { - event.getPlayer().sendMessage(F.main("Game", "You cannot place your skill item.")); - event.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDropItem(PlayerDropItemEvent event) - { - if (!hasPerk(event.getPlayer())) - { - return; - } - - if (DIRT_ITEM.isSimilar(event.getItemDrop().getItemStack())) - { - event.getPlayer().sendMessage(F.main("Game", "You cannot drop this item.")); - event.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent event) - { - if (!hasPerk(event.getEntity())) - { - return; - } - - Iterator iterator = event.getDrops().iterator(); - while (iterator.hasNext()) - { - ItemStack itemStack = iterator.next(); - if (DIRT_ITEM.isSimilar(itemStack)) - { - iterator.remove(); - } - } - } - @Override public void Collide(LivingEntity target, Block block, ProjectileUser data) { @@ -190,19 +111,19 @@ public class PerkDirtCannon extends Perk implements IThrown { return; } - + if (Manager.GetGame() instanceof TeamSkywars && target instanceof Player && data.getThrower() instanceof Player) { Game game = Manager.GetGame(); - + if (game.GetTeam((Player) target).equals(game.GetTeam((Player) data.getThrower())) || !game.IsAlive(target)) { return; } } - - Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.CUSTOM, 2, false, true, true, data.getThrower().getName(), GetName()); - + + Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.CUSTOM, 1, false, true, true, data.getThrower().getName(), GetName()); + UtilAction.velocity(target, data.getThrown().getVelocity().normalize().setY(0.5).multiply(_targetKnockback)); } @@ -217,7 +138,7 @@ public class PerkDirtCannon extends Perk implements IThrown { } - + @Override public void ChunkUnload(ProjectileUser data) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkFireBurst.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkFireBurst.java new file mode 100644 index 000000000..e8d4ac69b --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkFireBurst.java @@ -0,0 +1,68 @@ +package nautilus.game.arcade.game.games.skywars.kits.perks; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.inventory.ItemStack; + +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.recharge.Recharge; + +public class PerkFireBurst extends SkywarsPerk +{ + + private static final int FIRE_TICKS = 100; + private static final double LOCATION_Y_MODIFIER = 1; + + private final long _cooldown; + private final double _range, _damage; + + public PerkFireBurst(ItemStack itemStack, long cooldown, double range, double damage) + { + super("Fire Burst", itemStack); + + _cooldown = cooldown; + _range = range; + _damage = damage; + } + + @Override + public void onUseItem(Player player) + { + if (!Recharge.Instance.use(player, GetName(), _cooldown, true, true)) + { + return; + } + + Location location = player.getLocation().add(0, LOCATION_Y_MODIFIER, 0); + + for (Player other : UtilPlayer.getNearby(location, _range, true)) + { + if (other.equals(player)) + { + continue; + } + + other.setFireTicks(FIRE_TICKS); + Manager.GetDamage().NewDamageEvent(other, player, null, DamageCause.CUSTOM, _damage, true, true, true, player.getName(), GetName()); + } + + for (double radius = 0; radius < _range; radius += 0.5) + { + for (double theta = 0; theta < 2 * Math.PI; theta += Math.PI / 20) + { + double x = radius * Math.cos(theta); + double z = radius * Math.sin(theta); + + location.add(x, 0, z); + + UtilParticle.PlayParticleToAll(ParticleType.FLAME, location, 0, 0, 0, 0.01F, 1, ViewDist.NORMAL); + + location.subtract(x, 0, z); + } + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkIceBridge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkIceBridge.java new file mode 100644 index 000000000..e88443db4 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkIceBridge.java @@ -0,0 +1,79 @@ +package nautilus.game.arcade.game.games.skywars.kits.perks; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.bukkit.Effect; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +import nautilus.game.arcade.kit.perks.data.IcePathData; + +public class PerkIceBridge extends SkywarsPerk +{ + + private final Set _data = new HashSet<>(); + private final long _cooldown, _bridgeUpTime; + + public PerkIceBridge(ItemStack itemStack, long cooldown, long bridgeUpTime) + { + super("Ice Bridge", itemStack); + + _cooldown = cooldown; + _bridgeUpTime = bridgeUpTime; + } + + @Override + public void onUseItem(Player player) + { + if (!Recharge.Instance.use(player, GetName(), _cooldown, true, true)) + { + return; + } + + player.teleport(player.getLocation().add(0, 1, 0)); + UtilAction.velocity(player, new Vector(0, 0.5, 0)); + + _data.add(new IcePathData(player)); + + // Inform + UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + ".")); + } + + @EventHandler + public void onUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + Iterator dataIterator = _data.iterator(); + + while (dataIterator.hasNext()) + { + IcePathData data = dataIterator.next(); + + Block block = data.GetNextBlock(); + + if (block == null) + { + dataIterator.remove(); + } + else + { + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, 79); + Manager.GetBlockRestore().add(block, 79, (byte) 0, _bridgeUpTime); + } + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagnetism.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkMagnetism.java similarity index 54% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagnetism.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkMagnetism.java index fe78c929b..a1b906b0d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagnetism.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkMagnetism.java @@ -1,21 +1,12 @@ -package nautilus.game.arcade.kit.perks; - -import java.util.Iterator; +package nautilus.game.arcade.game.games.skywars.kits.perks; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; -import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; @@ -31,72 +22,30 @@ import mineplex.core.common.util.particles.effects.LineParticle; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.games.skywars.TeamSkywars; -import nautilus.game.arcade.kit.Perk; -public class PerkMagnetism extends Perk +public class PerkMagnetism extends SkywarsPerk { - private long _cooldown; - private int _range; - private double _magnituideFactor; + private final long _cooldown; + private final int _range; + private final double _magnituideFactor; - public PerkMagnetism(long cooldown, int range, double magnitudeFactor) + public PerkMagnetism(ItemStack itemStack, long cooldown, int range, double magnitudeFactor) { - super("Magnetism", new String[] {}); + super("Magnetism", itemStack); _cooldown = cooldown; _range = range; _magnituideFactor = magnitudeFactor; } - @EventHandler(priority = EventPriority.HIGHEST) - public void onUpdate(UpdateEvent event) + @Override + public void onUseItem(Player player) { - if (event.getType() != UpdateType.SEC) - { - return; - } - - for (Player player : UtilServer.getPlayers()) - { - if (!hasPerk(player) || UtilPlayer.isSpectator(player)) - { - continue; - } - - int magnitude = getAmountOfMetalArmor(player); - - player.setMaxHealth(20 + magnitude); - } - } - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) - { - if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) - { - return; - } - - Player player = event.getPlayer(); - - if (player.getItemInHand() == null) - { - return; - } - - if (player.getItemInHand().getType() != Material.REDSTONE_COMPARATOR) - { - return; - } - - if (!hasPerk(player)) - { - return; - } - Player target = UtilPlayer.getPlayerInSight(player, _range, true); if (target == null) @@ -142,36 +91,24 @@ public class PerkMagnetism extends Perk UtilAction.velocity(target, vector.setY(Math.max(.6, vector.getY()))); } - @EventHandler - public void onPlayerPickupItem(PlayerPickupItemEvent event) + @EventHandler(priority = EventPriority.HIGHEST) + public void onUpdate(UpdateEvent event) { - if (!hasPerk(event.getPlayer())) + if (event.getType() != UpdateType.SEC) { return; } - ItemStack itemStack = event.getItem().getItemStack(); - - if (UtilItem.isDiamondProduct(itemStack) && UtilItem.isArmor(itemStack)) + for (Player player : UtilServer.getPlayers()) { - event.setCancelled(true); - } - } + if (!hasPerk(player) || UtilPlayer.isSpectator(player)) + { + continue; + } - @EventHandler - public void onInventoryClick(InventoryClickEvent event) - { - if (!hasPerk((Player) event.getWhoClicked())) - { - return; - } + int magnitude = getAmountOfMetalArmor(player); - ItemStack itemStack = event.getCurrentItem(); - - if (UtilItem.isDiamondProduct(itemStack) && UtilItem.isArmor(itemStack)) - { - event.getWhoClicked().sendMessage(F.main("Game", "You cannot equip diamond armor.")); - event.setCancelled(true); + player.setMaxHealth(20 + magnitude); } } @@ -192,57 +129,16 @@ public class PerkMagnetism extends Perk } @EventHandler - public void onBlockPlace(BlockPlaceEvent event) + public void damage(CustomDamageEvent event) { - Player player = event.getPlayer(); - ItemStack itemStack = player.getItemInHand(); + Player player = event.GetDamageePlayer(); - if (!hasPerk(player)) + if (player == null || !hasPerk(player)) { return; } - if (itemStack == null) - { - return; - } - - if (itemStack.getType() == Material.REDSTONE_COMPARATOR) - { - event.setCancelled(true); - player.sendMessage(F.main("Game", "You cannot place this item.")); - } - } - - @EventHandler - public void onPlayerDropItem(PlayerDropItemEvent event) - { - if (!hasPerk(event.getPlayer())) - { - return; - } - - if (event.getItemDrop().getItemStack().getType() == Material.REDSTONE_COMPARATOR) - { - event.getPlayer().sendMessage(F.main("Game", "You cannot drop this item.")); - event.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent event) - { - Iterator iterator = event.getDrops().iterator(); - - while (iterator.hasNext()) - { - ItemStack itemStack = iterator.next(); - - if (itemStack.getType() == Material.REDSTONE_COMPARATOR) - { - iterator.remove(); - } - } + event.AddKnockback(GetName(), -0.05 * getAmountOfMetalArmor(player)); } private int getAmountOfMetalArmor(Player player) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkVoidSaver.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkVoidSaver.java new file mode 100644 index 000000000..78060fccc --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/PerkVoidSaver.java @@ -0,0 +1,70 @@ +package nautilus.game.arcade.game.games.skywars.kits.perks; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class PerkVoidSaver extends SkywarsPerk +{ + + private final Map _safeLocations = new HashMap<>(); + + public PerkVoidSaver(ItemStack itemStack) + { + super("Void Saver", itemStack); + } + + @Override + public void onUseItem(Player player) + { + Location location = _safeLocations.get(player); + + if (location == null) + { + return; + } + + player.teleport(location.add(0, 2, 0)); + player.setFallDistance(0); + player.getInventory().remove(Material.EYE_OF_ENDER); + player.sendMessage(F.main("Game", "You used your safe teleport.")); + player.playSound(player.getLocation(), Sound.ENDERMAN_TELEPORT, 1, 0); + UtilParticle.PlayParticleToAll(ParticleType.WITCH_MAGIC, player.getEyeLocation(), 0.5F, 0.5F, 0.5F, 0.5F, 10, ViewDist.NORMAL); + } + + @EventHandler + public void onUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + { + return; + } + + for (Player player : Manager.GetGame().GetPlayers(true)) + { + if (!hasPerk(player) || !UtilEnt.isGrounded(player)) + { + continue; + } + + _safeLocations.put(player, player.getLocation()); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/SkywarsPerk.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/SkywarsPerk.java new file mode 100644 index 000000000..e56b31de0 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/kits/perks/SkywarsPerk.java @@ -0,0 +1,77 @@ +package nautilus.game.arcade.game.games.skywars.kits.perks; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilEvent.ActionType; + +import nautilus.game.arcade.kit.Perk; + +public abstract class SkywarsPerk extends Perk +{ + + final ItemStack _itemStack; + + SkywarsPerk(String name, ItemStack itemStack) + { + super(name); + + _itemStack = itemStack; + } + + public abstract void onUseItem(Player player); + + @EventHandler(priority = EventPriority.HIGH) + public void playerInteract(PlayerInteractEvent event) + { + if (event.isCancelled() || !UtilEvent.isAction(event, ActionType.R)) + { + return; + } + + Player player = event.getPlayer(); + ItemStack itemStack = player.getItemInHand(); + + if (!hasPerk(player) || itemStack == null || !itemStack.isSimilar(_itemStack)) + { + return; + } + + onUseItem(player); + } + + @EventHandler + public void blockPlace(BlockPlaceEvent event) + { + if (_itemStack.isSimilar(event.getItemInHand())) + { + event.getPlayer().sendMessage(F.main("Game", "You cannot place your " + F.name("Skill Item") + ".")); + event.setCancelled(true); + } + } + + @EventHandler + public void playerDropItem(PlayerDropItemEvent event) + { + if (event.getItemDrop().getItemStack().isSimilar(_itemStack)) + { + event.getPlayer().sendMessage(F.main("Game", "You cannot drop your " + F.name("Skill Item") + ".")); + event.setCancelled(true); + } + } + + @EventHandler + public void playerDeath(PlayerDeathEvent event) + { + event.getDrops().removeIf(itemStack -> itemStack.isSimilar(_itemStack)); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/modes/kits/KitElementalist.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/modes/kits/KitElementalist.java index 8f63e93ab..b539be761 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/modes/kits/KitElementalist.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/modes/kits/KitElementalist.java @@ -10,18 +10,15 @@ import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.games.skywars.Skywars; +import nautilus.game.arcade.game.games.skywars.kits.perks.PerkDirtCannon; +import nautilus.game.arcade.game.games.skywars.kits.perks.PerkFireBurst; +import nautilus.game.arcade.game.games.skywars.kits.perks.PerkIceBridge; +import nautilus.game.arcade.game.games.skywars.kits.perks.PerkVoidSaver; import nautilus.game.arcade.game.games.skywars.modes.Elementalist; -import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.ProgressingKit; -import nautilus.game.arcade.kit.perks.PerkDirtCannon; import nautilus.game.arcade.kit.perks.PerkDoubleJump; -import nautilus.game.arcade.kit.perks.PerkFireBurst; -import nautilus.game.arcade.kit.perks.PerkIceBridge; -import nautilus.game.arcade.kit.perks.PerkKnockback; -import nautilus.game.arcade.kit.perks.PerkMagnetism; -import nautilus.game.arcade.kit.perks.PerkVoidSaver; /** * KitElementalist is a kit for the Brawl mode {@link Elementalist} which combines all {@link Skywars} kits @@ -39,12 +36,11 @@ public class KitElementalist extends ProgressingKit private static final Perk[] PERKS = { - new PerkVoidSaver(), + new PerkVoidSaver(null), new PerkDoubleJump(DOUBLE_JUMP, 1.2, 1, true, 27000, true), - new PerkDirtCannon(1.5), - new PerkKnockback(0.75, true), - new PerkFireBurst(35000, 4, 6), - new PerkIceBridge(25000, 6000), + new PerkDirtCannon(null, 1.5), + new PerkFireBurst(null,35000, 4, 6), + new PerkIceBridge(null, 25000, 6000), //new PerkMagnetism(15000, 10, 1.5) }; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/module/ZombieGuardianModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/module/ZombieGuardianModule.java index 7f804168f..3ff8b91f0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/module/ZombieGuardianModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skywars/module/ZombieGuardianModule.java @@ -7,10 +7,12 @@ import java.util.Map; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.entity.Entity; import org.bukkit.entity.Zombie; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityTargetLivingEntityEvent; import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.ItemStack; @@ -27,6 +29,7 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.game.modules.Module; +import nautilus.game.arcade.game.modules.chest.ChestLootModule; public class ZombieGuardianModule extends Module { @@ -152,6 +155,29 @@ public class ZombieGuardianModule extends Module return; } - event.SetCancelled("Zombie Blast Protection"); + event.AddMod("Negate", -event.GetDamage()); + event.AddMod("Blast Protection", 8); + event.SetIgnoreArmor(true); + } + + @EventHandler + public void zombieDeath(EntityDeathEvent event) + { + Entity entity = event.getEntity(); + + if (!_zombies.containsKey(entity)) + { + return; + } + + ChestLootModule lootModule = getGame().getModule(ChestLootModule.class); + ItemStack randomItem = lootModule.getRandomItem("Middle"); + + event.getDrops().clear(); + + if (randomItem != null) + { + event.getDrops().add(randomItem); + } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/MapCrumbleModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/MapCrumbleModule.java index 54ade2594..9671496cf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/MapCrumbleModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/MapCrumbleModule.java @@ -18,6 +18,7 @@ import org.bukkit.scheduler.BukkitRunnable; import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilTime; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -29,6 +30,8 @@ public class MapCrumbleModule extends Module private final Set _worldBlocks; private boolean _enabled; + private long _enableAfter; + private Runnable _onCrumble; private int _rate = 4; public MapCrumbleModule() @@ -91,19 +94,42 @@ public class MapCrumbleModule extends Module return _enabled; } + public MapCrumbleModule setEnableAfter(long enableAfter, Runnable onCrumble) + { + _enableAfter = enableAfter; + _onCrumble = onCrumble; + return this; + } + public MapCrumbleModule setRate(int rate) { _rate = rate; return this; } - public MapCrumbleModule addWorldBlock(Block block) + public long getTimeUntilCrumble() + { + return getGame().GetStateTime() + _enableAfter - System.currentTimeMillis(); + } + + private void addWorldBlock(Block block) { if (block.getWorld().equals(getGame().WorldData.World)) { _worldBlocks.add(block); } - return this; + } + + @EventHandler + public void crumbleStart(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC || !getGame().IsLive() || _enabled || !UtilTime.elapsed(getGame().GetStateTime(), _enableAfter)) + { + return; + } + + _enabled = true; + _onCrumble.run(); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/chest/ChestLootModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/chest/ChestLootModule.java index be691150a..64b79318e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/chest/ChestLootModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/chest/ChestLootModule.java @@ -22,6 +22,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.Arrays; @@ -241,6 +242,28 @@ public class ChestLootModule extends Module } } + public ItemStack getRandomItem(String chestTypeName) + { + for (ChestType chestType1 : _chests.keySet()) + { + if (!chestType1.Name.equals(chestTypeName)) + { + continue; + } + + ChestLootPool pool = UtilAlg.Random(chestType1.Pools); + + if (pool == null) + { + return null; + } + + return pool.getRandomItem(); + } + + return null; + } + private ChestMetadata getFromBlock(Block block) { Location blockLocation = block.getLocation(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/chest/ChestLootPool.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/chest/ChestLootPool.java index 7f21a807c..682485b6c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/chest/ChestLootPool.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/chest/ChestLootPool.java @@ -89,28 +89,33 @@ public class ChestLootPool for (int i = 0; i < UtilMath.rRange(_minimumPerChest, _maximumPerChest); i++) { int slot = UtilMath.r(inventory.getSize()); - ChestLootItem item = _items.generateRandom(); - - if (item == null) - { - continue; - } - - ItemStack itemStack = item.getItem(); - - if (_enchantments.elements() != null && Math.random() < _enchantmentRarity) - { - Entry enchantment = _enchantments.generateRandom(); - - itemStack.addUnsafeEnchantment(enchantment.getKey(), UtilMath.r(enchantment.getValue()) + 1); - } - - inventory.setItem(slot, itemStack); + inventory.setItem(slot, getRandomItem()); } chest.update(); } + public ItemStack getRandomItem() + { + ChestLootItem item = _items.generateRandom(); + + if (item == null) + { + return null; + } + + ItemStack itemStack = item.getItem(); + + if (_enchantments.elements() != null && Math.random() < _enchantmentRarity) + { + Entry enchantment = _enchantments.generateRandom(); + + itemStack.addUnsafeEnchantment(enchantment.getKey(), UtilMath.r(enchantment.getValue()) + 1); + } + + return itemStack; + } + public double getProbability() { return _rarity; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/generator/Generator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/generator/Generator.java index 1e11b552b..e8fa6fb42 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/generator/Generator.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/generator/Generator.java @@ -52,7 +52,7 @@ public class Generator _type.collect(this, player); _holder.remove(); _holder = null; - _lastCollect = System.currentTimeMillis(); + setLastCollect(); } public void checkSpawn() @@ -111,4 +111,9 @@ public class Generator { return _block; } + + public void setLastCollect() + { + _lastCollect = System.currentTimeMillis(); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/generator/GeneratorModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/generator/GeneratorModule.java index 754b6d2ff..197d3e700 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/generator/GeneratorModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/generator/GeneratorModule.java @@ -3,13 +3,18 @@ package nautilus.game.arcade.game.modules.generator; import java.util.HashSet; import java.util.Set; +import org.bukkit.block.Block; import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.player.PlayerArmorStandManipulateEvent; +import mineplex.core.common.util.F; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.game.modules.Module; public class GeneratorModule extends Module @@ -46,7 +51,7 @@ public class GeneratorModule extends Module { getGame().CreatureAllowOverride = true; - for (Generator generator : _generators) + for (Generator generator : _generators) { generator.checkSpawn(); generator.checkCollect(); @@ -64,10 +69,37 @@ public class GeneratorModule extends Module } } + @EventHandler + public void live(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Live) + { + return; + } + + _generators.forEach(Generator::setLastCollect); + } + + @EventHandler + public void blockBreak(BlockBreakEvent event) + { + Block block = event.getBlock(); + + for (Generator generator : _generators) + { + if (generator.getBlock().equals(block)) + { + event.setCancelled(true); + event.getPlayer().sendMessage(F.main("Game", "You cannot break this block.")); + return; + } + } + } + @EventHandler public void armourStandManipulate(PlayerArmorStandManipulateEvent event) { - for (Generator generator: _generators) + for (Generator generator : _generators) { if (generator.getHolder() != null && generator.getHolder().equals(event.getRightClicked())) { @@ -80,7 +112,7 @@ public class GeneratorModule extends Module @EventHandler public void armourStandDamage(CustomDamageEvent event) { - for (Generator generator: _generators) + for (Generator generator : _generators) { if (generator.getHolder() != null && generator.getHolder().equals(event.GetDamageeEntity())) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFireBurst.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFireBurst.java deleted file mode 100644 index 1a235389e..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFireBurst.java +++ /dev/null @@ -1,146 +0,0 @@ -package nautilus.game.arcade.kit.perks; - -import java.util.Iterator; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.block.Action; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilTime; -import mineplex.core.common.util.UtilTime.TimeUnit; -import mineplex.core.recharge.Recharge; -import nautilus.game.arcade.kit.Perk; - -public class PerkFireBurst extends Perk -{ - - private static final int FIRE_TICKS = 60; - private static final double LOCATION_Y_MODIFER = 1; - - private long _cooldown; - private double _range; - private double _damage; - - public PerkFireBurst(long cooldown, double range, double damage) - { - super("Fire Burst", new String[] { - C.cYellow + "Right Click" + C.cWhite + " with Blaze Rod to use " + C.cGreen + "Fire Burst", - "Sends out a pulse of fire that deals " + C.cGreen + damage + C.cWhite + " damage to", - "all players within " + C.cGreen + range + C.cWhite + " blocks.", - "Cooldown " + C.cGreen + UtilTime.convertString(cooldown, 0, TimeUnit.SECONDS) + C.cWhite + "." }); - - _cooldown = cooldown; - _range = range; - _damage = damage; - } - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) - { - if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) - { - return; - } - - Player player = event.getPlayer(); - - if (player.getItemInHand() == null) - { - return; - } - - if (player.getItemInHand().getType() != Material.BLAZE_ROD) - { - return; - } - - if (!hasPerk(player)) - { - return; - } - - if (!Recharge.Instance.use(player, GetName(), _cooldown, true, true)) - { - return; - } - - final Location location = player.getLocation().add(0, LOCATION_Y_MODIFER, 0); - - for (Player other : UtilPlayer.getNearby(location, _range, true)) - { - if (other.equals(player)) - { - continue; - } - - other.setFireTicks(FIRE_TICKS); - Manager.GetDamage().NewDamageEvent(other, player, null, DamageCause.CUSTOM, _damage, true, true, true, player.getName(), GetName()); - } - - for (double radius = 0; radius < _range; radius += 0.5) - { - for (double theta = 0; theta < 2 * Math.PI; theta += Math.PI / 20) - { - double x = radius * Math.cos(theta); - double z = radius * Math.sin(theta); - - location.add(x, 0, z); - - UtilParticle.PlayParticleToAll(ParticleType.FLAME, location, 0, 0, 0, 0.01F, 1, ViewDist.NORMAL); - - location.subtract(x, 0, z); - } - } - - } - - @EventHandler - public void onPlayerDropItem(PlayerDropItemEvent event) - { - if (!hasPerk(event.getPlayer())) - { - return; - } - - if (event.getItemDrop().getItemStack().getType() == Material.BLAZE_ROD) - { - event.getPlayer().sendMessage(F.main("Game", "You cannot drop this item.")); - event.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent event) - { - if (!hasPerk(event.getEntity())) - { - return; - } - - Iterator iterator = event.getDrops().iterator(); - - while (iterator.hasNext()) - { - ItemStack itemStack = iterator.next(); - - if (itemStack.getType() == Material.BLAZE_ROD) - { - iterator.remove(); - } - } - } - -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkIceBridge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkIceBridge.java deleted file mode 100644 index f035af804..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkIceBridge.java +++ /dev/null @@ -1,184 +0,0 @@ -package nautilus.game.arcade.kit.perks; - -import java.util.HashSet; -import java.util.Iterator; - -import org.bukkit.Effect; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.Vector; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilTime; -import mineplex.core.common.util.UtilTime.TimeUnit; -import mineplex.core.recharge.Recharge; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.kit.Perk; -import nautilus.game.arcade.kit.perks.data.IcePathData; - -public class PerkIceBridge extends Perk -{ - - private HashSet _data = new HashSet(); - public long _cooldown; - private long _bridgeUpTime; - - public PerkIceBridge(long cooldown, long bridgeUpTime) - { - super("Ice Bridge", new String[] { - C.cYellow + "Right Click" + C.cGray + " with Ice to create an " + C.cGreen + "Ice Bridge", - "Lasts for " + C.cGreen + UtilTime.convertString(bridgeUpTime, 0, TimeUnit.SECONDS) + C.cGray + ".", - "Cooldown " + C.cGreen + UtilTime.convertString(cooldown, 0, TimeUnit.SECONDS) + C.cGray + "." - }); - - _cooldown = cooldown; - _bridgeUpTime = bridgeUpTime; - } - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) - { - if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) - { - return; - } - - Player player = event.getPlayer(); - - if (player.getItemInHand() == null) - { - return; - } - - if (player.getItemInHand().getType() != Material.ICE) - { - return; - } - - if (!hasPerk(player)) - { - return; - } - - if (!Recharge.Instance.use(player, GetName(), _cooldown, true, true)) - { - return; - } - - player.teleport(player.getLocation().add(0, 1, 0)); - UtilAction.velocity(player, new Vector(0, 0.5, 0)); - - _data.add(new IcePathData(player)); - - // Inform - UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + ".")); - } - - - @EventHandler - public void onUpdate(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - Iterator dataIterator = _data.iterator(); - - while (dataIterator.hasNext()) - { - IcePathData data = dataIterator.next(); - - Block block = data.GetNextBlock(); - - if (block == null) - { - dataIterator.remove(); - } - else - { - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, 79); - Manager.GetBlockRestore().add(block, 79, (byte) 0, _bridgeUpTime); - } - } - } - - @EventHandler - public void onBlockPlace(BlockPlaceEvent event) - { - Player player = event.getPlayer(); - ItemStack itemStack = player.getItemInHand(); - - if (!hasPerk(player)) - { - return; - } - - if (itemStack == null) - { - return; - } - - if (itemStack.getItemMeta() == null) - { - return; - } - - if (itemStack.getItemMeta().getDisplayName() == null) - { - return; - } - - if (itemStack.getItemMeta().getDisplayName().contains(GetName())) - { - event.setCancelled(true); - player.sendMessage(F.main("Game", "You cannot place this item.")); - } - } - - @EventHandler - public void onPlayerDropItem(PlayerDropItemEvent event) - { - if (!hasPerk(event.getPlayer())) - { - return; - } - - if (event.getItemDrop().getItemStack().getType() == Material.ICE) - { - event.getPlayer().sendMessage(F.main("Game", "You cannot drop this item.")); - event.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent event) - { - if (!hasPerk(event.getEntity())) - { - return; - } - - Iterator iterator = event.getDrops().iterator(); - - while (iterator.hasNext()) - { - ItemStack itemStack = iterator.next(); - - if (itemStack.getType() == Material.ICE) - { - iterator.remove(); - } - } - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkKnockback.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkKnockback.java index 29ee1a737..460df5d69 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkKnockback.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkKnockback.java @@ -5,62 +5,51 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.recharge.Recharge; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + import nautilus.game.arcade.kit.Perk; public class PerkKnockback extends Perk { - private double _power; - private boolean _onGround; - - public PerkKnockback(double power) + + private final double _power; + + public PerkKnockback(double power) { - this(power, false); - } - - public PerkKnockback(double power, boolean onGround) - { - super("Knockback", new String[] + super("Knockback", new String[] { - C.cGray + "Attacks gives knockback with " + C.cGreen + power + C.cGray + " power.", - (onGround ? "Only works while you are on the ground." : "Works in the air and on the ground."), + C.cGray + "Attacks gives knockback with " + C.cGreen + power + C.cGray + " power.", }); - + _power = power; - _onGround = onGround; } - + @EventHandler(priority = EventPriority.HIGH) public void Knockback(CustomDamageEvent event) { Player damager = event.GetDamagerPlayer(false); - if (damager == null) return; - + if (damager == null) return; + if (!hasPerk(damager)) return; - + if (!Manager.IsAlive(damager)) return; - - if (_onGround && !UtilEnt.isGrounded(event.GetDamageeEntity())) - { - return; - } - + event.SetKnockback(false); - + if (!Recharge.Instance.use(damager, "KB " + UtilEnt.getName(event.GetDamageeEntity()), 400, false, false)) return; - + event.GetDamageeEntity().playEffect(EntityEffect.HURT); - - UtilAction.velocity(event.GetDamageeEntity(), - UtilAlg.getTrajectory(damager, event.GetDamageeEntity()), + + UtilAction.velocity(event.GetDamageeEntity(), + UtilAlg.getTrajectory(damager, event.GetDamageeEntity()), _power, false, 0, 0.1, 10, true); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkVoidSaver.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkVoidSaver.java deleted file mode 100644 index e0624d332..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkVoidSaver.java +++ /dev/null @@ -1,138 +0,0 @@ -package nautilus.game.arcade.kit.perks; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.block.Action; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.events.GameStateChangeEvent; -import nautilus.game.arcade.game.Game.GameState; -import nautilus.game.arcade.kit.Perk; - -public class PerkVoidSaver extends Perk -{ - - private Map _safeLocations = new HashMap<>(); - private List _used = new ArrayList<>(); - - public PerkVoidSaver() - { - super("Void Saver", new String[] { - }); - } - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) - { - if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) - { - return; - } - - Player player = event.getPlayer(); - - if (player.getItemInHand() == null) - { - return; - } - - if (player.getItemInHand().getType() != Material.EYE_OF_ENDER) - { - return; - } - - event.setCancelled(true); - - if (!hasPerk(player) || _used.contains(player.getUniqueId())) - { - return; - } - - if (_safeLocations.get(player.getUniqueId()) == null) - { - return; - } - - player.teleport(_safeLocations.get(player.getUniqueId()).add(0, 2, 0)); - player.setFallDistance(0); - player.getInventory().remove(Material.EYE_OF_ENDER); - player.sendMessage(F.main("Game", "You used your safe teleport.")); - player.playSound(player.getLocation(), Sound.ENDERMAN_TELEPORT, 1, 0); - UtilParticle.PlayParticleToAll(ParticleType.WITCH_MAGIC, player.getEyeLocation(), 0.5F, 0.5F, 0.5F, 0.5F, 10, ViewDist.NORMAL); - _used.add(player.getUniqueId()); - } - - @EventHandler - public void onUpdate(UpdateEvent event) - { - if (event.getType() != UpdateType.FAST) - { - return; - } - - for (Player player : Manager.GetGame().GetPlayers(true)) - { - if (!hasPerk(player) || _used.contains(player.getUniqueId()) || !UtilEnt.isGrounded(player)) - { - continue; - } - - _safeLocations.put(player.getUniqueId(), player.getLocation()); - } - } - - @EventHandler - public void onPlayerDropItem(PlayerDropItemEvent event) - { - if (event.getItemDrop().getItemStack().getType() == Material.EYE_OF_ENDER) - { - event.getPlayer().sendMessage(F.main("Game", "You cannot drop this item.")); - event.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent event) - { - Iterator iterator = event.getDrops().iterator(); - - while (iterator.hasNext()) - { - ItemStack itemStack = iterator.next(); - - if (itemStack.getType() == Material.EYE_OF_ENDER) - { - iterator.remove(); - } - } - } - - @EventHandler - public void onGameStateChange(GameStateChangeEvent event) - { - if (event.GetState() == GameState.WinRoom) - { - _used.clear(); - } - } - -}