From 84c19913211bb99b677574636e3bd2c497358826 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 26 Feb 2018 15:40:59 +0000 Subject: [PATCH] SG post patch --- .../src/nautilus/game/arcade/game/Game.java | 2 +- .../games/survivalgames/SurvivalGamesNew.java | 60 ++++++++++++++----- .../games/survivalgames/kit/KitArcher.java | 4 +- .../games/survivalgames/kit/KitBarbarian.java | 17 ++++++ .../survivalgames/modules/BorderModule.java | 21 +++++++ .../modules/FurnaceLootModule.java | 2 +- .../modules/SupplyDropModule.java | 26 ++++++-- .../modules/TrackingCompassModule.java | 2 +- .../game/modules/ThrowableTNTModule.java | 2 +- .../game/modules/generator/Generator.java | 2 + .../game/modules/worldmap/WorldMapModule.java | 39 +++++++----- .../game/arcade/kit/perks/PerkAxeThrower.java | 58 +++++++++++++++--- .../game/arcade/kit/perks/PerkBomberHG.java | 2 +- .../game/arcade/kit/perks/PerkCleave.java | 2 +- .../game/arcade/kit/perks/PerkHiltSmash.java | 2 +- .../game/arcade/kit/perks/PerkHorsePet.java | 5 +- .../game/arcade/kit/perks/PerkSkeletons.java | 2 +- .../game/arcade/kit/perks/PerkTNTArrow.java | 2 +- .../game/arcade/kit/perks/PerkWolfPet.java | 11 ++-- 19 files changed, 204 insertions(+), 57 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 270cadf6b..1664d4ac7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -1429,7 +1429,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed @EventHandler public final void onFoodLevelChangeEvent(FoodLevelChangeEvent event) { - ((Player) event.getEntity()).setSaturation(3.8F); // While not entirely accurate, this is a pretty good guess at original + ((Player) event.getEntity()).setSaturation(5); // While not entirely accurate, this is a pretty good guess at original // food level changes } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesNew.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesNew.java index aaad2b287..47b6539f7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesNew.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesNew.java @@ -4,7 +4,10 @@ import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import org.bukkit.Color; import org.bukkit.Effect; +import org.bukkit.FireworkEffect; +import org.bukkit.FireworkEffect.Type; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -41,6 +44,7 @@ import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilItem; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilTime; @@ -93,7 +97,8 @@ public abstract class SurvivalGamesNew extends Game private static final long PREPARE_TIME = TimeUnit.SECONDS.toMillis(15); private static final long REFILL_TIME = TimeUnit.MINUTES.toMillis(7); private static final long REFILL_INFORM_TIME = TimeUnit.MINUTES.toMillis(3); - private static final long KIT_COOLDOWN = TimeUnit.SECONDS.toMillis(30); + private static final long KIT_COOLDOWN = TimeUnit.SECONDS.toMillis(20); + private static final long END_DAMAGE_TIME = TimeUnit.MINUTES.toMillis(15); private static final int MAX_ITEM_SPAWN_DISTANCE_SQUARED = 36; private static final String START_EFFECT_REASON = "Start Effect"; private static final int START_EFFECT_DURATION = 30; @@ -101,6 +106,10 @@ public abstract class SurvivalGamesNew extends Game private static final int CRAFTING_TABLES = 10; private static final int DISTANCE_NON_ASSASSIN = 576; private static final int DISTANCE_ASSASSIN = 64; + private static final FireworkEffect DEATH_EFFECT = FireworkEffect.builder() + .with(Type.BALL) + .withColor(Color.RED) + .build(); private List _chests; private SupplyDropModule _supplyDrop; @@ -483,7 +492,7 @@ public abstract class SurvivalGamesNew extends Game new ChestLootPool() .addItem(new ItemStack(Material.FISHING_ROD)) .addItem(new ItemStack(Material.BOW), 60) - .addItem(new ItemStack(Material.ARROW), 1, 3) + .addItem(new ItemStack(Material.ARROW), 1, 3, 50) .addItem(new ItemStack(Material.SNOW_BALL), 1, 2) .addItem(new ItemStack(Material.EGG), 1, 2) .setUnbreakable(true) @@ -504,8 +513,8 @@ public abstract class SurvivalGamesNew extends Game .addItem(new ItemStack(Material.EXP_BOTTLE), 1, 2) .addItem(new ItemStack(Material.STICK), 1, 2) .addItem(new ItemStack(Material.BOAT), 50) - .addItem(new ItemStack(Material.FLINT), 1, 2) - .addItem(new ItemStack(Material.FEATHER), 1, 2) + .addItem(new ItemStack(Material.FLINT), 1, 2, 70) + .addItem(new ItemStack(Material.FEATHER), 1, 2, 70) .addItem(new ItemStack(Material.GOLD_INGOT), 1, 1, 80) .addItem(compassModule.getCompass(5)) .addItem(tnt, 50) @@ -546,7 +555,7 @@ public abstract class SurvivalGamesNew extends Game new ChestLootPool() .addItem(new ItemStack(Material.FISHING_ROD)) .addItem(new ItemStack(Material.BOW), 50) - .addItem(new ItemStack(Material.ARROW), 1, 3) + .addItem(new ItemStack(Material.ARROW), 1, 3, 50) .addItem(new ItemStack(Material.SNOW_BALL), 1, 2) .addItem(new ItemStack(Material.EGG), 1, 2) .setUnbreakable(true) @@ -568,9 +577,8 @@ public abstract class SurvivalGamesNew extends Game .addItem(new ItemStack(Material.EXP_BOTTLE), 1, 2) .addItem(new ItemStack(Material.STICK), 1, 2) .addItem(new ItemStack(Material.BOAT), 50) - .addItem(new ItemStack(Material.FLINT), 1, 2) - .addItem(new ItemStack(Material.STRING), 1, 2) - .addItem(new ItemStack(Material.FEATHER), 1, 2) + .addItem(new ItemStack(Material.FLINT), 1, 2, 70) + .addItem(new ItemStack(Material.FEATHER), 1, 2, 70) .addItem(new ItemStack(Material.GOLD_INGOT), 1, 1, 80) .addItem(compassModule.getCompass(5)) .addItem(new ItemStack(Material.DIAMOND), 50) @@ -677,9 +685,7 @@ public abstract class SurvivalGamesNew extends Game return; } - ItemStack mapItem = getModule(WorldMapModule.class).getMapItem() - .setTitle(C.cGreenB + "World Map") - .build(); + ItemStack mapItem = getModule(WorldMapModule.class).getMapItem(); for (Player player : GetPlayers(true)) { @@ -866,14 +872,17 @@ public abstract class SurvivalGamesNew extends Game block.setType(Material.AIR); } - if (event.getBlock().getType() == Material.LEAVES && Math.random() < 0.05) + if (event.getBlock().getType() == Material.LEAVES) { Location location = block.getLocation().add(0.5, 0.5, 0.5); event.setCancelled(true); - location.getWorld().playEffect(location, Effect.STEP_SOUND, block.getType()); block.setType(Material.AIR); - location.getWorld().dropItemNaturally(location, new ItemStack(Material.STICK)); + + if (Math.random() < 0.05) + { + location.getWorld().dropItemNaturally(location, new ItemStack(Material.STICK)); + } } } @@ -887,7 +896,7 @@ public abstract class SurvivalGamesNew extends Game return; } - event.AddMod("Water Explosion", -event.GetDamage() / 2D); + event.AddMod("Water Explosion", -event.GetDamage() * 0.4); } @EventHandler(priority = EventPriority.LOWEST) @@ -895,6 +904,13 @@ public abstract class SurvivalGamesNew extends Game { if (event.getEntity() instanceof Player) { + Location location = event.getEntity().getLocation(); + + for (int i = 1; i <= 3; i++) + { + UtilFirework.launchFirework(location, DEATH_EFFECT, null, i); + } + return; } @@ -902,6 +918,20 @@ public abstract class SurvivalGamesNew extends Game event.getDrops().clear(); } + @EventHandler + public void updateEndDamage(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC || !IsLive() || !UtilTime.elapsed(GetStateTime(), END_DAMAGE_TIME)) + { + return; + } + + for (Player player : GetPlayers(true)) + { + Manager.GetDamage().NewDamageEvent(player, null, null, DamageCause.CUSTOM, 2, false, true, true, GetName(), "End Game"); + } + } + @Override public double GetKillsGems(Player killer, Player killed, boolean assist) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/kit/KitArcher.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/kit/KitArcher.java index a104b563c..991bb41b2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/kit/KitArcher.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/kit/KitArcher.java @@ -29,9 +29,9 @@ public class KitArcher extends Kit new PerkQuickshot("Quick Shot", 2, 30000, true) }; - private static final ItemStack IN_HAND = new ItemStack(Material.BOW); public static final ItemStack BOW = new ItemBuilder(Material.BOW) .setTitle(C.cYellow + "Archer's Bow") + .setUnbreakable(true) .build(); public KitArcher(ArcadeManager manager) @@ -53,6 +53,6 @@ public class KitArcher extends Kit return; } - event.getDrops().removeIf(itemStack -> itemStack.isSimilar(BOW)); + event.getDrops().removeIf(itemStack -> itemStack.equals(BOW)); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/kit/KitBarbarian.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/kit/KitBarbarian.java index 9ba81fb99..d5357045a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/kit/KitBarbarian.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/kit/KitBarbarian.java @@ -1,6 +1,10 @@ package nautilus.game.arcade.game.games.survivalgames.kit; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import mineplex.core.game.kit.GameKit; import mineplex.core.recharge.Recharge; @@ -30,4 +34,17 @@ public class KitBarbarian extends Kit { Recharge.Instance.useForce(player, GetName(), 45000); } + + @EventHandler + public void playerDeath(PlayerDeathEvent event) + { + Player killer = event.getEntity().getKiller(); + + if (killer == null || !HasKit(killer)) + { + return; + } + + killer.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 100, 0)); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/BorderModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/BorderModule.java index efd0ff2ce..f327ffd5d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/BorderModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/BorderModule.java @@ -13,6 +13,8 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.core.common.util.UtilMath; 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.events.GameStateChangeEvent; @@ -120,4 +122,23 @@ public class BorderModule extends Module getGame().getArcadeManager().GetDamage().NewDamageEvent(event.GetDamageeEntity(), null, null, DamageCause.CUSTOM, 2, false, true, true, getGame().GetName(), "World Border"); } } + + @EventHandler + public void updateEndGame(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC || !getGame().IsLive() || _deathmatchSize != getGame().WorldData.World.getWorldBorder().getSize()) + { + return; + } + + double maxY = getGame().GetSpectatorLocation().getY() - 6; + + for (Player player : getGame().GetPlayers(true)) + { + if (player.getLocation().getY() > maxY) + { + getGame().GetTeam(player).SpawnTeleport(player); + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/FurnaceLootModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/FurnaceLootModule.java index 80ac1362c..1e60981e9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/FurnaceLootModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/FurnaceLootModule.java @@ -72,7 +72,7 @@ public class FurnaceLootModule extends Module } FurnaceInventory inventory = furnace.getInventory(); - int random = UtilMath.r(9); + int random = UtilMath.r(6); if (random == 0) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/SupplyDropModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/SupplyDropModule.java index 6f2fb1280..4b4375aad 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/SupplyDropModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/SupplyDropModule.java @@ -41,6 +41,9 @@ import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilItem; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; import mineplex.core.treasure.util.TreasureUtil; @@ -57,6 +60,7 @@ public class SupplyDropModule extends Module private static final int HEIGHT = 40; private static final int RADIUS = 8; private static final int POINTS = 80; + private static final int MAX_DROPS = 3; private static final FireworkEffect FIREWORK_EFFECT = FireworkEffect.builder() .with(Type.BURST) .withColor(Color.YELLOW) @@ -85,6 +89,7 @@ public class SupplyDropModule extends Module private SupplyDrop _supplyDrop; private Block _lastBlock; private boolean _firstOpening; + private int _totalDrops; public SupplyDropModule() { @@ -131,7 +136,7 @@ public class SupplyDropModule extends Module if (_supplyDrop == null) { - if (getGame().WorldTimeSet > TIME && getGame().WorldTimeSet < TIME + 1000) + if (_totalDrops < MAX_DROPS && getGame().WorldTimeSet > TIME && getGame().WorldTimeSet < TIME + 1000) { Location location = getRandom(); @@ -161,6 +166,7 @@ public class SupplyDropModule extends Module getGame().Announce(C.cRedB + "A Supply Drop has appeared at " + C.cWhite + "(" + location.getBlockX() + ", " + location.getBlockZ() + ")."); _supplyDrop = new SupplyDrop(location, entity); + _totalDrops++; } } else if (!_supplyDrop.Dropped) @@ -187,7 +193,6 @@ public class SupplyDropModule extends Module block = block.getRelative(BlockFace.UP); done = true; _supplyDrop.Dragon.remove(); - _supplyDrop = null; _firstOpening = true; cancel(); } @@ -197,13 +202,14 @@ public class SupplyDropModule extends Module if (done) { + _supplyDrop.ChestSpawned = true; _lastBlock = block; populateChest(); } } }, 0, 5); } - else + else if (!_supplyDrop.ChestSpawned) { Location center = _supplyDrop.Drop; double theta = Math.PI * 2 / POINTS * _supplyDrop.Point; @@ -241,11 +247,23 @@ public class SupplyDropModule extends Module if (_firstOpening) { + _supplyDrop = null; _firstOpening = false; getGame().AddStat(player, "SupplyDropsOpened", 1, false, false); } } + @EventHandler + public void updateParticles(UpdateEvent event) + { + if (event.getType() != UpdateType.FASTEST || _supplyDrop == null || !_supplyDrop.ChestSpawned) + { + return; + } + + UtilParticle.PlayParticleToAll(ParticleType.SPELL, _lastBlock.getLocation().add(0.5, 0.5, 0.5), 1, 1, 1, 0, 5, ViewDist.NORMAL); + } + private void populateChest() { List slots = new ArrayList<>(_chestInventory.getSize()); @@ -328,7 +346,7 @@ public class SupplyDropModule extends Module private class SupplyDrop { Location Drop; - boolean Dropped; + boolean Dropped, ChestSpawned; long Start; Entity Dragon; int Point; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/TrackingCompassModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/TrackingCompassModule.java index 99ac898d5..40c88d873 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/TrackingCompassModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modules/TrackingCompassModule.java @@ -68,8 +68,8 @@ public class TrackingCompassModule extends Module player.setCompassTarget(nearby.getLocation()); player.playSound(player.getLocation(), Sound.SUCCESSFUL_HIT, 1, 1); - player.sendMessage(F.main("Game", F.name(nearby.getName()) + " is " + F.count((int) UtilMath.offset(player, nearby)) + " blocks away.")); player.setItemInHand(getCompass(--uses)); + player.sendMessage(F.main("Game", F.name(nearby.getName()) + " is " + F.count((int) UtilMath.offset(player, nearby)) + " blocks away. Your compass has " + F.count(uses) + " use" + (uses == 1 ? "": "s") + " left.")); return; } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/ThrowableTNTModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/ThrowableTNTModule.java index 6f5649e50..8b0191f1e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/ThrowableTNTModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/ThrowableTNTModule.java @@ -52,7 +52,7 @@ public class ThrowableTNTModule extends Module } else { - builder.setTitle(C.cYellowB + "Throwable TNT"); + builder.setTitle(C.cYellow + "Throwable TNT"); } _tntItem = builder.build(); 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 e1e2a2def..e70e790bc 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 @@ -11,6 +11,7 @@ import org.bukkit.entity.Player; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; public class Generator @@ -53,6 +54,7 @@ public class Generator _holder.remove(); _holder = null; setLastCollect(); + UtilServer.CallEvent(new GeneratorCollectEvent(player, this)); } public void checkSpawn() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/worldmap/WorldMapModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/worldmap/WorldMapModule.java index d7365b12f..25a6dd29a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/worldmap/WorldMapModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/worldmap/WorldMapModule.java @@ -24,6 +24,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.map.MapRenderer; import org.bukkit.map.MapView; @@ -32,6 +33,9 @@ import com.google.common.collect.HashMultiset; import com.google.common.collect.Iterables; import com.google.common.collect.Multisets; +import mineplex.core.account.permissions.Permission; +import mineplex.core.account.permissions.PermissionGroup; +import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; @@ -46,6 +50,11 @@ import nautilus.game.arcade.world.WorldData; public class WorldMapModule extends Module { + public enum Perm implements Permission + { + MAP_COMMAND + } + private static final int BLOCK_SCAN_INTERVAL = 16; private int _halfMapSize; @@ -175,6 +184,18 @@ public class WorldMapModule extends Module rebuildScan(); } + @Override + protected void setup() + { + getGame().registerDebugCommand("map", Perm.MAP_COMMAND, PermissionGroup.PLAYER, (player, args) -> + { + Inventory inventory = player.getInventory(); + inventory.remove(Material.MAP); + inventory.addItem(getMapItem()); + player.sendMessage(F.main("Game", "Here, have a " + F.name("Map") + ".")); + }); + } + private void setupRenderer(MapView view) { for (MapRenderer renderer : view.getRenderers()) @@ -511,18 +532,6 @@ public class WorldMapModule extends Module } } - @EventHandler - public void dropItem(PlayerDropItemEvent event) - { - ItemStack itemStack = event.getItemDrop().getItemStack(); - - if (itemStack.getType() == Material.MAP) - { - event.setCancelled(true); - event.getPlayer().sendMessage(F.main("Game", "You cannot drop this map.")); - } - } - @EventHandler public void inventoryClick(InventoryClickEvent event) { @@ -539,8 +548,10 @@ public class WorldMapModule extends Module } } - public ItemBuilder getMapItem() + public ItemStack getMapItem() { - return new ItemBuilder(Material.MAP, 1, _mapId); + return new ItemBuilder(Material.MAP, 1, _mapId) + .setTitle(C.cGreenB + "World Map") + .build(); } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkAxeThrower.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkAxeThrower.java index c24f9d4d5..7c5a61eb3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkAxeThrower.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkAxeThrower.java @@ -1,6 +1,8 @@ package nautilus.game.arcade.kit.perks; -import org.bukkit.Material; +import java.util.HashMap; +import java.util.Map; + import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.entity.Item; @@ -9,6 +11,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerQuitEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.F; @@ -19,6 +22,7 @@ import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilItem; +import mineplex.core.common.util.UtilTime; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; @@ -28,12 +32,23 @@ import nautilus.game.arcade.kit.Perk; public class PerkAxeThrower extends Perk implements IThrown { + + private final Map _lastAxe; + public PerkAxeThrower() { super("Axe Thrower", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Axes to " + C.cGreen + "Throw Axe", }); + + _lastAxe = new HashMap<>(); + } + + @Override + public void unregisteredEvents() + { + _lastAxe.clear(); } @EventHandler @@ -47,7 +62,7 @@ public class PerkAxeThrower extends Perk implements IThrown Player player = event.getPlayer(); - if (!UtilItem.isAxe(player.getItemInHand()) || !Kit.HasKit(player) || !Recharge.Instance.use(player, GetName(), 1000, false, true)) + if (!UtilItem.isAxe(player.getItemInHand()) || !Kit.HasKit(player) || !Recharge.Instance.usable(player, GetName(), true)) { return; } @@ -70,16 +85,39 @@ public class PerkAxeThrower extends Perk implements IThrown return; Item item = (Item) data.getThrown(); + LivingEntity thrower = data.getThrower(); int damage = 4; - if (item.getItemStack().getType() == Material.STONE_AXE) damage = 5; - else if (item.getItemStack().getType() == Material.IRON_AXE) damage = 6; - else if (item.getItemStack().getType() == Material.DIAMOND_AXE) damage = 7; + + switch (item.getItemStack().getType()) + { + case STONE_AXE: + damage = 5; + break; + case IRON_AXE: + damage = 6; + break; + case DIAMOND_AXE: + damage = 7; + break; + } + + Long last = _lastAxe.get(thrower); + + if (last == null) + { + _lastAxe.put(thrower, System.currentTimeMillis()); + } + else + { + long delta = System.currentTimeMillis() - last; + damage /= Math.max(1, (2000 - delta) / 500); + } //Damage Event - Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, + Manager.GetDamage().NewDamageEvent(target, thrower, null, DamageCause.CUSTOM, damage, true, true, false, - UtilEnt.getName(data.getThrower()), GetName()); + UtilEnt.getName(thrower), GetName()); //Effect data.getThrown().getWorld().playSound(data.getThrown().getLocation(), Sound.ZOMBIE_WOOD, 1f, 1.6f); @@ -112,4 +150,10 @@ public class PerkAxeThrower extends Perk implements IThrown { data.getThrown().remove(); } + + @EventHandler + public void playerQuit(PlayerQuitEvent event) + { + _lastAxe.remove(event.getPlayer()); + } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBomberHG.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBomberHG.java index 335738a71..f8681174f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBomberHG.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBomberHG.java @@ -71,7 +71,7 @@ public class PerkBomberHG extends Perk continue; //Add - cur.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.TNT, (byte)0, 1, F.item(C.Bold + "Throwable TNT"))); + cur.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.TNT, (byte)0, 1, F.item("Throwable TNT"))); cur.playSound(cur.getLocation(), Sound.ITEM_PICKUP, 2f, 1f); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCleave.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCleave.java index 27fcee0c8..0cd63effa 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCleave.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCleave.java @@ -66,7 +66,7 @@ public class PerkCleave extends Perk event.AddMod(damager.getName(), GetName(), 0, false); //Splash - for (Player other : UtilPlayer.getNearby(damagee.getLocation(), 3)) + for (Player other : UtilPlayer.getNearby(damagee.getLocation(), 4)) { if (other.equals(damagee)) continue; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHiltSmash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHiltSmash.java index 350f612a8..f8d826e57 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHiltSmash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHiltSmash.java @@ -74,7 +74,7 @@ public class PerkHiltSmash extends Perk //Damage Event Manager.GetDamage().NewDamageEvent((LivingEntity)ent, player, null, - DamageCause.ENTITY_ATTACK, 2, false, true, true, + DamageCause.ENTITY_ATTACK, 1, false, true, true, player.getName(), GetName()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorsePet.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorsePet.java index 74acd5bdb..c111d0507 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorsePet.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorsePet.java @@ -55,7 +55,10 @@ public class PerkHorsePet extends Perk @Override public void Apply(Player player) { - Manager.runSyncLater(() -> spawnHorse(player, false), 45 * 20); + if (Manager.GetGame().InProgress()) + { + Manager.runSyncLater(() -> spawnHorse(player, false), 45 * 20); + } } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSkeletons.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSkeletons.java index 3b8358aa7..550c74a8d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSkeletons.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSkeletons.java @@ -183,7 +183,7 @@ public class PerkSkeletons extends Perk UtilEnt.removeGoalSelectors(skel); - skel.setMaxHealth(30); + skel.setMaxHealth(36); skel.setHealth(skel.getMaxHealth()); ItemStack inHand = killed.getItemInHand(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTNTArrow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTNTArrow.java index fbf08d40e..36a5d1a10 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTNTArrow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTNTArrow.java @@ -106,7 +106,7 @@ public class PerkTNTArrow extends Perk Player player = (Player)event.getEntity(); - if (!_active.remove(player) || !Recharge.Instance.use(player, GetName(), 8000, true, true)) + if (!_active.remove(player) || !Recharge.Instance.use(player, GetName(), 6000, true, true)) { return; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPet.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPet.java index fc333c1b8..974ebc9df 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPet.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPet.java @@ -243,7 +243,7 @@ public class PerkWolfPet extends Perk return; } - if (!Recharge.Instance.use(player, "Cub Strike", 10000, true, true)) + if (!Recharge.Instance.use(player, "Cub Strike", 8000, true, true)) return; Wolf wolf = _petMap.get(player).get(UtilMath.r(_petMap.get(player).size())); @@ -398,11 +398,12 @@ public class PerkWolfPet extends Perk } else if (damager != null && isMinion(damager)) { - double damage = 3; + if (event.GetDamageePlayer() != null) + { + event.GetDamageePlayer().playSound(event.GetDamageeEntity().getLocation(), Sound.SUCCESSFUL_HIT, 1, 1); + } - event.GetDamageeEntity().getWorld().playSound(event.GetDamageeEntity().getLocation(), Sound.SUCCESSFUL_HIT, 1, 1); - event.AddMod("Wolf Minion", "Negate", -event.GetDamageInitial(), false); - event.AddMod("Wolf Minion", "Damage", damage, false); + event.AddMod("Wolf Minion", "Damage", -event.GetDamageInitial() + 3, false); } } }