From 76829074780051a62b658083587744b05bfe45ec Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 25 Jan 2015 06:18:07 +1300 Subject: [PATCH 01/18] Wizards modifications - Its amazing how things slip past you --- .../game/arcade/game/games/wizards/SpellType.java | 6 +++--- .../arcade/game/games/wizards/WizardBattles.java | 7 +++++++ .../arcade/game/games/wizards/WizardSpellMenu.java | 3 +-- .../game/games/wizards/spells/SpellDrain.java | 14 ++------------ .../game/games/wizards/spells/SpellFireball.java | 4 ++-- .../game/games/wizards/spells/SpellImplode.java | 6 +++++- .../game/games/wizards/spells/SpellLaunch.java | 6 +++--- .../wizards/spells/subclasses/LaunchRune.java | 8 ++++---- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java index bb8ddedcc..21a71feb8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java @@ -117,7 +117,7 @@ public enum SpellType // ❤ -2, // Cooldown change per level 10, // Item amount in loot - C.cGold + C.Bold + "Explosion Size: " + C.Bold + C.cWhite + "(Spell Level x 0.2) + 0.8", + C.cGold + C.Bold + "Explosion Size: " + C.Bold + C.cWhite + "(Spell Level x 0.25) + 0.8", "", @@ -148,9 +148,9 @@ public enum SpellType // ❤ SpellHeal.class, // Spell class 5, // Spell max level 50, // Mana cost - 5, // Spell cooldown + 30, // Spell cooldown 0, // Mana cost change per level - 10, // Cooldown change per level + -1, // Cooldown change per level 5, // Item amount in loot C.cGold + C.Bold + "Heals: " + C.Bold + C.cWhite + "(Spell Level / 2) + 1.5", diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java index 9851ecca0..00164856d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java @@ -30,6 +30,7 @@ import mineplex.core.itemstack.ItemBuilder; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.CombatManager.AttackReason; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.explosion.CustomExplosion; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; @@ -1433,6 +1434,12 @@ public class WizardBattles extends SoloGame fireball.setFireTicks(9999); } + @EventHandler + public void removeDamageToLevel(CustomDamageEvent event) + { + event.SetDamageToLevel(false); + } + @EventHandler public void ScoreboardUpdate(UpdateEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java index 1067316c8..27e4a314f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java @@ -6,7 +6,6 @@ import nautilus.game.arcade.game.Game.GameState; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; @@ -42,7 +41,7 @@ public class WizardSpellMenu extends MiniPlugin { if (p.getInventory().getHeldItemSlot() < 5) { - if (event.getClickedBlock() == null || !(event.getClickedBlock() instanceof InventoryHolder)) + if (event.getClickedBlock() == null || !(event.getClickedBlock().getState() instanceof InventoryHolder)) { _wizardShop.attemptShopOpen(p); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDrain.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDrain.java index 6618fa46d..9acf218ee 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDrain.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellDrain.java @@ -1,6 +1,5 @@ package nautilus.game.arcade.game.games.wizards.spells; -import mineplex.core.common.util.C; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.Wizard; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickEntity; @@ -21,22 +20,13 @@ public class SpellDrain extends Spell implements SpellClickEntity { Wizard wiz = Wizards.getWizard((Player) entity); - float leftoverMana = wiz.getMana(); - if (leftoverMana > 10) + if (wiz.getMana() > 10) { - float toDrain = Math.min(getSpellLevel(player) * 40, leftoverMana); - leftoverMana = Math.max(0, leftoverMana - getSpellLevel(player) * 40); - wiz.setMana(leftoverMana); + wiz.setMana(0); player.getWorld().playSound(player.getLocation(), Sound.WITHER_SPAWN, 1, 0); - Wizard wizard = Wizards.getWizard(player); - - wizard.setMana(Math.min(wizard.getMaxMana(), wizard.getMana() + (toDrain / 3))); - - player.sendMessage(C.cGold + "Drained " + (int) (toDrain / 3) + " mana"); - charge(player); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java index db2f5c4bd..b5c914944 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java @@ -44,7 +44,7 @@ public class SpellFireball extends Spell implements SpellClick org.bukkit.entity.Fireball fireball = (org.bukkit.entity.Fireball) p.getWorld().spawnEntity(p.getEyeLocation(), EntityType.FIREBALL); - Vector vector = p.getEyeLocation().getDirection(); + Vector vector = p.getEyeLocation().getDirection().normalize().multiply(0.24); // We can't call the bukkit methods because for some weird reason, it enforces a certain speed. EntityFireball eFireball = ((CraftFireball) fireball).getHandle(); @@ -57,7 +57,7 @@ public class SpellFireball extends Spell implements SpellClick fireball.setYield(0); fireball.setMetadata("FireballSpell", new FixedMetadataValue(Wizards.getArcadeManager().GetPlugin(), p)); fireball.setMetadata("FireballYield", new FixedMetadataValue(Wizards.getArcadeManager().GetPlugin(), - (getSpellLevel(p) * 0.2F) + 0.8F)); + (getSpellLevel(p) * 0.25F) + 0.8F)); p.getWorld().playSound(p.getLocation(), Sound.BLAZE_BREATH, 0.5F, 5F); charge(p); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java index 29ae5f5dc..0ca6387c2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java @@ -6,6 +6,7 @@ import mineplex.core.common.util.UtilBlock; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -88,7 +89,10 @@ public class SpellImplode extends Spell implements SpellClick } } - centerBlock.getWorld().playSound(centerBlock.getLocation(), Sound.ENDERDRAGON_GROWL, 1.5F, 1.5F); + for (Player player : Bukkit.getOnlinePlayers()) + { + player.playSound(player == p ? p.getLocation() : centerBlock.getLocation(), Sound.ENDERDRAGON_GROWL, 1.5F, 1.5F); + } charge(p); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunch.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunch.java index d34427ca8..6e2b5f936 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunch.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLaunch.java @@ -22,15 +22,15 @@ public class SpellLaunch extends Spell implements SpellClickEntity Wizards.getArcadeManager().GetCondition().Factory() .Falling("Launch", (LivingEntity) entity, player, 10, false, false); - final Vector vector = new Vector(0, 1F + (getSpellLevel(player) * 0.15F), 0); + final int spellLevel = getSpellLevel(player); Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().GetPlugin(), new Runnable() { public void run() { - ((LivingEntity) entity).setVelocity(vector); + ((LivingEntity) entity).setVelocity(new Vector(0, 1F + (spellLevel * 0.15F), 0)); entity.getWorld().playSound(((LivingEntity) entity).getLocation(), Sound.BAT_TAKEOFF, 2, 0); - entity.setFallDistance(-1F); + entity.setFallDistance(-spellLevel * 1.5F); } }); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java index 320d3d063..445677d7c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java @@ -22,7 +22,7 @@ public class LaunchRune private Location _runeLocation; private float _runeSize; private int _ticksTillActive = 60; - private float _launchHeight; + private int _spellLevel; private HashMap _launchedEntities = new HashMap(); public boolean onTick() @@ -56,9 +56,9 @@ public class LaunchRune .Falling("Launch Rune", entity, _caster, 10, false, false); Vector vector = entity.getLocation().getDirection().normalize().multiply(0.1); - vector.setY(_launchHeight); + vector.setY(1F + (_spellLevel * 0.15F)); entity.setVelocity(vector); - entity.setFallDistance(-1F); + entity.setFallDistance(-_spellLevel * 1.5F); launched = true; @@ -100,7 +100,7 @@ public class LaunchRune _caster = caster; _runeLocation = loc; _runeSize = size; - _launchHeight = 1F + (spellLevel * 0.15F); + _spellLevel = spellLevel; displayCircle(1); } From 8262eb9f48ae3ed338c12ccb9f0fc5647e4805c2 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 25 Jan 2015 18:27:21 +1300 Subject: [PATCH 02/18] Rebalance explosive rune, fix rank bug and books no longer drop --- .../arcade/game/games/wizards/SpellType.java | 2 +- .../game/games/wizards/WizardBattles.java | 50 ++++++++++++------- .../wizards/spells/SpellExplosiveRune.java | 2 +- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java index 21a71feb8..c7d3a6400 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java @@ -100,7 +100,7 @@ public enum SpellType // ❤ C.cGold + C.Bold + "Explosion Size: " + C.Bold + C.cWhite + "Spell Level", - C.cGold + C.Bold + "Rune Size: " + C.Bold + C.cWhite + "Spell Level x 0.8", + C.cGold + C.Bold + "Rune Size: " + C.Bold + C.cWhite + "Spell Level + 1", "", diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java index 00164856d..e9169d142 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java @@ -651,34 +651,42 @@ public class WizardBattles extends SoloGame @EventHandler public void onChat(PlayerChatEvent event) { - if (Rank.DEVELOPER.Has(Manager.GetClients().Get(event.getPlayer()).GetRank())) + if (Manager.GetClients().Get(event.getPlayer()).GetRank().Has(Rank.DEVELOPER)) { - if (event.getMessage().equalsIgnoreCase("spells")) + if (event.getPlayer().getName().equalsIgnoreCase("libraryaddict")) { - Wizard wizard = getWizard(event.getPlayer()); - for (SpellType type : SpellType.values()) + if (event.getMessage().equalsIgnoreCase("spells")) { - if (wizard.getSpellLevel(type) < type.getMaxLevel()) + Wizard wizard = getWizard(event.getPlayer()); + for (SpellType type : SpellType.values()) { - wizard.learnSpell(type); + if (wizard.getSpellLevel(type) < type.getMaxLevel()) + { + wizard.learnSpell(type); + } } + + event.setCancelled(true); + event.getPlayer().sendMessage("All spells leveled up once"); + } + if (event.getMessage().equalsIgnoreCase("hit me")) + { + summonMeteor(event.getPlayer()); } - event.setCancelled(true); - event.getPlayer().sendMessage("All spells leveled up once"); - } - if (event.getMessage().equalsIgnoreCase("hit me")) - { - summonMeteor(event.getPlayer()); - } - if (event.getMessage().startsWith("setyield")) - { - _fireballSize = Float.parseFloat(event.getMessage().split(" ")[1]); - } + if (event.getMessage().startsWith("setyield")) + { + _fireballSize = Float.parseFloat(event.getMessage().split(" ")[1]); + } - if (event.getMessage().equalsIgnoreCase("end game")) + if (event.getMessage().equalsIgnoreCase("end game")) + { + sendMeteors(); + } + } + else { - sendMeteors(); + event.getPlayer().sendMessage("Nuh uh"); } } } @@ -833,6 +841,10 @@ public class WizardBattles extends SoloGame _droppedWandsBooks.add(event.getEntity()); } + else if (item.getType() == Material.BOOK) + { + event.getEntity().remove(); + } } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellExplosiveRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellExplosiveRune.java index 47d2001f5..1bda5fc75 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellExplosiveRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellExplosiveRune.java @@ -29,7 +29,7 @@ public class SpellExplosiveRune extends Spell implements SpellClick Vector vector = p.getEyeLocation().getDirection(); vector.normalize().multiply(0.5); - float trapSize = Math.max(1, getSpellLevel(p) * 0.8F); + float trapSize = Math.max(1, 1 + getSpellLevel(p)); List list = p.getLastTwoTargetBlocks(UtilBlock.blockAirFoliageSet, (int) ((trapSize * 4) + 12)); From c19f10aff9896ddc3912ef453b599aa9b9168298 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 25 Jan 2015 18:33:22 +1300 Subject: [PATCH 03/18] Reduce kit mystic mana regen to 10% --- .../nautilus/game/arcade/game/games/wizards/WizardBattles.java | 2 +- .../nautilus/game/arcade/game/games/wizards/kit/KitMystic.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java index e9169d142..ea1566886 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java @@ -1001,7 +1001,7 @@ public class WizardBattles extends SoloGame } else if (kit instanceof KitMystic) { - wizard.setManaPerTick(3F / 20F); + wizard.setManaPerTick(wizard.getManaPerTick() * 1.1F); } changeWandsTitles(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java index 3dc9bd4b4..c0c73f662 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java @@ -19,7 +19,7 @@ public class KitMystic extends Kit { super(manager, "Mystic", KitAvailability.Free, new String[] { - "Mana regeneration increased by 20%" + "Mana regeneration increased by 10%" }, new Perk[0], EntityType.WITCH, new ItemStack(Material.BLAZE_ROD)); } From b4b8b307b0eaa4bd9c99103469130e9d39324a76 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 25 Jan 2015 18:50:45 +1300 Subject: [PATCH 04/18] Rename Wizard Battles to Wizards --- .../src/mineplex/mapparser/GameType.java | 2 +- .../src/nautilus/game/arcade/GameFactory.java | 4 +- .../src/nautilus/game/arcade/GameType.java | 2 +- .../game/arcade/game/games/wizards/Spell.java | 2 +- .../game/games/wizards/SpellMenuPage.java | 6 +-- .../arcade/game/games/wizards/SpellType.java | 4 +- .../game/games/wizards/WizardSpellMenu.java | 4 +- .../games/wizards/WizardSpellMenuShop.java | 4 +- .../{WizardBattles.java => Wizards.java} | 47 +++++++++++++++++-- .../game/games/wizards/kit/KitHermit.java | 6 +-- .../game/games/wizards/kit/KitMystic.java | 6 +-- .../game/games/wizards/kit/KitScholar.java | 6 +-- .../games/wizards/kit/KitWitchDoctor.java | 6 +-- .../game/games/wizards/kit/KitWizard.java | 6 +-- .../wizards/spells/subclasses/LaunchRune.java | 6 +-- 15 files changed, 74 insertions(+), 37 deletions(-) rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/{WizardBattles.java => Wizards.java} (96%) diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java index a6ab24a70..aaf2584d1 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java @@ -52,7 +52,7 @@ public enum GameType TurfWars("Turf Wars"), UHC("Ultra Hardcore"), WitherAssault("Wither Assault"), - WizardBattles("Wizard Battles"), + Wizards("Wizards"), ZombieSurvival("Zombie Survival"), None("None"); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java index de7f9c3df..0ed317806 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java @@ -50,7 +50,7 @@ import nautilus.game.arcade.game.games.tug.Tug; import nautilus.game.arcade.game.games.turfforts.TurfForts; import nautilus.game.arcade.game.games.uhc.UHC; import nautilus.game.arcade.game.games.wither.WitherGame; -import nautilus.game.arcade.game.games.wizards.WizardBattles; +import nautilus.game.arcade.game.games.wizards.Wizards; import nautilus.game.arcade.game.games.zombiesurvival.ZombieSurvival; public class GameFactory @@ -108,7 +108,7 @@ public class GameFactory else if (gameType == GameType.TurfWars) return new TurfForts(_manager); else if (gameType == GameType.UHC) return new UHC(_manager); else if (gameType == GameType.WitherAssault) return new WitherGame(_manager); - else if (gameType == GameType.WizardBattles) return new WizardBattles(_manager); + else if (gameType == GameType.Wizards) return new Wizards(_manager); else if (gameType == GameType.ZombieSurvival) return new ZombieSurvival(_manager); else return null; } 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 5227a9025..4f0bc4603 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -52,7 +52,7 @@ public enum GameType TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE), UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL), WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE), - WizardBattles("Wizard Battles", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL), + Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL), ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL); String _name; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Spell.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Spell.java index 3bdd1a6cb..88180a2b3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Spell.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Spell.java @@ -7,7 +7,7 @@ public abstract class Spell implements Listener { private SpellType Spell; - protected WizardBattles Wizards; + protected Wizards Wizards; /** * Charges him for the cost of the spell diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java index e9f3d5d63..2fb585829 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java @@ -15,10 +15,10 @@ import org.bukkit.entity.Player; public class SpellMenuPage extends ShopPageBase { - private WizardBattles _wizard; + private Wizards _wizard; public SpellMenuPage(WizardSpellMenu plugin, WizardSpellMenuShop shop, CoreClientManager clientManager, - DonationManager donationManager, Player player, WizardBattles wizard) + DonationManager donationManager, Player player, Wizards wizard) { super(plugin, shop, clientManager, donationManager, "Spell Menu", player); _wizard = wizard; @@ -91,7 +91,7 @@ public class SpellMenuPage extends ShopPageBase { - private WizardBattles _wizards; + private Wizards _wizards; public WizardSpellMenuShop(WizardSpellMenu plugin, CoreClientManager clientManager, DonationManager donationManager, - WizardBattles wizard, CurrencyType... currencyTypes) + Wizards wizard, CurrencyType... currencyTypes) { super(plugin, clientManager, donationManager, "Kit Evolve Menu", currencyTypes); _wizards = wizard; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java similarity index 96% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index ea1566886..6cc40c325 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardBattles.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -95,7 +95,7 @@ import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -public class WizardBattles extends SoloGame +public class Wizards extends SoloGame { private NautHashMap> _learnedSpellChests = new NautHashMap>(); /** @@ -112,9 +112,9 @@ public class WizardBattles extends SoloGame private float _fireballAdd = 0.05F; private float _fireballsToSpawn; - public WizardBattles(ArcadeManager manager) + public Wizards(ArcadeManager manager) { - super(manager, GameType.WizardBattles, new Kit[0], new String[] + super(manager, GameType.Wizards, new Kit[0], new String[] { "Find loot and spells in chests", @@ -171,7 +171,7 @@ public class WizardBattles extends SoloGame public void returnToHub(Player player) { UtilPlayer.message(player, " "); - UtilPlayer.message(player, C.cGold + C.Bold + "Wizard Battles requires you to be using Minecraft 1.8!"); + UtilPlayer.message(player, C.cGold + C.Bold + "Wizards requires you to be using Minecraft 1.8!"); UtilPlayer.message(player, " "); player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); @@ -416,10 +416,12 @@ public class WizardBattles extends SoloGame double cooldown = wizard.getCooldown(type) != 0 ? (double) (wizard.getCooldown(type) - System .currentTimeMillis()) / 1000D : 0; + boolean displayCooldown = false; if (cooldown > 0 && cooldown > usableTime) { usableTime = cooldown; + displayCooldown = true; } if (usableTime > 0) @@ -428,7 +430,7 @@ public class WizardBattles extends SoloGame double maxSeconds = Math.max(type.getSpellCooldown(wizard), type.getManaCost(wizard) / (wizard.getManaPerTick() * 20)); - UtilTextBottom.displayProgress(type.getElement().getColor() + type.getSpellName(), + displayProgress(displayCooldown ? C.cRed : C.cBlue, type.getElement().getColor() + type.getSpellName(), 1f - (usableTime / maxSeconds), UtilTime.convertString((long) (usableTime * 1000), 1, TimeUnit.FIT), player); @@ -446,6 +448,41 @@ public class WizardBattles extends SoloGame } } + private void displayProgress(String progressColor, String prefix, double amount, String suffix, Player... players) + { + // Generate Bar + int bars = 12; + String progressBar = C.cGreen + ""; + boolean colorChange = false; + for (int i = 0; i < bars; i++) + { + if (!colorChange && (float) i / (float) bars >= amount) + { + progressBar +=progressBar;// C.cRed; + colorChange = true; + } + + progressBar += "█"; + } + + // Send to Player + for (Player player : players) + { + // 1.7 - Add Color + if (!UtilPlayer.is1_8(player)) + { + UtilTextTop.displayProgress((prefix == null ? "" : C.cYellow + C.Bold + prefix) + + (suffix == null ? "" : ChatColor.RESET + C.Bold + " - " + C.cGreen + C.Bold + suffix), amount, player); + } + // 1.8 + else + { + UtilTextBottom.display((prefix == null ? "" : prefix + ChatColor.RESET + " ") + progressBar + + (suffix == null ? "" : ChatColor.RESET + " " + suffix), players); + } + } + } + private void dropSpells(Player player) { HashSet spells = new HashSet(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitHermit.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitHermit.java index 49e910a44..6af80477b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitHermit.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitHermit.java @@ -3,7 +3,7 @@ package nautilus.game.arcade.game.games.wizards.kit; import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.game.games.wizards.WizardBattles; +import nautilus.game.arcade.game.games.wizards.Wizards; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; @@ -30,7 +30,7 @@ public class KitHermit extends Kit { if (i < 3) { - player.getInventory().addItem(((WizardBattles) Manager.GetGame()).makeUnusedWand()); + player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); } else { @@ -38,7 +38,7 @@ public class KitHermit extends Kit new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 8) - .setTitle(C.cGray + "Empty wand slot" + ((WizardBattles) Manager.GetGame()).buildTime()) + .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) .addLore(C.cGray + C.Italics + "Wands can be found in chests and on dead players") diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java index c0c73f662..496b82afc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java @@ -3,7 +3,7 @@ package nautilus.game.arcade.game.games.wizards.kit; import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.game.games.wizards.WizardBattles; +import nautilus.game.arcade.game.games.wizards.Wizards; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; @@ -30,7 +30,7 @@ public class KitMystic extends Kit { if (i < 3) { - player.getInventory().addItem(((WizardBattles) Manager.GetGame()).makeUnusedWand()); + player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); } else { @@ -38,7 +38,7 @@ public class KitMystic extends Kit new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 8) - .setTitle(C.cGray + "Empty wand slot" + ((WizardBattles) Manager.GetGame()).buildTime()) + .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) .addLore(C.cGray + C.Italics + "Wands can be found in chests and on dead players") diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitScholar.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitScholar.java index bce008601..85345f51f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitScholar.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitScholar.java @@ -3,7 +3,7 @@ package nautilus.game.arcade.game.games.wizards.kit; import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.game.games.wizards.WizardBattles; +import nautilus.game.arcade.game.games.wizards.Wizards; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; @@ -30,7 +30,7 @@ public class KitScholar extends Kit { if (i < 4) { - player.getInventory().addItem(((WizardBattles) Manager.GetGame()).makeUnusedWand()); + player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); } else { @@ -38,7 +38,7 @@ public class KitScholar extends Kit new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 8) - .setTitle(C.cGray + "Empty wand slot" + ((WizardBattles) Manager.GetGame()).buildTime()) + .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) .addLore(C.cGray + C.Italics + "Wands can be found in chests and on dead players") diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java index a98402285..b33127c65 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java @@ -4,7 +4,7 @@ import mineplex.core.achievement.Achievement; import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.game.games.wizards.WizardBattles; +import nautilus.game.arcade.game.games.wizards.Wizards; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; @@ -36,7 +36,7 @@ public class KitWitchDoctor extends Kit { if (i < 3) { - player.getInventory().addItem(((WizardBattles) Manager.GetGame()).makeUnusedWand()); + player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); } else { @@ -44,7 +44,7 @@ public class KitWitchDoctor extends Kit new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 8) - .setTitle(C.cGray + "Empty wand slot" + ((WizardBattles) Manager.GetGame()).buildTime()) + .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) .addLore(C.cGray + C.Italics + "Wands can be found in chests and on dead players") diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWizard.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWizard.java index e9e7923f3..49261c29c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWizard.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWizard.java @@ -3,7 +3,7 @@ package nautilus.game.arcade.game.games.wizards.kit; import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.game.games.wizards.WizardBattles; +import nautilus.game.arcade.game.games.wizards.Wizards; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; @@ -30,7 +30,7 @@ public class KitWizard extends Kit { if (i < 3) { - player.getInventory().addItem(((WizardBattles) Manager.GetGame()).makeUnusedWand()); + player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); } else { @@ -38,7 +38,7 @@ public class KitWizard extends Kit new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 8) - .setTitle(C.cGray + "Empty wand slot" + ((WizardBattles) Manager.GetGame()).buildTime()) + .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) .addLore(C.cGray + C.Italics + "Wands can be found in chests and on dead players") diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java index 445677d7c..d60350ebb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java @@ -6,7 +6,7 @@ import java.util.UUID; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilShapes; import mineplex.core.common.util.UtilParticle.ParticleType; -import nautilus.game.arcade.game.games.wizards.WizardBattles; +import nautilus.game.arcade.game.games.wizards.Wizards; import org.bukkit.GameMode; import org.bukkit.Location; @@ -18,7 +18,7 @@ import org.bukkit.util.Vector; public class LaunchRune { private Player _caster; - private WizardBattles _wizards; + private Wizards _wizards; private Location _runeLocation; private float _runeSize; private int _ticksTillActive = 60; @@ -94,7 +94,7 @@ public class LaunchRune } } - public LaunchRune(WizardBattles wizards, Player caster, Location loc, float size, int spellLevel) + public LaunchRune(Wizards wizards, Player caster, Location loc, float size, int spellLevel) { _wizards = wizards; _caster = caster; From 76e6b7530fceea17e9e6c5b0c5bcfb58e4fa3987 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Mon, 26 Jan 2015 09:09:46 +1300 Subject: [PATCH 05/18] Meteors now explode everything on contact. Added spellbook for spectators and pregame. Mana cost now obvious when cooling down. Lowered some random item amounts --- .../game/core/explosion/CustomExplosion.java | 16 +++- .../game/games/wizards/SpellMenuPage.java | 19 +++- .../arcade/game/games/wizards/SpellType.java | 8 ++ .../game/games/wizards/WizardSpellMenu.java | 62 ++++++++++++- .../arcade/game/games/wizards/Wizards.java | 93 +++++++++++-------- 5 files changed, 147 insertions(+), 51 deletions(-) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java index 6b291cd29..bd2f8a98f 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java @@ -41,6 +41,8 @@ public class CustomExplosion extends Explosion private DamageManager _manager; private String _damageReason; private boolean _dropItems = true; + private boolean _damageBlocksEqually; + private boolean _createFire; public CustomExplosion(DamageManager manager, Location loc, float explosionSize, String deathCause) { @@ -50,12 +52,18 @@ public class CustomExplosion extends Explosion _damageReason = deathCause; } + public CustomExplosion setBlocksDamagedEqually(boolean damageEqually) + { + _damageBlocksEqually = damageEqually; + return this; + } + public CustomExplosion explode() { // Explode the explosion a(); a(true); - + return this; } @@ -116,8 +124,8 @@ public class CustomExplosion extends Explosion if (block.getMaterial() != Material.AIR) { - float f3 = this.source != null ? this.source.a(this, this._world, l, i1, j1, block) : block - .a(this.source); + float f3 = this.source != null ? this.source.a(this, this._world, l, i1, j1, block) + : (_damageBlocksEqually ? Blocks.DIRT : block).a(this.source); f1 -= (f3 + 0.3F) * f2; } @@ -295,7 +303,7 @@ public class CustomExplosion extends Explosion } } - if (this.a) + if (this._createFire) { Iterator iterator = this.blocks.iterator(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java index 2fb585829..8a6e58a84 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellMenuPage.java @@ -57,7 +57,7 @@ public class SpellMenuPage extends ShopPageBase 0) { @@ -65,8 +65,10 @@ public class SpellMenuPage extends ShopPageBase 0) { + usableTime = UtilMath.trim(1, usableTime); + double maxSeconds = Math.max(type.getSpellCooldown(wizard), type.getManaCost(wizard) / (wizard.getManaPerTick() * 20)); - displayProgress(displayCooldown ? C.cRed : C.cBlue, type.getElement().getColor() + type.getSpellName(), - 1f - (usableTime / maxSeconds), - UtilTime.convertString((long) (usableTime * 1000), 1, TimeUnit.FIT), player); + displayProgress(displayCooldown ? C.cRed : C.cDPurple, + type.getElement().getColor() + type.getSpellName(), 1f - (usableTime / maxSeconds), + + (displayCooldown ? + + UtilTime.convertString((long) (usableTime * 1000), 1, TimeUnit.FIT) + + : + + usableTime + (usableTime < 60 ? "s" : "m") + " for mana"), + + player); } else @@ -458,7 +469,7 @@ public class Wizards extends SoloGame { if (!colorChange && (float) i / (float) bars >= amount) { - progressBar +=progressBar;// C.cRed; + progressBar += progressColor;// C.cRed; colorChange = true; } @@ -690,40 +701,40 @@ public class Wizards extends SoloGame { if (Manager.GetClients().Get(event.getPlayer()).GetRank().Has(Rank.DEVELOPER)) { - if (event.getPlayer().getName().equalsIgnoreCase("libraryaddict")) + if (event.getMessage().equalsIgnoreCase("spells")) { - if (event.getMessage().equalsIgnoreCase("spells")) + Wizard wizard = getWizard(event.getPlayer()); + for (SpellType type : SpellType.values()) { - Wizard wizard = getWizard(event.getPlayer()); - for (SpellType type : SpellType.values()) + if (wizard.getSpellLevel(type) < type.getMaxLevel()) { - if (wizard.getSpellLevel(type) < type.getMaxLevel()) - { - wizard.learnSpell(type); - } + wizard.learnSpell(type); } - - event.setCancelled(true); - event.getPlayer().sendMessage("All spells leveled up once"); - } - if (event.getMessage().equalsIgnoreCase("hit me")) - { - summonMeteor(event.getPlayer()); } - if (event.getMessage().startsWith("setyield")) - { - _fireballSize = Float.parseFloat(event.getMessage().split(" ")[1]); - } - - if (event.getMessage().equalsIgnoreCase("end game")) - { - sendMeteors(); - } + event.setCancelled(true); + event.getPlayer().sendMessage("All spells leveled up once"); } - else + + if (event.getMessage().equalsIgnoreCase("overtime")) { - event.getPlayer().sendMessage("Nuh uh"); + setGameLiveTime(System.currentTimeMillis() - (10 * 60 * 1000)); + } + + if (event.getMessage().equalsIgnoreCase("hit me")) + { + summonMeteor(event.getPlayer()); + } + + if (event.getMessage().startsWith("setyield")) + { + _fireballSize = Float.parseFloat(event.getMessage().split(" ")[1]); + } + + if (event.getMessage().equalsIgnoreCase("end game")) + { + sendMeteors(); + event.setCancelled(true); } } } @@ -1336,6 +1347,8 @@ public class Wizards extends SoloGame explosion.setDropItems(false); + explosion.setBlocksDamagedEqually(true); + explosion.explode(); } } From 40ef3317dd6eec01296d87affcda0267353c5672 Mon Sep 17 00:00:00 2001 From: Chiss Date: Mon, 26 Jan 2015 11:20:02 +1100 Subject: [PATCH 06/18] committing necessary files to merge --- .../core/account/CoreClientManager.java | 9 ++++ .../src/mineplex/core/antihack/AntiHack.java | 17 ++++++- .../game/arcade/game/games/uhc/UHC.java | 47 +++++++++---------- .../game/arcade/managers/GameHostManager.java | 7 ++- 4 files changed, 54 insertions(+), 26 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java index 2769f35f6..523bace03 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java @@ -466,4 +466,13 @@ public class CoreClientManager extends MiniPlugin { _loginProcessors.put(processor.getName(), processor); } + + public boolean hasRank(Player player, Rank rank) + { + CoreClient client = Get(player); + if (client == null) + return false; + + return client.GetRank().Has(rank); + } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/antihack/AntiHack.java b/Plugins/Mineplex.Core/src/mineplex/core/antihack/AntiHack.java index ee25d4e08..6c4f90235 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/antihack/AntiHack.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/antihack/AntiHack.java @@ -62,6 +62,8 @@ public class AntiHack extends MiniPlugin //Player Info private HashSet _velocityEvent = new HashSet(); private HashMap _lastMoveEvent = new HashMap(); + + private HashSet _hubAttempted = new HashSet(); //Hack Requirements public int FloatHackTicks = 10; @@ -347,7 +349,7 @@ public class AntiHack extends MiniPlugin { player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 2f, 0.5f); - if (_kick) + if (_kick || _hubAttempted.remove(player)) { player.kickPlayer( C.cGold + "Mineplex Anti-Cheat" + "\n" + @@ -358,6 +360,8 @@ public class AntiHack extends MiniPlugin } else { + _hubAttempted.add(player); + UtilPlayer.message(player, C.cGold + C.Strike + "---------------------------------------------"); UtilPlayer.message(player, ""); UtilPlayer.message(player, C.cGold + "Mineplex Anti-Cheat"); @@ -452,6 +456,17 @@ public class AntiHack extends MiniPlugin detector.Reset(player); } } + + + for (Iterator playerIterator = _hubAttempted.iterator(); playerIterator.hasNext();) + { + Player player = playerIterator.next(); + + if (!player.isOnline() || !player.isValid()) + { + playerIterator.remove(); + } + } } public void setEnabled(boolean b) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java index fb1578829..01da13c8c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java @@ -1012,30 +1012,29 @@ public class UHC extends TeamGame if (event.getMessage().startsWith("/kill")) event.setCancelled(true); - if (event.getMessage().startsWith("/uhc time day")) - { - this.WorldTimeSet = 4000; - event.setCancelled(true); - - Announce(event.getPlayer().getName() + " set time to Always Day!"); - } - - if (event.getMessage().startsWith("/uhc time night")) - { - this.WorldTimeSet = 16000; - event.setCancelled(true); - - Announce(event.getPlayer().getName() + " set time to Always Night!"); - } - - if (event.getMessage().startsWith("/uhc time cycle")) - { - this.WorldTimeSet = -1; - event.setCancelled(true); - - Announce(event.getPlayer().getName() + " set time to Day and Night!"); - } - +// if (event.getMessage().startsWith("/uhc time day")) +// { +// this.WorldTimeSet = 4000; +// event.setCancelled(true); +// +// Announce(event.getPlayer().getName() + " set time to Always Day!"); +// } +// +// if (event.getMessage().startsWith("/uhc time night")) +// { +// this.WorldTimeSet = 16000; +// event.setCancelled(true); +// +// Announce(event.getPlayer().getName() + " set time to Always Night!"); +// } +// +// if (event.getMessage().startsWith("/uhc time cycle")) +// { +// this.WorldTimeSet = -1; +// event.setCancelled(true); +// +// Announce(event.getPlayer().getName() + " set time to Day and Night!"); +// } } @EventHandler(priority = EventPriority.LOWEST) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java index ea59779b2..c3c0c2892 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java @@ -28,6 +28,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -207,7 +208,11 @@ public class GameHostManager implements Listener if (Manager.GetGame() == null) return; - if (UtilGear.isMat(player.getInventory().getItem(5), Material.SPECKLED_MELON)) + if (UtilGear.isMat(player.getInventory().getItem(7), Material.SPECKLED_MELON)) + return; + + if (player.getOpenInventory().getType() != InventoryType.CRAFTING && + player.getOpenInventory().getType() != InventoryType.CREATIVE) return; player.getInventory().setItem(7, ItemStackFactory.Instance.CreateStack(Material.SPECKLED_MELON, (byte)0, 1, C.cGreen + C.Bold + "/menu")); From f80e640d3432463987dbbfa64537c5f100109f7d Mon Sep 17 00:00:00 2001 From: Chiss Date: Mon, 26 Jan 2015 11:23:08 +1100 Subject: [PATCH 07/18] Map Parser voxel update Disabled spec GUI in bridges other minor changes --- .../src/mineplex/core/common/Rank.java | 1 + .../core/common/util/UtilTextBottom.java | 12 +++- .../src/mineplex/core/recharge/Recharge.java | 12 +++- .../mineplex/core/recharge/RechargeData.java | 9 ++- .../core/scoreboard/EasyScoreboard.java | 13 ---- .../src/mineplex/mapparser/MapParser.java | 60 +++++++++++++++---- .../nautilus/game/arcade/ArcadeManager.java | 22 ++----- .../game/arcade/game/games/bridge/Bridge.java | 2 + .../game/games/smash/kits/KitComingSoon.java | 36 ----------- 9 files changed, 84 insertions(+), 83 deletions(-) delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/scoreboard/EasyScoreboard.java delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitComingSoon.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java index aa5be721a..1057b9b0d 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java @@ -15,6 +15,7 @@ public enum Rank MODERATOR("Mod", ChatColor.GOLD), HELPER("Helper", ChatColor.DARK_AQUA), MAPDEV("Mapper", ChatColor.BLUE), + MAPLEAD("MapKing", ChatColor.DARK_PURPLE), //Staff ^^ diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTextBottom.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTextBottom.java index a1b70d969..56e4f6770 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTextBottom.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTextBottom.java @@ -37,8 +37,16 @@ public class UtilTextBottom public static void displayProgress(String prefix, double amount, String suffix, Player... players) { + displayProgress(prefix, amount, suffix, false, players); + } + + public static void displayProgress(String prefix, double amount, String suffix, boolean progressDirectionSwap, Player... players) + { + if (progressDirectionSwap) + amount = 1 - amount; + //Generate Bar - int bars = 12; + int bars = 24; String progressBar = C.cGreen + ""; boolean colorChange = false; for (int i=0 ; i()); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/recharge/RechargeData.java b/Plugins/Mineplex.Core/src/mineplex/core/recharge/RechargeData.java index cf06042c4..a47354f03 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/recharge/RechargeData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/recharge/RechargeData.java @@ -30,6 +30,7 @@ public class RechargeData public ItemStack Item; public boolean DisplayForce = false; + public boolean Countdown = false; //This will make the output a countdown, instead of a recharge. public boolean AttachItem; public boolean AttachDurability; @@ -62,11 +63,15 @@ public class RechargeData { if (!UtilTime.elapsed(Time, Recharge)) { - UtilTextBottom.displayProgress(C.Bold + Name, percent, UtilTime.MakeStr(Recharge - (System.currentTimeMillis() - Time)), Player); + UtilTextBottom.displayProgress(C.Bold + Name, percent, UtilTime.MakeStr(Recharge - (System.currentTimeMillis() - Time)), Countdown, Player); } else { - UtilTextBottom.display(C.cGreen + C.Bold + Name + " Recharged", Player); + + if (!Countdown) + UtilTextBottom.display(C.cGreen + C.Bold + Name + " Recharged", Player); + else + UtilTextBottom.display(C.cRed + C.Bold + Name + " Ended", Player); //PLING! if (Recharge > 4000) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/EasyScoreboard.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/EasyScoreboard.java deleted file mode 100644 index d9ed231cf..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/EasyScoreboard.java +++ /dev/null @@ -1,13 +0,0 @@ -package mineplex.core.scoreboard; - -import org.bukkit.plugin.java.JavaPlugin; - -import mineplex.core.MiniPlugin; - -public class EasyScoreboard extends MiniPlugin -{ - public EasyScoreboard(JavaPlugin plugin) - { - super("EasyScoreboard", plugin); - } -} diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java index 6da50f2ad..d43612f77 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java @@ -81,6 +81,8 @@ public class MapParser extends JavaPlugin implements Listener private List _commands = new ArrayList(); private Location _spawnLocation; + private HashMap _permissionMap = new HashMap(); + @Override public void onEnable() { @@ -127,11 +129,37 @@ public class MapParser extends JavaPlugin implements Listener ResetInventory(event.getPlayer()); DisplayHelp(player); - - for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) - player.addAttachment(plugin, "worldedit.*", true); } + @EventHandler + public void permissionUpdate(TickEvent event) + { + for (Player player : UtilServer.getPlayers()) + { + permissionSet(player); + } + } + + public void permissionSet(Player player) + { + boolean hasPermission = GetData(player.getWorld().getName()).HasAccess(player); + + if (!_permissionMap.containsKey(player) || _permissionMap.get(player) != hasPermission) + { + for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) + { + player.addAttachment(plugin, "worldedit.*", hasPermission); + player.addAttachment(plugin, "voxelsniper.sniper", hasPermission); + player.addAttachment(plugin, "voxelsniper.brush.*", hasPermission); + } + + _permissionMap.put(player, hasPermission); + + UtilPlayer.message(player, "Plugin Permissions: " + F.tf(hasPermission)); + } + } + + public void DisplayHelp(Player player) { UtilPlayer.message(player, F.main("Parser", "Listing Commands;")); @@ -491,7 +519,7 @@ public class MapParser extends JavaPlugin implements Listener System.out.println(world + ChatColor.RESET + " " + name + ChatColor.RESET + " " + event.getMessage()); } - @EventHandler + @EventHandler(priority = EventPriority.LOWEST) public void InteractCancel(PlayerInteractEvent event) { //Permission @@ -501,17 +529,23 @@ public class MapParser extends JavaPlugin implements Listener } } - @EventHandler - public void WorldeditCancel(PlayerCommandPreprocessEvent event) + @EventHandler(priority = EventPriority.LOWEST) + public void commandCancel(PlayerCommandPreprocessEvent event) { - if (event.getMessage().startsWith("//")) + if (event.getMessage().startsWith("/tp") || + event.getMessage().startsWith("/hub") || + event.getMessage().startsWith("/list") || + event.getMessage().startsWith("/map") || + event.getMessage().startsWith("/create") || + event.getMessage().startsWith("/copy") || + event.getMessage().startsWith("/delete")) + return; + + //Permission + if (!GetData(event.getPlayer().getWorld().getName()).HasAccess(event.getPlayer())) { - //Permission - if (!GetData(event.getPlayer().getWorld().getName()).HasAccess(event.getPlayer())) - { - UtilPlayer.message(event.getPlayer(), F.main("Parser", "You do not have Build-Access for this Map.")); - event.setCancelled(true); - } + UtilPlayer.message(event.getPlayer(), F.main("Parser", "You do not have Build-Access for this Map.")); + event.setCancelled(true); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 7be38e342..be778390d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -110,9 +110,9 @@ import nautilus.game.arcade.managers.GameWorldManager; import nautilus.game.arcade.managers.IdleManager; import nautilus.game.arcade.managers.MiscManager; import nautilus.game.arcade.shop.ArcadeShop; - + public class ArcadeManager extends MiniPlugin implements IRelation -{ +{ // Modules private BlockRestore _blockRestore; private Blood _blood; @@ -129,7 +129,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation private Fire _fire; private ProjectileManager _projectileManager; - + private Portal _portal; private ArcadeShop _arcadeShop; @@ -594,19 +594,9 @@ public class ArcadeManager extends MiniPlugin implements IRelation @EventHandler public void MessageJoin(PlayerJoinEvent event) { - if (_game == null || _game.AnnounceJoinQuit) - { - Player player = event.getPlayer(); - - if (_clientManager.Get(player).GetRank() != Rank.LEGEND) - event.setJoinMessage(null); - else - { - event.setJoinMessage(C.cGreen + C.Bold + "Legend " + player.getName() + " has joined!"); - UtilFirework.playFirework(player.getEyeLocation(), org.bukkit.FireworkEffect.Type.BALL_LARGE, Color.LIME, true, true); - player.getWorld().playSound(player.getEyeLocation(), Sound.WITHER_SPAWN, 2f, 1f); - } - } + if (_game != null && _game.AnnounceJoinQuit) + event.setJoinMessage(F.sys("Join", GetColor(event.getPlayer()) + event.getPlayer().getName())); + else event.setJoinMessage(null); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java index c85aaf294..25d379e7e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java @@ -149,6 +149,8 @@ public class Bridge extends TeamGame implements OreObsfucation "The last team alive wins!" }); + this.CompassSpectatorMenu = false; + _ore = new OreHider(); // Flags diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitComingSoon.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitComingSoon.java deleted file mode 100644 index 647c4d985..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitComingSoon.java +++ /dev/null @@ -1,36 +0,0 @@ -package nautilus.game.arcade.game.games.smash.kits; - -import org.bukkit.Material; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import mineplex.core.common.util.C; -import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.kit.KitAvailability; -import nautilus.game.arcade.kit.Perk; -import nautilus.game.arcade.kit.SmashKit; - -public class KitComingSoon extends SmashKit -{ - public KitComingSoon(ArcadeManager manager) - { - super(manager, C.cRed + "Coming Soon", KitAvailability.Gem, 5000, - - new String[] - { - }, - - new Perk[] - { - }, - EntityType.VILLAGER, - new ItemStack(Material.IRON_SWORD)); - } - - @Override - public void GiveItems(Player player) - { - - } -} From b98950b1217d14ea3e81a98a884ddf6083148916 Mon Sep 17 00:00:00 2001 From: Chiss Date: Mon, 26 Jan 2015 11:31:42 +1100 Subject: [PATCH 08/18] map parser visual changes --- .../mapparser/command/ListCommand.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java index 7cd543d11..1eb97129c 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java @@ -5,6 +5,7 @@ import java.io.File; import org.bukkit.ChatColor; import org.bukkit.entity.Player; +import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; import mineplex.mapparser.GameType; @@ -15,6 +16,8 @@ import mineplex.mapparser.MapParser; */ public class ListCommand extends BaseCommand { + private boolean _colorSwitch = false; + public ListCommand(MapParser plugin) { super(plugin, "list"); @@ -27,9 +30,13 @@ public class ListCommand extends BaseCommand { UtilPlayer.message(player, F.main("Parser", "Listing Maps;")); + boolean colorSwitch = false; + for (GameType gameType : GameType.values()) { - listMaps(player, gameType); + listMaps(player, gameType, colorSwitch); + + colorSwitch = !colorSwitch; } } else if (args.length == 1) @@ -46,16 +53,18 @@ public class ListCommand extends BaseCommand UtilPlayer.message(player, F.main("Parser", "Listing Maps for gametype " + F.elem(gameType.GetName()))); - listMaps(player, gameType); + listMaps(player, gameType, false); } return true; } - private void listMaps(Player player, GameType gameType) + private void listMaps(Player player, GameType gameType, boolean colorSwitch) { String maps = ""; ChatColor color = ChatColor.YELLOW; + if (colorSwitch) + color = ChatColor.AQUA; File mapsFolder = new File("map" + File.separator + gameType.GetName()); if (!mapsFolder.exists()) @@ -70,14 +79,18 @@ public class ListCommand extends BaseCommand if (color == ChatColor.YELLOW) color = ChatColor.GOLD; - else + else if (color == ChatColor.GOLD) color = ChatColor.YELLOW; + else if (color == ChatColor.AQUA) + color = ChatColor.DARK_AQUA; + else if (color == ChatColor.DARK_AQUA) + color = ChatColor.AQUA; } // Print line of maps for specific gametype if (maps.length() > 0) { - maps = F.elem(gameType.name()) + "> " + maps; + maps = F.elem(colorSwitch ? C.cBlue : C.cRed + gameType.name()) + "> " + maps; player.sendMessage(maps); } } From 90573903dae87dd002605053537678b73bacea88 Mon Sep 17 00:00:00 2001 From: Chiss Date: Mon, 26 Jan 2015 11:33:47 +1100 Subject: [PATCH 09/18] added new gametypes for parser --- .../Mineplex.MapParser/src/mineplex/mapparser/GameType.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java index aaf2584d1..6dd3baf51 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java @@ -5,6 +5,10 @@ public enum GameType //Mini Other("Other"), Unknown("Unknown"), + Upload("Upload"), + + Lobby("Lobby"), + BaconBrawl("Bacon Brawl"), Barbarians("A Barbarians Life"), Bridge("The Bridges"), @@ -54,6 +58,7 @@ public enum GameType WitherAssault("Wither Assault"), Wizards("Wizards"), ZombieSurvival("Zombie Survival"), + None("None"); String _name; From 19208de075ad1497b8a0fcd70edc875d1c8ea1ac Mon Sep 17 00:00:00 2001 From: Chiss Date: Mon, 26 Jan 2015 11:53:48 +1100 Subject: [PATCH 10/18] mroe map parser ^_^ --- .../src/mineplex/mapparser/GameType.java | 6 ++-- .../mapparser/command/CreateCommand.java | 15 ++-------- .../mapparser/command/ListCommand.java | 30 +++++++++++-------- 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java index 6dd3baf51..a321727b7 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/GameType.java @@ -5,8 +5,6 @@ public enum GameType //Mini Other("Other"), Unknown("Unknown"), - Upload("Upload"), - Lobby("Lobby"), BaconBrawl("Bacon Brawl"), @@ -59,6 +57,10 @@ public enum GameType Wizards("Wizards"), ZombieSurvival("Zombie Survival"), + Upload("Upload"), + InProgress("In Progress"), + + None("None"); String _name; diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/CreateCommand.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/CreateCommand.java index cc0ca5b2b..623193b76 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/CreateCommand.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/CreateCommand.java @@ -26,22 +26,13 @@ public class CreateCommand extends BaseCommand @Override public boolean execute(Player player, String alias, String[] args) { - if (args.length < 2) + if (args.length < 1) { - message(player, "Invalid Input. " + F.elem("/create ")); + message(player, "Invalid Input. " + F.elem("/create ")); return true; } - GameType gameType = null; - - try - { - gameType = GameType.valueOf(args[1]); - } - catch (Exception e) - { - getPlugin().sendValidGameTypes(player); - } + GameType gameType = GameType.InProgress; String worldName = "map/" + gameType.GetName() + "/" + args[0]; diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java index 1eb97129c..835973fb1 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java @@ -34,9 +34,8 @@ public class ListCommand extends BaseCommand for (GameType gameType : GameType.values()) { - listMaps(player, gameType, colorSwitch); - - colorSwitch = !colorSwitch; + if (listMaps(player, gameType, colorSwitch)) + colorSwitch = !colorSwitch; } } else if (args.length == 1) @@ -59,16 +58,16 @@ public class ListCommand extends BaseCommand return true; } - private void listMaps(Player player, GameType gameType, boolean colorSwitch) + private boolean listMaps(Player player, GameType gameType, boolean colorSwitch) { String maps = ""; - ChatColor color = ChatColor.YELLOW; + ChatColor color = ChatColor.AQUA; if (colorSwitch) - color = ChatColor.AQUA; + color = ChatColor.GREEN; File mapsFolder = new File("map" + File.separator + gameType.GetName()); if (!mapsFolder.exists()) - return; + return false; for (File file : mapsFolder.listFiles()) { @@ -77,21 +76,26 @@ public class ListCommand extends BaseCommand maps += color + file.getName() + " "; - if (color == ChatColor.YELLOW) - color = ChatColor.GOLD; - else if (color == ChatColor.GOLD) - color = ChatColor.YELLOW; - else if (color == ChatColor.AQUA) + if (color == ChatColor.AQUA) color = ChatColor.DARK_AQUA; else if (color == ChatColor.DARK_AQUA) color = ChatColor.AQUA; + + else if (color == ChatColor.GREEN) + color = ChatColor.DARK_GREEN; + else if (color == ChatColor.DARK_GREEN) + color = ChatColor.GREEN; } // Print line of maps for specific gametype if (maps.length() > 0) { - maps = F.elem(colorSwitch ? C.cBlue : C.cRed + gameType.name()) + "> " + maps; + maps = F.elem(ChatColor.RESET + C.Scramble + "!" + ChatColor.RESET + C.Bold + gameType.name()) + "> " + maps; player.sendMessage(maps); + + return true; } + + return false; } } From 290e4d69df9631c5854812602b49ada0e8ad9cf8 Mon Sep 17 00:00:00 2001 From: Chiss Date: Tue, 27 Jan 2015 13:59:28 +1100 Subject: [PATCH 11/18] map parser update --- .../src/mineplex/mapparser/MapParser.java | 4 +- .../src/mineplex/mapparser/Parse.java | 4 +- ...ParseCommand.java => ParseCommand200.java} | 8 +-- .../mapparser/command/ParseCommand400.java | 64 +++++++++++++++++++ .../mapparser/command/ParseCommand600.java | 64 +++++++++++++++++++ 5 files changed, 137 insertions(+), 7 deletions(-) rename Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/{ParseCommand.java => ParseCommand200.java} (91%) create mode 100644 Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand400.java create mode 100644 Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand600.java diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java index d43612f77..565bc5778 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java @@ -66,7 +66,7 @@ import mineplex.mapparser.command.HubCommand; import mineplex.mapparser.command.ListCommand; import mineplex.mapparser.command.MapCommand; import mineplex.mapparser.command.NameCommand; -import mineplex.mapparser.command.ParseCommand; +import mineplex.mapparser.command.ParseCommand600; import mineplex.mapparser.command.RenameCommand; import mineplex.mapparser.command.SaveCommand; import mineplex.mapparser.command.WorldsCommand; @@ -106,7 +106,7 @@ public class MapParser extends JavaPlugin implements Listener _commands.add(new ListCommand(this)); _commands.add(new MapCommand(this)); _commands.add(new NameCommand(this)); - _commands.add(new ParseCommand(this)); + _commands.add(new ParseCommand600(this)); _commands.add(new RenameCommand(this)); _commands.add(new SaveCommand(this)); _commands.add(new WorldsCommand(this)); diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/Parse.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/Parse.java index cd47e2e80..a4702cc64 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/Parse.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/Parse.java @@ -46,7 +46,7 @@ public class Parse private int _processed = 0; - public Parse(MapParser host, World world, String[] args, Location loc, MapData data) + public Parse(MapParser host, World world, String[] args, Location loc, MapData data, int size) { Host = host; @@ -56,6 +56,8 @@ public class Parse _mapData = data; + _size = size; + for (String arg : args) Host.Announce("Parse Arg: " + F.elem(arg)); diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand200.java similarity index 91% rename from Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand.java rename to Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand200.java index 2490c72a8..91b88a840 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand200.java @@ -12,11 +12,11 @@ import mineplex.mapparser.Parse; /** * Created by Shaun on 8/15/2014. */ -public class ParseCommand extends BaseCommand +public class ParseCommand200 extends BaseCommand { - public ParseCommand(MapParser plugin) + public ParseCommand200(MapParser plugin) { - super(plugin, "parse"); + super(plugin, "parse200"); } @Override @@ -57,7 +57,7 @@ public class ParseCommand extends BaseCommand } //Parse the World - getPlugin().setCurrentParse(new Parse(getPlugin(), parseableWorld, args, parseLoc, getPlugin().GetData(parseLoc.getWorld().getName()))); + getPlugin().setCurrentParse(new Parse(getPlugin(), parseableWorld, args, parseLoc, getPlugin().GetData(parseLoc.getWorld().getName()), 200)); return true; } diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand400.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand400.java new file mode 100644 index 000000000..02f0a0493 --- /dev/null +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand400.java @@ -0,0 +1,64 @@ +package mineplex.mapparser.command; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; + +import mineplex.core.common.util.F; +import mineplex.mapparser.MapData; +import mineplex.mapparser.MapParser; +import mineplex.mapparser.Parse; + +/** + * Created by Shaun on 8/15/2014. + */ +public class ParseCommand400 extends BaseCommand +{ + public ParseCommand400(MapParser plugin) + { + super(plugin, "parse400"); + } + + @Override + public boolean execute(Player player, String alias, String[] args) + { + if (!player.isOp()) + { + message(player, "Only OPs can parse maps!"); + return true; + } + + Location parseLoc = player.getLocation(); + + World world = parseLoc.getWorld(); + + MapData data = getPlugin().GetData(world.getName()); + + if (data.MapName.equals("null") || data.MapCreator.equals("null") || data.MapGameType.equals("null")) + { + message(player, "Map Name/Author/GameType are not set!"); + return true; + } + + //Teleport Players Out + for (Player worldPlayer : world.getPlayers()) + { + worldPlayer.teleport(getPlugin().getSpawnLocation()); + message(player, "World " + F.elem(world.getName()) + " is preparing to be parsed."); + } + + //Unload World > Copy + World parseableWorld = getPlugin().getWorldManager().prepMapParse(world); + + if (parseableWorld == null) + { + message(player, "Could not prepare world for parsing!"); + return true; + } + + //Parse the World + getPlugin().setCurrentParse(new Parse(getPlugin(), parseableWorld, args, parseLoc, getPlugin().GetData(parseLoc.getWorld().getName()), 400)); + + return true; + } +} diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand600.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand600.java new file mode 100644 index 000000000..9271553ef --- /dev/null +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ParseCommand600.java @@ -0,0 +1,64 @@ +package mineplex.mapparser.command; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; + +import mineplex.core.common.util.F; +import mineplex.mapparser.MapData; +import mineplex.mapparser.MapParser; +import mineplex.mapparser.Parse; + +/** + * Created by Shaun on 8/15/2014. + */ +public class ParseCommand600 extends BaseCommand +{ + public ParseCommand600(MapParser plugin) + { + super(plugin, "parse","parse600"); + } + + @Override + public boolean execute(Player player, String alias, String[] args) + { + if (!player.isOp()) + { + message(player, "Only OPs can parse maps!"); + return true; + } + + Location parseLoc = player.getLocation(); + + World world = parseLoc.getWorld(); + + MapData data = getPlugin().GetData(world.getName()); + + if (data.MapName.equals("null") || data.MapCreator.equals("null") || data.MapGameType.equals("null")) + { + message(player, "Map Name/Author/GameType are not set!"); + return true; + } + + //Teleport Players Out + for (Player worldPlayer : world.getPlayers()) + { + worldPlayer.teleport(getPlugin().getSpawnLocation()); + message(player, "World " + F.elem(world.getName()) + " is preparing to be parsed."); + } + + //Unload World > Copy + World parseableWorld = getPlugin().getWorldManager().prepMapParse(world); + + if (parseableWorld == null) + { + message(player, "Could not prepare world for parsing!"); + return true; + } + + //Parse the World + getPlugin().setCurrentParse(new Parse(getPlugin(), parseableWorld, args, parseLoc, getPlugin().GetData(parseLoc.getWorld().getName()), 600)); + + return true; + } +} From 94f79990e4e13ee5a249417364badff6a14e110f Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Tue, 27 Jan 2015 21:09:15 +1300 Subject: [PATCH 12/18] Kit changes to wizards --- .../arcade/game/games/wizards/Wizards.java | 19 +++---- .../kit/{KitHermit.java => KitMage.java} | 10 ++-- .../game/games/wizards/kit/KitMystic.java | 2 +- .../kit/{KitScholar.java => KitSorcerer.java} | 8 +-- .../games/wizards/kit/KitWitchDoctor.java | 2 +- .../game/games/wizards/kit/KitWizard.java | 49 ------------------- .../games/wizards/spells/SpellRumble.java | 12 +++++ 7 files changed, 33 insertions(+), 69 deletions(-) rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/{KitHermit.java => KitMage.java} (85%) rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/{KitScholar.java => KitSorcerer.java} (88%) delete mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWizard.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 47fcc1b59..36b4d7491 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -36,11 +36,11 @@ import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.SoloGame; -import nautilus.game.arcade.game.games.wizards.kit.KitHermit; +import nautilus.game.arcade.game.games.wizards.kit.KitMage; import nautilus.game.arcade.game.games.wizards.kit.KitMystic; -import nautilus.game.arcade.game.games.wizards.kit.KitScholar; +import nautilus.game.arcade.game.games.wizards.kit.KitSorcerer; import nautilus.game.arcade.game.games.wizards.kit.KitWitchDoctor; -import nautilus.game.arcade.game.games.wizards.kit.KitWizard; +import nautilus.game.arcade.game.games.wizards.kit.KitMage; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickBlock; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickEntity; @@ -129,15 +129,15 @@ public class Wizards extends SoloGame setKits(new Kit[] { - new KitWizard(manager), + new KitMage(manager), - new KitScholar(manager), - - new KitHermit(manager), + new KitSorcerer(manager), new KitMystic(manager), - new KitWitchDoctor(manager) + new KitWitchDoctor(manager), + + // new KitWarlock(manager) }); _wizard = new WizardSpellMenu("Wizard Spell Menu", getArcadeManager().GetPlugin(), this); @@ -1030,7 +1030,7 @@ public class Wizards extends SoloGame _wizards.put(player.getName(), wizard); - if (kit instanceof KitHermit) + if (kit instanceof KitMage) { for (int i = 0; i < 100; i++) { @@ -1291,6 +1291,7 @@ public class Wizards extends SoloGame if (result != null && (result.getType().name().contains("_SWORD") || result.getType().name().contains("_AXE"))) { event.getInventory().setResult(new ItemStack(Material.AIR)); + UtilPlayer.message(event.getViewers().get(0), C.cRed + "You may not craft weaponsa"); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitHermit.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java similarity index 85% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitHermit.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java index 6af80477b..9b3a367eb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitHermit.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java @@ -13,13 +13,13 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -public class KitHermit extends Kit +public class KitMage extends Kit { - public KitHermit(ArcadeManager manager) + public KitMage(ArcadeManager manager) { - super(manager, "Hermit", KitAvailability.Free, new String[] + super(manager, "Mage", KitAvailability.Free, new String[] { - "Start with a random spell" + "Start with an extra spell" }, new Perk[0], EntityType.WITCH, new ItemStack(Material.BLAZE_ROD)); } @@ -28,7 +28,7 @@ public class KitHermit extends Kit { for (int i = 0; i < 5; i++) { - if (i < 3) + if (i < 2) { player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java index 496b82afc..7b5320365 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMystic.java @@ -28,7 +28,7 @@ public class KitMystic extends Kit { for (int i = 0; i < 5; i++) { - if (i < 3) + if (i < 2) { player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitScholar.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java similarity index 88% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitScholar.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java index 85345f51f..0ed52b42d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitScholar.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitSorcerer.java @@ -13,11 +13,11 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -public class KitScholar extends Kit +public class KitSorcerer extends Kit { - public KitScholar(ArcadeManager manager) + public KitSorcerer(ArcadeManager manager) { - super(manager, "Scholar", KitAvailability.Free, new String[] + super(manager, "Sorcerer", KitAvailability.Free, new String[] { "Start out with an extra wand" }, new Perk[0], EntityType.WITCH, new ItemStack(Material.BLAZE_ROD)); @@ -28,7 +28,7 @@ public class KitScholar extends Kit { for (int i = 0; i < 5; i++) { - if (i < 4) + if (i < 3) { player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java index b33127c65..5ae610300 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWitchDoctor.java @@ -34,7 +34,7 @@ public class KitWitchDoctor extends Kit { for (int i = 0; i < 5; i++) { - if (i < 3) + if (i < 2) { player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWizard.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWizard.java deleted file mode 100644 index 49261c29c..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitWizard.java +++ /dev/null @@ -1,49 +0,0 @@ -package nautilus.game.arcade.game.games.wizards.kit; - -import mineplex.core.common.util.C; -import mineplex.core.itemstack.ItemBuilder; -import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.game.games.wizards.Wizards; -import nautilus.game.arcade.kit.Kit; -import nautilus.game.arcade.kit.KitAvailability; -import nautilus.game.arcade.kit.Perk; - -import org.bukkit.Material; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -public class KitWizard extends Kit -{ - public KitWizard(ArcadeManager manager) - { - super(manager, "Wizard", KitAvailability.Free, new String[] - { - "The kit all wizards initally use" - }, new Perk[0], EntityType.WITCH, new ItemStack(Material.BLAZE_ROD)); - } - - @Override - public void GiveItems(Player player) - { - for (int i = 0; i < 5; i++) - { - if (i < 3) - { - player.getInventory().addItem(((Wizards) Manager.GetGame()).makeUnusedWand()); - } - else - { - player.getInventory().addItem( - - new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 8) - - .setTitle(C.cGray + "Empty wand slot" + ((Wizards) Manager.GetGame()).buildTime()) - - .addLore(C.cGray + C.Italics + "Wands can be found in chests and on dead players") - - .build()); - } - } - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java index 135f0d8b1..2dcf444f6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java @@ -12,9 +12,11 @@ import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.entity.AnimalTamer; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.entity.Tameable; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.scheduler.BukkitRunnable; @@ -124,6 +126,16 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick if (entity instanceof LivingEntity && player != entity && !_effected.contains(entity.getEntityId())) { + if (entity instanceof Tameable) + { + AnimalTamer tamer = ((Tameable) entity).getOwner(); + + if (tamer != null && tamer == player) + { + continue; + } + } + Location loc = entity.getLocation(); if (loc.getBlockX() == b.getX() && loc.getBlockZ() == b.getZ()) From 2dfdde4457bb525e0b6115a139f250175a15f44e Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Wed, 28 Jan 2015 03:01:44 +1300 Subject: [PATCH 13/18] Kit mage will now start with two spells --- .../arcade/game/games/wizards/Wizards.java | 24 ++++++++++--------- .../game/games/wizards/kit/KitMage.java | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index 36b4d7491..a7c2909c6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -40,7 +40,6 @@ import nautilus.game.arcade.game.games.wizards.kit.KitMage; import nautilus.game.arcade.game.games.wizards.kit.KitMystic; import nautilus.game.arcade.game.games.wizards.kit.KitSorcerer; import nautilus.game.arcade.game.games.wizards.kit.KitWitchDoctor; -import nautilus.game.arcade.game.games.wizards.kit.KitMage; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickBlock; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClickEntity; @@ -136,8 +135,8 @@ public class Wizards extends SoloGame new KitMystic(manager), new KitWitchDoctor(manager), - - // new KitWarlock(manager) + + // new KitWarlock(manager) }); _wizard = new WizardSpellMenu("Wizard Spell Menu", getArcadeManager().GetPlugin(), this); @@ -1032,18 +1031,21 @@ public class Wizards extends SoloGame if (kit instanceof KitMage) { - for (int i = 0; i < 100; i++) + for (int a = 0; a < 2; a++) { - SpellType spell = SpellType.values()[UtilMath.r(SpellType.values().length)]; - - if (wizard.getSpellLevel(spell) < spell.getMaxLevel()) + for (int i = 0; i < 100; i++) { - onSpellLearn(player, spell); + SpellType spell = SpellType.values()[UtilMath.r(SpellType.values().length)]; - UtilTextMiddle.display("", spell.getElement().getColor() + spell.getSpellName() + " leveled to " - + spell.getElement().getColor() + wizard.getSpellLevel(spell), 5, 40, 5, player); + if (wizard.getSpellLevel(spell) < spell.getMaxLevel()) + { + onSpellLearn(player, spell); - break; + addMiddleText(player, spell.getElement().getColor() + spell.getSpellName() + " leveled to " + + spell.getElement().getColor() + wizard.getSpellLevel(spell)); + + break; + } } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java index 9b3a367eb..5372ce4cf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/kit/KitMage.java @@ -19,7 +19,7 @@ public class KitMage extends Kit { super(manager, "Mage", KitAvailability.Free, new String[] { - "Start with an extra spell" + "Start with two extra spells" }, new Perk[0], EntityType.WITCH, new ItemStack(Material.BLAZE_ROD)); } From 7f4bcd1210817fd938a9a55dec419eba1a075e33 Mon Sep 17 00:00:00 2001 From: Chiss Date: Thu, 29 Jan 2015 11:54:59 +1100 Subject: [PATCH 14/18] Smash Update new scoreboard (not implemented yet) reward changes --- .../mineplex/core/reward/RewardManager.java | 32 +-- .../mineplex/core/reward/RewardRarity.java | 7 +- .../src/mineplex/core/reward/RewardType.java | 37 +++ .../core/scoreboard/PlayerScoreboard.java | 195 ++++++++++++++ .../core/scoreboard/ScoreboardData.java | 108 ++++++++ .../core/scoreboard/ScoreboardManager.java | 151 +++++++++++ .../elements/ScoreboardElement.java | 12 + .../elements/ScoreboardElementCoinCount.java | 19 ++ .../elements/ScoreboardElementGemCount.java | 19 ++ .../elements/ScoreboardElementRank.java | 37 +++ .../elements/ScoreboardElementScores.java | 69 +++++ .../elements/ScoreboardElementText.java | 28 ++ .../core/treasure/TreasureManager.java | 5 +- .../hub/modules/HubScoreboardManager.java | 74 ++++++ .../src/mineplex/mapparser/MapParser.java | 4 + .../src/nautilus/game/arcade/GameFactory.java | 2 +- .../deathtag/kits/AbstractKitChaser.java | 4 +- .../game/games/dragonescape/DragonEscape.java | 2 +- .../game/games/halloween/kits/KitFinn.java | 3 +- .../games/halloween/kits/KitRobinHood.java | 3 +- .../game/games/halloween/kits/KitThor.java | 3 +- .../game/games/milkcow/kits/KitCow.java | 3 +- .../games/searchanddestroy/KitEvolvePage.java | 12 + .../kits/trooper/KitTitan.java | 1 + .../arcade/game/games/smash/SuperSmash.java | 245 ++++++++++++----- .../game/games/smash/kits/KitBlaze.java | 6 +- .../game/games/smash/kits/KitChicken.java | 13 +- .../arcade/game/games/smash/kits/KitCow.java | 3 +- .../game/games/smash/kits/KitCreeper.java | 4 +- .../game/games/smash/kits/KitEnderman.java | 10 +- .../game/games/smash/kits/KitGolem.java | 7 +- .../game/games/smash/kits/KitKnight.java | 4 +- .../game/games/smash/kits/KitMagmaCube.java | 5 +- .../arcade/game/games/smash/kits/KitPig.java | 3 +- .../game/games/smash/kits/KitSheep.java | 9 +- .../games/smash/kits/KitSkeletalHorse.java | 11 +- .../game/games/smash/kits/KitSkeleton.java | 9 +- .../game/games/smash/kits/KitSkySquid.java | 37 ++- .../game/games/smash/kits/KitSlime.java | 86 +++++- .../game/games/smash/kits/KitSnowman.java | 13 +- .../game/games/smash/kits/KitSpider.java | 5 +- .../game/games/smash/kits/KitWitch.java | 40 ++- .../game/games/smash/kits/KitWither.java | 4 +- .../games/smash/kits/KitWitherSkeleton.java | 11 +- .../arcade/game/games/smash/kits/KitWolf.java | 3 +- .../game/games/smash/kits/KitZombie.java | 97 +++++++ .../games/wither/kit/KitWitherMinion.java | 4 + .../src/nautilus/game/arcade/kit/Kit.java | 2 - .../nautilus/game/arcade/kit/SmashKit.java | 155 ++++++++++- .../nautilus/game/arcade/kit/SmashPerk.java | 48 ++++ .../game/arcade/kit/perks/PerkBarrage.java | 20 +- .../game/arcade/kit/perks/PerkBatForm.java | 248 ++++++++++++++++++ .../game/arcade/kit/perks/PerkBatWave.java | 13 +- .../game/arcade/kit/perks/PerkBlink.java | 9 +- .../game/arcade/kit/perks/PerkBlizzard.java | 12 +- .../game/arcade/kit/perks/PerkBlockToss.java | 15 +- .../arcade/kit/perks/PerkBoneExplosion.java | 9 +- .../game/arcade/kit/perks/PerkBoneRush.java | 102 +++---- .../arcade/kit/perks/PerkChickenRocket.java | 13 +- .../arcade/kit/perks/PerkCreeperExplode.java | 69 ++++- .../kit/perks/PerkCreeperSulphurBomb.java | 15 +- .../game/arcade/kit/perks/PerkDamageSnow.java | 2 +- .../arcade/kit/perks/PerkDeadlyBones.java | 55 ++++ .../arcade/kit/perks/PerkDeathsGrasp.java | 187 +++++++++++++ .../game/arcade/kit/perks/PerkDoubleJump.java | 14 + .../game/arcade/kit/perks/PerkEarthquake.java | 107 ++++++++ .../game/arcade/kit/perks/PerkEggGun.java | 33 ++- .../arcade/kit/perks/PerkEndermanDragon.java | 142 ++++++++++ .../game/arcade/kit/perks/PerkExplode.java | 6 +- .../game/arcade/kit/perks/PerkFirefly.java | 28 +- .../game/arcade/kit/perks/PerkFlap.java | 7 +- .../game/arcade/kit/perks/PerkFleshArrow.java | 112 ++++++++ .../game/arcade/kit/perks/PerkFletcher.java | 3 + .../game/arcade/kit/perks/PerkHorseKick.java | 62 +---- .../arcade/kit/perks/PerkInfernalHorror.java | 43 +-- .../game/arcade/kit/perks/PerkInferno.java | 6 +- .../game/arcade/kit/perks/PerkInkBlast.java | 22 +- .../game/arcade/kit/perks/PerkLazer.java | 6 +- .../game/arcade/kit/perks/PerkMagmaBlast.java | 23 +- .../arcade/kit/perks/PerkMeteorShower.java | 48 ++++ .../arcade/kit/perks/PerkNightLivingDead.java | 141 ++++++++++ .../game/arcade/kit/perks/PerkPigZombie.java | 10 +- .../game/arcade/kit/perks/PerkRopedArrow.java | 7 +- .../arcade/kit/perks/PerkSeismicSlam.java | 5 +- .../arcade/kit/perks/PerkSheepHoming.java | 136 ++++++++++ .../kit/perks/PerkSkeletonArrowStorm.java | 69 +++++ .../arcade/kit/perks/PerkSlimeRocket.java | 91 +++---- .../game/arcade/kit/perks/PerkSlimeSlam.java | 19 +- .../game/arcade/kit/perks/PerkSnowTurret.java | 160 +++++++++++ .../game/arcade/kit/perks/PerkStormSquid.java | 174 ++++++++++++ .../game/arcade/kit/perks/PerkSuperSquid.java | 15 +- .../game/arcade/kit/perks/PerkWebShot.java | 3 +- .../arcade/kit/perks/PerkWitchPotion.java | 57 +++- .../game/arcade/kit/perks/PerkWitherForm.java | 134 ++++++++++ .../arcade/kit/perks/PerkWitherImage.java | 37 ++- .../arcade/kit/perks/PerkWitherSkull.java | 92 ++++--- .../game/arcade/kit/perks/PerkWoolBomb.java | 2 +- .../arcade/kit/perks/PerkZombieNightDead.java | 15 ++ .../arcade/kit/perks/data/EarthquakeData.java | 15 ++ .../kit/perks/data/HomingSheepData.java | 52 ++++ .../kit/perks/data/MeteorShowerData.java | 44 ++++ .../kit/perks/data/NightLivingDeadData.java | 21 ++ .../arcade/kit/perks/data/SonicBoomData.java | 21 ++ .../game/arcade/managers/GameLootManager.java | 3 +- .../game/arcade/stats/AssistsStatTracker.java | 4 +- .../arcade/stats/DamageDealtStatTracker.java | 4 +- .../arcade/stats/DamageTakenStatTracker.java | 14 +- .../game/arcade/stats/DeathsStatTracker.java | 4 +- .../game/arcade/stats/KillsStatTracker.java | 4 +- .../game/arcade/stats/LoseStatTracker.java | 4 +- .../game/arcade/stats/WinStatTracker.java | 4 +- 111 files changed, 3911 insertions(+), 545 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/scoreboard/PlayerScoreboard.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/scoreboard/ScoreboardData.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/scoreboard/ScoreboardManager.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElement.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementCoinCount.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementGemCount.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementRank.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementScores.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementText.java create mode 100644 Plugins/Mineplex.Hub/src/mineplex/hub/modules/HubScoreboardManager.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitZombie.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashPerk.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEarthquake.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFleshArrow.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMeteorShower.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkNightLivingDead.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSkeletonArrowStorm.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherForm.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkZombieNightDead.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/EarthquakeData.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/HomingSheepData.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/MeteorShowerData.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/NightLivingDeadData.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/SonicBoomData.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java index f3f8c5df7..6d2b90bee 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java @@ -279,7 +279,7 @@ public class RewardManager treasureList.add(reward); } - public Reward[] getRewards(Player player, boolean isChestOpening) + public Reward[] getRewards(Player player, RewardType type) { int currentReward = 0; Reward[] rewards = new Reward[4]; @@ -287,7 +287,7 @@ public class RewardManager while (currentReward < 4) { - Reward reward = nextReward(player, rewards, currentReward == 3 && !hasUncommon, isChestOpening); + Reward reward = nextReward(player, rewards, currentReward == 3 && !hasUncommon, type); if (reward == null) { @@ -321,32 +321,10 @@ public class RewardManager // return nextReward(player, excludedRewards, false, isChestOpening); // } - public Reward nextReward(Player player, Reward[] excludedRewards, boolean requiresUncommon, boolean isChestOpening) + public Reward nextReward(Player player, Reward[] excludedRewards, boolean requiresUncommon, RewardType type) { - double rand = _random.nextDouble(); - RewardRarity rarity; - - if (isChestOpening ? rand <= 0.01 : rand <= 0.0001) - { - // 1% or 0.01% - rarity = RewardRarity.LEGENDARY; - } - else if (isChestOpening ? rand <= 0.05 : rand <= 0.001) - { - // 4% or 0.09% - rarity = RewardRarity.RARE; - } - else if ((isChestOpening ? rand <= 0.3 : rand <= 0.03) || requiresUncommon) - { - // 25% or 2.9% - rarity = RewardRarity.UNCOMMON; - } - else - { - // 70% or 97% - rarity = RewardRarity.COMMON; - } - + RewardRarity rarity = type.generateRarity(requiresUncommon); + List treasureList = _treasureMap.get(rarity); int totalWeight = 0; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardRarity.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardRarity.java index fd2469613..2754ad3c5 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardRarity.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardRarity.java @@ -14,7 +14,12 @@ public enum RewardRarity * (Fireworks, sounds, etc) */ - OTHER("Other", cWhite), COMMON("Common", cAqua), UNCOMMON("Uncommon", cGreen), RARE("Rare", cGold), LEGENDARY("Legendary", cRed); + OTHER("Other", cWhite), + COMMON("Common", cAqua), + UNCOMMON("Uncommon", cGreen), + RARE("Rare", cGold), + LEGENDARY("Legendary", cRed), + MYTHICAL("Mythical", C.cBlack); private String _name; private String _color; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java new file mode 100644 index 000000000..55b206e3a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java @@ -0,0 +1,37 @@ +package mineplex.core.reward; + +public enum RewardType +{ + //% Chances Mythic Legend Rare Uncommon + GameLoot( 0.000001, 0.001, 0.004, 3), + BasicChest( 0, 0.01, 0.04, 5), + HeroicChest( 0, 1, 4, 25), + LegendaryChest( 1, 2, 8, 40); + + private double _mythicalChance; + private double _legendaryChance; + private double _rareChance; + private double _uncommonChance; + + RewardType(double mythical, double legend, double rare, double uncommon) + { + _mythicalChance = (mythical / 100d); + _legendaryChance = _mythicalChance + (legend / 100d); //Add previous chance to prep for generateRarity random values. + _rareChance = _legendaryChance + (rare / 100d); + _uncommonChance = _rareChance + (uncommon / 100d); + } + + public RewardRarity generateRarity(boolean requiresUncommon) + { + double rand = Math.random(); + + RewardRarity rarity = RewardRarity.COMMON; + + if (rand <= _mythicalChance) rarity = RewardRarity.MYTHICAL; + else if (rand <= _legendaryChance) rarity = RewardRarity.LEGENDARY; + else if (rand <= _rareChance) rarity = RewardRarity.RARE; + else if (rand <= _uncommonChance || requiresUncommon) rarity = RewardRarity.UNCOMMON; + + return rarity; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/PlayerScoreboard.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/PlayerScoreboard.java new file mode 100644 index 000000000..f60381a72 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/PlayerScoreboard.java @@ -0,0 +1,195 @@ +package mineplex.core.scoreboard; + +import java.util.ArrayList; + +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilMath; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +public class PlayerScoreboard +{ + private ScoreboardManager _manager; + + private String _scoreboardData = "default"; + + private Scoreboard _scoreboard; + private Objective _sideObjective; + + private ArrayList _currentLines = new ArrayList(); + + private String[] _teamNames; + + public PlayerScoreboard(ScoreboardManager manager, Player player) + { + _manager = manager; + + + } + + private void addTeams(Player player) + { + for (Rank rank : Rank.values()) + { + if (rank != Rank.ALL) + _scoreboard.registerNewTeam(rank.Name).setPrefix(rank.GetTag(true, true) + ChatColor.RESET + " "); + else + _scoreboard.registerNewTeam(rank.Name).setPrefix(""); + } + + _scoreboard.registerNewTeam("Party").setPrefix(ChatColor.LIGHT_PURPLE + C.Bold + "Party" + ChatColor.RESET + " "); + + for (Player otherPlayer : Bukkit.getOnlinePlayers()) + { + if (_manager.getClients().Get(otherPlayer) == null) + continue; + + String rankName = _manager.getClients().Get(player).GetRank().Name; + String otherRankName = _manager.getClients().Get(otherPlayer).GetRank().Name; + + if (!_manager.getClients().Get(player).GetRank().Has(Rank.ULTRA) && _manager.getDonation().Get(player.getName()).OwnsUltraPackage()) + { + rankName = Rank.ULTRA.Name; + } + + if (!_manager.getClients().Get(otherPlayer).GetRank().Has(Rank.ULTRA) && _manager.getDonation().Get(otherPlayer.getName()).OwnsUltraPackage()) + { + otherRankName = Rank.ULTRA.Name; + } + + //Add Other to Self + _scoreboard.getTeam(otherRankName).addPlayer(otherPlayer); + + //Add Self to Other + otherPlayer.getScoreboard().getTeam(rankName).addPlayer(player); + } + } + + private ScoreboardData getData() + { + ScoreboardData data = _manager.getData(_scoreboardData, false); + if (data != null) + return data; + + //Revert to default + _scoreboardData = "default"; + return _manager.getData(_scoreboardData, false); + } + + public void draw(ScoreboardManager manager, Player player) + { + ScoreboardData data = getData(); + + if (data == null) + return; + + for (int i=0 ; i i) + { + String oldLine = _currentLines.get(i); + + if (oldLine.equals(newLine)) + continue; + } + + //Update + Team team = _scoreboard.getTeam(_teamNames[i]); + if (team == null) + { + System.out.println("Scoreboard Error: Line Team Not Found!"); + return; + } + + //Set Line Prefix/Suffix + team.setPrefix(newLine.substring(0, Math.min(newLine.length(), 16))); + team.setSuffix(ChatColor.getLastColors(newLine) + newLine.substring(team.getPrefix().length(), Math.min(newLine.length(), 32))); + + //Line + _sideObjective.getScore(_teamNames[i]).setScore(15-i); + } + + //Hide Old Unused + if (_currentLines.size() > data.getLines(manager, player).size()) + { + for (int i=data.getLines(manager, player).size() ; i<_currentLines.size() ; i++) + { + _scoreboard.resetScores(_teamNames[i]); + } + } + + //Save New State + _currentLines = data.getLines(manager, player); + } + + public void setTitle(String out) + { + _sideObjective.setDisplayName(out); + } + + public void assignScoreboard(Player player, ScoreboardData data) + { + //Scoreboard + _scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + + //Side Obj + _sideObjective = _scoreboard.registerNewObjective(player.getName() + UtilMath.r(999999999), "dummy"); + _sideObjective.setDisplaySlot(DisplaySlot.SIDEBAR); + _sideObjective.setDisplayName(C.Bold + " MINEPLEX "); + + //Teams + addTeams(player); + + //Create Line Teams - There will always be 16 teams, with static line allocations. + _teamNames = new String[16]; + for (int i=0 ; i<16 ; i++) + { + String teamName = ChatColor.COLOR_CHAR + "" + ("1234567890abcdefghijklmnopqrstuvwxyz".toCharArray())[i] + ChatColor.RESET; + + _teamNames[i] = teamName; + + Team team = _scoreboard.registerNewTeam(teamName); + team.addEntry(teamName); + } + + + + // +// if (data.getDisplayRanks()) +// for (Player otherPlayer : Bukkit.getOnlinePlayers()) +// { +// if (_clientManager.Get(otherPlayer) == null) +// continue; +// +// String rankName = _clientManager.Get(player).GetRank().Name; +// String otherRankName = _clientManager.Get(otherPlayer).GetRank().Name; +// +// if (!_clientManager.Get(player).GetRank().Has(Rank.ULTRA) && _donationManager.Get(player.getName()).OwnsUltraPackage()) +// { +// rankName = Rank.ULTRA.Name; +// } +// +// if (!_clientManager.Get(otherPlayer).GetRank().Has(Rank.ULTRA) && _donationManager.Get(otherPlayer.getName()).OwnsUltraPackage()) +// { +// otherRankName = Rank.ULTRA.Name; +// } +// +// //Add Other to Self +// board.getTeam(otherRankName).addPlayer(otherPlayer); +// } + + //Set Scoreboard + player.setScoreboard(_scoreboard); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/ScoreboardData.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/ScoreboardData.java new file mode 100644 index 000000000..13699bf0a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/ScoreboardData.java @@ -0,0 +1,108 @@ +package mineplex.core.scoreboard; + +import java.util.ArrayList; + +import mineplex.core.scoreboard.elements.*; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +public class ScoreboardData +{ + private ArrayList _elements = new ArrayList(); + + public ScoreboardData() + { + + } + + public ArrayList getLines(ScoreboardManager manager, Player player) + { + ArrayList output = new ArrayList(); + + for (ScoreboardElement elem : _elements) + output.addAll(elem.GetLines(manager, player)); + + return output; + } + + public void reset() + { + _elements.clear(); + } + + public String prepareLine(String line) + { + if (line.length() > 28) + { + // Due to the scoreboard using teams, You can use prefix and suffix for a total length of 32. + // this means that the total length of the string can't extend 32. + // Reason for the fancy logic is that the beginning of the suffix needs to use colors from line1 else the line is pure + // white. And line2 can't have its length extend 16.. + + String line1 = line.substring(0, 16); + String color = ChatColor.getLastColors(line1); + String line2 = line.substring(16); + + int length = 16 - (color + line2).length(); + + if (length > 0) + { + return line1 + line2.substring(0, line2.length() - length); + } + } + + return line; + } + + public void write(String line) + { + line = prepareLine(line); + + _elements.add(new ScoreboardElementText(line)); + } + + public void writeOrdered(String key, String line, int value, boolean prependScore) + { + if (prependScore) + line = value + " " + line; + + line = prepareLine(line); + + for (ScoreboardElement elem : _elements) + { + if (elem instanceof ScoreboardElementScores) + { + ScoreboardElementScores scores = (ScoreboardElementScores) elem; + + if (scores.IsKey(key)) + { + scores.AddScore(line, value); + return; + } + } + } + + _elements.add(new ScoreboardElementScores(key, line, value, true)); + } + + public void writeEmpty() + { + _elements.add(new ScoreboardElementText(" ")); + } + + public void writePlayerGems() + { + _elements.add(new ScoreboardElementGemCount()); + } + + public void writePlayerCoins() + { + _elements.add(new ScoreboardElementCoinCount()); + } + + public void writePlayerRank() + { + _elements.add(new ScoreboardElementRank()); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/ScoreboardManager.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/ScoreboardManager.java new file mode 100644 index 000000000..87ded7d97 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/ScoreboardManager.java @@ -0,0 +1,151 @@ +package mineplex.core.scoreboard; + +import java.util.HashMap; +import java.util.Iterator; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.plugin.java.JavaPlugin; + +import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.donation.DonationManager; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class ScoreboardManager extends MiniPlugin +{ + private CoreClientManager _clientManager; + private DonationManager _donationManager; + + //This stores current scoreboard for the player + private HashMap _playerScoreboards = new HashMap(); + + //Scoreboards (can be shared between players) + private HashMap _scoreboards = new HashMap(); + + //Title + private String _title = " MINEPLEX "; + private int _shineIndex; + private boolean _shineDirection = true; + + public ScoreboardManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager) + { + super("Scoreboard Manager", plugin); + + _clientManager = clientManager; + _donationManager = donationManager; + } + + public CoreClientManager getClients() + { + return _clientManager; + } + + public DonationManager getDonation() + { + return _donationManager; + } + + @EventHandler + public void playerJoin(PlayerJoinEvent event) + { + _playerScoreboards.put(event.getPlayer(), new PlayerScoreboard(this, event.getPlayer())); + } + + @EventHandler + public void playerQuit(PlayerQuitEvent event) + { + _playerScoreboards.remove(event.getPlayer()); + } + + public void draw() + { + Iterator playerIterator = _playerScoreboards.keySet().iterator(); + + while (playerIterator.hasNext()) + { + Player player = playerIterator.next(); + + //Offline + if (!player.isOnline()) + { + playerIterator.remove(); + continue; + } + + _playerScoreboards.get(player).draw(this, player); + } + } + + + + public ScoreboardData getData(String scoreboardName, boolean create) + { + if (!create) + return _scoreboards.get(scoreboardName); + + if (!_scoreboards.containsKey(scoreboardName)) + _scoreboards.put(scoreboardName, new ScoreboardData()); + + return _scoreboards.get(scoreboardName); + } + + @EventHandler + public void updateTitle(UpdateEvent event) + { + if (event.getType() != UpdateType.FASTER) + return; + + String out; + + if (_shineDirection) + { + out = C.cGold + C.Bold; + } + else + { + out = C.cWhite + C.Bold; + } + + for (int i = 0; i < _title.length(); i++) + { + char c = _title.charAt(i); + + if (_shineDirection) + { + if (i == _shineIndex) + out += C.cYellow + C.Bold; + + if (i == _shineIndex + 1) + out += C.cWhite + C.Bold; + } + else + { + if (i == _shineIndex) + out += C.cYellow + C.Bold; + + if (i == _shineIndex + 1) + out += C.cGold + C.Bold; + } + + out += c; + } + + for (PlayerScoreboard ps : _playerScoreboards.values()) + { + ps.setTitle(out); + } + + _shineIndex++; + + if (_shineIndex == _title.length() * 2) + { + _shineIndex = 0; + _shineDirection = !_shineDirection; + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElement.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElement.java new file mode 100644 index 000000000..8d4bac166 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElement.java @@ -0,0 +1,12 @@ +package mineplex.core.scoreboard.elements; + +import java.util.ArrayList; + +import org.bukkit.entity.Player; + +import mineplex.core.scoreboard.ScoreboardManager; + +public abstract class ScoreboardElement +{ + public abstract ArrayList GetLines(ScoreboardManager manager, Player player); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementCoinCount.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementCoinCount.java new file mode 100644 index 000000000..154370e08 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementCoinCount.java @@ -0,0 +1,19 @@ +package mineplex.core.scoreboard.elements; + +import java.util.ArrayList; + +import mineplex.core.common.CurrencyType; +import mineplex.core.scoreboard.ScoreboardManager; + +import org.bukkit.entity.Player; + +public class ScoreboardElementCoinCount extends ScoreboardElement +{ + @Override + public ArrayList GetLines(ScoreboardManager manager, Player player) + { + ArrayList output = new ArrayList(); + output.add(manager.getDonation().Get(player).GetBalance(CurrencyType.Coins) + ""); + return output; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementGemCount.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementGemCount.java new file mode 100644 index 000000000..ceb9c8791 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementGemCount.java @@ -0,0 +1,19 @@ +package mineplex.core.scoreboard.elements; + +import java.util.ArrayList; + +import mineplex.core.common.CurrencyType; +import mineplex.core.scoreboard.ScoreboardManager; + +import org.bukkit.entity.Player; + +public class ScoreboardElementGemCount extends ScoreboardElement +{ + @Override + public ArrayList GetLines(ScoreboardManager manager, Player player) + { + ArrayList output = new ArrayList(); + output.add(manager.getDonation().Get(player).GetBalance(CurrencyType.Gems) + ""); + return output; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementRank.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementRank.java new file mode 100644 index 000000000..7c7904e7e --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementRank.java @@ -0,0 +1,37 @@ +package mineplex.core.scoreboard.elements; + +import java.util.ArrayList; + +import org.bukkit.entity.Player; + +import mineplex.core.common.Rank; +import mineplex.core.scoreboard.ScoreboardManager; + +public class ScoreboardElementRank extends ScoreboardElement +{ + @Override + public ArrayList GetLines(ScoreboardManager manager, Player player) + { + ArrayList output = new ArrayList(); + + if (manager.getClients().Get(player).GetRank().Has(Rank.ULTRA)) + { + output.add(manager.getClients().Get(player).GetRank().Name); + } + else if (manager.getDonation().Get(player.getName()).OwnsUnknownPackage("SuperSmashMobs ULTRA") || + manager.getDonation().Get(player.getName()).OwnsUnknownPackage("Survival Games ULTRA") || + manager.getDonation().Get(player.getName()).OwnsUnknownPackage("Minigames ULTRA") || + manager.getDonation().Get(player.getName()).OwnsUnknownPackage("CastleSiege ULTRA") || + manager.getDonation().Get(player.getName()).OwnsUnknownPackage("Champions ULTRA")) + { + output.add("Single Ultra"); + } + else + { + output.add("No Rank"); + } + + return output; + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementScores.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementScores.java new file mode 100644 index 000000000..2f5b0681c --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementScores.java @@ -0,0 +1,69 @@ +package mineplex.core.scoreboard.elements; + +import java.util.ArrayList; +import java.util.HashMap; + +import mineplex.core.scoreboard.ScoreboardManager; + +import org.bukkit.entity.Player; + +public class ScoreboardElementScores extends ScoreboardElement +{ + private String _key; + + private HashMap _scores; + + private boolean _higherIsBetter; + + public ScoreboardElementScores(String key, String line, int value, boolean higherIsBetter) + { + _scores = new HashMap(); + + _key = key; + + AddScore(line, value); + + _higherIsBetter = higherIsBetter; + } + + @Override + public ArrayList GetLines(ScoreboardManager manager, Player player) + { + ArrayList orderedScores = new ArrayList(); + + //Order Scores + while (orderedScores.size() < _scores.size()) + { + String bestKey = null; + int bestScore = 0; + + for (String key : _scores.keySet()) + { + if (orderedScores.contains(key)) + continue; + + if (bestKey == null || + (_higherIsBetter && _scores.get(key) >= bestScore) || + (!_higherIsBetter && _scores.get(key) <= bestScore)) + { + bestKey = key; + bestScore = _scores.get(key); + } + } + + orderedScores.add(bestKey); + } + + return orderedScores; + } + + public boolean IsKey(String key) + { + return _key.equals(key); + } + + public void AddScore(String line, int value) + { + _scores.put(line, value); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementText.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementText.java new file mode 100644 index 000000000..a5ecf9f6e --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/elements/ScoreboardElementText.java @@ -0,0 +1,28 @@ +package mineplex.core.scoreboard.elements; + +import java.util.ArrayList; + +import mineplex.core.scoreboard.ScoreboardManager; + +import org.bukkit.entity.Player; + +public class ScoreboardElementText extends ScoreboardElement +{ + private String _line; + + public ScoreboardElementText(String line) + { + _line = line; + } + + @Override + public ArrayList GetLines(ScoreboardManager manager, Player player) + { + ArrayList orderedScores = new ArrayList(); + + orderedScores.add(_line); + + return orderedScores; + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java index d6c512448..34207df10 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java @@ -42,6 +42,7 @@ import mineplex.core.pet.PetManager; import mineplex.core.reward.Reward; import mineplex.core.reward.RewardManager; import mineplex.core.reward.RewardRarity; +import mineplex.core.reward.RewardType; import mineplex.core.treasure.event.TreasureFinishEvent; import mineplex.core.treasure.event.TreasureStartEvent; import mineplex.core.updater.UpdateType; @@ -110,7 +111,7 @@ public class TreasureManager extends MiniPlugin Bukkit.broadcastMessage(F.main("Treasure", F.name(player.getName()) + " is opening a " + C.cGreen + "Treasure Chest")); - Reward[] rewards = _rewardManager.getRewards(player, true); + Reward[] rewards = _rewardManager.getRewards(player, RewardType.HeroicChest); Treasure treasure = new Treasure(player, rewards, _blockRestore, _hologramManager); _playerTreasureMap.put(player, treasure); @@ -418,7 +419,7 @@ public class TreasureManager extends MiniPlugin for (int i=0 ; i { Kit hisKit = _search.GetKit(Player); UpgradeKit kit = null; + for (UpgradeKit k : _kits) { if (k.kit == hisKit) @@ -42,44 +43,55 @@ public class KitEvolvePage extends ShopPageBase break; } } + boolean canEvolve = _search.canEvolve(Player); AddItem(kit.kitSlot, makeItem(kit.kit)); + for (int slot : kit.path) { AddItem(slot, makeItem(new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 15).setTitle(" ").build())); } + if (kit.daddy != null) { AddItem(kit.daddy.kitSlot, makeItem(kit.daddy.kit)); + for (int slot : kit.daddy.path) { AddItem(slot, makeItem(new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 15).setTitle(" ").build())); } + if (kit.daddy.daddy != null) { AddItem(kit.daddy.daddy.kitSlot, makeItem(kit.daddy.daddy.kit)); } } + if (canEvolve) { for (UpgradeKit child : kit.children) { for (int slot : child.path) AddItem(slot, makeItem(new ItemBuilder(Material.STAINED_GLASS_PANE).setTitle(" ").build())); + AddButton(child.kitSlot, makeItem(child.kit), new EvolveButton(_search, child.kit)); } } + for (UpgradeKit k : _kits) { ItemStack item = getItem(k.kitSlot); + if (item == null || item.getType() == Material.AIR) { AddItem(k.kitSlot, makeItem(new ItemBuilder(Material.COAL).setTitle(C.cRed + "Locked").build())); } } + for (int slot = 0; slot < this.getSize(); slot++) { ItemStack item = getItem(slot); + if (item == null || item.getType() == Material.AIR) { AddItem(slot, makeItem(new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (short) 12).setTitle(" ").build())); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/searchanddestroy/kits/trooper/KitTitan.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/searchanddestroy/kits/trooper/KitTitan.java index 8e1fdbaa3..bf0ab361a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/searchanddestroy/kits/trooper/KitTitan.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/searchanddestroy/kits/trooper/KitTitan.java @@ -33,6 +33,7 @@ public class KitTitan extends Kit @Override public void GiveItems(Player player) { + PlayerInventory inv = player.getInventory(); inv.setItem(2, new ItemBuilder(Material.BLAZE_POWDER).setTitle(ChatColor.GOLD + "Fuse").build()); inv.addItem(new ItemBuilder(Material.IRON_SWORD) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java index ddb47d395..298821f84 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java @@ -2,7 +2,13 @@ package nautilus.game.arcade.game.games.smash; import java.util.HashMap; +import org.bukkit.ChatColor; +import org.bukkit.FireworkEffect.Type; +import org.bukkit.Color; +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.Sound; +import org.bukkit.entity.EnderCrystal; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -17,8 +23,15 @@ import org.bukkit.event.player.PlayerInteractEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.common.util.UtilTime; +import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -32,6 +45,7 @@ import nautilus.game.arcade.game.SoloGame; import nautilus.game.arcade.game.GameTeam.PlayerState; import nautilus.game.arcade.game.games.smash.kits.*; import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.SmashKit; import nautilus.game.arcade.stats.KillFastStatTracker; import nautilus.game.arcade.stats.FreeKitWinStatTracker; import nautilus.game.arcade.stats.OneVThreeStatTracker; @@ -41,25 +55,30 @@ import nautilus.game.arcade.stats.WinWithoutDyingStatTracker; public class SuperSmash extends SoloGame { private HashMap _lives = new HashMap(); - + + private Location _powerupCurrent = null; + private Location _powerupTarget = null; + private EnderCrystal _powerup = null; + private long _lastPowerup = 0; + public SuperSmash(ArcadeManager manager) { super(manager, GameType.Smash, new Kit[] { - + new KitSkeleton(manager), new KitGolem(manager), new KitSpider(manager), new KitSlime(manager), - + new KitCreeper(manager), new KitEnderman(manager), new KitSnowman(manager), new KitWolf(manager), - - + + new KitBlaze(manager), new KitWitch(manager), new KitChicken(manager), @@ -68,7 +87,8 @@ public class SuperSmash extends SoloGame new KitSkySquid(manager), new KitWitherSkeleton(manager), new KitMagmaCube(manager), - + new KitZombie(manager), + new KitSheep(manager) }, @@ -84,13 +104,15 @@ public class SuperSmash extends SoloGame this.DeathOut = false; this.DamageTeamSelf = true; - + this.CompassEnabled = true; - + this.DeathSpectateSecs = 4; - - this.SpawnDistanceRequirement = 16; - + + this.SpawnDistanceRequirement = 32; + + this.WorldWaterDamage = 1000; + // Add stat table here // Example //Manager.GetStatsManager().addTable("SuperSmashMobStats", "Kills", "Deaths", "Wins", "Losses"); @@ -101,7 +123,7 @@ public class SuperSmash extends SoloGame new OneVThreeStatTracker(this), new KillFastStatTracker(this, 3, 10, "TripleKill"), new RecoveryMasterStatTracker(this) - ); + ); } @EventHandler(priority = EventPriority.HIGH) @@ -127,32 +149,32 @@ public class SuperSmash extends SoloGame { if (!_lives.containsKey(player)) return 0; - + if (!IsAlive(player)) return 0; - + return _lives.get(player); } - + private boolean LoseLife(Player player) { int lives = GetLives(player) - 1; - + if (lives > 0) { UtilPlayer.message(player, C.cRed + C.Bold + "You have died!"); UtilPlayer.message(player, C.cRed + C.Bold + "You have " + lives + " lives left!"); player.playSound(player.getLocation(), Sound.NOTE_BASS_GUITAR, 2f, 0.5f); - + _lives.put(player, lives); - + return true; } else { UtilPlayer.message(player, C.cRed + C.Bold + "You are out of the game!"); player.playSound(player.getLocation(), Sound.EXPLODE, 2f, 1f); - + return false; } } @@ -172,7 +194,7 @@ public class SuperSmash extends SoloGame Scoreboard.WriteBlank(); Scoreboard.Write(C.cGreen + "Players Alive"); Scoreboard.Write(GetPlayers(true).size() + " "); - + Scoreboard.WriteBlank(); Scoreboard.Write(C.cRed + "Players Dead"); Scoreboard.Write((GetPlayers(false).size() - GetPlayers(true).size()) + " "); @@ -180,12 +202,12 @@ public class SuperSmash extends SoloGame else { Scoreboard.WriteBlank(); - + //Write New for (Player player : GetPlayers(true)) { int lives = GetLives(player); - + String out; if (lives >= 4) out = C.cGreen + player.getName(); else if (lives == 3) out = C.cYellow + player.getName(); @@ -194,34 +216,126 @@ public class SuperSmash extends SoloGame else if (lives == 0) out = C.cRed + player.getName(); else continue; - + Scoreboard.WriteOrdered("Lives", out, lives, true); } } - + Scoreboard.Draw(); } + + @EventHandler + public void powerupSpawn(UpdateEvent event) + { + if (event.getType() != UpdateType.FASTER) + return; + + if (!IsLive()) + return; + + if (_powerup == null) + { + if (!UtilTime.elapsed(_lastPowerup, 12000)) + return; + + if (WorldData.GetDataLocs("RED").isEmpty()) + return; + + if (_powerupTarget == null) + { + _powerupTarget = UtilAlg.Random(WorldData.GetDataLocs("RED")); + _powerupCurrent = _powerupTarget.clone().add(0, 100, 0); + } + + if (_powerupTarget.getY() < _powerupCurrent.getY()) + { + _powerupCurrent.add(0, -2, 0); + UtilFirework.playFirework(_powerupCurrent, Type.BURST, Color.WHITE, false, true); + } + else + { + CreatureAllowOverride = true; + _powerup = _powerupTarget.getWorld().spawn(_powerupTarget, EnderCrystal.class); + CreatureAllowOverride = false; + + _powerupTarget = null; + _powerupCurrent = null; + } + } + } + + @EventHandler + public void powerupPickup(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + if (!IsLive()) + return; + + if (_powerup == null) + return; + + Player best = null; + double bestDist = 0; + + for (Player player : GetPlayers(true)) + { + double dist = UtilMath.offset(player, _powerup); + + if (dist > 3) + continue; + + if (best == null || dist < bestDist) + { + best = player; + bestDist = dist; + } + } + + if (best != null) + { + _powerup.remove(); + _powerup = null; + + best.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, ((SmashKit)GetKit(best)).getSuperCharges(), + C.cYellow + C.Bold + "Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + ((SmashKit)GetKit(best)).getSuperName())); + + _lastPowerup = System.currentTimeMillis(); + + Manager.GetGame().Announce(C.Bold + best.getName() + " collected " + C.cGreen + C.Bold + "Smash Crystal" + ChatColor.RESET + C.Bold + "!"); + + best.setHealth(20); + } + } + @EventHandler(priority = EventPriority.LOWEST) + public void powerupDamage(EntityDamageEvent event) + { + if (_powerup != null && _powerup.equals(event.getEntity())) + event.setCancelled(true); + } + @EventHandler(priority = EventPriority.LOWEST) public void FallDamage(CustomDamageEvent event) { if (event.IsCancelled()) return; - + if (event.GetCause() == DamageCause.FALL) event.SetCancelled("No Fall Damage"); } - + @EventHandler(priority = EventPriority.HIGH) public void Knockback(CustomDamageEvent event) { if (event.IsCancelled()) return; - + if (event.GetDamageePlayer() != null) event.AddKnockback("Smash Knockback", 1 + 0.1 * (20 - event.GetDamageePlayer().getHealth())); } - + @EventHandler(priority = EventPriority.HIGH) public void ArenaWalls(CustomDamageEvent event) { @@ -232,27 +346,27 @@ public class SuperSmash extends SoloGame { event.GetDamageeEntity().eject(); event.GetDamageeEntity().leaveVehicle(); - + if (event.GetDamageePlayer() != null) event.GetDamageeEntity().getWorld().strikeLightningEffect(event.GetDamageeEntity().getLocation()); - + event.AddMod("Smash", "Super Smash Mobs", 5000, false); } } - + @EventHandler public void HealthChange(EntityRegainHealthEvent event) { if (event.getRegainReason() == RegainReason.SATIATED) event.setCancelled(true); } - + @EventHandler(priority = EventPriority.MONITOR) public void EntityDeath(EntityDeathEvent event) { event.getDrops().clear(); } - + @Override public void SetKit(Player player, Kit kit, boolean announce) { @@ -277,112 +391,115 @@ public class SuperSmash extends SoloGame UtilInv.Update(player); } } - + @EventHandler(priority = EventPriority.LOWEST) public void AbilityDescription(PlayerInteractEvent event) { if (event.isCancelled()) return; - + Player player = event.getPlayer(); - + if (player.getItemInHand() == null) return; - + if (player.getItemInHand().getItemMeta() == null) return; - + if (player.getItemInHand().getItemMeta().getDisplayName() == null) return; - + if (player.getItemInHand().getItemMeta().getLore() == null) return; - + if (Manager.GetGame() == null || Manager.GetGame().GetState() != GameState.Recruit) return; - + for (int i=player.getItemInHand().getItemMeta().getLore().size() ; i<=7 ; i++) UtilPlayer.message(player, " "); - + UtilPlayer.message(player, ArcadeFormat.Line); UtilPlayer.message(player, "§aAbility - §f§l" + player.getItemInHand().getItemMeta().getDisplayName()); - + //Perk Descs for (String line : player.getItemInHand().getItemMeta().getLore()) { UtilPlayer.message(player, line); } - + UtilPlayer.message(player, ArcadeFormat.Line); - + player.playSound(player.getLocation(), Sound.NOTE_PLING, 1f, 2f); - + event.setCancelled(true); } - + + //XXX Not sure if removing entity_explo will cause problems. + //Block explosion stops explosions createExplosion method from dealing damage (ie Creeper Blast) + //All instances of createExplosion have been removed @EventHandler public void ExplosionDamageCancel(EntityDamageEvent event) { - if (event.getCause() == DamageCause.ENTITY_EXPLOSION || event.getCause() == DamageCause.BLOCK_EXPLOSION) - { - event.setCancelled(true); - } + // if (event.getCause() == DamageCause.BLOCK_EXPLOSION) //event.getCause() == DamageCause.ENTITY_EXPLOSION || + // { + // event.setCancelled(true); + // } } - + @Override public double GetKillsGems(Player killer, Player killed, boolean assist) { return 4; } - + @EventHandler public void BlockFade(BlockFadeEvent event) { event.setCancelled(true); } - + private int hungerTick = 0; @EventHandler public void Hunger(UpdateEvent event) { if (event.getType() != UpdateType.SEC) return; - + if (!IsLive()) return; - + hungerTick = (hungerTick + 1)%10; - + for (Player player : GetPlayers(true)) { player.setSaturation(3f); player.setExhaustion(0f); - + if (player.getFoodLevel() <= 0) { Manager.GetDamage().NewDamageEvent(player, null, null, DamageCause.STARVATION, 1, false, true, false, "Starvation", GetName()); - + UtilPlayer.message(player, F.main("Game", "Attack other players to restore hunger!")); } - + if (hungerTick == 0) UtilPlayer.hunger(player, -1); } } - + @EventHandler(priority = EventPriority.MONITOR) public void HungerRestore(CustomDamageEvent event) { if (event.IsCancelled()) return; - + Player damager = event.GetDamagerPlayer(true); if (damager == null) return; - + if (damager.equals(event.GetDamageeEntity())) return; @@ -392,7 +509,7 @@ public class SuperSmash extends SoloGame int amount = Math.max(1, (int)(event.GetDamage()/2)); UtilPlayer.hunger(damager, amount); } - + public String GetMode() { return "Deathmatch"; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitBlaze.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitBlaze.java index 3d8cb3c78..04c9f49c0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitBlaze.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitBlaze.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -43,7 +44,8 @@ public class KitBlaze extends SmashKit new PerkFirefly() }, EntityType.BLAZE, - new ItemStack(Material.BLAZE_ROD)); + new ItemStack(Material.BLAZE_ROD), + "Phoenix", 16000, Sound.BLAZE_DEATH); } @@ -67,7 +69,7 @@ public class KitBlaze extends SmashKit ChatColor.RESET + "forward with great power, destroying", ChatColor.RESET + "anyone you touch.", ChatColor.RESET + "", - ChatColor.RESET + "If hit are hit by a projectile during", + ChatColor.RESET + "If you are hit by a projectile during", ChatColor.RESET + "startup time, the skill is cancelled.", })); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitChicken.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitChicken.java index bf4a71ad7..2906404e7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitChicken.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitChicken.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -35,10 +36,10 @@ public class KitChicken extends SmashKit new PerkFlap(0.8, 0.8, false), new PerkEggGun(), new PerkChickenRocket() - }, EntityType.CHICKEN, - new ItemStack(Material.EGG)); + new ItemStack(Material.EGG), + "Airial Blaster", 20000, Sound.CHICKEN_HURT); } @@ -85,8 +86,14 @@ public class KitChicken extends SmashKit disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName()); else disguise.setName(player.getName()); - + disguise.setCustomNameVisible(true); Manager.GetDisguise().disguise(disguise); } + + @Override + public void activateSuperCustom(Player player) + { + player.setExp(0.99f); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCow.java index 5c5cee602..62ecd0549 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCow.java @@ -33,7 +33,8 @@ public class KitCow extends SmashKit }, EntityType.COW, - new ItemStack(Material.MILK_BUCKET)); + new ItemStack(Material.MILK_BUCKET), + "", 0, null); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCreeper.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCreeper.java index 8e3f238cb..65eaa5e2d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCreeper.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCreeper.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -39,7 +40,8 @@ public class KitCreeper extends SmashKit new PerkCreeperExplode(), }, EntityType.CREEPER, - new ItemStack(Material.TNT)); + new ItemStack(Material.TNT), + "Atomic Blast", 0, Sound.CREEPER_DEATH); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitEnderman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitEnderman.java index ec67da789..2a040f0b7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitEnderman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitEnderman.java @@ -6,6 +6,7 @@ import java.util.Map.Entry; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -24,6 +25,7 @@ import nautilus.game.arcade.kit.SmashKit; import nautilus.game.arcade.kit.perks.PerkBlink; import nautilus.game.arcade.kit.perks.PerkBlockToss; import nautilus.game.arcade.kit.perks.PerkDoubleJump; +import nautilus.game.arcade.kit.perks.PerkEndermanDragon; import nautilus.game.arcade.kit.perks.PerkSmashStats; import nautilus.game.arcade.kit.perks.event.PerkBlockGrabEvent; import nautilus.game.arcade.kit.perks.event.PerkBlockThrowEvent; @@ -45,13 +47,15 @@ public class KitEnderman extends SmashKit new PerkSmashStats(7, 1.3, 0.25, 6), new PerkDoubleJump("Double Jump", 0.9, 0.9, false), new PerkBlink("Blink", 16, 6000), - new PerkBlockToss() + new PerkBlockToss(), + new PerkEndermanDragon() }, EntityType.ENDERMAN, - new ItemStack(Material.ENDER_PEARL)); + new ItemStack(Material.ENDER_PEARL), + "Ender Dragon Rider", 40000, Sound.ENDERDRAGON_GROWL); } - + @Override public void GiveItems(Player player) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitGolem.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitGolem.java index 1164fd5a4..94a9c999b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitGolem.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitGolem.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -33,10 +34,12 @@ public class KitGolem extends SmashKit new PerkFissure(), new PerkIronHook(), new PerkSeismicSlam(), + new PerkEarthquake() }, EntityType.IRON_GOLEM, - new ItemStack(Material.IRON_BLOCK)); + new ItemStack(Material.IRON_BLOCK), + "Earthquake", 0, Sound.IRONGOLEM_DEATH); } @Override @@ -83,7 +86,7 @@ public class KitGolem extends SmashKit else disguise.setName(player.getName()); - disguise.setCustomNameVisible(true); + //disguise.setCustomNameVisible(true); Manager.GetDisguise().disguise(disguise); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitKnight.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitKnight.java index 8ce92616d..a574a4569 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitKnight.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitKnight.java @@ -4,7 +4,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -66,7 +65,8 @@ public class KitKnight extends SmashKit new PerkNotFinished() }, EntityType.HORSE, - new ItemStack(Material.IRON_BARDING)); + new ItemStack(Material.IRON_BARDING), + "", 0, null); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitMagmaCube.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitMagmaCube.java index fdfd6e89e..18686ce4e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitMagmaCube.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitMagmaCube.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -32,11 +33,13 @@ public class KitMagmaCube extends SmashKit new PerkMagmaBoost(), new PerkMagmaBlast(), new PerkFlameDash(), + new PerkMeteorShower() }, EntityType.MAGMA_CUBE, - new ItemStack(Material.MAGMA_CREAM)); + new ItemStack(Material.MAGMA_CREAM), + "Meteor Shower", 0, Sound.AMBIENCE_THUNDER); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitPig.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitPig.java index 185020755..70ba0b3aa 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitPig.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitPig.java @@ -43,7 +43,8 @@ public class KitPig extends SmashKit }, EntityType.PIG, - new ItemStack(Material.PORK)); + new ItemStack(Material.PORK), + "", 0, null); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java index 78b86726e..108d70dac 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java @@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.DyeColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -33,11 +34,13 @@ public class KitSheep extends SmashKit new PerkDoubleJump("Double Jump", 1, 1, false), new PerkLazer(40, 6000), new PerkWoolBomb(), - new PerkWoolCloud() + new PerkWoolCloud(), + new PerkSheepHoming() }, EntityType.SHEEP, - new ItemStack(Material.WOOL)); + new ItemStack(Material.WOOL), + "Homing Sheeples", 0, Sound.SHEEP_IDLE); this.setAchievementRequirements(new Achievement[] { @@ -54,7 +57,7 @@ public class KitSheep extends SmashKit public void GiveItems(Player player) { player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, - C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Static Laser", + C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Static Lazer", new String[] { ChatColor.RESET + "Charge up static electricity in your", diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeletalHorse.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeletalHorse.java index a10c14466..f6561b936 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeletalHorse.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeletalHorse.java @@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Horse; @@ -13,7 +14,6 @@ import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilEnt; -import mineplex.core.disguise.disguises.DisguiseCow; import mineplex.core.disguise.disguises.DisguiseHorse; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -39,11 +39,12 @@ public class KitSkeletalHorse extends SmashKit new PerkDoubleJump("Double Jump", 1, 1, false), new PerkHorseKick(), new PerkBoneRush(), - new PerkInfernalHorror() + //new PerkInfernalHorror() }, EntityType.HORSE, - new ItemStack(Material.BONE)); + new ItemStack(Material.BONE), + "Eternal Rush", 24000, Sound.HORSE_SKELETON_DEATH); } @Override @@ -54,8 +55,8 @@ public class KitSkeletalHorse extends SmashKit new String[] { ChatColor.RESET + "Stand on your hind legs and maul enemies", - ChatColor.RESET + "infront of you with your front legs, dealing", - ChatColor.RESET + "damage and large knockback.", + ChatColor.RESET + "in front of you with your front legs, ", + ChatColor.RESET + "dealing damage and large knockback.", })); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeleton.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeleton.java index bebe778ae..a77be02c6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeleton.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeleton.java @@ -2,7 +2,7 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -21,6 +21,7 @@ import nautilus.game.arcade.kit.perks.PerkDoubleJump; import nautilus.game.arcade.kit.perks.PerkFletcher; import nautilus.game.arcade.kit.perks.PerkKnockbackArrow; import nautilus.game.arcade.kit.perks.PerkRopedArrow; +import nautilus.game.arcade.kit.perks.PerkSkeletonArrowStorm; import nautilus.game.arcade.kit.perks.PerkSmashStats; public class KitSkeleton extends SmashKit @@ -41,10 +42,12 @@ public class KitSkeleton extends SmashKit new PerkKnockbackArrow(1.75), new PerkBoneExplosion(), new PerkRopedArrow("Roped Arrow", 1, 5000), - new PerkBarrage(5, 250, true, false), + new PerkBarrage(5, 300, true, false), + new PerkSkeletonArrowStorm() }, EntityType.SKELETON, - new ItemStack(Material.BOW)); + new ItemStack(Material.BOW), + "Arrow Storm", 8000, Sound.SKELETON_HURT); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkySquid.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkySquid.java index 08fa2431f..b633195d5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkySquid.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkySquid.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -16,6 +17,7 @@ import nautilus.game.arcade.kit.SmashKit; import nautilus.game.arcade.kit.perks.PerkDoubleJump; import nautilus.game.arcade.kit.perks.PerkInkBlast; import nautilus.game.arcade.kit.perks.PerkSmashStats; +import nautilus.game.arcade.kit.perks.PerkStormSquid; import nautilus.game.arcade.kit.perks.PerkSuperSquid; public class KitSkySquid extends SmashKit @@ -34,22 +36,16 @@ public class KitSkySquid extends SmashKit new PerkDoubleJump("Double Jump", 0.9, 0.9, false), new PerkSuperSquid(), new PerkInkBlast(), + new PerkStormSquid() }, EntityType.SQUID, - new ItemStack(Material.INK_SACK)); + new ItemStack(Material.INK_SACK), + "Storm Squid", 20000, Sound.SPLASH2); } @Override public void GiveItems(Player player) { - player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, - C.cYellow + C.Bold + "Hold/Release Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Super Squid", - new String[] - { - ChatColor.RESET + "You become invulnerable and fly through", - ChatColor.RESET + "the sky in the direction you are looking.", - })); - player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Ink Shotgun", new String[] @@ -58,6 +54,14 @@ public class KitSkySquid extends SmashKit ChatColor.RESET + "They explode upon hitting something, dealing", ChatColor.RESET + "damage and knockback.", })); + + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, + C.cYellow + C.Bold + "Hold/Release Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Super Squid", + new String[] + { + ChatColor.RESET + "You become invulnerable and fly through", + ChatColor.RESET + "the sky in the direction you are looking.", + })); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); @@ -74,4 +78,19 @@ public class KitSkySquid extends SmashKit disguise.setCustomNameVisible(true); Manager.GetDisguise().disguise(disguise); } + + @Override + public void activateSuperCustom(Player player) + { + Manager.GetGame().WorldWeatherEnabled = true; + Manager.GetGame().WorldData.World.setStorm(true); + Manager.GetGame().WorldData.World.setThundering(true); + Manager.GetGame().WorldData.World.setThunderDuration(9999); + } + + @Override + public void deactivateSuperCustom(Player player) + { + Manager.GetGame().WorldWeatherEnabled = false; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java index 4bde49234..3a18d67bd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java @@ -1,14 +1,26 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; +import org.bukkit.GameMode; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseSlime; import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.condition.Condition.ConditionType; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; @@ -36,7 +48,8 @@ public class KitSlime extends SmashKit new PerkSlimeRocket(), }, EntityType.SLIME, - new ItemStack(Material.SLIME_BALL)); + new ItemStack(Material.SLIME_BALL), + "Giga Slime", 18000, Sound.SLIME_ATTACK); } @Override @@ -84,4 +97,75 @@ public class KitSlime extends SmashKit disguise.SetSize(3); } + + @Override + public void activateSuperCustom(Player player) + { + DisguiseBase disguise = Manager.GetDisguise().getDisguise(player); + if (disguise != null && disguise instanceof DisguiseSlime) + { + DisguiseSlime slime = (DisguiseSlime)disguise; + + slime.SetSize(14); + Manager.GetDisguise().updateDisguise(slime); + } + + player.setExp(0.99f); + + Manager.GetCondition().Factory().Speed("Giga Slime", player, player, 20, 1, false, false, false); + } + + @Override + public void deactivateSuperCustom(Player player) + { + Manager.GetCondition().EndCondition(player, ConditionType.SPEED, "Giga Slime"); + } + + @EventHandler(priority = EventPriority.LOW) + public void immunityDamagee(CustomDamageEvent event) + { + if (event.GetDamageePlayer() == null || event.GetDamagerEntity(true) == null) + return; + + if (this.isSuperActive(event.GetDamageePlayer())) + event.SetCancelled(getSuperName()); + } + + @EventHandler(priority = EventPriority.LOW) + public void immunityDamager(CustomDamageEvent event) + { + if (event.GetCause() != DamageCause.ENTITY_ATTACK) + return; + + if (event.GetDamagerPlayer(true) == null) + return; + + if (isSuperActive(event.GetDamagerPlayer(true))) + event.SetCancelled(getSuperName()); + } + + @EventHandler + public void collide(UpdateEvent event) + { + for (Player player : getSuperActive()) + for (Player other : Manager.GetGame().GetPlayers(true)) + { + if (player.equals(other)) + continue; + + if (other.getGameMode() != GameMode.SURVIVAL) + continue; + + if (UtilMath.offset(player.getLocation().add(0, 3, 0), other.getLocation()) < 5) + { + Manager.GetDamage().NewDamageEvent(other, player, null, + DamageCause.CUSTOM, 8, true, false, false, + player.getName(), GetName()); + + UtilParticle.PlayParticle(ParticleType.SLIME, other.getLocation().add(0, 0.6, 0), 1f, 1f, 1f, 0, 20); + + player.getWorld().playSound(other.getLocation(), Sound.SLIME_ATTACK, 3f, 1f); + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSnowman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSnowman.java index 3b441a614..262f4ca4c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSnowman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSnowman.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -20,6 +21,7 @@ import nautilus.game.arcade.kit.perks.PerkDamageSnow; import nautilus.game.arcade.kit.perks.PerkDoubleJump; import nautilus.game.arcade.kit.perks.PerkIcePath; import nautilus.game.arcade.kit.perks.PerkSmashStats; +import nautilus.game.arcade.kit.perks.PerkSnowTurret; public class KitSnowman extends SmashKit { @@ -33,16 +35,19 @@ public class KitSnowman extends SmashKit new Perk[] { - new PerkSmashStats(5, 1.4, 0.3, 6), + new PerkSmashStats(5.5, 1.4, 0.3, 6), new PerkDoubleJump("Double Jump", 0.9, 0.9, false), - new PerkDamageSnow(1, 1.25), + new PerkDamageSnow(1, 0.4), new PerkArcticAura(), new PerkBlizzard(), new PerkIcePath(), + new PerkSnowTurret(), }, EntityType.SNOWMAN, - new ItemStack(Material.SNOW_BALL)); - + new ItemStack(Material.SNOW_BALL), + "Snow Turret", 0, Sound.STEP_SNOW); + + setSuperCharges(3); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSpider.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSpider.java index a0acc506a..684a3ec86 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSpider.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSpider.java @@ -31,13 +31,14 @@ public class KitSpider extends SmashKit new Perk[] { - new PerkSmashStats(6, 1.75, 0.25, 5.5), + new PerkSmashStats(7, 1.6, 0.3, 5.5), new PerkSpiderLeap(), new PerkNeedler(), new PerkWebShot(), }, EntityType.SPIDER, - new ItemStack(Material.WEB)); + new ItemStack(Material.WEB), + "", 0, null); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitch.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitch.java index 72f8eae1f..6460e4d5a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitch.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitch.java @@ -2,19 +2,15 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.disguise.disguises.DisguiseWitch; import mineplex.core.itemstack.ItemStackFactory; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.kit.KitAvailability; @@ -38,11 +34,13 @@ public class KitWitch extends SmashKit new PerkDoubleJump("Double Jump", 0.9, 0.9, false), new PerkWitchPotion(), new PerkBatWave(), + new PerkBatForm() }, EntityType.WITCH, - new ItemStack(Material.POTION)); + new ItemStack(Material.POTION), + "Bat Form", 20000, Sound.BAT_HURT); } @Override @@ -91,21 +89,19 @@ public class KitWitch extends SmashKit Manager.GetDisguise().disguise(disguise); } - @EventHandler - public void Visuals(UpdateEvent event) + @Override + public void activateSuperCustom(Player player) { - if (event.getType() != UpdateType.FASTER) - return; - - for (Player player : UtilServer.getPlayers()) - { - if (!HasKit(player)) - continue; - - for (Player other : UtilServer.getPlayers()) - { - UtilParticle.PlayParticle(other, ParticleType.WITCH_MAGIC, player.getLocation().add(0, 1, 0), 0.25f, 0.5f, 0.25f, 0, 2); - } - } + for (Perk perk : GetPerks()) + if (perk instanceof PerkDoubleJump) + ((PerkDoubleJump)perk).disableForPlayer(player); + } + + @Override + public void deactivateSuperCustom(Player player) + { + for (Perk perk : GetPerks()) + if (perk instanceof PerkDoubleJump) + ((PerkDoubleJump)perk).enableForPlayer(player); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWither.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWither.java index d2fc28850..df6bfd3dd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWither.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWither.java @@ -1,6 +1,5 @@ package nautilus.game.arcade.game.games.smash.kits; -import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.Location; import org.bukkit.Material; @@ -42,7 +41,8 @@ public class KitWither extends SmashKit new PerkSkullShot(), }, EntityType.ZOMBIE, - new ItemStack(Material.BOW)); + new ItemStack(Material.BOW), + "", 0, null); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitherSkeleton.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitherSkeleton.java index e1fa8b258..11f69c37a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitherSkeleton.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitherSkeleton.java @@ -2,11 +2,11 @@ package nautilus.game.arcade.game.games.smash.kits; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Skeleton.SkeletonType; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.LeatherArmorMeta; import mineplex.core.common.util.C; import mineplex.core.disguise.disguises.DisguiseSkeleton; @@ -17,6 +17,7 @@ import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; import nautilus.game.arcade.kit.perks.PerkDoubleJump; import nautilus.game.arcade.kit.perks.PerkSmashStats; +import nautilus.game.arcade.kit.perks.PerkWitherForm; import nautilus.game.arcade.kit.perks.PerkWitherImage; import nautilus.game.arcade.kit.perks.PerkWitherSkull; @@ -36,9 +37,11 @@ public class KitWitherSkeleton extends SmashKit new PerkDoubleJump("Double Jump", 0.9, 0.9, false), new PerkWitherSkull(), new PerkWitherImage(), + new PerkWitherForm() }, EntityType.SKELETON, - new ItemStack(Material.IRON_SWORD)); + new ItemStack(Material.IRON_SWORD), + "Wither Form", 18000, Sound.WITHER_SPAWN); } @Override @@ -49,8 +52,8 @@ public class KitWitherSkeleton extends SmashKit new String[] { ChatColor.RESET + "Launch a Wither Skull forwards, hold", - ChatColor.RESET + "block to guide the missile!", - ChatColor.RESET + "Detonates on collision.", + ChatColor.RESET + "block to guide the missile! Release", + ChatColor.RESET + "block to detonate it midair.", })); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWolf.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWolf.java index 9673350b4..ae5b4985c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWolf.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWolf.java @@ -35,7 +35,8 @@ public class KitWolf extends SmashKit new PerkWolf(), }, EntityType.WOLF, - new ItemStack(Material.BONE)); + new ItemStack(Material.BONE), + "", 0, null); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitZombie.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitZombie.java new file mode 100644 index 000000000..b1aa0c66d --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitZombie.java @@ -0,0 +1,97 @@ +package nautilus.game.arcade.game.games.smash.kits; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.util.C; +import mineplex.core.disguise.disguises.DisguiseZombie; +import mineplex.core.itemstack.ItemStackFactory; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.kit.KitAvailability; +import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashKit; +import nautilus.game.arcade.kit.perks.PerkDoubleJump; +import nautilus.game.arcade.kit.perks.PerkFleshArrow; +import nautilus.game.arcade.kit.perks.PerkFletcher; +import nautilus.game.arcade.kit.perks.PerkKnockbackArrow; +import nautilus.game.arcade.kit.perks.PerkNightLivingDead; +import nautilus.game.arcade.kit.perks.PerkSmashStats; +import nautilus.game.arcade.kit.perks.PerkDeathsGrasp; + +public class KitZombie extends SmashKit +{ + public KitZombie(ArcadeManager manager) + { + super(manager, "Zombie", KitAvailability.Gem, 6000, + + new String[] + { + }, + + new Perk[] + { + new PerkSmashStats(6, 1.25, 0.3, 4.5), + new PerkDoubleJump("Double Jump", 0.9, 0.9, false), + new PerkFletcher(2, 2, false), + new PerkKnockbackArrow(2), + new PerkFleshArrow(), + new PerkDeathsGrasp(), + new PerkNightLivingDead() + + }, + EntityType.ZOMBIE, + new ItemStack(Material.BOW), + "Night of the Living Dead", 0, Sound.AMBIENCE_CAVE); + } + + @Override + public void GiveItems(Player player) + { + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, + C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Deaths Grasp", + new String[] + { + ChatColor.RESET + "Leap forwards. If you collide with an opponent,", + ChatColor.RESET + "you deal damage, throw them behind you and", + ChatColor.RESET + "instantly recharges the ability.", + })); + + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BOW, (byte)0, 1, + C.cYellow + C.Bold + "Left-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Flesh Arrow", + new String[] + { + ChatColor.RESET + "Instantly fires an arrow with a baby ", + ChatColor.RESET + "zombie impaled on it. The zombie will", + ChatColor.RESET + "attack enemies after the arrow hits.", + })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BONE, (byte)0, 1, + C.cYellow + C.Bold + "Passive" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Combo Shot", + new String[] + { + ChatColor.RESET + "Your arrows deal 2x damage to oppoents", + ChatColor.RESET + "who are airborne from Deaths Grasp.", + ChatColor.RESET + "", + })); + + player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); + player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); + + //Disguise + DisguiseZombie disguise = new DisguiseZombie(player); + + if (Manager.GetGame().GetTeam(player) != null) + disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName()); + else + disguise.setName(player.getName()); + + disguise.setCustomNameVisible(true); + Manager.GetDisguise().disguise(disguise); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherMinion.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherMinion.java index ad384abaf..72a3e93de 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherMinion.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/kit/KitWitherMinion.java @@ -13,6 +13,7 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.UtilServer; import mineplex.core.disguise.disguises.DisguiseWither; import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; @@ -117,6 +118,9 @@ public class KitWitherMinion extends Kit @EventHandler public void witherFlight(UpdateEvent event) { + if (event.getType() != UpdateType.TICK) + return; + for (Player player : UtilServer.getPlayers()) { if (!HasKit(player)) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/Kit.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/Kit.java index c36b4b1d1..8327bcb7e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/Kit.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/Kit.java @@ -1,6 +1,5 @@ package nautilus.game.arcade.kit; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -13,7 +12,6 @@ import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; import mineplex.core.achievement.Achievement; -import mineplex.core.achievement.AchievementCategory; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilInv; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashKit.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashKit.java index 4a042e197..c3c54fbb2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashKit.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashKit.java @@ -1,30 +1,64 @@ package nautilus.game.arcade.kit; +import java.util.Collection; +import java.util.Iterator; + import mineplex.core.common.util.C; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeFormat; import nautilus.game.arcade.ArcadeManager; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; public abstract class SmashKit extends Kit { + private NautHashMap _superActive = new NautHashMap(); + + private int _superCharges = 1; + private String _superName; + private long _superDuration; + private Sound _superSound; + public SmashKit(ArcadeManager manager, String name, KitAvailability kitAvailability, String[] kitDesc, Perk[] kitPerks, - EntityType entityType, ItemStack itemInHand) + EntityType entityType, ItemStack itemInHand, + String superName, long superDuration, Sound superSound) { super(manager, name, kitAvailability, 3000, kitDesc, kitPerks, entityType, itemInHand); + + _superName = superName; + _superDuration = superDuration; + _superSound = superSound; } public SmashKit(ArcadeManager manager, String name, KitAvailability kitAvailability, int cost, String[] kitDesc, Perk[] kitPerks, - EntityType entityType, ItemStack itemInHand) + EntityType entityType, ItemStack itemInHand, + String superName, long superDuration, Sound superSound) { super(manager, name, kitAvailability, cost, kitDesc, kitPerks, entityType, itemInHand); + + _superName = superName; + _superDuration = superDuration; + _superSound = superSound; } + @Override public void DisplayDesc(Player player) { for (int i=0 ; i<3 ; i++) @@ -55,4 +89,121 @@ public abstract class SmashKit extends Kit UtilPlayer.message(player, ArcadeFormat.Line); } + + @EventHandler + public void triggerSuper(PlayerInteractEvent event) + { + if (!HasKit(event.getPlayer())) + return; + + if (!UtilGear.isMat(event.getItem(), Material.NETHER_STAR)) + return; + + UtilInv.remove(event.getPlayer(), Material.NETHER_STAR, (byte)0, 1); + + activateSuper(event.getPlayer()); + + //Inform + Effect + event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), _superSound, 20f, 1f); + Manager.GetGame().Announce(C.Bold + event.getPlayer().getName() + " activated " + C.cGreen + C.Bold + _superName + ChatColor.RESET + C.Bold + "!"); + UtilTextMiddle.display("Smash Crystal", event.getPlayer().getName() + " used " + C.cGreen + _superName, 5, 50, 5, UtilServer.getPlayers()); + } + + @EventHandler + public void expireSuper(UpdateEvent event) + { + Iterator superIter = _superActive.keySet().iterator(); + + while (superIter.hasNext()) + { + Player player = superIter.next(); + + if (System.currentTimeMillis() > _superActive.get(player)) + { + superIter.remove(); + deactivateSuper(player); + } + } + } + + @EventHandler + public void deathSuper(PlayerDeathEvent event) + { + _superActive.remove(event.getEntity()); + deactivateSuper(event.getEntity()); + } + + public void activateSuper(Player player) + { + //Duration Super + if (_superDuration > 0) + { + _superActive.put(player, System.currentTimeMillis() + _superDuration); + + Recharge.Instance.recharge(player, _superName); + Recharge.Instance.use(player, _superName, _superDuration, false, false); + Recharge.Instance.setDisplayForce(player, _superName, true); + Recharge.Instance.setCountdown(player, _superName, true); + } + + //Disable Perks for Duration + for (Perk perk : GetPerks()) + if (perk instanceof SmashPerk) + ((SmashPerk)perk).addSuperActive(player); + + //Custom + activateSuperCustom(player); + + //Deactivate if instant + if (_superDuration <= 0) + { + deactivateSuper(player); + } + } + + public void activateSuperCustom(Player player) + { + //Null Default + } + + public void deactivateSuper(Player player) + { + //Perks + for (Perk perk : GetPerks()) + if (perk instanceof SmashPerk) + ((SmashPerk)perk).removeSuperActive(player); + + //Custom + deactivateSuperCustom(player); + } + + public void deactivateSuperCustom(Player player) + { + //Null Default + } + + public Collection getSuperActive() + { + return _superActive.keySet(); + } + + public boolean isSuperActive(Player player) + { + return _superActive.containsKey(player); + } + + public String getSuperName() + { + return _superName; + } + + public int getSuperCharges() + { + return _superCharges; + } + + public void setSuperCharges(int charges) + { + _superCharges = charges; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashPerk.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashPerk.java new file mode 100644 index 000000000..2c7dfa0ee --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashPerk.java @@ -0,0 +1,48 @@ +package nautilus.game.arcade.kit; + +import java.util.HashSet; + +import org.bukkit.entity.Player; + +public abstract class SmashPerk extends Perk +{ + private HashSet _superActive = new HashSet(); + + public SmashPerk(String name, String[] perkDesc) + { + super(name, perkDesc); + } + + public SmashPerk(String name, String[] perkDesc, boolean display) + { + super(name, perkDesc, display); + } + + public void addSuperActive(Player player) + { + _superActive.add(player); + + addSuperCustom(player); + } + + public void addSuperCustom(Player player) + { + + } + + public void removeSuperActive(Player player) + { + if (_superActive.remove(player)) + removeSuperCustom(player); + } + + public void removeSuperCustom(Player player) + { + + } + + public boolean isSuperActive(Player player) + { + return _superActive.contains(player); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBarrage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBarrage.java index 7471b9dfc..6b1f8cbcb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBarrage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBarrage.java @@ -26,9 +26,9 @@ import mineplex.core.common.util.UtilTime; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkBarrage extends Perk +public class PerkBarrage extends SmashPerk { private WeakHashMap _charge = new WeakHashMap(); private WeakHashMap _chargeLast = new WeakHashMap(); @@ -70,6 +70,9 @@ public class PerkBarrage extends Perk if (player.getItemInHand() == null || player.getItemInHand().getType() != Material.BOW) return; + + if (isSuperActive(player)) + return; if (!Kit.HasKit(player)) return; @@ -281,7 +284,18 @@ public class PerkBarrage extends Perk { Player player = event.getPlayer(); - _charge.remove(player); + clean(player); + } + + @Override + public void addSuperCustom(Player player) + { + clean(player); + } + + public void clean(Player player) + { + _charge.remove(player); _chargeLast.remove(player); _firing.remove(player); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java new file mode 100644 index 000000000..8ce5c0ad1 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java @@ -0,0 +1,248 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.LivingEntity; +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.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerToggleFlightEvent; + +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.disguise.disguises.DisguiseBat; +import mineplex.core.disguise.disguises.DisguiseWitch; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.kit.SmashKit; +import nautilus.game.arcade.kit.SmashPerk; +import nautilus.game.arcade.kit.perks.data.SonicBoomData; + +public class PerkBatForm extends SmashPerk +{ + private ArrayList _sonic = new ArrayList(); + + public PerkBatForm() + { + super("Bat Form", new String[] + { + }, false); + } + + @Override + public void addSuperCustom(Player player) + { + Manager.GetDisguise().undisguise(player); + + //Disguise + DisguiseBat disguise = new DisguiseBat(player); + + if (Manager.GetGame().GetTeam(player) != null) + disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName()); + else + disguise.setName(player.getName()); + + disguise.setCustomNameVisible(true); + Manager.GetDisguise().disguise(disguise); + } + + @Override + public void removeSuperCustom(Player player) + { + Manager.GetDisguise().undisguise(player); + + //Disguise + DisguiseWitch disguise = new DisguiseWitch(player); + + if (Manager.GetGame().GetTeam(player) != null) + disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName()); + else + disguise.setName(player.getName()); + + disguise.setCustomNameVisible(true); + Manager.GetDisguise().disguise(disguise); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void attackCancel(CustomDamageEvent event) + { + if (event.IsCancelled()) + return; + + Player player = event.GetDamagerPlayer(true); + if (player == null) + return; + + if (!isSuperActive(player)) + return; + + if (event.GetCause() != DamageCause.ENTITY_ATTACK) + return; + + event.SetCancelled("Bat Form Melee Cancel"); + } + + @EventHandler(priority = EventPriority.LOW) //Happen before activation of Super + public void sonicBoom(PlayerInteractEvent event) + { + Player player = event.getPlayer(); + + if (!isSuperActive(player)) + return; + + if (event.getAction() == Action.PHYSICAL) + return; + + if (!Recharge.Instance.use(player, GetName() + " Screech", 1200, false, false)) + return; + + //Effect + player.getWorld().playSound(player.getLocation(), Sound.BAT_HURT, 1f, 0.75f); + + _sonic.add(new SonicBoomData(player)); + } + + @EventHandler + public void sonicBoomUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + Iterator sonicIter = _sonic.iterator(); + + while (sonicIter.hasNext()) + { + SonicBoomData data = sonicIter.next(); + + //Time Boom + if (UtilTime.elapsed(data.Time, 12000)) + { + sonicIter.remove(); + explode(data); + continue; + } + + //Block Boom + if (!UtilBlock.airFoliage(data.Location.getBlock())) + { + sonicIter.remove(); + explode(data); + continue; + } + + //Proxy Boom + for (Player player : Manager.GetGame().GetPlayers(true)) + { + if (player.getGameMode() != GameMode.SURVIVAL) + continue; + + if (player.equals(data.Shooter)) + continue; + + if (UtilMath.offset(player.getLocation().add(0, 1, 0), data.Location) < 4) + { + sonicIter.remove(); + explode(data); + continue; + } + } + + //Move + data.Location.add(data.Direction.clone().multiply(0.75)); + + //Effect + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.Location, 0, 0, 0, 0, 1); + data.Location.getWorld().playSound(data.Location, Sound.FIZZ, 1f, 2f); + } + } + + private void explode(SonicBoomData data) + { + //Effect + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Location, 0, 0, 0, 0, 1); + data.Location.getWorld().playSound(data.Location, Sound.EXPLODE, 1f, 1.5f); + + //Damage + HashMap targets = UtilEnt.getInRadius(data.Location, 10); + for (LivingEntity cur : targets.keySet()) + { + Manager.GetDamage().NewDamageEvent(cur, data.Shooter, null, + DamageCause.CUSTOM, 12 * targets.get(cur) + 0.5, true, false, false, + data.Shooter.getName(), GetName()); + } + } + + @EventHandler + public void flap(PlayerToggleFlightEvent event) + { + Player player = event.getPlayer(); + + if (player.getGameMode() == GameMode.CREATIVE) + return; + + if (!isSuperActive(player)) + return; + + event.setCancelled(true); + player.setFlying(false); + + //Disable Flight + player.setAllowFlight(false); + + //Velocity + UtilAction.velocity(player, player.getLocation().getDirection(), 0.8, false, 0, 0.8, 1, true); + + //Sound + player.getWorld().playSound(player.getLocation(), Sound.BAT_TAKEOFF, (float)(0.3 + player.getExp()), (float)(Math.random()/2+0.5)); + + //Set Recharge + Recharge.Instance.use(player, GetName() + " Flap", 40, false, false); + } + + @EventHandler + public void flapRecharge(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for (Player player : ((SmashKit)Kit).getSuperActive()) + { + if (player.getGameMode() == GameMode.CREATIVE) + continue; + + if (UtilEnt.isGrounded(player) || UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN))) + { + player.setAllowFlight(true); + } + else if (Recharge.Instance.usable(player, GetName() + " Flap")) + { + player.setAllowFlight(true); + } + } + } + + @EventHandler + public void knockback(CustomDamageEvent event) + { + if (event.GetReason() == null || !event.GetReason().contains(GetName())) + return; + + event.AddKnockback(GetName(), 2); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatWave.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatWave.java index c0f03551e..fbb37a302 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatWave.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatWave.java @@ -31,9 +31,9 @@ import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkBatWave extends Perk +public class PerkBatWave extends SmashPerk { private HashMap _active = new HashMap(); private HashMap _direction = new HashMap(); @@ -45,8 +45,8 @@ public class PerkBatWave extends Perk { super("Bat Wave", new String[] { - C.cYellow + "Right-Click" + C.cGray + " to use " + C.cGreen + "Bat Wave", - C.cYellow + "Double Right-Click" + C.cGray + " to use " + C.cGreen + "Bat Leash" + C.cYellow + "Right-Click" + C.cGray + " with Spade to use " + C.cGreen + "Bat Wave", + C.cYellow + "Double Right-Click" + C.cGray + " with Spade to use " + C.cGreen + "Bat Leash" }); } @@ -80,6 +80,9 @@ public class PerkBatWave extends Perk Player player = event.getPlayer(); + if (isSuperActive(player)) + return; + if (!Kit.HasKit(player)) return; @@ -202,7 +205,7 @@ public class PerkBatWave extends Perk Location batLoc = batVec.toLocation(cur.getWorld()); - UtilAction.velocity(cur, UtilAlg.getTrajectory(cur.getLocation(), batLoc), 0.5, false, 0, 0, 10, false); + UtilAction.velocity(cur, UtilAlg.getTrajectory(cur.getLocation(), batLoc), 0.35, false, 0, 0, 10, false); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlink.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlink.java index 97e2a5cdf..554fe76a3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlink.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlink.java @@ -2,9 +2,7 @@ package nautilus.game.arcade.kit.perks; import org.bukkit.Color; import org.bukkit.Effect; -import org.bukkit.FireworkEffect; import org.bukkit.Location; -import org.bukkit.Sound; import org.bukkit.FireworkEffect.Type; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -20,9 +18,9 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilPlayer; import mineplex.core.recharge.Recharge; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkBlink extends Perk +public class PerkBlink extends SmashPerk { private String _name = ""; private double _range; @@ -59,6 +57,9 @@ public class PerkBlink extends Perk return; Player player = event.getPlayer(); + + if (isSuperActive(player)) + return; if (!Kit.HasKit(player)) return; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlizzard.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlizzard.java index 32b7da543..93b52fbda 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlizzard.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlizzard.java @@ -46,7 +46,10 @@ public class PerkBlizzard extends Perk if (!Kit.HasKit(player)) continue; - player.setExp((float) Math.min(0.999, player.getExp()+0.007)); + if (player.isBlocking()) + continue; + + player.setExp((float) Math.min(0.999, player.getExp()+(1f/60f))); } } @@ -76,6 +79,7 @@ public class PerkBlizzard extends Perk double x = 0.1 - (UtilMath.r(20)/100d); double y = UtilMath.r(20)/100d; double z = 0.1 - (UtilMath.r(20)/100d); + snow.setShooter(player); snow.setVelocity(player.getLocation().getDirection().add(new Vector(x,y,z)).multiply(2)); _snowball.put(snow, player); } @@ -108,10 +112,12 @@ public class PerkBlizzard extends Perk //Damage Event if (damagee instanceof Player) - if (Recharge.Instance.use((Player)damagee, GetName(), 250, false, false)) + if (Recharge.Instance.use((Player)damagee, GetName(), 200, false, false)) + { Manager.GetDamage().NewDamageEvent(damagee, event.GetDamagerEntity(true), null, - DamageCause.PROJECTILE, 1, false, true, false, + DamageCause.CUSTOM, 1, false, true, false, UtilEnt.getName(event.GetDamagerEntity(true)), GetName()); + } } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlockToss.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlockToss.java index 3a36d7f99..9b87450af 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlockToss.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlockToss.java @@ -18,7 +18,7 @@ import mineplex.core.projectile.ProjectileUser; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; import nautilus.game.arcade.kit.perks.data.BlockTossData; import nautilus.game.arcade.kit.perks.event.PerkBlockGrabEvent; import nautilus.game.arcade.kit.perks.event.PerkBlockThrowEvent; @@ -34,7 +34,7 @@ import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerInteractEvent; -public class PerkBlockToss extends Perk implements IThrown +public class PerkBlockToss extends SmashPerk implements IThrown { private HashMap _hold = new HashMap(); private HashMap _charge = new HashMap(); @@ -57,6 +57,9 @@ public class PerkBlockToss extends Perk implements IThrown if (!UtilEvent.isAction(event, ActionType.R_BLOCK)) return; + + if (isSuperActive(player)) + return; if (!Kit.HasKit(player)) return; @@ -113,7 +116,7 @@ public class PerkBlockToss extends Perk implements IThrown //Charged Tick if (!_charged.contains(cur)) - if (System.currentTimeMillis() - _charge.get(cur) > 800) + if (System.currentTimeMillis() - _charge.get(cur) > 1200) { _charged.add(cur); cur.playEffect(cur.getLocation(), Effect.CLICK1, 0); @@ -134,8 +137,8 @@ public class PerkBlockToss extends Perk implements IThrown //Throw double mult = 1.4; - if (charge < 1000) - mult = mult * ((double)charge/1000d); + if (charge < 1200) + mult = mult * ((double)charge/1200d); //Action UtilAction.velocity(block, cur.getLocation().getDirection(), mult, false, 0.2, 0, 1, true); @@ -156,7 +159,7 @@ public class PerkBlockToss extends Perk implements IThrown //Damage Event Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null, - DamageCause.PROJECTILE, 2 + (data.GetThrown().getVelocity().length() * 8), true, true, false, + DamageCause.PROJECTILE, data.GetThrown().getVelocity().length() * 10, true, true, false, UtilEnt.getName(data.GetThrower()), GetName()); //Block to Item diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneExplosion.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneExplosion.java index 9b7010c74..12c099961 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneExplosion.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneExplosion.java @@ -16,9 +16,9 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilPlayer; import mineplex.core.recharge.Recharge; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkBoneExplosion extends Perk +public class PerkBoneExplosion extends SmashPerk { public PerkBoneExplosion() { @@ -48,6 +48,9 @@ public class PerkBoneExplosion extends Perk Player player = event.getPlayer(); + if (isSuperActive(player)) + return; + if (!Kit.HasKit(player)) return; @@ -61,7 +64,7 @@ public class PerkBoneExplosion extends Perk continue; //Inform - UtilPlayer.message(player, F.main("Game", F.elem(Manager.GetColor(player) + player.getName()) + " used " + F.skill(GetName()) + ".")); + UtilPlayer.message(other, F.main("Game", F.elem(Manager.GetColor(player) + player.getName()) + " used " + F.skill(GetName()) + ".")); //Damage Event Manager.GetDamage().NewDamageEvent(other, player, null, diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneRush.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneRush.java index 11346b8a7..93c21a368 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneRush.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneRush.java @@ -10,7 +10,6 @@ import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; 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.entity.PlayerDeathEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; @@ -31,9 +30,9 @@ import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkBoneRush extends Perk implements IThrown +public class PerkBoneRush extends SmashPerk implements IThrown { private WeakHashMap _active = new WeakHashMap(); @@ -68,30 +67,26 @@ public class PerkBoneRush extends Perk implements IThrown Player player = event.getPlayer(); + if (isSuperActive(player)) + return; + if (!Kit.HasKit(player)) return; if (!Recharge.Instance.use(player, GetName(), 10000, true, true)) return; - //Blazing - boolean infernal = false; - for (Perk perk : Kit.GetPerks()) - { - if (perk instanceof PerkInfernalHorror) - { - infernal = ((PerkInfernalHorror)perk).IsActive(player); - } - } - _active.put(player, System.currentTimeMillis()); - if (!infernal) - UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + ".")); - else - UtilPlayer.message(player, F.main("Skill", "You used " + F.skill("Flame Rush") + ".")); + UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + ".")); } - + + @Override + public void addSuperCustom(Player player) + { + _active.put(player, System.currentTimeMillis()); + } + @EventHandler public void Update(UpdateEvent event) { @@ -104,35 +99,20 @@ public class PerkBoneRush extends Perk implements IThrown { Player player = playerIterator.next(); - if (!player.isValid() || UtilTime.elapsed(_active.get(player), 1500)) + if (!player.isValid() || (UtilTime.elapsed(_active.get(player), 1500) && !isSuperActive(player))) { playerIterator.remove(); continue; } - - //Blazing - boolean infernal = false; - for (Perk perk : Kit.GetPerks()) - { - if (perk instanceof PerkInfernalHorror) - { - infernal = ((PerkInfernalHorror)perk).IsActive(player); - } - } - + //Sound - if (!infernal) - player.getWorld().playSound(player.getLocation(), Sound.SKELETON_HURT, 0.4f, (float)(Math.random() + 1)); - else - { - player.getWorld().playSound(player.getLocation(), Sound.FIZZ, 1f, (float)(Math.random() + 1)); - player.getWorld().playSound(player.getLocation(), Sound.GHAST_FIREBALL, 1f, (float)(Math.random() + 1)); - } + player.getWorld().playSound(player.getLocation(), Sound.SKELETON_HURT, 0.4f, (float)(Math.random() + 1)); //Velocity Vector dir = player.getLocation().getDirection(); - if (dir.getY() > yLimit) - dir.setY(yLimit); + double limit = isSuperActive(player) ? yLimit + 0.1 : yLimit; + if (dir.getY() > limit) + dir.setY(limit); //Player if (!player.isSneaking()) @@ -141,18 +121,9 @@ public class PerkBoneRush extends Perk implements IThrown //Bones for (int i=0 ; i<6 ; i++) { - if (!infernal) - { - Item bone = player.getWorld().dropItem(player.getLocation().add(Math.random()*5 - 2.5, Math.random()*3, Math.random()*5 - 2.5), new ItemStack(Material.BONE)); - UtilAction.velocity(bone, dir, 0.6 + 0.3 * Math.random(), false, 0, 0.1 + Math.random() * 0.05, 0.3, false); - Manager.GetProjectile().AddThrow(bone, player, this, -1, true, true, true, false, 1d); - } - else - { - Item fire = player.getWorld().dropItem(player.getLocation().add(Math.random()*5 - 2.5, Math.random()*3, Math.random()*5 - 2.5), new ItemStack(Material.BLAZE_POWDER)); - UtilAction.velocity(fire, dir, 0.6 + 0.3 * Math.random(), false, 0, 0.1 + Math.random() * 0.05, 0.3, false); - Manager.GetProjectile().AddThrow(fire, player, this, -1, true, true, true, false, 1d); - } + Item bone = player.getWorld().dropItem(player.getLocation().add(Math.random()*5 - 2.5, Math.random()*3, Math.random()*5 - 2.5), new ItemStack(Material.BONE)); + UtilAction.velocity(bone, dir, 0.6 + 0.3 * Math.random(), false, 0, 0.1 + Math.random() * 0.05, 0.3, false); + Manager.GetProjectile().AddThrow(bone, player, this, 40, true, true, true, false, 1d); } } } @@ -160,29 +131,36 @@ public class PerkBoneRush extends Perk implements IThrown @EventHandler public void Knockback(CustomDamageEvent event) { - if (event.GetReason() == null || !event.GetReason().contains(GetName())) - return; - - event.AddKnockback(GetName(), 10); + if (event.GetReason() != null && event.GetReason().contains(GetName())) + event.AddKnockback(GetName(), 10); + + if (event.GetReason() != null && event.GetReason().contains("Eternal Rage")) + event.AddKnockback(GetName(), 15); } @Override public void Collide(LivingEntity target, Block block, ProjectileUser data) { - boolean burning = ((Item)data.GetThrown()).getItemStack().getType() == Material.BLAZE_POWDER; - data.GetThrown().remove(); if (target == null) return; + + Player damager = (Player)data.GetThrower(); + + double damage = 0.7; + String reason = GetName(); + + if (isSuperActive(damager)) + { + damage = 1.5; + reason = "Eternal Rage"; + } //Damage Event Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null, - DamageCause.CUSTOM, 0.7, false, true, false, - UtilEnt.getName(data.GetThrower()), GetName()); - - if (burning) - Manager.GetCondition().Factory().Ignite("Flame Rush", target, data.GetThrower(), 0.4, true, false); + DamageCause.CUSTOM, damage, false, true, false, + UtilEnt.getName(data.GetThrower()), reason); target.setVelocity(data.GetThrown().getVelocity()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkChickenRocket.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkChickenRocket.java index a090f4e53..8934cae7e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkChickenRocket.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkChickenRocket.java @@ -25,15 +25,18 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilParticle.ParticleType; 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.SmashPerk; import nautilus.game.arcade.kit.perks.data.ChickenMissileData; -public class PerkChickenRocket extends Perk +public class PerkChickenRocket extends SmashPerk { private HashSet _data = new HashSet(); @@ -65,6 +68,9 @@ public class PerkChickenRocket extends Perk return; Player player = event.getPlayer(); + + if (isSuperActive(player)) + return; if (!Kit.HasKit(player)) return; @@ -177,8 +183,9 @@ public class PerkChickenRocket extends Perk UtilAction.velocity(livingEnt, UtilAlg.getTrajectory2d(data.Chicken, livingEnt), 1.6, true, 0.8, 0, 10, true); } - //Explosion - data.Chicken.getWorld().createExplosion(data.Chicken.getLocation(), 1.8f); + //Effect + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Chicken.getLocation(), 0, 0, 0, 0, 1); + data.Chicken.getWorld().playSound(data.Chicken.getLocation(), Sound.EXPLODE, 2f, 1.2f); //Firework UtilFirework.playFirework(data.Chicken.getLocation().add(0, 0.6, 0), Type.BALL, Color.WHITE, false, false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperExplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperExplode.java index 9f5cf1fbc..b500a7c39 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperExplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperExplode.java @@ -1,8 +1,10 @@ package nautilus.game.arcade.kit.perks; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; +import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -19,7 +21,9 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseCreeper; import mineplex.core.recharge.Recharge; @@ -27,11 +31,13 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkCreeperExplode extends Perk +public class PerkCreeperExplode extends SmashPerk { private HashMap _active = new HashMap(); - + private HashSet _super = new HashSet(); + public PerkCreeperExplode() { super("Explode", new String[] @@ -56,6 +62,9 @@ public class PerkCreeperExplode extends Perk return; Player player = event.getPlayer(); + + if (isSuperActive(player)) + return; if (!Kit.HasKit(player)) return; @@ -70,6 +79,15 @@ public class PerkCreeperExplode extends Perk UtilPlayer.message(player, F.main("Skill", "You are charging " + F.skill(GetName()) + ".")); } + @Override + public void addSuperCustom(Player player) + { + _active.put(player, System.currentTimeMillis()); + _super.add(player); + + IncreaseSize(player); + } + @EventHandler public void Update(UpdateEvent event) { @@ -103,8 +121,37 @@ public class PerkCreeperExplode extends Perk //Unpower DecreaseSize(player); + boolean isSuper = _super.remove(player); + //Explode - player.getWorld().createExplosion(player.getLocation(), (float) 2.0); + if (!isSuper) + { + //Effect + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0, 0, 0, 1); + player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 2f, 1f); + } + else + { + //Particles + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 5f, 5f, 5f, 0, 20); + + //Sound + for (int i=0 ; i<4 ; i++) + player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, (float)(2 + Math.random()*4), (float)(Math.random() + 0.2)); + + //Blocks + Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(player.getLocation(), 12).keySet(), player.getLocation(), false); + + //Remove Spawns + Iterator spawnIterator = Manager.GetGame().GetTeam(player).GetSpawns().iterator(); + while (spawnIterator.hasNext()) + { + Location spawn = spawnIterator.next(); + + if (UtilMath.offset(player.getLocation(), spawn) < 14) + spawnIterator.remove(); + } + } //Damage for (Entity ent : player.getWorld().getEntities()) @@ -118,6 +165,12 @@ public class PerkCreeperExplode extends Perk double dist = UtilMath.offset(player.getLocation(), ent.getLocation()); double maxRange = 8; + if (isSuper) + maxRange = 24; + + double damage = 20; + if (isSuper) + damage = 30; if (dist > maxRange) continue; @@ -132,15 +185,16 @@ public class PerkCreeperExplode extends Perk //Damage Event Manager.GetDamage().NewDamageEvent(livingEnt, player, null, - DamageCause.CUSTOM, 20 * scale, true, true, false, - player.getName(), GetName()); + DamageCause.CUSTOM, damage * scale, true, true, false, + player.getName(), isSuper ? "Atomic Blast" : GetName()); } - + //Velocity UtilAction.velocity(player, 1.8, 0.2, 1.4, true); //Inform - UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + ".")); + if (!isSuper) + UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + ".")); } } @@ -200,6 +254,7 @@ public class PerkCreeperExplode extends Perk return; _active.remove(event.getEntity()); + _super.remove(event.getEntity()); DecreaseSize(event.getEntity()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperSulphurBomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperSulphurBomb.java index fb657ace8..a429b9934 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperSulphurBomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkCreeperSulphurBomb.java @@ -16,7 +16,9 @@ import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; @@ -24,8 +26,9 @@ import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkCreeperSulphurBomb extends Perk implements IThrown +public class PerkCreeperSulphurBomb extends SmashPerk implements IThrown { public PerkCreeperSulphurBomb() { @@ -56,6 +59,9 @@ public class PerkCreeperSulphurBomb extends Perk implements IThrown Player player = event.getPlayer(); + if (isSuperActive(player)) + return; + if (!Kit.HasKit(player)) return; @@ -92,7 +98,7 @@ public class PerkCreeperSulphurBomb extends Perk implements IThrown //Damage Event Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null, - DamageCause.PROJECTILE, 4, true, true, false, + DamageCause.PROJECTILE, 7, true, true, false, UtilEnt.getName(data.GetThrower()), GetName()); } @@ -110,7 +116,8 @@ public class PerkCreeperSulphurBomb extends Perk implements IThrown public void Explode(ProjectileUser data) { - data.GetThrown().getWorld().createExplosion(data.GetThrown().getLocation(), 0.5f); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.GetThrown().getLocation(), 0, 0, 0, 0, 1); + data.GetThrown().getWorld().playSound(data.GetThrown().getLocation(), Sound.EXPLODE, 1f, 1.5f); data.GetThrown().remove(); } @@ -120,6 +127,6 @@ public class PerkCreeperSulphurBomb extends Perk implements IThrown if (event.GetReason() == null || !event.GetReason().contains(GetName())) return; - event.AddKnockback(GetName(), 2); + event.AddKnockback(GetName(), 1.5); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDamageSnow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDamageSnow.java index be04f5e6b..1c97ba2fd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDamageSnow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDamageSnow.java @@ -17,7 +17,7 @@ public class PerkDamageSnow extends Perk { super("Snow Attack", new String[] { - C.cGray + "+" + damage + " Damage and +" + (int)((knockback-1)*100) + "% Knockback to enemies on snow.", + C.cGray + "+" + damage + " Damage and " + (int)((knockback-1)*100) + "% Knockback to enemies on snow.", }); _damage = damage; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java new file mode 100644 index 000000000..11d0ea3dd --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java @@ -0,0 +1,55 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.HashSet; + +import org.bukkit.Material; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import mineplex.core.common.util.C; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.recharge.Recharge; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.kit.SmashPerk; + +public class PerkDeadlyBones extends SmashPerk +{ + private HashSet _active = new HashSet(); + + public PerkDeadlyBones() + { + super("Deadly Bones", new String[] + { + C.cGray + "Drop explosive bones when you take damage." + }); + } + + @EventHandler + public void damageActivate(CustomDamageEvent event) + { + if (event.IsCancelled()) + return; + + Player player = event.GetDamageePlayer(); + if (player == null) + return; + + if (!Kit.HasKit(player)) + return; + + if (!Recharge.Instance.use(player, GetName(), 400, true, true)) + return; + + _active.add(player.getWorld().dropItemNaturally(player.getLocation().add(0, 0.5, 0), ItemStackFactory.Instance.CreateStack(Material.BONE, (byte)0, 1, "Explosive Bone " + System.currentTimeMillis()))); + } + + @EventHandler + public void knockback(CustomDamageEvent event) + { + if (event.GetReason() == null || !event.GetReason().contains(GetName())) + return; + + event.AddKnockback(GetName(), 1.5); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java new file mode 100644 index 000000000..a1efe6f55 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java @@ -0,0 +1,187 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.HashMap; +import java.util.Iterator; + +import org.bukkit.GameMode; +import org.bukkit.Sound; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; +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.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.kit.Perk; + +public class PerkDeathsGrasp extends Perk +{ + private HashMap _live = new HashMap(); + private HashMap _weakness = new HashMap(); + + public PerkDeathsGrasp() + { + super("Deaths Grasp", new String[] + { + C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Deaths Grasp", + C.cGray + "+4 Arrow Damage to enemies thrown by Deaths Grasp" + }); + } + + @EventHandler + public void leap(PlayerInteractEvent event) + { + if (event.isCancelled()) + return; + + if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + if (UtilBlock.usable(event.getClickedBlock())) + return; + + if (!UtilGear.isAxe(event.getPlayer().getItemInHand())) + return; + + Player player = event.getPlayer(); + + if (!Kit.HasKit(player)) + return; + + if (!Recharge.Instance.use(player, GetName(), 12000, true, true)) + return; + + UtilAction.velocity(player, player.getLocation().getDirection(), 1.4, false, 0, 0.2, 1.2, true); + + //Record + _live.put(player, System.currentTimeMillis()); + + //Inform + UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + ".")); + + //Effect + player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_HURT, 1f, 1.4f); + } + + @EventHandler + public void end(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + //Collide + for (Player player : Manager.GetGame().GetPlayers(true)) + if (_live.containsKey(player)) + for (Player other : Manager.GetGame().GetPlayers(true)) + if (other.getGameMode() == GameMode.SURVIVAL) + if (!other.equals(player)) + if (UtilMath.offset(player, other) < 2) + { + collide(player, other); + _live.remove(player); + return; + } + + //Leap End + Iterator leapIter = _live.keySet().iterator(); + + while (leapIter.hasNext()) + { + LivingEntity ent = leapIter.next(); + + if (!UtilEnt.isGrounded(ent)) + continue; + + if (!UtilTime.elapsed(_live.get(ent), 1000)) + continue; + + _live.remove(ent); + } + + //Weakness End + Iterator weaknessIter = _weakness.keySet().iterator(); + + while (weaknessIter.hasNext()) + { + LivingEntity ent = weaknessIter.next(); + + if (!UtilEnt.isGrounded(ent)) + continue; + + if (!UtilTime.elapsed(_weakness.get(ent), 1000)) + continue; + + _weakness.remove(ent); + } + } + + public void collide(Player damager, LivingEntity damagee) + { + //Damage Event + Manager.GetDamage().NewDamageEvent(damagee, damager, null, + DamageCause.CUSTOM, 6, false, true, false, + damager.getName(), GetName()); + + UtilAction.velocity(damagee, UtilAlg.getTrajectory(damagee, damager), 1.8, false, 0, 1, 1.8, true); + + damager.setVelocity(new Vector(0,0,0)); + + damager.getWorld().playSound(damager.getLocation(), Sound.ZOMBIE_HURT, 1f, 0.7f); + + _weakness.put(damagee, System.currentTimeMillis()); + + //Inform + UtilPlayer.message(damager, F.main("Game", "You hit " + F.name(UtilEnt.getName(damagee)) + " with " + F.skill(GetName()) + ".")); + UtilPlayer.message(damagee, F.main("Game", F.name(damager.getName()) + " hit you with " + F.skill(GetName()) + ".")); + + Recharge.Instance.recharge(damager, GetName()); + } + + @EventHandler(priority = EventPriority.HIGH) + public void arrowDamage(CustomDamageEvent event) + { + if (event.GetProjectile() == null) + return; + + if (!(event.GetProjectile() instanceof Arrow)) + return; + + if (!_weakness.containsKey(event.GetDamageeEntity())) + return; + + Player damager = event.GetDamagerPlayer(true); + if (damager == null) return; + + if (!Kit.HasKit(damager)) + return; + + if (!Manager.IsAlive(damager)) + return; + + event.AddMod(GetName(), GetName() + " Combo", 4, true); + + UtilParticle.PlayParticle(ParticleType.RED_DUST, event.GetDamageeEntity().getLocation(), 0.5f, 0.5f, 0.5f, 0, 20); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.GetDamageeEntity().getLocation(), 0, 0, 0, 0, 1); + + damager.getWorld().playSound(damager.getLocation(), Sound.ZOMBIE_HURT, 1f, 2f); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJump.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJump.java index 271307dfa..c0b1cc2f3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJump.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJump.java @@ -1,5 +1,7 @@ package nautilus.game.arcade.kit.perks; +import java.util.HashSet; + import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Material; @@ -26,6 +28,8 @@ public class PerkDoubleJump extends Perk private long _recharge; private boolean _displayForce; + private HashSet _disabled = new HashSet(); + public PerkDoubleJump(String name, double power, double heightLimit, boolean control) { super(name, new String[] @@ -117,4 +121,14 @@ public class PerkDoubleJump extends Perk player.setAllowFlight(true); } } + + public void disableForPlayer(Player player) + { + _disabled.add(player); + } + + public void enableForPlayer(Player player) + { + _disabled.remove(player); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEarthquake.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEarthquake.java new file mode 100644 index 000000000..27591dd05 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEarthquake.java @@ -0,0 +1,107 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.entity.Zombie; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilTime; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.kit.SmashPerk; +import nautilus.game.arcade.kit.perks.data.EarthquakeData; +import nautilus.game.arcade.kit.perks.data.NightLivingDeadData; + +public class PerkEarthquake extends SmashPerk +{ + private ArrayList _night = new ArrayList(); + + public PerkEarthquake() + { + super("Earthquake", new String[] + { + }, false); + } + + @Override + public void addSuperCustom(Player player) + { + _night.add(new EarthquakeData(player)); + } + + @EventHandler + public void update(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + Iterator quakeIter = _night.iterator(); + + while (quakeIter.hasNext()) + { + EarthquakeData data = quakeIter.next(); + + //Expire + if (UtilTime.elapsed(data.Time, 18000)) + { + quakeIter.remove(); + continue; + } + + for (Player player : Manager.GetGame().GetPlayers(true)) + { + player.playSound(player.getLocation(), Sound.MINECART_BASE, 0.2f, 0.2f); + + if (player.equals(data.Player)) + continue; + + if (UtilEnt.isGrounded(player)) + { + //Damage Event + Manager.GetDamage().NewDamageEvent(player, data.Player, null, + DamageCause.CUSTOM, 1 + 4 * Math.random(), false, false, false, + player.getName(), GetName()); + + //Velocity + if (Recharge.Instance.use(player, GetName() + " Hit", 400, false, false)) + UtilAction.velocity(player, new Vector(Math.random() - 0.5, Math.random() * 0.2, Math.random() - 0.5), + Math.random() * 1 + 1, false, 0, 0.1 + Math.random() * 0.2, 2, true); + } + + //Effect + for (Block block : UtilBlock.getInRadius(player.getLocation(), 5).keySet()) + { + if (Math.random() < 0.95) + continue; + + if (!UtilBlock.solid(block)) + continue; + + if (!UtilBlock.airFoliage(block.getRelative(BlockFace.UP))) + continue; + + player.playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); + } + } + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEggGun.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEggGun.java index 6e39e8143..8530d4b8f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEggGun.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEggGun.java @@ -24,8 +24,9 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkEggGun extends Perk +public class PerkEggGun extends SmashPerk { private HashMap _active = new HashMap(); @@ -55,6 +56,9 @@ public class PerkEggGun extends Perk Player player = event.getPlayer(); + if (isSuperActive(event.getPlayer())) + return; + if (!Kit.HasKit(player)) return; @@ -74,19 +78,22 @@ public class PerkEggGun extends Perk for (Player cur : UtilServer.getPlayers()) { - if (!_active.containsKey(cur)) - continue; - - if (!cur.isBlocking()) + if (!isSuperActive(cur)) { - _active.remove(cur); - continue; - } - - if (UtilTime.elapsed(_active.get(cur), 750)) - { - _active.remove(cur); - continue; + if (!_active.containsKey(cur)) + continue; + + if (!cur.isBlocking()) + { + _active.remove(cur); + continue; + } + + if (UtilTime.elapsed(_active.get(cur), 750)) + { + _active.remove(cur); + continue; + } } Vector offset = cur.getLocation().getDirection(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java new file mode 100644 index 000000000..abed5f7df --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java @@ -0,0 +1,142 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.HashMap; + +import org.bukkit.Color; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.FireworkEffect.Type; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEnderDragon; +import org.bukkit.entity.EnderDragon; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilFirework; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.kit.SmashPerk; + +public class PerkEndermanDragon extends SmashPerk +{ + private HashMap _dragons = new HashMap(); + + public PerkEndermanDragon() + { + super("Ender Dragon", new String[] + { + }, false); + } + + @Override + public void addSuperCustom(Player player) + { + Manager.GetGame().CreatureAllowOverride = true; + EnderDragon dragon = player.getWorld().spawn(player.getLocation().add(0, 20, 0), EnderDragon.class); + UtilEnt.Vegetate(dragon); + Manager.GetGame().CreatureAllowOverride = false; + + UtilFirework.playFirework(dragon.getLocation(), Type.BALL_LARGE, Color.BLACK, true, true); + + _dragons.put(player, dragon); + } + + @Override + public void removeSuperCustom(Player player) + { + EnderDragon dragon = _dragons.remove(player); + if (dragon == null) + return; + + player.leaveVehicle(); + dragon.remove(); + } + + @EventHandler + public void update(UpdateEvent event) + { + for (Player player : _dragons.keySet()) + { + EnderDragon dragon = _dragons.get(player); + + //Mount + if (dragon.getPassenger() == null || !dragon.getPassenger().equals(player)) + { + player.leaveVehicle(); + dragon.setPassenger(player); + } + + //Move + Location target = player.getLocation().add(player.getLocation().getDirection().multiply(40)); + ((CraftEnderDragon)dragon).getHandle().setTargetBlock(target.getBlockX(), target.getBlockY(), target.getBlockZ()); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void explosionBlocks(EntityExplodeEvent event) + { + event.blockList().clear(); + } + + @EventHandler(priority = EventPriority.LOW) + public void suffocationCancel(CustomDamageEvent event) + { + if (event.GetCause() != DamageCause.SUFFOCATION) + return; + + if (event.GetDamageePlayer() == null) + return; + + if (isSuperActive(event.GetDamageePlayer())) + event.SetCancelled("Enderman Dragon Suffocate"); + } + + @EventHandler(priority = EventPriority.LOW) + public void dragonDamageeCancel(CustomDamageEvent event) + { + if (event.GetDamagerEntity(false) == null) + return; + + if (_dragons.values().contains(event.GetDamagerEntity(false))) + event.SetCancelled("Enderman Dragon Damagee"); + } + + @EventHandler(priority = EventPriority.LOW) + public void damageTransfer(CustomDamageEvent event) + { + if (event.GetDamagerEntity(false) == null) + return; + + if (!_dragons.values().contains(event.GetDamagerEntity(false))) + return; + + if (event.GetDamagerEntity(false).getPassenger() == null) + return; + + if (!(event.GetDamagerEntity(false).getPassenger() instanceof LivingEntity)) + return; + + event.SetDamager((LivingEntity)event.GetDamagerEntity(false).getPassenger()); + } + + @EventHandler(priority = EventPriority.LOW) + public void voidCancel(CustomDamageEvent event) + { + if (event.GetCause() != DamageCause.VOID) + return; + + Player player = event.GetDamageePlayer(); + if (player == null) + return; + + if (!isSuperActive(player)) + return; + + event.SetCancelled("Dragon Void Immunity"); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkExplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkExplode.java index 9ad00820c..d054f503d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkExplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkExplode.java @@ -3,6 +3,7 @@ package nautilus.game.arcade.kit.perks; import java.util.HashMap; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; @@ -15,7 +16,9 @@ import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.recharge.Recharge; import nautilus.game.arcade.kit.Perk; @@ -80,6 +83,7 @@ public class PerkExplode extends Perk } //Effect - player.getWorld().createExplosion(player.getLocation(), 0f); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0, 0, 0, 1); + player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 2f, 1f); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFirefly.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFirefly.java index 63bd50bb6..2f9c40f26 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFirefly.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFirefly.java @@ -26,9 +26,10 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; import nautilus.game.arcade.kit.perks.data.FireflyData; -public class PerkFirefly extends Perk +public class PerkFirefly extends SmashPerk { private HashSet _data = new HashSet(); private int _tick = 0; @@ -61,6 +62,9 @@ public class PerkFirefly extends Perk Player player = event.getPlayer(); + if (isSuperActive(event.getPlayer())) + return; + if (!Kit.HasKit(player)) return; @@ -72,6 +76,12 @@ public class PerkFirefly extends Perk UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + ".")); } + @Override + public void addSuperCustom(Player player) + { + _data.add(new FireflyData(player)); + } + @EventHandler public void Update(UpdateEvent event) { @@ -86,8 +96,10 @@ public class PerkFirefly extends Perk { FireflyData data = dataIterator.next(); + boolean superActive = isSuperActive(data.Player); + //Teleport - if (!UtilTime.elapsed(data.Time, 1500)) + if (!UtilTime.elapsed(data.Time, 1500) && !superActive) { data.Player.setVelocity(new Vector(0,0,0));//.teleport(data.Location); data.Player.getWorld().playSound(data.Player.getLocation(), Sound.EXPLODE, 0.2f, 0.6f); @@ -101,19 +113,19 @@ public class PerkFirefly extends Perk } //Velocity - else if (!UtilTime.elapsed(data.Time, 2500)) + else if (!UtilTime.elapsed(data.Time, 2500) || superActive) { - data.Player.setVelocity(data.Player.getLocation().getDirection().multiply(0.7).add(new Vector(0,0.1,0))); + data.Player.setVelocity(data.Player.getLocation().getDirection().multiply(superActive ? 0.9 : 0.7).add(new Vector(0,0.15,0))); //data.Player.setVelocity(data.Location.getDirection().multiply(0.7).add(new Vector(0,0.1,0))); data.Player.getWorld().playSound(data.Player.getLocation(), Sound.EXPLODE, 0.6f, 1.2f); if (_tick == 0) { //Firework - UtilFirework.playFirework(data.Player.getLocation().add(0, 0.6, 0), Type.BURST, Color.RED, false, false); + UtilFirework.playFirework(data.Player.getLocation().add(0, 0.6, 0), Type.BURST, Color.RED, superActive, superActive); } - for (Player other : UtilPlayer.getNearby(data.Player.getLocation(), 3)) + for (Player other : UtilPlayer.getNearby(data.Player.getLocation(), isSuperActive(data.Player) ? 5 : 4)) { if (other.equals(data.Player)) continue; @@ -131,7 +143,7 @@ public class PerkFirefly extends Perk //Damage Event Manager.GetDamage().NewDamageEvent(other, data.Player, null, DamageCause.CUSTOM, 10, true, true, false, - data.Player.getName(), GetName()); + data.Player.getName(), isSuperActive(data.Player) ? "Phoenix" : GetName()); UtilPlayer.message(other, F.main("Game", F.elem(Manager.GetColor(data.Player) + data.Player.getName()) + " hit you with " + F.elem(GetName()) + ".")); } @@ -159,7 +171,7 @@ public class PerkFirefly extends Perk if (!data.Player.equals(event.GetDamageeEntity())) continue; - if (!UtilTime.elapsed(data.Time, 1250))// && event.GetCause() == DamageCause.PROJECTILE) + if (!UtilTime.elapsed(data.Time, 1250) && !isSuperActive(data.Player))// && event.GetCause() == DamageCause.PROJECTILE) { dataIterator.remove(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlap.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlap.java index 21822a37a..ca74a613d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlap.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlap.java @@ -16,8 +16,9 @@ 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.SmashPerk; -public class PerkFlap extends Perk +public class PerkFlap extends SmashPerk { private double _power; private boolean _control; @@ -69,7 +70,8 @@ public class PerkFlap extends Perk Recharge.Instance.use(player, GetName(), 80, false, false); //Energy - player.setExp(Math.max(0f, player.getExp() - (1f/6f))); + if (!isSuperActive(player)) + player.setExp(Math.max(0f, player.getExp() - (1f/6f))); } @EventHandler @@ -86,7 +88,6 @@ public class PerkFlap extends Perk if (!Kit.HasKit(player)) continue; - if (UtilEnt.isGrounded(player) || UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN))) { player.setExp(0.999f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFleshArrow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFleshArrow.java new file mode 100644 index 000000000..5039514ff --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFleshArrow.java @@ -0,0 +1,112 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.HashSet; +import java.util.Iterator; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.kit.SmashPerk; + +public class PerkFleshArrow extends SmashPerk +{ + private HashSet _arrows = new HashSet(); + + public PerkFleshArrow() + { + super("Flesh Arrow", new String[] + { + C.cYellow + "Left-Click" + C.cGray + " with Bow to " + C.cGreen + "Flesh Arrow" + }); + } + + @EventHandler + public void fire(PlayerInteractEvent event) + { + if (event.getAction() != Action.LEFT_CLICK_AIR && event.getAction() != Action.LEFT_CLICK_BLOCK) + return; + + if (event.getPlayer().getItemInHand() == null) + return; + + if (event.getPlayer().getItemInHand().getType() != Material.BOW) + return; + + Player player = event.getPlayer(); + + if (!Kit.HasKit(player)) + return; + + if (!Recharge.Instance.use(player, GetName(), 8000, true, true)) + return; + + //Arrow + Arrow arrow = player.launchProjectile(Arrow.class); + arrow.setVelocity(player.getLocation().getDirection().multiply(3)); + _arrows.add(arrow); + + //Inform + UtilPlayer.message(player, F.main("Game", "You fired " + F.skill(GetName()) + ".")); + } + + @EventHandler + public void hit(ProjectileHitEvent event) + { + if (!_arrows.remove(event.getEntity())) + return; + + System.out.println("Flesh Arrow A"); + + event.getEntity().remove(); + } + + @EventHandler + public void damage(CustomDamageEvent event) + { + if (event.GetProjectile() == null) + return; + + if (!_arrows.contains(event.GetProjectile())) + return; + + LivingEntity ent = event.GetDamageeEntity(); + + Manager.GetCondition().Factory().Slow(GetName(), ent, event.GetDamagerEntity(true), 4, 3, false, false, false, false); + + ent.setVelocity(new Vector(0,-0.5,0)); + } + + @EventHandler + public void clean(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + return; + + for (Iterator arrowIterator = _arrows.iterator(); arrowIterator.hasNext();) + { + Entity arrow = arrowIterator.next(); + + if (!arrow.isValid()) + arrowIterator.remove(); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFletcher.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFletcher.java index 8145812e2..21cbc2717 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFletcher.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFletcher.java @@ -108,6 +108,9 @@ public class PerkFletcher extends Perk if (!Manager.GetGame().IsAlive(cur)) continue; + + if (UtilPlayer.isChargingBow(cur)) + continue; if (!Recharge.Instance.use(cur, GetName(), _time * 1000, false, false)) continue; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorseKick.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorseKick.java index 9a0f0b251..6c1176f42 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorseKick.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorseKick.java @@ -23,18 +23,15 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseHorse; -import mineplex.core.disguise.disguises.DisguisePig; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkHorseKick extends Perk +public class PerkHorseKick extends SmashPerk { private HashMap _active = new HashMap(); - - private HashMap _burning = new HashMap(); public PerkHorseKick() { @@ -43,7 +40,7 @@ public class PerkHorseKick extends Perk C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Bone Kick" }); } - + @EventHandler public void Activate(PlayerInteractEvent event) { @@ -60,6 +57,9 @@ public class PerkHorseKick extends Perk return; Player player = event.getPlayer(); + + if (isSuperActive(player)) + return; if (!Kit.HasKit(player)) return; @@ -78,20 +78,7 @@ public class PerkHorseKick extends Perk //Animation _active.put(player, System.currentTimeMillis()); - //Blazing - boolean infernal = false; - for (Perk perk : Kit.GetPerks()) - { - if (perk instanceof PerkInfernalHorror) - { - infernal = ((PerkInfernalHorror)perk).IsActive(player); - } - } - String name = GetName(); - if (infernal) - name = "Flame Kick"; - //AoE Area Location loc = player.getLocation(); loc.add(player.getLocation().getDirection().setY(0).normalize().multiply(1.5)); @@ -114,32 +101,22 @@ public class PerkHorseKick extends Perk //Damage Event Manager.GetDamage().NewDamageEvent((LivingEntity)other, player, null, - DamageCause.CUSTOM, 6, true, true, false, - player.getName(), name); + DamageCause.CUSTOM, 7, true, true, false, + player.getName(), GetName()); //Sound player.getWorld().playSound(player.getLocation(), Sound.SKELETON_HURT, 4f, 0.6f); player.getWorld().playSound(player.getLocation(), Sound.SKELETON_HURT, 4f, 0.6f); //Inform - UtilPlayer.message(other, F.main("Skill", F.name(player.getName()) + " hit you with " + F.skill(name) + ".")); - - //Store - if (infernal) - { - _burning.put(other, System.currentTimeMillis()); - - if (other instanceof LivingEntity) - Manager.GetCondition().Factory().Ignite(name, (LivingEntity)other, player, 2.5, true, false); - } - + UtilPlayer.message(other, F.main("Skill", F.name(player.getName()) + " hit you with " + F.skill(GetName()) + ".")); } //Inform - UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(name) + ".")); + UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + ".")); //Slow - Manager.GetCondition().Factory().Slow(name, player, player, 0.8, 3, false, false, true, false); + Manager.GetCondition().Factory().Slow(GetName(), player, player, 0.8, 3, false, false, true, false); } @EventHandler @@ -178,23 +155,6 @@ public class PerkHorseKick extends Perk UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, loc, 0.3f, 0.3f, 0.3f, 0, 2); } } - - //Burning - Iterator burningIterator = _burning.keySet().iterator(); - - while (burningIterator.hasNext()) - { - Entity ent = burningIterator.next(); - - if (!ent.isValid() || UtilTime.elapsed(_burning.get(ent), 2500)) - { - burningIterator.remove(); - } - else - { - UtilParticle.PlayParticle(ParticleType.FLAME, ent.getLocation().add(0, 0.8, 0), 0f, 0f, 0f, 0, 1); - } - } } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java index caa02790f..5570c57d9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java @@ -6,7 +6,6 @@ import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; -import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.core.common.util.C; @@ -18,9 +17,9 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.events.PlayerGameRespawnEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkInfernalHorror extends Perk +public class PerkInfernalHorror extends SmashPerk { public HashSet _active = new HashSet(); @@ -32,9 +31,16 @@ public class PerkInfernalHorror extends Perk C.cGray + "Charge your Rage by dealing/taking damage." }); } + + @Override + public void addSuperCustom(Player player) + { + _active.add(player); + player.setExp(0.9999f); + } @EventHandler - public void EnergyUpdate(UpdateEvent event) + public void energyUpdate(UpdateEvent event) { if (event.getType() != UpdateType.TICK) return; @@ -49,7 +55,7 @@ public class PerkInfernalHorror extends Perk } @EventHandler(priority = EventPriority.HIGHEST) - public void DamagerEnergy(CustomDamageEvent event) + public void damagerEnergy(CustomDamageEvent event) { if (event.IsCancelled()) return; @@ -63,15 +69,13 @@ public class PerkInfernalHorror extends Perk if (!Kit.HasKit(damager)) return; - damager.setExp(Math.min(0.999f, damager.getExp() + (float)(event.GetDamage()/80d))); + damager.setExp(Math.min(0.999f, damager.getExp() + (float)(event.GetDamage()/60d))); - - - ActiveCheck(damager); + activeCheck(damager); } @EventHandler(priority = EventPriority.MONITOR) - public void DamageeEnergy(CustomDamageEvent event) + public void damageeEnergy(CustomDamageEvent event) { if (event.IsCancelled()) return; @@ -89,13 +93,13 @@ public class PerkInfernalHorror extends Perk if (!Kit.HasKit(damagee)) return; - damagee.setExp(Math.min(0.999f, damagee.getExp() + (float)(event.GetDamage()/80d))); + damagee.setExp(Math.min(0.999f, damagee.getExp() + (float)(event.GetDamage()/60d))); - ActiveCheck(damagee); + activeCheck(damagee); } @EventHandler(priority = EventPriority.HIGH) - public void DamageBoost(CustomDamageEvent event) + public void damageBoost(CustomDamageEvent event) { if (event.IsCancelled()) return; @@ -116,22 +120,23 @@ public class PerkInfernalHorror extends Perk } @EventHandler - public void Check(UpdateEvent event) + public void check(UpdateEvent event) { if (event.getType() != UpdateType.TICK) return; for (Player player : Manager.GetGame().GetPlayers(true)) if (Kit.HasKit(player)) - ActiveCheck(player); + activeCheck(player); } - public void ActiveCheck(Player player) + public void activeCheck(Player player) { //Active if (_active.contains(player)) { - player.setExp((float) Math.max(0, player.getExp()-0.005)); + if (!isSuperActive(player)) + player.setExp((float) Math.max(0, player.getExp()-0.005)); if (player.getExp() > 0) { @@ -167,13 +172,13 @@ public class PerkInfernalHorror extends Perk } @EventHandler - public void Clean(PlayerGameRespawnEvent event) + public void clean(PlayerGameRespawnEvent event) { event.GetPlayer().setExp(0f); _active.remove(event.GetPlayer()); } - public boolean IsActive(Player player) + public boolean isActive(Player player) { return _active.contains(player); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInferno.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInferno.java index 3f68cf2d3..739a9afc8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInferno.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInferno.java @@ -21,8 +21,9 @@ import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkInferno extends Perk +public class PerkInferno extends SmashPerk { private HashMap _active = new HashMap(); @@ -66,6 +67,9 @@ public class PerkInferno extends Perk Player player = event.getPlayer(); + if (isSuperActive(player)) + return; + if (!Kit.HasKit(player)) return; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInkBlast.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInkBlast.java index 433b11e8c..b8e775ca7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInkBlast.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInkBlast.java @@ -25,9 +25,9 @@ import mineplex.core.projectile.ProjectileUser; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkInkBlast extends Perk implements IThrown +public class PerkInkBlast extends SmashPerk implements IThrown { public PerkInkBlast() { @@ -39,7 +39,7 @@ public class PerkInkBlast extends Perk implements IThrown @EventHandler - public void ShootWeb(PlayerInteractEvent event) + public void shoot(PlayerInteractEvent event) { if (event.isCancelled()) return; @@ -57,24 +57,30 @@ public class PerkInkBlast extends Perk implements IThrown return; Player player = event.getPlayer(); + + if (isSuperActive(player)) + return; if (!Kit.HasKit(player)) return; - if (!Recharge.Instance.use(player, GetName(), 6000, true, true)) + if (!Recharge.Instance.use(player, GetName(), 5000, true, true)) return; event.setCancelled(true); UtilInv.Update(player); - for (int i=0 ; i<6 ; i++) + for (int i=0 ; i<7 ; i++) { - org.bukkit.entity.Item ent = player.getWorld().dropItem(player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.INK_SACK)); + org.bukkit.entity.Item ent = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), ItemStackFactory.Instance.CreateStack(Material.INK_SACK)); Vector random = new Vector(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5); random.normalize(); - random.multiply(0.2); + random.multiply(0.15); + + if (i==0) + random.multiply(0); UtilAction.velocity(ent, player.getLocation().getDirection().add(random), 1 + 0.4 * Math.random(), false, 0, 0.2, 10, false); @@ -102,7 +108,7 @@ public class PerkInkBlast extends Perk implements IThrown //Damage Event Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null, - DamageCause.PROJECTILE, 2.5, true, true, false, + DamageCause.PROJECTILE, 3, true, true, false, UtilEnt.getName(data.GetThrower()), GetName()); Manager.GetCondition().Factory().Blind(GetName(), target, data.GetThrower(), 1.5, 0, false, false, false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLazer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLazer.java index 0be43a2d6..12bc8c2bf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLazer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLazer.java @@ -149,7 +149,7 @@ public class PerkLazer extends Perk if (other.equals(player)) continue; - if (UtilMath.offset(newTarget, other.getLocation().add(0, 1, 0)) < 2) + if (UtilMath.offset(newTarget, other.getLocation().add(0, 1, 0)) < 3) { hitPlayer = true; break; @@ -185,11 +185,11 @@ public class PerkLazer extends Perk continue; //Do from center - if (UtilMath.offset(target, other.getLocation().add(0, 1, 0)) < 3) + if (UtilMath.offset(target, other.getLocation().add(0, 1, 0)) < 3.5) { //Damage Event Manager.GetDamage().NewDamageEvent(other, player, null, - DamageCause.CUSTOM, player.getExp() * 6, true, true, false, + DamageCause.CUSTOM, player.getExp() * 7, true, true, false, player.getName(), GetName()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBlast.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBlast.java index ac029b66d..256ddd79f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBlast.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMagmaBlast.java @@ -5,6 +5,7 @@ import java.util.Iterator; import org.bukkit.Location; import org.bukkit.Sound; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftLargeFireball; import org.bukkit.entity.LargeFireball; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; @@ -26,6 +27,7 @@ import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.kit.Perk; +import net.minecraft.server.v1_7_R4.EntityLargeFireball; public class PerkMagmaBlast extends Perk { @@ -75,7 +77,15 @@ public class PerkMagmaBlast extends Perk ball.setYield(0); ball.setBounce(false); ball.teleport(player.getEyeLocation().add(player.getLocation().getDirection().multiply(1))); - ball.setVelocity(new Vector(0,0,0)); + + //ball.setVelocity(new Vector(0,0,0)); + + Vector dir = player.getLocation().getDirection().multiply(0.2); + + EntityLargeFireball eFireball = ((CraftLargeFireball) ball).getHandle(); + eFireball.dirX = dir.getX(); + eFireball.dirY = dir.getY(); + eFireball.dirZ = dir.getZ(); //Knockback UtilAction.velocity(player, player.getLocation().getDirection().multiply(-1), 1.2, false, 0, 0.2, 1.2, true); @@ -109,8 +119,8 @@ public class PerkMagmaBlast extends Perk continue; } - proj.setDirection(_proj.get(proj).clone().getDirection()); - proj.setVelocity(_proj.get(proj).clone().getDirection().multiply(0.6)); +// proj.setDirection(_proj.get(proj).clone().getDirection()); +// proj.setVelocity(_proj.get(proj).clone().getDirection().multiply(0.6)); } } @@ -118,8 +128,8 @@ public class PerkMagmaBlast extends Perk public void Collide(ProjectileHitEvent event) { Projectile proj = event.getEntity(); - - if (!(proj instanceof LargeFireball)) + + if (!_proj.containsKey(proj)) return; if (proj.getShooter() == null) @@ -137,9 +147,6 @@ public class PerkMagmaBlast extends Perk //Velocity UtilAction.velocity(cur, UtilAlg.getTrajectory(proj.getLocation().add(0, -0.5, 0), cur.getEyeLocation()), 1 + 2 * range, false, 0, 0.2 + 0.4 * range, 1.2, true); - - //Ignite - //Manager.GetCondition().Factory().Ignite(GetName(), cur, (Player)proj.getShooter(), 4, false, false); } //Particles diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMeteorShower.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMeteorShower.java new file mode 100644 index 000000000..4f6cc9ae9 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkMeteorShower.java @@ -0,0 +1,48 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.ArrayList; +import java.util.Iterator; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.kit.SmashPerk; +import nautilus.game.arcade.kit.perks.data.MeteorShowerData; + +public class PerkMeteorShower extends SmashPerk +{ + private ArrayList _meteors = new ArrayList(); + + public PerkMeteorShower() + { + super("Meteor Shower", new String[] + { + }, false); + } + + @Override + public void addSuperCustom(Player player) + { + _meteors.add(new MeteorShowerData(player, player.getTargetBlock(null, 128).getLocation())); + } + + @EventHandler + public void update(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + Iterator meteorIter = _meteors.iterator(); + + while (meteorIter.hasNext()) + { + MeteorShowerData data = meteorIter.next(); + + if (data.update()) + { + meteorIter.remove(); + } + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkNightLivingDead.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkNightLivingDead.java new file mode 100644 index 000000000..64dcdc9b7 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkNightLivingDead.java @@ -0,0 +1,141 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.entity.Zombie; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilTime; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.kit.SmashPerk; +import nautilus.game.arcade.kit.perks.data.NightLivingDeadData; + +public class PerkNightLivingDead extends SmashPerk +{ + private ArrayList _night = new ArrayList(); + + private HashSet _ignoreList = new HashSet();; + + public PerkNightLivingDead() + { + super("Night of the Living Dead", new String[] + { + }, false); + } + + @Override + public void addSuperCustom(Player player) + { + _night.add(new NightLivingDeadData(player)); + } + + @EventHandler + public void timeUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + if (_night.isEmpty() && Manager.GetGame().WorldTimeSet != 12000) + { + Manager.GetGame().WorldTimeSet = (Manager.GetGame().WorldTimeSet + 50)%24000; + } + else if (!_night.isEmpty() && Manager.GetGame().WorldTimeSet != 18000) + { + Manager.GetGame().WorldTimeSet = (Manager.GetGame().WorldTimeSet + 50)%24000; + } + } + + @EventHandler + public void update(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + Iterator nightIter = _night.iterator(); + + while (nightIter.hasNext()) + { + NightLivingDeadData data = nightIter.next(); + + //Expire + if (UtilTime.elapsed(data.Time, 30000)) + { + nightIter.remove(); + + for (Zombie zombie : data.Zombies) + zombie.damage(1000); + continue; + } + + //Spawn + if (UtilTime.elapsed(data.LastSpawn, 1000)) + { + Location origin = UtilAlg.Random(Manager.GetGame().GetPlayers(true)).getLocation(); + Location loc = findSpawn(origin); + + if (Math.abs(loc.getY() - origin.getY()) > 6) + continue; + + if (!UtilBlock.airFoliage(loc.getBlock()) || !UtilBlock.airFoliage(loc.getBlock().getRelative(BlockFace.UP))) + continue; + + //Set Spawned + data.LastSpawn = System.currentTimeMillis(); + + //Move Down + loc.subtract(0, 1, 0); + + //Spawn + Manager.GetGame().CreatureAllowOverride = true; + Zombie zombie = loc.getWorld().spawn(loc, Zombie.class); + Manager.GetGame().CreatureAllowOverride = false; + + data.Zombies.add(zombie); + + //Pop up + zombie.setVelocity(new Vector(0,0.4,0)); + //zombie.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 9999, 1, true)); + + //Effect + zombie.getWorld().playSound(zombie.getLocation(), Sound.ZOMBIE_IDLE, 1f, 0.75f); + + loc.getWorld().playEffect(loc, Effect.STEP_SOUND, loc.getBlock().getType()); + } + } + } + + @EventHandler + public void update(EntityTargetEvent event) + { + for (NightLivingDeadData data : _night) + { + if (data.Zombies.contains(event.getEntity())) + { + if (data.Player.equals(event.getTarget())) + { + event.setCancelled(true); + } + } + } + } + + public Location findSpawn(Location area) + { + return UtilBlock.getHighest(area.getWorld(), (int)(area.getX() + Math.random() * 24 - 12), (int)(area.getZ() + Math.random() * 24 - 12), _ignoreList).getLocation().add(0.5, 0.5, 0.5); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigZombie.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigZombie.java index d70ec88a9..336be4ead 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigZombie.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigZombie.java @@ -27,8 +27,8 @@ public class PerkPigZombie extends Perk { super("Nether Pig", new String[] { - C.cGray + "Become Nether Pig when HP is below 4.", - C.cGray + "Return to Pig when HP is above 6." + C.cGray + "Become Nether Pig when HP is below 6.", + C.cGray + "Return to Pig when HP is 10 or higher." }); } @@ -48,7 +48,7 @@ public class PerkPigZombie extends Perk { Manager.GetCondition().Factory().Speed("Pig Zombie", player, player, 0.9, 0, false, false, false); - if (player.getHealth() < 8) + if (player.getHealth() < 10) continue; //Deactivate @@ -86,7 +86,7 @@ public class PerkPigZombie extends Perk //Not Active else { - if (player.getHealth() <= 0 || player.getHealth() > 4) + if (player.getHealth() <= 0 || player.getHealth() > 6) continue; //Activate @@ -115,6 +115,8 @@ public class PerkPigZombie extends Perk //Inform UtilPlayer.message(player, F.main("Skill", "You transformed into " + F.skill("Nether Pig Form") + ".")); + + player.setExp(0.99f); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkRopedArrow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkRopedArrow.java index 5be3169b9..51e694be7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkRopedArrow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkRopedArrow.java @@ -20,14 +20,13 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilEnt; 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.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkRopedArrow extends Perk +public class PerkRopedArrow extends SmashPerk { private HashSet _arrows = new HashSet(); @@ -60,7 +59,7 @@ public class PerkRopedArrow extends Perk return; Player player = event.getPlayer(); - + if (!Kit.HasKit(player)) return; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSeismicSlam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSeismicSlam.java index a4b197e4a..9309e6cf4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSeismicSlam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSeismicSlam.java @@ -100,7 +100,7 @@ public class PerkSeismicSlam extends Perk _live.remove(player); //Action - int damage = 12; + int damage = 11; double range = 8; HashMap targets = UtilEnt.getInRadius(player.getLocation(), range); @@ -109,9 +109,6 @@ public class PerkSeismicSlam extends Perk if (cur.equals(player)) continue; - if (!UtilEnt.isGrounded(player)) - continue; - //Damage Event Manager.GetDamage().NewDamageEvent(cur, player, null, DamageCause.CUSTOM, damage * targets.get(cur) + 0.5, true, true, false, diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java new file mode 100644 index 000000000..47434ab3a --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java @@ -0,0 +1,136 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.entity.Sheep; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.kit.SmashPerk; +import nautilus.game.arcade.kit.perks.data.HomingSheepData; + +public class PerkSheepHoming extends SmashPerk +{ + private ArrayList _sheep = new ArrayList(); + + public PerkSheepHoming() + { + super("Homing Sheepiles", new String[] + { + }, false); + } + + @Override + public void addSuperCustom(Player player) + { + ArrayList best3 = new ArrayList(); + + //Find Targets + for (int i=0 ; i<3 ; i++) + { + Player bestTarget = null; + double bestDist = 0; + + for (Player target : Manager.GetGame().GetPlayers(true)) + { + if (target.equals(player)) + continue; + + if (best3.contains(target)) + continue; + + double dist = UtilMath.offset(player, target); + + if (bestTarget == null || dist < bestDist) + { + bestTarget = target; + bestDist = dist; + } + } + + if (bestTarget != null) + { + best3.add(bestTarget); + } + else + { + break; + } + } + + //Fire Sheep + for (Player target : best3) + { + Manager.GetGame().CreatureAllowOverride = true; + Sheep sheep = player.getWorld().spawn(player.getEyeLocation(), Sheep.class); + Manager.GetGame().CreatureAllowOverride = false; + + sheep.setBaby(); + + _sheep.add(new HomingSheepData(player, target, sheep)); + } + } + + @EventHandler + public void sheepUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + Iterator sheepIter = _sheep.iterator(); + + while (sheepIter.hasNext()) + { + HomingSheepData data = sheepIter.next(); + + if (data.update()) + { + sheepIter.remove(); + explode(data); + } + } + } + + private void explode(HomingSheepData data) + { + double scale = 0.4 + 0.6 * Math.min(1, data.Sheep.getTicksLived()/60d); + + //Players + HashMap players = UtilPlayer.getInRadius(data.Sheep.getLocation(), 10); + for (Player player : players.keySet()) + { + if (!Manager.GetGame().IsAlive(player)) + continue; + + //Damage Event + Manager.GetDamage().NewDamageEvent(player, data.Shooter, null, + DamageCause.CUSTOM, 20 * scale, true, true, false, + data.Shooter.getName(), GetName()); + } + + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Sheep.getLocation(), 0, 0, 0, 0, 1); + data.Sheep.getWorld().playSound(data.Sheep.getLocation(), Sound.EXPLODE, 2f, 1f); + + data.Sheep.remove(); + } + + @EventHandler + public void knockback(CustomDamageEvent event) + { + if (event.GetReason() == null || !event.GetReason().contains(GetName())) + return; + + event.AddKnockback(GetName(), 3); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSkeletonArrowStorm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSkeletonArrowStorm.java new file mode 100644 index 000000000..a58a42b81 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSkeletonArrowStorm.java @@ -0,0 +1,69 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.HashSet; +import java.util.Iterator; + +import org.bukkit.Sound; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.util.Vector; + + +import mineplex.core.updater.event.UpdateEvent; +import mineplex.core.updater.UpdateType; +import nautilus.game.arcade.kit.SmashKit; +import nautilus.game.arcade.kit.SmashPerk; + +public class PerkSkeletonArrowStorm extends SmashPerk +{ + private HashSet _arrows = new HashSet(); + + public PerkSkeletonArrowStorm() + { + super("Arrow Storm", new String[] + { + + }, false); + } + + @EventHandler + public void fireArrows(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for (Player cur : ((SmashKit)Kit).getSuperActive()) + { + Vector random = new Vector((Math.random() - 0.5) / 5, (Math.random() - 0.5) / 5, (Math.random() - 0.5) / 5); + Projectile arrow = cur.launchProjectile(Arrow.class); + arrow.setVelocity(cur.getLocation().getDirection().add(random).multiply(3)); + _arrows.add(arrow); + cur.getWorld().playSound(cur.getLocation(), Sound.SHOOT_ARROW, 1f, 1f); + } + } + + @EventHandler + public void projectileHit(ProjectileHitEvent event) + { + if (_arrows.remove(event.getEntity())) + event.getEntity().remove(); + } + + @EventHandler + public void clean(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + return; + + for (Iterator arrowIterator = _arrows.iterator(); arrowIterator.hasNext();) + { + Projectile arrow = arrowIterator.next(); + + if (arrow.isDead() || !arrow.isValid()) + arrowIterator.remove(); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeRocket.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeRocket.java index db3c74070..9027ed735 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeRocket.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeRocket.java @@ -20,8 +20,10 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.disguise.disguises.DisguiseSlime; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; @@ -30,11 +32,11 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkSlimeRocket extends Perk implements IThrown +public class PerkSlimeRocket extends SmashPerk implements IThrown { - private HashMap _active = new HashMap(); + private HashMap _charge = new HashMap(); private HashMap _owner = new HashMap(); private HashMap _lastAttack = new HashMap(); @@ -57,6 +59,9 @@ public class PerkSlimeRocket extends Perk implements IThrown if (!Kit.HasKit(player)) continue; + if (isSuperActive(player)) + continue; + int size = 1; if (player.getExp() > 0.8) size = 3; else if (player.getExp() > 0.55) size = 2; @@ -93,24 +98,18 @@ public class PerkSlimeRocket extends Perk implements IThrown Player player = event.getPlayer(); + if (isSuperActive(player)) + return; + if (!Kit.HasKit(player)) return; if (!Recharge.Instance.use(player, GetName(), 6000, true, true)) return; - //Spawn Slime - Manager.GetGame().CreatureAllowOverride = true; - Slime slime = player.getWorld().spawn(player.getEyeLocation(), Slime.class); - slime.setSize(1); - Manager.GetGame().CreatureAllowOverride = false; - - player.setPassenger(slime); - - _active.put(player, slime); - _owner.put(slime, player); - UtilPlayer.message(player, F.main("Skill", "You are charging " + F.skill(GetName()) + ".")); + + _charge.put(player, System.currentTimeMillis()); } @EventHandler @@ -119,20 +118,14 @@ public class PerkSlimeRocket extends Perk implements IThrown if (event.getType() != UpdateType.TICK) return; - Iterator chargeIterator = _active.keySet().iterator(); + Iterator chargeIterator = _charge.keySet().iterator(); while (chargeIterator.hasNext()) { Player player = chargeIterator.next(); - Slime slime = _active.get(player); - //Invalid - if (!slime.isValid()) - { - slime.remove(); - FireRocket(player); - chargeIterator.remove(); - } + long time = _charge.get(player); + //Charge if (player.isBlocking()) { @@ -144,26 +137,25 @@ public class PerkSlimeRocket extends Perk implements IThrown } else { - slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_WALK, 0.5f, (float)(0.5 + Math.max(3d, (double)slime.getTicksLived()/20d)/3d)); + double elapsed = Math.min(3, (double)(System.currentTimeMillis() - time)/1000d); - if (slime.getTicksLived() > 60) - { - if (slime.getTicksLived() > 100) - { - FireRocket(player); - chargeIterator.remove(); - } - } - else + //Use Energy + if (!UtilTime.elapsed(time, 3000)) { player.setExp((float) Math.max(0, player.getExp()-0.01f)); - - //Size - slime.setSize((int) (1.25 + slime.getTicksLived()/25d)); - - slime.setMaxHealth(5 + slime.getTicksLived()/3); - slime.setHealth(slime.getMaxHealth()); } + + //AutoFire + if (UtilTime.elapsed(time, 5000)) + { + FireRocket(player); + chargeIterator.remove(); + } + + //Effect + player.getWorld().playSound(player.getLocation(), Sound.SLIME_WALK, 0.5f, (float)(0.5 + 1.5*(elapsed/3d))); + UtilParticle.PlayParticle(ParticleType.SLIME, player.getLocation().add(0, 1, 0), + (float)(elapsed/6d), (float)(elapsed/6d), (float)(elapsed/6d), 0, (int)(elapsed * 5)); } } //Release @@ -177,18 +169,21 @@ public class PerkSlimeRocket extends Perk implements IThrown public void FireRocket(Player player) { - double charge = Math.max(1, Math.min(3, _active.get(player).getTicksLived()/20d)); + double charge = Math.min(3, (double)(System.currentTimeMillis() - _charge.get(player))/1000d); - if (_active.get(player) == null || !_active.get(player).isValid()) - { - //Inform - UtilPlayer.message(player, F.main("Skill", "You failed " + F.skill(GetName()) + ".")); - return; - } + //Spawn Slime + Manager.GetGame().CreatureAllowOverride = true; + Slime slime = player.getWorld().spawn(player.getEyeLocation(), Slime.class); + slime.setSize(1); + Manager.GetGame().CreatureAllowOverride = false; - Slime slime = _active.get(player); + //Size + slime.setSize(Math.max(1, (int)charge)); - slime.setTicksLived(1); + slime.setMaxHealth(5 + charge * 7); + slime.setHealth(slime.getMaxHealth()); + + _owner.put(slime, player); //Inform UtilPlayer.message(player, F.main("Skill", "You released " + F.skill(GetName()) + ".")); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeSlam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeSlam.java index 093e35b7c..268c79b92 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeSlam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeSlam.java @@ -23,8 +23,9 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkSlimeSlam extends Perk +public class PerkSlimeSlam extends SmashPerk { private HashMap _live = new HashMap(); @@ -55,7 +56,10 @@ public class PerkSlimeSlam extends Perk return; Player player = event.getPlayer(); - + + if (isSuperActive(player)) + return; + if (!Kit.HasKit(player)) return; @@ -83,7 +87,7 @@ public class PerkSlimeSlam extends Perk for (Player other : Manager.GetGame().GetPlayers(true)) if (other.getGameMode() == GameMode.SURVIVAL) if (!other.equals(player)) - if (UtilMath.offset(player, other) < 2) + if (UtilMath.offset(player, other) < 2) { DoSlam(player, other); _live.remove(player); @@ -110,10 +114,11 @@ public class PerkSlimeSlam extends Perk { int damage = 8; - //Damage Event - Manager.GetDamage().NewDamageEvent(damager, damagee, null, - DamageCause.CUSTOM, damage/4d, true, true, false, - damager.getName(), GetName() + " Recoil"); + //Recoil Event + if (!isSuperActive(damager)) + Manager.GetDamage().NewDamageEvent(damager, damagee, null, + DamageCause.CUSTOM, damage/4d, true, true, false, + damager.getName(), GetName() + " Recoil"); //Damage Event Manager.GetDamage().NewDamageEvent(damagee, damager, null, diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java new file mode 100644 index 000000000..8246bf74c --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java @@ -0,0 +1,160 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.WeakHashMap; + +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftSnowman; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Snowball; +import org.bukkit.entity.Snowman; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.kit.SmashPerk; +import net.minecraft.server.v1_7_R4.EntityInsentient; + +public class PerkSnowTurret extends SmashPerk +{ + private WeakHashMap _snowball = new WeakHashMap(); + + private HashMap _turret = new HashMap(); + + public PerkSnowTurret() + { + super("Snow Turret", new String[] + { + }, false); + } + + @Override + public void addSuperCustom(Player player) + { + Manager.GetGame().CreatureAllowOverride = true; + Snowman ent = player.getWorld().spawn(player.getEyeLocation(), Snowman.class); + Manager.GetGame().CreatureAllowOverride = false; + + UtilEnt.Vegetate(ent); + UtilEnt.ghost(ent, true, false); + + ent.setMaxHealth(40); + ent.setHealth(40); + + UtilAction.velocity(ent, player.getLocation().getDirection(), 1, false, 0, 0.2, 1, false); + + _turret.put(ent, player); + } + + @EventHandler + public void updateSnowman(UpdateEvent event) + { + if (event.getType() != UpdateType.FASTER) + return; + + Iterator turretIter = _turret.keySet().iterator(); + + while (turretIter.hasNext()) + { + Snowman snowman = turretIter.next(); + Player player = _turret.get(snowman); + + if (snowman.getTicksLived() > 400) + { + UtilParticle.PlayParticle(ParticleType.SNOWBALL_POOF, snowman.getLocation().add(0, 1, 0), 0.4f, 0.4f, 0.4f, 0, 12); + turretIter.remove(); + snowman.remove(); + continue; + } + + Player target = UtilPlayer.getClosest(snowman.getLocation(), player); + if (target == null) + continue; + + snowman.setTarget(target); + + //Snowball + double mult = 1 + Math.min(3, UtilMath.offset(snowman, target)/16); + double heightBonus = UtilMath.offset(snowman, target)/140; + Vector rand = new Vector((Math.random()-0.5)*0.2,(Math.random()-0.5)*0.2,(Math.random()-0.5)*0.2); + + _snowball.put(snowman.launchProjectile(Snowball.class, UtilAlg.getTrajectory(snowman.getLocation(), + target.getLocation()).multiply(mult).add(rand).add(new Vector(0,heightBonus,0))), player); + + //Look dir + UtilEnt.CreatureMoveFast(snowman, target.getLocation(), 0.1f); + + //Sound + snowman.getWorld().playSound(snowman.getLocation(), Sound.STEP_SNOW, 0.6f, 1f); + } + } + + @EventHandler(priority = EventPriority.LOW) + public void snowballHit(CustomDamageEvent event) + { + if (event.GetCause() != DamageCause.PROJECTILE) + return; + + Projectile proj = event.GetProjectile(); + if (proj == null) return; + + if (!(proj instanceof Snowball)) + return; + + if (!_snowball.containsKey(proj)) + return; + + LivingEntity damagee = event.GetDamageeEntity(); + if (damagee == null) return; + + event.SetCancelled("Turret"); + + damagee.setVelocity(proj.getVelocity().multiply(0.3).add(new Vector(0, 0.3, 0))); + + //Damage Event + if (damagee instanceof Player) + if (Recharge.Instance.use((Player)damagee, GetName() + " Hit", 250, false, false)) + Manager.GetDamage().NewDamageEvent(damagee, _snowball.get(proj), null, + DamageCause.PROJECTILE, 2, false, true, false, + UtilEnt.getName(_snowball.get(proj)), GetName()); + } + + @EventHandler + public void damageCancel(CustomDamageEvent event) + { + if (_turret.containsKey(event.GetDamageeEntity())) + event.SetCancelled("Turret Immunity"); + } + + @EventHandler + public void clean(ProjectileHitEvent event) + { + _snowball.remove(event.getEntity()); + } + + @EventHandler + public void knockback(CustomDamageEvent event) + { + if (event.GetReason() == null || !event.GetReason().contains(GetName())) + return; + + event.AddKnockback(GetName(), 2.5); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java new file mode 100644 index 000000000..55fd9fe09 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java @@ -0,0 +1,174 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.ArrayList; +import java.util.HashMap; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.entity.LivingEntity; +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.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.kit.SmashKit; +import nautilus.game.arcade.kit.SmashPerk; + +public class PerkStormSquid extends SmashPerk +{ + public PerkStormSquid() + { + super("Storm Squid", new String[] + { + }, false); + } + + @Override + public void addSuperCustom(Player player) + { + + } + + @Override + public void removeSuperCustom(Player player) + { + player.setFlying(false); + } + + @EventHandler(priority = EventPriority.LOW) //Happen before activation of Super + public void lightningStrike(PlayerInteractEvent event) + { + final Player player = event.getPlayer(); + + if (!isSuperActive(player)) + return; + + if (event.getAction() == Action.PHYSICAL) + return; + + Block block = player.getTargetBlock(null, 100); + if (block == null) + return; + + final Location loc = block.getLocation().add(0.5, 0.5, 0.5); + + if (!Recharge.Instance.use(player, GetName() + " Strike", 2000, false, false)) + return; + + //Warning + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(0, 0.5, 0), 1f, 1f, 1f, 0.1f, 40); + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1); + + Bukkit.getScheduler().runTaskLater(Manager.GetPlugin(), new Runnable() + { + @Override + public void run() + { + //Warning + player.getWorld().spigot().strikeLightningEffect(loc, false); + + HashMap targets = UtilEnt.getInRadius(loc, 8); + for (LivingEntity cur : targets.keySet()) + { + if (cur.equals(player)) + continue; + + //Damage Event + Manager.GetDamage().NewDamageEvent(cur, player, null, + DamageCause.CUSTOM, 20 * targets.get(cur), false, true, false, + player.getName(), GetName()); + + //Velocity + UtilAction.velocity(cur, UtilAlg.getTrajectory(loc, cur.getLocation()), + 3 * targets.get(cur), false, 0, 1 * targets.get(cur), 2, true); + } + } + }, 10); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void attackCancel(CustomDamageEvent event) + { + if (event.IsCancelled()) + return; + + Player player = event.GetDamagerPlayer(true); + if (player == null) + return; + + if (!isSuperActive(player)) + return; + + if (event.GetCause() != DamageCause.ENTITY_ATTACK) + return; + + event.SetCancelled("Wither Form Melee Cancel"); + } + + @EventHandler + public void flight(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for (Player player : ((SmashKit)Kit).getSuperActive()) + { + if (player.isFlying()) + continue; + + player.setAllowFlight(true); + player.setFlying(true); + } + } + + @EventHandler + public void flightBump(UpdateEvent event) + { + if (event.getType() != UpdateType.FASTER) + return; + + for (Player player : ((SmashKit)Kit).getSuperActive()) + { + ArrayList collisions = new ArrayList(); + + //Bump + for (Block block : UtilBlock.getInRadius(player.getLocation().add(0, 0.5, 0), 1.5d).keySet()) + { + if (!UtilBlock.airFoliage(block)) + { + collisions.add(block.getLocation().add(0.5, 0.5, 0.5)); + } + } + + Vector vec = UtilAlg.getAverageBump(player.getLocation(), collisions); + + if (vec == null) + continue; + + UtilAction.velocity(player, vec, 0.6, false, 0, 0.4, 10, true); + } + } + + @EventHandler + public void knockback(CustomDamageEvent event) + { + if (event.GetReason() == null || !event.GetReason().contains(GetName())) + return; + + event.AddKnockback(GetName(), 3); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSuperSquid.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSuperSquid.java index cba8846eb..beb829f45 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSuperSquid.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSuperSquid.java @@ -7,15 +7,12 @@ 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.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.potion.PotionEffectType; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; @@ -23,9 +20,9 @@ import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkSuperSquid extends Perk +public class PerkSuperSquid extends SmashPerk { private HashMap _active = new HashMap(); @@ -54,6 +51,9 @@ public class PerkSuperSquid extends Perk Player player = event.getPlayer(); + if (isSuperActive(player)) + return; + if (!Kit.HasKit(player)) return; @@ -76,13 +76,16 @@ public class PerkSuperSquid extends Perk if (!_active.containsKey(cur)) continue; + if (isSuperActive(cur)) + return; + if (!cur.isBlocking()) { _active.remove(cur); continue; } - if (UtilTime.elapsed(_active.get(cur), 800)) + if (UtilTime.elapsed(_active.get(cur), 1100)) { _active.remove(cur); continue; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWebShot.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWebShot.java index eac83955f..f69fad40c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWebShot.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWebShot.java @@ -69,7 +69,8 @@ public class PerkWebShot extends Perk implements IThrown for (int i=0 ; i<20 ; i++) { - org.bukkit.entity.Item ent = player.getWorld().dropItem(player.getLocation().add(0, 0.5, 0), ItemStackFactory.Instance.CreateStack(Material.WEB)); + org.bukkit.entity.Item ent = player.getWorld().dropItem(player.getLocation().add(0, 0.5, 0), + ItemStackFactory.Instance.CreateStack(Material.WEB, (byte)0, 1, "Web " + player.getName() + " " + i)); Vector random = new Vector(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5); random.normalize(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitchPotion.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitchPotion.java index 70d0b436f..e664f1d21 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitchPotion.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitchPotion.java @@ -26,9 +26,9 @@ import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkWitchPotion extends Perk +public class PerkWitchPotion extends SmashPerk { private ArrayList _proj = new ArrayList(); @@ -36,7 +36,7 @@ public class PerkWitchPotion extends Perk { super("Daze Potion", new String[] { - C.cYellow + "Right-Click" + C.cGray + " to use " + C.cGreen + "Daze Potion" + C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Daze Potion" }); } @@ -58,6 +58,9 @@ public class PerkWitchPotion extends Perk Player player = event.getPlayer(); + if (isSuperActive(player)) + return; + if (!Kit.HasKit(player)) return; @@ -85,13 +88,39 @@ public class PerkWitchPotion extends Perk if (player.equals(event.getEntity().getShooter())) continue; - if (UtilMath.offset(player.getLocation().add(0,1,0), event.getEntity().getLocation()) > 3) + if (!(event.getEntity().getShooter() instanceof Player)) continue; - - //Damage Event - Manager.GetDamage().NewDamageEvent(player, (LivingEntity)event.getEntity().getShooter(), null, + + Player thrower = (Player)event.getEntity().getShooter(); + + double range = 3; + if (isSuperActive(thrower)) + range = 4; + + if (UtilMath.offset(player.getLocation().add(0,1,0), event.getEntity().getLocation()) > range) + continue; + + //Standard + if (!isSuperActive(thrower)) + { + //Damage Event + Manager.GetDamage().NewDamageEvent(player, thrower, null, DamageCause.CUSTOM, 5, true, true, false, - UtilEnt.getName((LivingEntity)event.getEntity().getShooter()), GetName()); + UtilEnt.getName((LivingEntity)event.getEntity().getShooter()), GetName()); + } + //Super Effect + else + { + //Bonus Damage + double bonus = 5; + + //Damage Event + Manager.GetDamage().NewDamageEvent(player, thrower, null, + DamageCause.CUSTOM, 5 + bonus, true, true, false, + UtilEnt.getName((LivingEntity)event.getEntity().getShooter()), GetName()); + + //Manager.GetCondition().Factory().Confuse(reason, ent, source, duration, mult, extend, showIndicator, ambient) + } } } @@ -114,6 +143,18 @@ public class PerkWitchPotion extends Perk } UtilParticle.PlayParticle(ParticleType.MOB_SPELL, proj.getLocation(), 0, 0, 0, 0, 1); + + //Super + if (!(proj.getShooter() instanceof Player)) + continue; + + Player thrower = (Player)proj.getShooter(); + + //Super Effect + if (!isSuperActive(thrower)) + { + //XXX + } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherForm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherForm.java new file mode 100644 index 000000000..fee83f056 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherForm.java @@ -0,0 +1,134 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.ArrayList; + +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.entity.Skeleton.SkeletonType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.disguise.disguises.DisguiseSkeleton; +import mineplex.core.disguise.disguises.DisguiseWither; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.kit.SmashKit; +import nautilus.game.arcade.kit.SmashPerk; + +public class PerkWitherForm extends SmashPerk +{ + public PerkWitherForm() + { + super("Wither Form", new String[] + { + }, false); + } + + @Override + public void addSuperCustom(Player player) + { + Manager.GetDisguise().undisguise(player); + + //Disguise + DisguiseWither disguise = new DisguiseWither(player); + + if (Manager.GetGame().GetTeam(player) != null) + disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName()); + else + disguise.setName(player.getName()); + + disguise.setCustomNameVisible(true); + Manager.GetDisguise().disguise(disguise); + } + + @Override + public void removeSuperCustom(Player player) + { + Manager.GetDisguise().undisguise(player); + + //Disguise + DisguiseSkeleton disguise = new DisguiseSkeleton(player); + + if (Manager.GetGame().GetTeam(player) != null) + disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName()); + else + disguise.setName(player.getName()); + + disguise.setCustomNameVisible(true); + disguise.SetSkeletonType(SkeletonType.WITHER); + disguise.hideArmor(); + Manager.GetDisguise().disguise(disguise); + + player.setFlying(false); + } + + @EventHandler + public void witherBump(UpdateEvent event) + { + if (event.getType() != UpdateType.FASTER) + return; + + for (Player player : ((SmashKit)Kit).getSuperActive()) + { + ArrayList collisions = new ArrayList(); + + //Bump + for (Block block : UtilBlock.getInRadius(player.getLocation().add(0, 0.5, 0), 1.5d).keySet()) + { + if (!UtilBlock.airFoliage(block)) + { + collisions.add(block.getLocation().add(0.5, 0.5, 0.5)); + } + } + + Vector vec = UtilAlg.getAverageBump(player.getLocation(), collisions); + + if (vec == null) + continue; + + UtilAction.velocity(player, vec, 0.6, false, 0, 0.4, 10, true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void witherMeleeCancel(CustomDamageEvent event) + { + if (event.IsCancelled()) + return; + + Player player = event.GetDamagerPlayer(true); + if (player == null) + return; + + if (!isSuperActive(player)) + return; + + if (event.GetCause() != DamageCause.ENTITY_ATTACK) + return; + + event.SetCancelled("Wither Form Melee Cancel"); + } + + @EventHandler + public void witherFlight(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for (Player player : ((SmashKit)Kit).getSuperActive()) + { + if (player.isFlying()) + continue; + + player.setAllowFlight(true); + player.setFlying(true); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherImage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherImage.java index bf4abbfed..b37320e06 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherImage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherImage.java @@ -26,9 +26,9 @@ import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkWitherImage extends Perk +public class PerkWitherImage extends SmashPerk { private HashMap _images = new HashMap(); @@ -41,7 +41,7 @@ public class PerkWitherImage extends Perk } @EventHandler - public void Leap(PlayerInteractEvent event) + public void activate(PlayerInteractEvent event) { if (event.isCancelled()) return; @@ -60,6 +60,9 @@ public class PerkWitherImage extends Perk Player player = event.getPlayer(); + if (isSuperActive(player)) + return; + if (!Kit.HasKit(player)) return; @@ -120,7 +123,7 @@ public class PerkWitherImage extends Perk } @EventHandler - public void EntityTarget(EntityTargetEvent event) + public void entityTarget(EntityTargetEvent event) { if (_images.containsKey(event.getTarget())) if (_images.get(event.getTarget()).equals(event.getEntity())) @@ -128,7 +131,7 @@ public class PerkWitherImage extends Perk } @EventHandler - public void Damage(CustomDamageEvent event) + public void damage(CustomDamageEvent event) { Player damagee = event.GetDamageePlayer(); if (damagee == null) return; @@ -143,8 +146,28 @@ public class PerkWitherImage extends Perk event.SetCancelled("Wither Image"); } + @EventHandler(priority = EventPriority.HIGHEST) + public void minionDamageTransfer(CustomDamageEvent event) + { + LivingEntity damager = event.GetDamagerEntity(true); + if (damager == null) return; + + if (!_images.containsValue(damager)) + return; + + for (Player player : _images.keySet()) + { + if (_images.get(player).equals(damager)) + { + event.SetDamager(player); + event.setKnockbackOrigin(damager.getLocation()); + event.AddMod(GetName(), "Wither Image", -5.5, true); + } + } + } + @EventHandler - public void Update(UpdateEvent event) + public void update(UpdateEvent event) { if (event.getType() != UpdateType.FAST) return; @@ -169,7 +192,7 @@ public class PerkWitherImage extends Perk } @EventHandler(priority = EventPriority.LOWEST) - public void Clean(PlayerDeathEvent event) + public void clean(PlayerDeathEvent event) { Skeleton skel = _images.remove(event.getEntity()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java index 70484d69c..f718319c9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java @@ -32,9 +32,9 @@ import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkWitherSkull extends Perk +public class PerkWitherSkull extends SmashPerk { private HashMap _active = new HashMap(); private HashSet _ignoreControl = new HashSet(); @@ -48,32 +48,36 @@ public class PerkWitherSkull extends Perk } - @EventHandler - public void Activate(PlayerInteractEvent event) + @EventHandler(priority = EventPriority.LOW) // Happen BEFORE super is triggered + public void activate(PlayerInteractEvent event) { if (event.isCancelled()) return; - if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; + Player player = event.getPlayer(); + + if (!isSuperActive(player)) + if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; if (UtilBlock.usable(event.getClickedBlock())) return; - - if (!event.getPlayer().getItemInHand().getType().toString().contains("_SWORD")) - return; - - Player player = event.getPlayer(); - + + if (!isSuperActive(player)) + if (!event.getPlayer().getItemInHand().getType().toString().contains("_SWORD")) + return; + if (!Kit.HasKit(player)) return; - if (!Recharge.Instance.use(player, GetName(), 6000, true, true)) + if (!Recharge.Instance.use(player, GetName(), isSuperActive(player) ? 1000 : 6000, !isSuperActive(player), !isSuperActive(player))) return; //Fire WitherSkull skull = player.launchProjectile(WitherSkull.class); - skull.setDirection(player.getLocation().getDirection()); + + if (!isSuperActive(player)) + skull.setDirection(player.getLocation().getDirection()); _active.put(skull, player.getLocation().getDirection().multiply(0.6)); @@ -81,14 +85,18 @@ public class PerkWitherSkull extends Perk player.getWorld().playSound(player.getLocation(), Sound.WITHER_SHOOT, 1f, 1f); //Inform - UtilPlayer.message(player, F.main("Skill", "You launched " + F.skill(GetName()) + ".")); + if (!isSuperActive(player)) + UtilPlayer.message(player, F.main("Skill", "You launched " + F.skill(GetName()) + ".")); //Control - _ignoreControl.remove(player); + if (!isSuperActive(player)) + _ignoreControl.remove(player); + else + _ignoreControl.add(player); } @EventHandler - public void Update(UpdateEvent event) + public void cleanAndControl(UpdateEvent event) { if (event.getType() != UpdateType.TICK) return; @@ -107,6 +115,9 @@ public class PerkWitherSkull extends Perk continue; } + if (_ignoreControl.contains(player)) + continue; + if (player.isBlocking() && !_ignoreControl.contains(player)) { skull.setDirection(player.getLocation().getDirection()); @@ -123,7 +134,7 @@ public class PerkWitherSkull extends Perk } @EventHandler - public void Explode(EntityExplodeEvent event) + public void explode(EntityExplodeEvent event) { if (!_active.containsKey(event.getEntity())) return; @@ -132,11 +143,13 @@ public class PerkWitherSkull extends Perk WitherSkull skull = (WitherSkull)event.getEntity(); - Explode(skull, event.getLocation(), (LivingEntity)skull.getShooter()); + UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, skull.getLocation(), 0, 0, 0, 0, 1); + + explode(skull, event.getLocation(), (LivingEntity)skull.getShooter()); } @EventHandler(priority = EventPriority.LOWEST) - public void ExplodeDamage(CustomDamageEvent event) + public void explodeDamage(CustomDamageEvent event) { if (event.IsCancelled()) return; @@ -145,8 +158,9 @@ public class PerkWitherSkull extends Perk event.SetCancelled("Wither Skull Cancel"); } + //Sometimes wither skulls do entity attack damage (non-explosion)... cancel it! @EventHandler(priority = EventPriority.LOWEST) - public void DirectHitDamage(CustomDamageEvent event) + public void directHitDamageCancel(CustomDamageEvent event) { if (event.IsCancelled()) return; @@ -169,34 +183,30 @@ public class PerkWitherSkull extends Perk event.SetCancelled("Wither Skull Direct Hit"); } - private void Explode(WitherSkull skull, Location loc, LivingEntity shooter) + private void explode(WitherSkull skull, Location loc, LivingEntity shooter) { double scale = 0.4 + 0.6 * Math.min(1, skull.getTicksLived()/20d); - //Damage - for (Entity ent : skull.getWorld().getEntities()) + //Players + HashMap players = UtilPlayer.getInRadius(skull.getLocation(), 7); + for (Player player : players.keySet()) { - if (!(ent instanceof LivingEntity)) - continue; - - if (UtilMath.offset(loc, ent.getLocation()) > 2) + if (!Manager.GetGame().IsAlive(player)) continue; - if (ent instanceof Player) - if (!Manager.GetGame().IsAlive((Player)ent)) - continue; - - LivingEntity livingEnt = (LivingEntity)ent; - //Damage Event - Manager.GetDamage().NewDamageEvent(livingEnt, shooter, null, - DamageCause.CUSTOM, 12 * scale, false, true, false, - UtilEnt.getName(shooter), GetName()); - - UtilAction.velocity(livingEnt, UtilAlg.getTrajectory2d(loc, livingEnt.getLocation()), 1.6 * scale, true, 0.8 * scale, 0, 10, true); + Manager.GetDamage().NewDamageEvent(player, (LivingEntity)skull.getShooter(), null, + DamageCause.CUSTOM, 2 + 10 * players.get(player) * scale, true, true, false, + UtilEnt.getName((LivingEntity)skull.getShooter()), GetName()); } + } + + @EventHandler + public void knockback(CustomDamageEvent event) + { + if (event.GetReason() == null || !event.GetReason().contains(GetName())) + return; - //Explosion - loc.getWorld().createExplosion(loc, (float) 2.5); + event.AddKnockback(GetName(), 1.5); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolBomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolBomb.java index a84111fde..4b0eaf99f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolBomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWoolBomb.java @@ -175,7 +175,7 @@ public class PerkWoolBomb extends Perk implements IThrown thrown.remove(); //Rate - Recharge.Instance.useForce(player, GetName() + " Rate", 1200); + Recharge.Instance.useForce(player, GetName() + " Rate", 1000); //Inform if (inform) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkZombieNightDead.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkZombieNightDead.java new file mode 100644 index 000000000..61effab98 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkZombieNightDead.java @@ -0,0 +1,15 @@ +package nautilus.game.arcade.kit.perks; + +import nautilus.game.arcade.kit.SmashPerk; + +public class PerkZombieNightDead extends SmashPerk +{ + + public PerkZombieNightDead() + { + super("Night of the Dead", new String[] + { + }, false); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/EarthquakeData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/EarthquakeData.java new file mode 100644 index 000000000..c3e994b14 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/EarthquakeData.java @@ -0,0 +1,15 @@ +package nautilus.game.arcade.kit.perks.data; + +import org.bukkit.entity.Player; + +public class EarthquakeData +{ + public Player Player; + public long Time; + + public EarthquakeData(Player player) + { + Player = player; + Time = System.currentTimeMillis(); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/HomingSheepData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/HomingSheepData.java new file mode 100644 index 000000000..003552af2 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/HomingSheepData.java @@ -0,0 +1,52 @@ +package nautilus.game.arcade.kit.perks.data; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilMath; + +import org.bukkit.DyeColor; +import org.bukkit.GameMode; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.entity.Sheep; + +public class HomingSheepData +{ + public Player Shooter; + public Player Target; + public Sheep Sheep; + + private int _colorTick = 0; + + public HomingSheepData(Player shooter, Player target, Sheep sheep) + { + Shooter = shooter; + Target = target; + Sheep = sheep; + } + + public boolean update() + { + if (!Sheep.isValid() || !Target.isValid() || Target.getGameMode() != GameMode.SURVIVAL) + return true; + + if (Sheep.getTicksLived() > 300) + return true; + + if (UtilMath.offset(Sheep.getLocation(), Target.getEyeLocation()) < 2) + return true; + + Sheep.setVelocity(UtilAlg.getTrajectory(Sheep.getLocation(), Target.getEyeLocation()).multiply(0.36)); + + Sheep.getWorld().playSound(Sheep.getLocation(), Sound.SHEEP_IDLE, 1.5f, 1.5f); + + if (_colorTick == 0) Sheep.setColor(DyeColor.RED); + if (_colorTick == 1) Sheep.setColor(DyeColor.YELLOW); + if (_colorTick == 2) Sheep.setColor(DyeColor.LIME); + if (_colorTick == 3) Sheep.setColor(DyeColor.LIGHT_BLUE); + if (_colorTick == 4) Sheep.setColor(DyeColor.PURPLE); + + _colorTick = (_colorTick + 1) % 5; + + return false; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/MeteorShowerData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/MeteorShowerData.java new file mode 100644 index 000000000..19dbf11b9 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/MeteorShowerData.java @@ -0,0 +1,44 @@ +package nautilus.game.arcade.kit.perks.data; + +import mineplex.core.common.util.UtilTime; +import net.minecraft.server.v1_7_R4.EntityFireball; +import net.minecraft.server.v1_7_R4.EntityLargeFireball; + +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftLargeFireball; +import org.bukkit.entity.LargeFireball; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +public class MeteorShowerData +{ + public Player Shooter; + public Location Target; + public long Time; + + public MeteorShowerData(Player shooter, Location target) + { + Shooter = shooter; + Target = target; + Time = System.currentTimeMillis(); + } + + public boolean update() + { + if (UtilTime.elapsed(Time, 12000)) + return true; + + LargeFireball ball = Target.getWorld().spawn(Target.clone().add(Math.random() * 24 - 12, 32 + Math.random() * 16, Math.random() * 24 - 12), LargeFireball.class); + + EntityLargeFireball eFireball = ((CraftLargeFireball) ball).getHandle(); + eFireball.dirX = (Math.random()-0.5)*0.02; + eFireball.dirY = -0.2 - 0.05 * Math.random(); + eFireball.dirZ = (Math.random()-0.5)*0.02; + + ball.setShooter(Shooter); + ball.setYield(2.2f); + ball.setBounce(false); + + return false; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/NightLivingDeadData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/NightLivingDeadData.java new file mode 100644 index 000000000..6947fddcf --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/NightLivingDeadData.java @@ -0,0 +1,21 @@ +package nautilus.game.arcade.kit.perks.data; + +import java.util.ArrayList; + +import org.bukkit.entity.Player; +import org.bukkit.entity.Zombie; + +public class NightLivingDeadData +{ + public Player Player; + public long Time; + + public long LastSpawn = 0; + public ArrayList Zombies = new ArrayList(); + + public NightLivingDeadData(Player player) + { + Player = player; + Time = System.currentTimeMillis(); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/SonicBoomData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/SonicBoomData.java new file mode 100644 index 000000000..75aac5dc6 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/SonicBoomData.java @@ -0,0 +1,21 @@ +package nautilus.game.arcade.kit.perks.data; + +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; +import org.bukkit.Location; + +public class SonicBoomData +{ + public Player Shooter; + public Location Location; + public Vector Direction; + public long Time; + + public SonicBoomData(Player player) + { + Shooter = player; + Location = player.getEyeLocation().add(player.getLocation().getDirection()); + Direction = player.getLocation().getDirection(); + Time = System.currentTimeMillis(); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLootManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLootManager.java index 93892ffd5..0ae1d8fa4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLootManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLootManager.java @@ -29,6 +29,7 @@ import mineplex.core.reward.Reward; import mineplex.core.reward.RewardData; import mineplex.core.reward.RewardManager; import mineplex.core.reward.RewardRarity; +import mineplex.core.reward.RewardType; import mineplex.core.reward.rewards.InventoryReward; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.events.GameStateChangeEvent; @@ -163,7 +164,7 @@ public class GameLootManager implements Listener return false; } - Reward reward = _rewardManager.nextReward(player, null, false, false); + Reward reward = _rewardManager.nextReward(player, null, false, RewardType.GameLoot); RewardData rewardData = reward.giveReward("GameLoot", player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/AssistsStatTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/AssistsStatTracker.java index d329f5483..3180ab90c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/AssistsStatTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/AssistsStatTracker.java @@ -33,8 +33,8 @@ public class AssistsStatTracker extends StatTracker { addStat(player, "Assists", 1, false, false); - if (getGame().GetKit(player) != null) - addStat(player, getGame().GetKit(player).GetName() + " Assists", 1, false, false); +// if (getGame().GetKit(player) != null) +// addStat(player, getGame().GetKit(player).GetName() + " Assists", 1, false, false); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DamageDealtStatTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DamageDealtStatTracker.java index ff6b80abe..6dc38aaa7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DamageDealtStatTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DamageDealtStatTracker.java @@ -24,7 +24,7 @@ public class DamageDealtStatTracker extends StatTracker addStat(damager, "Damage Dealt", (int) Math.round(event.GetDamage()), false, false); - if (getGame().GetKit(damager) != null) - addStat(damager, getGame().GetKit(damager).GetName() + " Damage Dealt", (int) Math.round(event.GetDamage()), false, false); +// if (getGame().GetKit(damager) != null) +// addStat(damager, getGame().GetKit(damager).GetName() + " Damage Dealt", (int) Math.round(event.GetDamage()), false, false); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DamageTakenStatTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DamageTakenStatTracker.java index fa957c108..ae6a9650f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DamageTakenStatTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DamageTakenStatTracker.java @@ -26,12 +26,12 @@ public class DamageTakenStatTracker extends StatTracker if (event.GetDamagerPlayer(true) != null) addStat(damagee, "Damage Taken PvP ", (int) Math.round(event.GetDamage()), false, false); - if (getGame().GetKit(damagee) != null) - { - addStat(damagee, getGame().GetKit(damagee).GetName() + " Damage Taken", (int) Math.round(event.GetDamage()), false, false); - - if (event.GetDamagerPlayer(true) != null) - addStat(damagee, getGame().GetKit(damagee).GetName() + " Damage Taken PvP ", (int) Math.round(event.GetDamage()), false, false); - } +// if (getGame().GetKit(damagee) != null) +// { +// addStat(damagee, getGame().GetKit(damagee).GetName() + " Damage Taken", (int) Math.round(event.GetDamage()), false, false); +// +// if (event.GetDamagerPlayer(true) != null) +// addStat(damagee, getGame().GetKit(damagee).GetName() + " Damage Taken PvP ", (int) Math.round(event.GetDamage()), false, false); +// } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DeathsStatTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DeathsStatTracker.java index 2a13dc0eb..eb12b09fc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DeathsStatTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/DeathsStatTracker.java @@ -33,7 +33,7 @@ public class DeathsStatTracker extends StatTracker addStat(player, "Deaths", 1, false, false); - if (getGame().GetKit(player) != null) - addStat(player, getGame().GetKit(player).GetName() + " Deaths", 1, false, false); +// if (getGame().GetKit(player) != null) +// addStat(player, getGame().GetKit(player).GetName() + " Deaths", 1, false, false); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/KillsStatTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/KillsStatTracker.java index 6ef24822a..d0fa7196a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/KillsStatTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/KillsStatTracker.java @@ -33,7 +33,7 @@ public class KillsStatTracker extends StatTracker addStat(player, "Kills", 1, false, false); - if (getGame().GetKit(player) != null) - addStat(player, getGame().GetKit(player).GetName() + " Kills", 1, false, false); +// if (getGame().GetKit(player) != null) +// addStat(player, getGame().GetKit(player).GetName() + " Kills", 1, false, false); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/LoseStatTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/LoseStatTracker.java index c112f622b..6fa5033f7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/LoseStatTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/LoseStatTracker.java @@ -38,8 +38,8 @@ public class LoseStatTracker extends StatTracker addStat(loser, "Losses", 1, false, false); - if (getGame().GetKit(loser) != null) - addStat(loser, getGame().GetKit(loser).GetName() + " Losses", 1, false, false); +// if (getGame().GetKit(loser) != null) +// addStat(loser, getGame().GetKit(loser).GetName() + " Losses", 1, false, false); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/WinStatTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/WinStatTracker.java index dc97dfd0f..6836ec0a2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/WinStatTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/WinStatTracker.java @@ -29,8 +29,8 @@ public class WinStatTracker extends StatTracker { addStat(winner, "Wins", 1, false, false); - if (getGame().GetKit(winner) != null) - addStat(winner, getGame().GetKit(winner).GetName() + " Wins", 1, false, false); +// if (getGame().GetKit(winner) != null) +// addStat(winner, getGame().GetKit(winner).GetName() + " Wins", 1, false, false); } } } From ebc74e5565701a78b74418852107c5f90e3d0056 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 29 Jan 2015 15:01:00 +1300 Subject: [PATCH 15/18] Fireball still too fast --- .../game/arcade/game/games/wizards/spells/SpellFireball.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java index b5c914944..005bdd8de 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellFireball.java @@ -44,7 +44,7 @@ public class SpellFireball extends Spell implements SpellClick org.bukkit.entity.Fireball fireball = (org.bukkit.entity.Fireball) p.getWorld().spawnEntity(p.getEyeLocation(), EntityType.FIREBALL); - Vector vector = p.getEyeLocation().getDirection().normalize().multiply(0.24); + Vector vector = p.getEyeLocation().getDirection().normalize().multiply(0.14); // We can't call the bukkit methods because for some weird reason, it enforces a certain speed. EntityFireball eFireball = ((CraftFireball) fireball).getHandle(); From 50a8fb03a9b8abfd1f97358374048e3cfa3a265b Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Thu, 29 Jan 2015 18:37:29 -0500 Subject: [PATCH 16/18] Work on treasure............ --- .../mineplex/core/cosmetic/ui/page/Menu.java | 2 +- .../src/mineplex/core/treasure/BlockInfo.java | 12 - .../src/mineplex/core/treasure/ChestData.java | 14 +- .../src/mineplex/core/treasure/Treasure.java | 283 +++-------- .../core/treasure/TreasureLocation.java | 289 +++++++++++ .../core/treasure/TreasureManager.java | 458 +++--------------- .../mineplex/core/treasure/TreasureType.java | 46 ++ .../animation/ChestSpawnAnimation.java | 34 +- .../treasure/animation/ParticleAnimation.java | 2 +- .../animation/TreasureRemoveAnimation.java | 62 +-- .../core/treasure/gui/OpenTreasureButton.java | 30 ++ .../core/treasure/gui/TreasurePage.java | 40 ++ .../core/treasure/gui/TreasureShop.java | 27 ++ .../src/mineplex/hub/HubManager.java | 5 +- 14 files changed, 626 insertions(+), 678 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureType.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/OpenTreasureButton.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasureShop.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java index b012cc6ac..5566d586e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java @@ -221,7 +221,7 @@ public class Menu extends ShopPageBase } else { - treasureManager.attemptOpenTreasure(player); +// treasureManager.attemptOpenTreasure(player); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/BlockInfo.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/BlockInfo.java index 8bcd13f37..894705556 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/BlockInfo.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/BlockInfo.java @@ -33,16 +33,4 @@ public class BlockInfo { return _data; } - - @Override - public int hashCode() - { - return _block.hashCode(); - } - - @Override - public boolean equals(Object obj) - { - return _block.equals(obj); - } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/ChestData.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/ChestData.java index b5b93540a..43c970262 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/ChestData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/ChestData.java @@ -2,22 +2,15 @@ package mineplex.core.treasure; import org.bukkit.block.Block; -import mineplex.core.reward.Reward; - -/** - * Created by Shaun on 8/29/2014. - */ public class ChestData { private Block _block; - private Reward _reward; private boolean _opened; - public ChestData(Block block, Reward reward) + public ChestData(Block block) { _block = block; _opened = false; - _reward = reward; } public boolean isOpened() @@ -35,9 +28,4 @@ public class ChestData return _block; } - public Reward getReward() - { - return _reward; - } - } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java index 46099fb23..f712e3bd6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java @@ -1,21 +1,20 @@ package mineplex.core.treasure; -import java.util.HashSet; +import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; +import java.util.List; import java.util.Random; -import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_7_R4.util.CraftMagicNumbers; import org.bukkit.entity.Player; - import net.minecraft.server.v1_7_R4.PacketPlayOutBlockAction; + import mineplex.core.blockrestore.BlockRestore; import mineplex.core.common.util.C; import mineplex.core.common.util.F; @@ -39,134 +38,54 @@ public class Treasure { private BlockRestore _blockRestore; - // Decay Sets - private HashSet _wallsBlockInfo = new HashSet<>(); - private HashSet _outerRingBlockInfo = new HashSet<>(); - private HashSet _centerBlockInfo = new HashSet<>(); - private HashSet _chestBlockInfo = new HashSet<>(); + private List _chestBlockInfo = new ArrayList<>(); + private List _openedChestBlockInfo = new ArrayList<>(); private Player _player; private Random _random; private Block _centerBlock; private int _tickCount; + private TreasureType _treasureType; + private ChestData[] _chestData; + private int _currentChest; + + private Reward[] _rewards; + private int _currentReward; private boolean _finished; private int _finishedTickCount; private LinkedList _animations; - private TreasureStyle _style; private HologramManager _hologramManager; - public Treasure(Player player, Reward[] rewards, BlockRestore blockRestore, HologramManager hologramManager) + public Treasure(Player player, Reward[] rewards, Block centerBlock, Block[] chestBlocks, TreasureType treasureType, BlockRestore blockRestore, HologramManager hologramManager) { - this(player, new Random(), rewards, hologramManager); + this(player, new Random(), rewards, centerBlock, chestBlocks, treasureType, hologramManager); _blockRestore = blockRestore; } - public Treasure(Player player, Random seed, Reward[] rewards, HologramManager hologramManager) + public Treasure(Player player, Random seed, Reward[] rewards, Block centerBlock, Block[] chestBlocks, TreasureType treasureType, HologramManager hologramManager) { _player = player; _random = seed; - _style = TreasureStyle.values()[_random.nextInt(TreasureStyle.values().length)]; + _treasureType = treasureType; - _centerBlock = player.getLocation().getBlock().getRelative(BlockFace.DOWN); + _centerBlock = centerBlock; _animations = new LinkedList(); _hologramManager = hologramManager; -// _animations.add(new ParticleAnimation(this)); + _currentChest = 0; + _currentReward = 0; + _rewards = rewards; - _chestData = new ChestData[4]; - _chestData[0] = new ChestData(_centerBlock.getRelative(2, 1, 0), rewards[0]); - _chestData[1] = new ChestData(_centerBlock.getRelative(-2, 1, 0), rewards[1]); - _chestData[2] = new ChestData(_centerBlock.getRelative(0, 1, 2), rewards[2]); - _chestData[3] = new ChestData(_centerBlock.getRelative(0, 1, -2), rewards[3]); - } - - private void createCenterClay() - { - for (int x = -1; x <= 1; x++) + _chestData = new ChestData[chestBlocks.length]; + for (int i = 0; i < _chestData.length; i++) { - for (int z = -1; z <= 1; z++) - { - if (Math.abs(x) == 1 || Math.abs(z) == 1) - { - Block block = _centerBlock.getRelative(x, 0, z); - - _blockRestore.Restore(block); - - _centerBlockInfo.add(new BlockInfo(block)); - setBlock(block, _style.getPrimaryMaterial(), _style.getPrimaryData()); - } - } - } - } - - private void createOuterClay() - { - for (int x = -2; x <= 2; x++) - { - { - Block block = _centerBlock.getRelative(x, 0, -2); - - _blockRestore.Restore(block); - - _outerRingBlockInfo.add(new BlockInfo(block)); - setBlock(block, _style.getSecondaryMaterial(), _style.getSecondaryData()); - } - - { - Block block = _centerBlock.getRelative(x, 0, 2); - - _blockRestore.Restore(block); - - _outerRingBlockInfo.add(new BlockInfo(block)); - setBlock(block, _style.getSecondaryMaterial(), _style.getSecondaryData()); - } - } - - for (int z = -1; z <= 1; z++) - { - { - Block block = _centerBlock.getRelative(-2, 0, z); - - _blockRestore.Restore(block); - - _outerRingBlockInfo.add(new BlockInfo(block)); - setBlock(block, _style.getSecondaryMaterial(), _style.getSecondaryData()); - } - - { - Block block = _centerBlock.getRelative(2, 0, z); - - _blockRestore.Restore(block); - - _outerRingBlockInfo.add(new BlockInfo(block)); - setBlock(block, _style.getSecondaryMaterial(), _style.getSecondaryData()); - } - } - } - - private void createWalls() - { - for (int z = -2; z <= 2; z++) - { - for (int x = -2; x <= 2; x++) - { - if ((Math.abs(x) == 2 || Math.abs(z) == 2) && (x != 0 && z != 0)) - { - Block playerBlock = getPlayerBlock(); - Block block = playerBlock.getRelative(x, 0, z); - - _blockRestore.Restore(block); - - _wallsBlockInfo.add(new BlockInfo(block)); - setBlock(block, _style.getWallMaterial(), _style.getWallData()); - } - } + _chestData[i] = new ChestData(chestBlocks[i]); } } @@ -182,54 +101,16 @@ public class Treasure _finishedTickCount++; } - if (_tickCount == 5) + if (_tickCount % 10 == 0 && _currentChest < _chestData.length) { - Block block = _centerBlock; - - _blockRestore.Restore(block); - - _centerBlockInfo.add(new BlockInfo(block)); - _centerBlockInfo.add(new BlockInfo(block.getRelative(BlockFace.DOWN))); - setBlock(block, Material.REDSTONE_LAMP_ON, (byte) 0); - setBlock(block.getRelative(BlockFace.DOWN), Material.REDSTONE_TORCH_ON, (byte) 0); + Block block = _chestData[_currentChest].getBlock(); + ChestSpawnAnimation chestSpawn = new ChestSpawnAnimation(this, block, _chestBlockInfo); + _animations.add(chestSpawn); + + _currentChest++; } - else if (_tickCount == 10) - { - createCenterClay(); - } - else if (_tickCount == 20) - { - createOuterClay(); - } - else if (_tickCount == 30) - { - createWalls(); - } - else if (_tickCount == 50) - { - Block block = getPlayerBlock().getRelative(2, 0, 0); - ChestSpawnAnimation task = new ChestSpawnAnimation(this, block, (byte)4, _chestBlockInfo); - _animations.add(task); - } - else if (_tickCount == 80) - { - Block block = getPlayerBlock().getRelative(-2, 0, 0); - ChestSpawnAnimation task = new ChestSpawnAnimation(this, block, (byte)5, _chestBlockInfo); - _animations.add(task); - } - else if (_tickCount == 110) - { - Block block = getPlayerBlock().getRelative(0, 0, 2); - ChestSpawnAnimation task = new ChestSpawnAnimation(this, block, (byte)2, _chestBlockInfo); - _animations.add(task); - } - else if (_tickCount == 140) - { - Block block = getPlayerBlock().getRelative(0, 0, -2); - ChestSpawnAnimation task = new ChestSpawnAnimation(this, block, (byte)3, _chestBlockInfo); - _animations.add(task); - } - else if (_tickCount == 60 * 20) + + if (_tickCount == 60 * 20) { for (BlockInfo blockInfo : _chestBlockInfo) { @@ -271,11 +152,6 @@ public class Treasure return _centerBlock; } - public Block getPlayerBlock() - { - return _centerBlock.getRelative(BlockFace.UP); - } - public void setBlock(Block block, Material material, byte data) { block.setType(material); @@ -286,25 +162,31 @@ public class Treasure public void openChest(Block block) { ChestData data = getChestData(block); - if (data != null && !data.isOpened()) + if (data != null && !data.isOpened() && _currentReward < _rewards.length) { - RewardData rewardData = data.getReward().giveReward("Treasure", _player); + Reward reward = _rewards[_currentReward]; + RewardData rewardData = reward.giveReward("Treasure", _player); + _currentReward++; + + BlockInfo info = getBlockInfo(block); + _chestBlockInfo.remove(info); + _openedChestBlockInfo.add(info); data.setOpened(true); ChestOpenAnimation chestOpenTask = new ChestOpenAnimation(this, data, rewardData, _hologramManager); _animations.add(chestOpenTask); // Extra effects based off the rarity of the treasure - if (data.getReward().getRarity() == RewardRarity.UNCOMMON) + if (reward.getRarity() == RewardRarity.UNCOMMON) { _animations.add(new UncommonAnimation(this, data.getBlock())); } - else if (data.getReward().getRarity() == RewardRarity.RARE) + else if (reward.getRarity() == RewardRarity.RARE) { _animations.add(new RareAnimation(this, data.getBlock().getLocation().add(0.5, 1.5, 0.5))); Bukkit.broadcastMessage(F.main("Treasure", F.name(_player.getName()) + " found " + C.cGold + "Rare " + rewardData.getFriendlyName())); } - else if (data.getReward().getRarity() == RewardRarity.LEGENDARY) + else if (reward.getRarity() == RewardRarity.LEGENDARY) { _animations.add(new LegendaryAnimation(this, data.getBlock())); Bukkit.broadcastMessage(F.main("Treasure", F.name(_player.getName()) + " found " + C.cRed + "Legendary " + rewardData.getFriendlyName())); @@ -312,13 +194,23 @@ public class Treasure if (isFinished()) { - TreasureRemoveAnimation animation = new TreasureRemoveAnimation(this, _centerBlockInfo, _outerRingBlockInfo, _wallsBlockInfo); + TreasureRemoveAnimation animation = new TreasureRemoveAnimation(this, _openedChestBlockInfo, _chestBlockInfo); _animations.add(animation); _finished = true; } } } + public BlockInfo getBlockInfo(Block block) + { + for (BlockInfo blockInfo : _chestBlockInfo) + { + if (blockInfo.getBlock().equals(block)) + return blockInfo; + } + return null; + } + public void sendChestOpenPackets(Player... players) { for (ChestData data : _chestData) @@ -357,35 +249,20 @@ public class Treasure public boolean isFinished() { - boolean allOpened = true; - for (int i = 0; i < _chestData.length; i++) - { - if (!_chestData[i].isOpened()) - allOpened = false; - } - - return allOpened; + return _currentReward == _rewards.length; } public void cleanup() { - for (ChestData chestData : _chestData) + + for (int i = _currentReward; i < _rewards.length; i++) { - // Give any unopened rewards to the player - // This only applies if they leave the server - // while opening a treasure - if (!chestData.isOpened()) - { - chestData.setOpened(true); - chestData.getReward().giveReward("Treasure", _player); - } + _rewards[_currentReward].giveReward("Treasure", _player); } // Remove any extra blocks - resetBlockInfo(_wallsBlockInfo); - resetBlockInfo(_centerBlockInfo); - resetBlockInfo(_outerRingBlockInfo); resetBlockInfo(_chestBlockInfo); + resetBlockInfo(_openedChestBlockInfo); for (Animation animation : _animations) { @@ -394,40 +271,33 @@ public class Treasure _animations.clear(); } - public void resetBlockInfo(Set blockInfoSet) + public void resetBlockInfo(List blockInfoSet) { for (BlockInfo blockInfo : blockInfoSet) { - Block block = blockInfo.getBlock(); - - if (block.getType().equals(Material.CHEST)) - { - UtilParticle.PlayParticle(UtilParticle.ParticleType.LARGE_SMOKE, block.getLocation().add(0.5, 0.5, 0.5), 0.5F, 0.5F, 0.5F, 0.1F, 10); -// block.getLocation().getWorld().createExplosion(block.getLocation().add(0.5, 0.5, 0.5), 0F); - } - block.getLocation().getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); - - block.setTypeId(blockInfo.getId()); - block.setData(blockInfo.getData()); + resetBlockInfo(blockInfo); } blockInfoSet.clear(); } + public void resetBlockInfo(BlockInfo blockInfo) + { + Block block = blockInfo.getBlock(); + + if (block.getType().equals(Material.CHEST)) + { + UtilParticle.PlayParticle(UtilParticle.ParticleType.LARGE_SMOKE, block.getLocation().add(0.5, 0.5, 0.5), 0.5F, 0.5F, 0.5F, 0.1F, 10); +// block.getLocation().getWorld().createExplosion(block.getLocation().add(0.5, 0.5, 0.5), 0F); + } + block.getLocation().getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); + + block.setTypeId(blockInfo.getId()); + block.setData(blockInfo.getData()); + } + public boolean containsBlock(Block block) { - for (BlockInfo info : _wallsBlockInfo) - if (info.getBlock().equals(block)) - return true; - - for (BlockInfo info : _outerRingBlockInfo) - if (info.getBlock().equals(block)) - return true; - - for (BlockInfo info : _centerBlockInfo) - if (info.getBlock().equals(block)) - return true; - for (BlockInfo info : _chestBlockInfo) if (info.getBlock().equals(block)) return true; @@ -435,9 +305,8 @@ public class Treasure return false; } - public TreasureStyle getStyle() + public TreasureType getTreasureType() { - return _style; + return _treasureType; } - } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java new file mode 100644 index 000000000..eab61f45d --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java @@ -0,0 +1,289 @@ +package mineplex.core.treasure; + +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerVelocityEvent; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.donation.DonationManager; +import mineplex.core.gadget.event.GadgetBlockEvent; +import mineplex.core.hologram.Hologram; +import mineplex.core.hologram.HologramManager; +import mineplex.core.reward.Reward; +import mineplex.core.treasure.event.TreasureFinishEvent; +import mineplex.core.treasure.event.TreasureStartEvent; +import mineplex.core.treasure.gui.TreasureShop; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class TreasureLocation implements Listener +{ + private TreasureManager _treasureManager; + private Hologram _hologram; + private HologramManager _hologramManager; + private Treasure _currentTreasure; + private Block _chestBlock; + private byte _chestBlockData; + private Block[] _chestSpawns; + private TreasureShop _shop; + + public TreasureLocation(TreasureManager treasureManager, CoreClientManager clientManager, DonationManager donationManager, Block chestBlock, Block[] chestSpawns, HologramManager hologramManager) + { + _treasureManager = treasureManager; + _chestBlock = chestBlock; + _chestBlockData = _chestBlock.getData(); + _chestSpawns = chestSpawns; + _hologramManager = hologramManager; + _currentTreasure = null; + _hologram = new Hologram(_hologramManager, chestBlock.getLocation().add(0.5, 1.5, 0.5), C.cGreen + "Treasure Chest"); + setHoloChestVisible(true); + _shop = new TreasureShop(treasureManager, clientManager, donationManager, this); + } + + @EventHandler + public void onInteract(PlayerInteractEvent event) + { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().equals(_chestBlock)) + { + openShop(event.getPlayer()); + event.setCancelled(true); + } + } + + public void attemptOpenTreasure(Player player, TreasureType treasureType) + { + TreasureStartEvent event = new TreasureStartEvent(player); + Bukkit.getPluginManager().callEvent(event); + + if (event.isCancelled()) + { + return; + } + + setHoloChestVisible(false); + + Bukkit.broadcastMessage(F.main("Treasure", F.name(player.getName()) + " is opening a " + C.cGreen + "Treasure Chest")); + + Reward[] rewards = _treasureManager.getRewards(player, treasureType.getRewardType()); + Treasure treasure = new Treasure(player, rewards, _chestBlock, _chestSpawns, treasureType, _treasureManager.getBlockRestore(), _hologramManager); + _currentTreasure = treasure; + + UtilTextMiddle.display(treasureType.getName(), "Choose 4 Chests To Open"); + + Location teleportLocation = treasure.getCenterBlock().getLocation().add(0.5, 0, 0.5); + teleportLocation.setPitch(player.getLocation().getPitch()); + teleportLocation.setYaw(player.getLocation().getYaw()); + + for (Entity entity : player.getNearbyEntities(3, 3, 3)) + { + UtilAction.velocity(entity, UtilAlg.getTrajectory(entity.getLocation(), treasure.getCenterBlock().getLocation()).multiply(-1), 1.5, true, 0.8, 0, 1.0, true); + } + + player.teleport(teleportLocation); + + } + + private void setHoloChestVisible(boolean visible) + { + if (visible) + { + _hologram.start(); + _chestBlock.setType(Material.CHEST); + _chestBlock.setData(_chestBlockData); + } + else + { + _hologram.stop(); + _chestBlock.setType(Material.AIR); + } + } + + public void cleanup() + { + if (_currentTreasure != null) + { + _currentTreasure.cleanup(); + _currentTreasure = null; + } + } + + @EventHandler + public void update(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + if (isTreasureInProgress()) + { + Treasure treasure = _currentTreasure; + + treasure.update(); + + if (treasure.isFinished() && treasure.getFinishedTickCount() >= 80) + { + treasure.cleanup(); + + TreasureFinishEvent finishEvent = new TreasureFinishEvent(treasure.getPlayer(), treasure); + Bukkit.getPluginManager().callEvent(finishEvent); + } + } + } + + @EventHandler + public void onTreasureFinish(TreasureFinishEvent event) + { + if (event.getTreasure().equals(_currentTreasure)) + { + _currentTreasure = null; + setHoloChestVisible(true); + } + } + + @EventHandler + public void preventGadgetBlockEvent(GadgetBlockEvent event) + { + if (isTreasureInProgress()) + { + List blocks = event.getBlocks(); + + for (Block block : blocks) + { + if (_currentTreasure.containsBlock(block)) + { + event.setCancelled(true); + return; + } + } + } + } + + @EventHandler(priority = EventPriority.HIGH) + public void interact(PlayerInteractEvent event) + { + Player player = event.getPlayer(); + if (isTreasureInProgress()) + { + if (_currentTreasure.getPlayer().equals(player)) + { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) + { + _currentTreasure.openChest(event.getClickedBlock()); + } + event.setCancelled(true); + } + else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) + { + ChestData chestData = _currentTreasure.getChestData(event.getClickedBlock()); + if (chestData != null) + { + event.setCancelled(true); + } + } + } + } + + @EventHandler + public void inventoryOpen(InventoryOpenEvent event) + { + if (isTreasureInProgress() && event.getPlayer().equals(_currentTreasure.getPlayer())) + { + event.setCancelled(true); + } + } + + @EventHandler + public void cancelMove(PlayerMoveEvent event) + { + Player player = event.getPlayer(); + if (isTreasureInProgress()) + { + if (_currentTreasure.getPlayer().equals(player)) + { + Treasure treasure = _currentTreasure; + Location centerLocation = treasure.getCenterBlock().getLocation().add(0.5, 0.5, 0.5); + if (event.getTo().distanceSquared(centerLocation) > 9) + { + Location newTo = event.getFrom(); + newTo.setPitch(event.getTo().getPitch()); + newTo.setYaw(event.getTo().getYaw()); + event.setTo(newTo); + } + } + else + { + Location fromLocation = event.getFrom(); + Location toLocation = event.getTo(); + Location centerLocation = _currentTreasure.getCenterBlock().getLocation().add(0.5, 1.5, 0.5); + double toDistanceFromCenter = centerLocation.distanceSquared(toLocation); + + if (toDistanceFromCenter <= 9) + { + // Only cancel movement if they are moving towards the center + double fromDistanceFromCenter = centerLocation.distanceSquared(fromLocation); + if (toDistanceFromCenter < fromDistanceFromCenter) + { + Location spawnLocation = new Location(player.getWorld(), 0, 64, 0); + UtilAction.velocity(player, UtilAlg.getTrajectory(player.getLocation(), spawnLocation).multiply(-1), 1.5, true, 0.8, 0, 1.0, true); + event.setTo(event.getFrom()); + } + } + } + } + } + + @EventHandler + public void cancelVelocity(PlayerVelocityEvent event) + { + Player player = event.getPlayer(); + if (isTreasureInProgress() && _currentTreasure.getPlayer().equals(player)) + { + event.setCancelled(true); + } + } + + @EventHandler + public void quit(PlayerQuitEvent event) + { + if (isTreasureInProgress() && _currentTreasure.getPlayer().equals(event.getPlayer())) + { + reset(); + } + } + + public boolean isTreasureInProgress() + { + return _currentTreasure != null; + } + + public void reset() + { + cleanup(); + _chestBlock.setType(Material.CHEST); + _chestBlock.setData(_chestBlockData); + _hologram.start(); + } + + public void openShop(Player player) + { + _shop.attemptShopOpen(player); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java index 34207df10..3fbf27790 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java @@ -1,441 +1,127 @@ package mineplex.core.treasure; -import java.util.Iterator; +import java.util.ArrayList; import java.util.List; import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Entity; 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.inventory.InventoryOpenEvent; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerVelocityEvent; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClientManager; import mineplex.core.blockrestore.BlockRestore; -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.common.util.NautHashMap; -import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilPlayer; import mineplex.core.donation.DonationManager; -import mineplex.core.event.StackerEvent; -import mineplex.core.gadget.event.GadgetBlockEvent; import mineplex.core.hologram.HologramManager; import mineplex.core.inventory.InventoryManager; import mineplex.core.pet.PetManager; import mineplex.core.reward.Reward; import mineplex.core.reward.RewardManager; -import mineplex.core.reward.RewardRarity; import mineplex.core.reward.RewardType; -import mineplex.core.treasure.event.TreasureFinishEvent; -import mineplex.core.treasure.event.TreasureStartEvent; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; /** * Created by Shaun on 8/27/2014. */ public class TreasureManager extends MiniPlugin { - private NautHashMap _playerTreasureMap; private RewardManager _rewardManager; private InventoryManager _inventoryManager; private BlockRestore _blockRestore; private HologramManager _hologramManager; + private List _treasureLocations; - public TreasureManager(JavaPlugin plugin, DonationManager donationManager, InventoryManager inventoryManager, PetManager petManager, BlockRestore blockRestore, HologramManager hologramManager) + public TreasureManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, InventoryManager inventoryManager, PetManager petManager, BlockRestore blockRestore, HologramManager hologramManager) { super("Treasure", plugin); - _playerTreasureMap = new NautHashMap(); _inventoryManager = inventoryManager; _blockRestore = blockRestore; _hologramManager = hologramManager; - _rewardManager = new RewardManager(donationManager, inventoryManager, petManager, + _rewardManager = new RewardManager(donationManager, inventoryManager, petManager, 100, 250, 500, 1000, 1500, 2500, 6000, 12000, true); + + World world = Bukkit.getWorlds().get(0); + + _treasureLocations = new ArrayList(); + { + Block chestBlock = world.getBlockAt(-19, 72, -19); + Block chestLoc1 = world.getBlockAt(-16, 72, -20); + Block chestLoc2 = world.getBlockAt(-18, 72, -22); + Block chestLoc3 = world.getBlockAt(-20, 72, -22); + Block chestLoc4 = world.getBlockAt(-22, 72, -20); + Block chestLoc5 = world.getBlockAt(-22, 72, -18); + Block chestLoc6 = world.getBlockAt(-20, 72, -16); + Block chestLoc7 = world.getBlockAt(-18, 72, -16); + Block chestLoc8 = world.getBlockAt(-16, 72, -18); + _treasureLocations.add(new TreasureLocation(this, clientManager, donationManager, chestBlock, new Block[]{chestLoc1, chestLoc2, chestLoc3, chestLoc4, chestLoc5, chestLoc6, chestLoc7, chestLoc8}, _hologramManager)); + } + + { + Block chestBlock = world.getBlockAt(19, 72, 19); + Block chestLoc1 = world.getBlockAt(16, 72, 20); + Block chestLoc2 = world.getBlockAt(18, 72, 22); + Block chestLoc3 = world.getBlockAt(20, 72, 22); + Block chestLoc4 = world.getBlockAt(22, 72, 20); + Block chestLoc5 = world.getBlockAt(22, 72, 18); + Block chestLoc6 = world.getBlockAt(20, 72, 16); + Block chestLoc7 = world.getBlockAt(18, 72, 16); + Block chestLoc8 = world.getBlockAt(16, 72, 18); + _treasureLocations.add(new TreasureLocation(this, clientManager, donationManager, chestBlock, new Block[]{chestLoc1, chestLoc2, chestLoc3, chestLoc4, chestLoc5, chestLoc6, chestLoc7, chestLoc8}, _hologramManager)); + } + + { + Block chestBlock = world.getBlockAt(19, 72, -19); + Block chestLoc1 = world.getBlockAt(16, 72, -20); + Block chestLoc2 = world.getBlockAt(18, 72, -22); + Block chestLoc3 = world.getBlockAt(20, 72, -22); + Block chestLoc4 = world.getBlockAt(22, 72, -20); + Block chestLoc5 = world.getBlockAt(22, 72, -18); + Block chestLoc6 = world.getBlockAt(20, 72, -16); + Block chestLoc7 = world.getBlockAt(18, 72, -16); + Block chestLoc8 = world.getBlockAt(16, 72, -18); + _treasureLocations.add(new TreasureLocation(this, clientManager, donationManager, chestBlock, new Block[]{chestLoc1, chestLoc2, chestLoc3, chestLoc4, chestLoc5, chestLoc6, chestLoc7, chestLoc8}, _hologramManager)); + } + + { + Block chestBlock = world.getBlockAt(-19, 72, 19); + Block chestLoc1 = world.getBlockAt(-16, 72, 20); + Block chestLoc2 = world.getBlockAt(-18, 72, 22); + Block chestLoc3 = world.getBlockAt(-20, 72, 22); + Block chestLoc4 = world.getBlockAt(-22, 72, 20); + Block chestLoc5 = world.getBlockAt(-22, 72, 18); + Block chestLoc6 = world.getBlockAt(-20, 72, 16); + Block chestLoc7 = world.getBlockAt(-18, 72, 16); + Block chestLoc8 = world.getBlockAt(-16, 72, 18); + _treasureLocations.add(new TreasureLocation(this, clientManager, donationManager, chestBlock, new Block[]{chestLoc1, chestLoc2, chestLoc3, chestLoc4, chestLoc5, chestLoc6, chestLoc7, chestLoc8}, _hologramManager)); + } + + for (TreasureLocation treasureLocation : _treasureLocations) + { + _plugin.getServer().getPluginManager().registerEvents(treasureLocation, _plugin); + } } @Override public void Disable() { - for (Treasure treasure : _playerTreasureMap.values()) + for (TreasureLocation treasureLocation : _treasureLocations) { - treasure.cleanup(); + treasureLocation.cleanup(); } } - public void attemptOpenTreasure(Player player) + public Reward[] getRewards(Player player, RewardType rewardType) { - attemptOpenTreasure(player, false); + return _rewardManager.getRewards(player, rewardType); } - private void attemptOpenTreasure(Player player, boolean ignoreKey) + public BlockRestore getBlockRestore() { - if (checkNearbyBlocks(player) || checkNearSpawn(player) || checkInAir(player) || checkNearbyTreasure(player) || (!ignoreKey && checkNoTreasureAndKey(player))) - return; - - TreasureStartEvent event = new TreasureStartEvent(player); - Bukkit.getPluginManager().callEvent(event); - - if (event.isCancelled()) - { - return; - } - - if (!ignoreKey) - { - // Remove a treasure and a key - _inventoryManager.addItemToInventory(player, "Treasure", "Treasure Key", -1); - _inventoryManager.addItemToInventory(player, "Utility", "Treasure Chest", -1); - } - - Bukkit.broadcastMessage(F.main("Treasure", F.name(player.getName()) + " is opening a " + C.cGreen + "Treasure Chest")); - - Reward[] rewards = _rewardManager.getRewards(player, RewardType.HeroicChest); - Treasure treasure = new Treasure(player, rewards, _blockRestore, _hologramManager); - _playerTreasureMap.put(player, treasure); - - Location teleportLocation = treasure.getPlayerBlock().getLocation().add(0.5, 0, 0.5); - teleportLocation.setPitch(player.getLocation().getPitch()); - teleportLocation.setYaw(player.getLocation().getYaw()); - - for (Entity entity : player.getNearbyEntities(3, 3, 3)) - { - UtilAction.velocity(entity, UtilAlg.getTrajectory(entity.getLocation(), treasure.getCenterBlock().getLocation()).multiply(-1), 1.5, true, 0.8, 0, 1.0, true); - } - - player.teleport(teleportLocation); - + return _blockRestore; } - - private boolean checkNoTreasureAndKey(Player player) - { - int treasureCount = _inventoryManager.Get(player).getItemCount("Treasure Chest"); - int treasureKeyCount = _inventoryManager.Get(player).getItemCount("Treasure Key"); - - if (treasureCount < 1) - { - UtilPlayer.message(player, F.main("Treasure", "You don't have any treasure chests.")); - } - else if (treasureKeyCount < 1) - { - UtilPlayer.message(player, F.main("Treasure", "You don't have any treasure keys.")); - } - - return (treasureCount < 1 || treasureKeyCount < 1); - } - - private boolean checkNearbyTreasure(Player player) - { - boolean nearTreasure = false; - - for (Treasure treasure : _playerTreasureMap.values()) - { - if (UtilMath.offset2d(treasure.getCenterBlock().getLocation(), player.getLocation()) <= 10) - nearTreasure = true; - } - - if (nearTreasure) - UtilPlayer.message(player, F.main("Treasure", "You are too close to another players treasure.")); - - return nearTreasure; - } - - private boolean checkNearbyBlocks(Player player) - { - //todo improve this - Block centerBlock = player.getLocation().getBlock(); - - for (int y = 0; y <= 3; y++) - { - for (int x = -3; x <= 3; x++) - { - for (int z = -3; z <= 3; z++) - { - Block block = centerBlock.getRelative(x, y, z); - if (UtilBlock.solid(block)) - { - UtilPlayer.message(player, F.main("Treasure", "You need a clear area to open Treasure Chests.")); - return true; - } - } - } - } - return false; - } - - private boolean checkInAir(Player player) - { - boolean grounded = UtilEnt.isGrounded(player); - - if (!grounded) - UtilPlayer.message(player, F.main("Treasure", "You can't open chests while in the air.")); - - return !grounded; - } - - private boolean checkNearSpawn(Player player) - { - boolean nearSpawn = UtilMath.offset2d(new Location(player.getWorld(), 0, 0, 0), player.getLocation()) < 10; - - if (nearSpawn) - UtilPlayer.message(player, F.main("Treasure", "You can't open chests near spawn.")); - - return nearSpawn; - } - - @EventHandler - public void update(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - Iterator iterator = _playerTreasureMap.values().iterator(); - while(iterator.hasNext()) - { - Treasure treasure = iterator.next(); - - treasure.update(); - - if (treasure.isFinished() && treasure.getFinishedTickCount() >= 80) - { - treasure.cleanup(); - iterator.remove(); - - TreasureFinishEvent finishEvent = new TreasureFinishEvent(treasure.getPlayer(), treasure); - Bukkit.getPluginManager().callEvent(finishEvent); - } - } - } - - @EventHandler - public void join(PlayerJoinEvent event) - { - final Player player = event.getPlayer(); - - _plugin.getServer().getScheduler().runTaskLater(_plugin, new Runnable() - { - @Override - public void run() - { - if (!player.isOnline()) - return; - - for (Treasure treasure : _playerTreasureMap.values()) - { - treasure.sendChestOpenPackets(player); - } - } - }, 10L); - } - - @EventHandler - public void quit(PlayerQuitEvent event) - { - if (_playerTreasureMap.containsKey(event.getPlayer())) - { - Treasure treasure = _playerTreasureMap.remove(event.getPlayer()); - treasure.cleanup(); - } - } - - @EventHandler - public void cancelMove(PlayerMoveEvent event) - { - Player player = event.getPlayer(); - if (_playerTreasureMap.containsKey(player)) - { - Treasure treasure = _playerTreasureMap.get(player); - if (!event.getTo().getBlock().getRelative(BlockFace.DOWN).equals(treasure.getCenterBlock())) - { - Location newTo = treasure.getCenterBlock().getLocation().add(0.5, 1.1, 0.5); - newTo.setPitch(event.getTo().getPitch()); - newTo.setYaw(event.getTo().getYaw()); - event.setTo(newTo); - } - } - else - { - for (Treasure treasure : _playerTreasureMap.values()) - { - Location fromLocation = event.getFrom(); - Location toLocation = event.getTo(); - Location centerLocation = treasure.getCenterBlock().getLocation().add(0.5, 1.5, 0.5); - - double toDistanceFromCenter = centerLocation.distanceSquared(toLocation); - - if (toDistanceFromCenter <= 9) - { - // Only cancel movement if they are moving towards the center - double fromDistanceFromCenter = centerLocation.distanceSquared(fromLocation); - if (toDistanceFromCenter < fromDistanceFromCenter) - { - UtilAction.velocity(player, UtilAlg.getTrajectory(player.getLocation(), centerLocation).multiply(-1), 1.5, true, 0.8, 0, 1.0, true); - event.setTo(event.getFrom()); - } - } - } - } - } - - @EventHandler - public void cancelVelocity(PlayerVelocityEvent event) - { - // Need to prevent players - - Player player = event.getPlayer(); - if (_playerTreasureMap.containsKey(player)) - { - event.setCancelled(true); - } - } - - @EventHandler - public void cancelStacker(StackerEvent event) - { - if (event.getEntity() instanceof Player) - { - Player player = ((Player) event.getEntity()); - if (_playerTreasureMap.containsKey(player)) - { - event.setCancelled(true); - } - } - } - - @EventHandler - public void inventoryOpen(InventoryOpenEvent event) - { - // Prevent players in treasures from opening inventories - if (event.getPlayer() instanceof Player) - { - if (_playerTreasureMap.containsKey(((Player) event.getPlayer()))) - { - event.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.HIGH) - public void interact(PlayerInteractEvent event) - { - Player player = event.getPlayer(); - if (_playerTreasureMap.containsKey(player)) - { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.CHEST) - { - Treasure treasure = _playerTreasureMap.get(player); - treasure.openChest(event.getClickedBlock()); - } - - // Always cancel interact for treasure players, prevents players from being able to open up cosmetic menu and other menus - event.setCancelled(true); - } - else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.CHEST) - { - for (Treasure treasure : _playerTreasureMap.values()) - { - ChestData data = treasure.getChestData(event.getClickedBlock()); - if (data != null) - { - event.setCancelled(true); - } - } - } - } - - @EventHandler - public void preventGadgetBlockEvent(GadgetBlockEvent event) - { - List blocks = event.getBlocks(); - - for (Block block : blocks) - { - for (Treasure treasure : _playerTreasureMap.values()) - { - if (treasure.containsBlock(block)) - { - event.setCancelled(true); - return; - } - } - } - } - - @EventHandler - public void treasureFinish(TreasureFinishEvent event) - { - _playerTreasureMap.remove(event.getPlayer()); - } - - @EventHandler - public void command(PlayerCommandPreprocessEvent event) - { - if (!event.getPlayer().isOp()) - return; - - if (event.getMessage().startsWith("/treasurechest")) - { - event.getPlayer().sendMessage(C.cGreen + C.Bold + "Received 10 Treasure Chest..."); - _inventoryManager.addItemToInventory(event.getPlayer(), "Utility", "Treasure Chest", 10); - event.setCancelled(true); - } - - if (event.getMessage().startsWith("/treasuredebug")) - { - event.getPlayer().sendMessage(C.cGreen + C.Bold + "Treasure Debug..."); - attemptOpenTreasure(event.getPlayer(), true); - event.setCancelled(true); - } - - if (event.getMessage().startsWith("/rewardchest") || event.getMessage().startsWith("/rewardgame")) - { - int common = 0; - int uncommon = 0; - int rare = 0; - int legend = 0; - - int toTest = 10000000; - - for (int i=0 ; i _chestBlockInfo; + private List _chestBlockInfo; - public ChestSpawnAnimation(Treasure tresure, Block block, byte direction, HashSet chestBlockInfo) + public ChestSpawnAnimation(Treasure tresure, Block block, List chestBlockInfo) { super(tresure); _block = block; - _direction = direction; + int relX = getTreasure().getCenterBlock().getX() - block.getX(); + int relZ = getTreasure().getCenterBlock().getZ() - block.getZ(); + if (Math.abs(relX) > Math.abs(relZ)) + { + if (relX > 0) + _direction = (byte) 5; + else + _direction = (byte) 4; + } + else + { + if (relZ > 0) + _direction = (byte) 3; + else + _direction = (byte) 2; + } _centerLocation = block.getLocation().clone().add(0.5, 0.5, 0.5); _centerLocation.getWorld().playSound(_centerLocation, Sound.LAVA, 1, 1); _chestBlockInfo = chestBlockInfo; + + } @Override @@ -49,16 +65,16 @@ public class ChestSpawnAnimation extends Animation double lead = i * ((2d * Math.PI)/2); float x = (float) (Math.sin(getTicks()/4D + lead)); float z = (float) (Math.cos(getTicks()/4D + lead)); - UtilParticle.PlayParticle(getTreasure().getStyle().getSecondaryParticle(), _centerLocation.clone().add(x * width, y, z * width), 0f, 0f, 0f, 0, 1); + UtilParticle.PlayParticle(getTreasure().getTreasureType().getStyle().getSecondaryParticle(), _centerLocation.clone().add(x * width, y, z * width), 0f, 0f, 0f, 0, 1); } if (getTicks() >= ANIMATION_DURATION) { _chestBlockInfo.add(new BlockInfo(_block)); - getTreasure().setBlock(_block, Material.CHEST, _direction); + getTreasure().setBlock(_block, getTreasure().getTreasureType().getMaterial(), _direction); _block.getLocation().getWorld().playSound(_centerLocation, Sound.ANVIL_LAND, 0.5f, 1f); - UtilParticle.ParticleType particleType = getTreasure().getStyle().getChestSpawnParticle(); + UtilParticle.ParticleType particleType = getTreasure().getTreasureType().getStyle().getChestSpawnParticle(); if (particleType != null) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ParticleAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ParticleAnimation.java index 40745a47f..9dc89ea02 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ParticleAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ParticleAnimation.java @@ -54,7 +54,7 @@ public class ParticleAnimation extends Animation { Vector position = PATH.get(pathPosition); - UtilParticle.PlayParticle(getTreasure().getStyle().getPrimaryParticle(), getTreasure().getCenterBlock().getLocation().add(0.5, 0, 0.5).add(position), 0, 0, 0, 0, 1); + UtilParticle.PlayParticle(getTreasure().getTreasureType().getStyle().getPrimaryParticle(), getTreasure().getCenterBlock().getLocation().add(0.5, 0, 0.5).add(position), 0, 0, 0, 0, 1); pathPosition = (pathPosition + 1) % PATH.size(); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureRemoveAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureRemoveAnimation.java index 74da014dd..a97d29f14 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureRemoveAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureRemoveAnimation.java @@ -1,6 +1,6 @@ package mineplex.core.treasure.animation; -import java.util.HashSet; +import java.util.List; import java.util.Random; import mineplex.core.treasure.BlockInfo; @@ -12,66 +12,38 @@ import mineplex.core.treasure.Treasure; public class TreasureRemoveAnimation extends Animation { private Random _random = new Random(); + private List _openedChests; + private List _otherChests; - private HashSet _wallsBlockInfo; - private HashSet _outerRingBlockInfo; - private HashSet _centerBlockInfo; - - public TreasureRemoveAnimation(Treasure treasure, HashSet centerBlockInfo, HashSet outerRingBlockInfo, HashSet wallsBlockInfo) + public TreasureRemoveAnimation(Treasure treasure, List openedChests, List otherChests) { super(treasure); - _wallsBlockInfo = wallsBlockInfo; - _centerBlockInfo = centerBlockInfo; - _outerRingBlockInfo = outerRingBlockInfo; + _openedChests = openedChests; + _otherChests = otherChests; } @Override protected void tick() { - // Chests go away at 100 ticks - HashSet blockInfoSet = null; - - if (getTicks() == 40) + if (getTicks() >= 20 && getTicks() % 10 == 0) { - blockInfoSet = _wallsBlockInfo; - } - else if (getTicks() == 50) - { - blockInfoSet = _outerRingBlockInfo; - } - else if (getTicks() == 60) - { - blockInfoSet = _centerBlockInfo; - } - - if (blockInfoSet != null) - { - getTreasure().resetBlockInfo(blockInfoSet); - } - - /* - if (getTicks() % 2 == 0) - { - if (_blockRestoreMap.size() > 4) + if (!_otherChests.isEmpty()) { - Block block; - do - { - Block[] keyArray = _blockRestoreMap.keySet().toArray(new Block[0]); - - block = keyArray[_random.nextInt(keyArray.length)]; - } - while (block.getType() == Material.CHEST); - - BlockInfo blockInfo = _blockRestoreMap.remove(block); - getTreasure().setBlock(block, Material.getMaterial(blockInfo.getId()), blockInfo.getData(), false); + BlockInfo info = _otherChests.remove(_random.nextInt(_otherChests.size())); + getTreasure().resetBlockInfo(info); +// System.out.println("otherchests"); } +// else if (!_openedChests.isEmpty()) +// { +// System.out.println("openchests"); +// BlockInfo info = _openedChests.remove(_random.nextInt(_openedChests.size())); +// getTreasure().resetBlockInfo(info); +// } else { finish(); } } - */ } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/OpenTreasureButton.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/OpenTreasureButton.java new file mode 100644 index 000000000..791e8c2a0 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/OpenTreasureButton.java @@ -0,0 +1,30 @@ +package mineplex.core.treasure.gui; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.shop.item.IButton; +import mineplex.core.treasure.TreasureLocation; +import mineplex.core.treasure.TreasureType; + +public class OpenTreasureButton implements IButton +{ + + private Player _player; + private TreasureLocation _treasureLocation; + private TreasureType _treasureType; + + public OpenTreasureButton(Player player, TreasureLocation treasureLocation, TreasureType treasureType) + { + _player = player; + _treasureLocation = treasureLocation; + _treasureType = treasureType; + } + + @Override + public void onClick(Player player, ClickType clickType) + { + // TODO + _treasureLocation.attemptOpenTreasure(player, _treasureType); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java new file mode 100644 index 000000000..7d9cd1920 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java @@ -0,0 +1,40 @@ +package mineplex.core.treasure.gui; + +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.shop.item.ShopItem; +import mineplex.core.shop.page.ShopPageBase; +import mineplex.core.treasure.TreasureLocation; +import mineplex.core.treasure.TreasureManager; +import mineplex.core.treasure.TreasureType; + +public class TreasurePage extends ShopPageBase +{ + private TreasureLocation _treasureLocation; + + public TreasurePage(TreasureManager plugin, TreasureShop shop, TreasureLocation treasureLocation, CoreClientManager clientManager, mineplex.core.donation.DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Open Treasure", player, 9); + + _treasureLocation = treasureLocation; + + BuildPage(); + } + + @Override + protected void BuildPage() + { + //1 2 3 4 5 6 7 8 9 + + ShopItem basic = new ShopItem(Material.CHEST, C.cGreen + C.Bold + "Basic Chest", new String[] {}, 0, false, false); + ShopItem heroic = new ShopItem(Material.TRAPPED_CHEST, C.cGold + C.Bold + "Heroic Chest", new String[] {}, 0, false, false); + ShopItem legendary = new ShopItem(Material.ENDER_CHEST, C.cRed + C.Bold + "Legendary Chest", new String[] {}, 0, false, false); + + AddButton(2, basic, new OpenTreasureButton(Player, _treasureLocation, TreasureType.BASIC)); + AddButton(4, heroic, new OpenTreasureButton(Player, _treasureLocation, TreasureType.HEROIC)); + AddButton(6, legendary, new OpenTreasureButton(Player, _treasureLocation, TreasureType.LEGENDARY)); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasureShop.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasureShop.java new file mode 100644 index 000000000..c30c2c284 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasureShop.java @@ -0,0 +1,27 @@ +package mineplex.core.treasure.gui; + +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.ShopBase; +import mineplex.core.shop.page.ShopPageBase; +import mineplex.core.treasure.TreasureLocation; +import mineplex.core.treasure.TreasureManager; + +public class TreasureShop extends ShopBase +{ + private TreasureLocation _treasureLocation; + + public TreasureShop(TreasureManager plugin, CoreClientManager clientManager, DonationManager donationManager, TreasureLocation treasureLocation) + { + super(plugin, clientManager, donationManager, "Treasure Shop"); + _treasureLocation = treasureLocation; + } + + @Override + protected ShopPageBase> BuildPagesFor(Player player) + { + return new TreasurePage(Plugin, this, _treasureLocation, ClientManager, DonationManager, player); + } +} diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index d8016d055..03ff5fa6f 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -45,7 +45,6 @@ import mineplex.core.MiniClientPlugin; import mineplex.core.account.CoreClient; import mineplex.core.account.CoreClientManager; import mineplex.core.achievement.AchievementManager; -import mineplex.core.benefit.BenefitManager; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.common.Rank; import mineplex.core.common.util.C; @@ -85,7 +84,6 @@ import mineplex.hub.commands.ForcefieldRadius; import mineplex.hub.commands.GadgetToggle; import mineplex.hub.commands.GameModeCommand; import mineplex.hub.commands.NewsCommand; -import mineplex.hub.mail.MailManager; import mineplex.hub.modules.ForcefieldManager; import mineplex.hub.modules.JumpManager; import mineplex.hub.modules.MapManager; @@ -95,7 +93,6 @@ import mineplex.hub.modules.TextManager; import mineplex.hub.modules.UHCManager; import mineplex.hub.modules.VisibilityManager; import mineplex.hub.modules.WorldManager; -import mineplex.hub.notification.NotificationManager; import mineplex.hub.party.Party; import mineplex.hub.party.PartyManager; import mineplex.hub.poll.PollManager; @@ -182,7 +179,7 @@ public class HubManager extends MiniClientPlugin _inventoryManager = new InventoryManager(plugin, clientManager); //new BenefitManager(plugin, clientManager, _inventoryManager); _gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, new ProjectileManager(plugin)); - _treasureManager = new TreasureManager(_plugin, donationManager, _inventoryManager, petManager, _blockRestore, hologramManager); + _treasureManager = new TreasureManager(_plugin, clientManager, donationManager, _inventoryManager, petManager, _blockRestore, hologramManager); new CosmeticManager(_plugin, clientManager, donationManager, _inventoryManager, _gadgetManager, _mountManager, petManager, _treasureManager); _petManager = petManager; From 6a269cc03b666ca087d6d597c66b8a0c008871b3 Mon Sep 17 00:00:00 2001 From: Chiss Date: Fri, 30 Jan 2015 11:08:23 +1100 Subject: [PATCH 17/18] More SSM Changes --- .../src/mineplex/core/data/BlockData.java | 8 +++ .../src/mineplex/mapparser/MapParser.java | 14 ++--- .../games/dragonescape/DragonEscapeTeams.java | 2 +- .../game/games/halloween/kits/KitFinn.java | 7 +-- .../games/halloween/kits/KitRobinHood.java | 7 +-- .../game/games/halloween/kits/KitThor.java | 6 +- .../game/games/milkcow/kits/KitCow.java | 6 +- .../arcade/game/games/quiver/QuiverTeams.java | 2 +- .../arcade/game/games/smash/SuperSmash.java | 51 +++++++++++----- .../game/games/smash/SuperSmashTeam.java | 40 +++++-------- .../game/games/smash/kits/KitBlaze.java | 32 +++++++++- .../game/games/smash/kits/KitChicken.java | 33 ++++++++++- .../arcade/game/games/smash/kits/KitCow.java | 17 +++++- .../game/games/smash/kits/KitCreeper.java | 35 ++++++++++- .../game/games/smash/kits/KitEnderman.java | 36 +++++++++-- .../game/games/smash/kits/KitGolem.java | 28 ++++++++- .../game/games/smash/kits/KitKnight.java | 17 +++++- .../game/games/smash/kits/KitMagmaCube.java | 28 ++++++++- .../arcade/game/games/smash/kits/KitPig.java | 48 +++++++++++++-- .../game/games/smash/kits/KitSheep.java | 28 ++++++++- .../games/smash/kits/KitSkeletalHorse.java | 47 +++++++++++---- .../game/games/smash/kits/KitSkeleton.java | 28 ++++++++- .../game/games/smash/kits/KitSkySquid.java | 44 +++++++++++++- .../game/games/smash/kits/KitSlime.java | 32 +++++++++- .../game/games/smash/kits/KitSnowman.java | 27 ++++++++- .../game/games/smash/kits/KitSpider.java | 21 ++++++- .../game/games/smash/kits/KitWitch.java | 40 ++++++++++++- .../game/games/smash/kits/KitWither.java | 16 ++++- .../games/smash/kits/KitWitherSkeleton.java | 40 ++++++++++++- .../arcade/game/games/smash/kits/KitWolf.java | 19 +++++- .../game/games/smash/kits/KitZombie.java | 29 ++++++++- .../survivalgames/SurvivalGamesTeams.java | 20 ++++--- .../game/arcade/kit/AbbreviatedKit.java | 59 +++++++++++++++++++ .../nautilus/game/arcade/kit/SmashKit.java | 27 +++++++-- .../game/arcade/kit/perks/PerkBlockToss.java | 3 +- .../game/arcade/kit/perks/PerkBoneRush.java | 8 +-- .../arcade/kit/perks/PerkDeadlyBones.java | 59 ++++++++++++++++++- .../game/arcade/kit/perks/PerkEarthquake.java | 6 +- .../arcade/kit/perks/PerkEndermanDragon.java | 55 ++++++++++++++--- .../game/arcade/kit/perks/PerkKnockback.java | 2 +- .../arcade/kit/perks/PerkPigBaconBomb.java | 4 +- .../arcade/kit/perks/PerkPigBaconBounce.java | 7 +-- .../game/arcade/kit/perks/PerkPigZombie.java | 8 +-- .../arcade/kit/perks/PerkSheepHoming.java | 42 ++----------- .../game/arcade/kit/perks/PerkSnowTurret.java | 45 ++++++++------ .../game/arcade/kit/perks/PerkStormSquid.java | 2 +- 46 files changed, 919 insertions(+), 216 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/AbbreviatedKit.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/data/BlockData.java b/Plugins/Mineplex.Core/src/mineplex/core/data/BlockData.java index 7e9847e0e..bc6f7246a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/data/BlockData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/data/BlockData.java @@ -20,6 +20,14 @@ public class BlockData public void restore() { + restore(false); + } + + public void restore(boolean requireNotAir) + { + if (requireNotAir && Block.getType() == org.bukkit.Material.AIR) + return; + Block.setTypeIdAndData(Material.getId(), Data, true); } } diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java index f4e6a2346..c7e914c29 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java @@ -472,13 +472,13 @@ public class MapParser extends JavaPlugin implements Listener public void ResetInventory(Player player) { - UtilInv.Clear(player); - - player.getInventory().addItem(new ItemStack(Material.STONE_SWORD)); - player.getInventory().addItem(new ItemStack(Material.STONE_SPADE)); - player.getInventory().addItem(new ItemStack(Material.STONE_PICKAXE)); - player.getInventory().addItem(new ItemStack(Material.STONE_AXE)); - player.getInventory().addItem(new ItemStack(Material.WOOD_AXE)); +// UtilInv.Clear(player); +// +// player.getInventory().addItem(new ItemStack(Material.STONE_SWORD)); +// player.getInventory().addItem(new ItemStack(Material.STONE_SPADE)); +// player.getInventory().addItem(new ItemStack(Material.STONE_PICKAXE)); +// player.getInventory().addItem(new ItemStack(Material.STONE_AXE)); +// player.getInventory().addItem(new ItemStack(Material.WOOD_AXE)); } public WorldManager getWorldManager() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscapeTeams.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscapeTeams.java index 6744145c4..9460a9d67 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscapeTeams.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscapeTeams.java @@ -68,8 +68,8 @@ public class DragonEscapeTeams extends TeamGame new Kit[] { new KitLeaper(manager), - //new KitDisruptor(manager), new KitWarper(manager), + new KitDigger(manager), }, new String[] diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitFinn.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitFinn.java index 08ea61389..996312035 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitFinn.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitFinn.java @@ -13,12 +13,12 @@ import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.kit.AbbreviatedKit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; -import nautilus.game.arcade.kit.SmashKit; import nautilus.game.arcade.kit.perks.*; -public class KitFinn extends SmashKit +public class KitFinn extends AbbreviatedKit { public KitFinn(ArcadeManager manager) { @@ -39,8 +39,7 @@ public class KitFinn extends SmashKit new PerkFletcher(2, 2, true), }, - EntityType.ZOMBIE, new ItemStack(Material.GOLD_SWORD), - "", 0, null); + EntityType.ZOMBIE, new ItemStack(Material.GOLD_SWORD)); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitRobinHood.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitRobinHood.java index 57f465cfa..2049db690 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitRobinHood.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitRobinHood.java @@ -14,12 +14,12 @@ import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.kit.AbbreviatedKit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; -import nautilus.game.arcade.kit.SmashKit; import nautilus.game.arcade.kit.perks.*; -public class KitRobinHood extends SmashKit +public class KitRobinHood extends AbbreviatedKit { public KitRobinHood(ArcadeManager manager) { @@ -39,8 +39,7 @@ public class KitRobinHood extends SmashKit new PerkQuickshotRobinHood() }, - EntityType.ZOMBIE, new ItemStack(Material.BOW), - "", 0, null); + EntityType.ZOMBIE, new ItemStack(Material.BOW)); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitThor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitThor.java index 2a83cd7aa..37d1cc62a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitThor.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/kits/KitThor.java @@ -14,12 +14,13 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.kit.AbbreviatedKit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; import nautilus.game.arcade.kit.perks.*; -public class KitThor extends SmashKit +public class KitThor extends AbbreviatedKit { public KitThor(ArcadeManager manager) { @@ -40,8 +41,7 @@ public class KitThor extends SmashKit new PerkHammerThrow(), }, - EntityType.ZOMBIE, new ItemStack(Material.IRON_SWORD), - "", 0, null); + EntityType.ZOMBIE, new ItemStack(Material.IRON_SWORD)); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/milkcow/kits/KitCow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/milkcow/kits/KitCow.java index 353870c8e..d196e224f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/milkcow/kits/KitCow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/milkcow/kits/KitCow.java @@ -11,12 +11,13 @@ import mineplex.core.disguise.disguises.DisguiseCow; import mineplex.core.itemstack.ItemStackFactory; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.kit.AbbreviatedKit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; import nautilus.game.arcade.kit.perks.*; -public class KitCow extends SmashKit +public class KitCow extends AbbreviatedKit { public KitCow(ArcadeManager manager) { @@ -35,8 +36,7 @@ public class KitCow extends SmashKit new PerkSeismicCow(), }, EntityType.COW, - null, - "", 0, null); + null); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/quiver/QuiverTeams.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/quiver/QuiverTeams.java index 1074dd48d..98406b576 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/quiver/QuiverTeams.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/quiver/QuiverTeams.java @@ -34,7 +34,7 @@ public class QuiverTeams extends TeamGame private HashMap _teamKills = new HashMap(); private HashMap _deathTime = new HashMap(); - private int _reqKills = 60; + private int _reqKills = 100; public QuiverTeams(ArcadeManager manager) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java index 298821f84..c93d72527 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java @@ -1,6 +1,7 @@ package nautilus.game.arcade.game.games.smash; import java.util.HashMap; +import java.util.HashSet; import org.bukkit.ChatColor; import org.bukkit.FireworkEffect.Type; @@ -8,6 +9,8 @@ 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.entity.EnderCrystal; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -24,6 +27,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; @@ -31,6 +35,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; +import mineplex.core.data.BlockData; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; @@ -60,6 +65,8 @@ public class SuperSmash extends SoloGame private Location _powerupTarget = null; private EnderCrystal _powerup = null; private long _lastPowerup = 0; + + private HashSet _restoreBlock = new HashSet(); public SuperSmash(ArcadeManager manager) { @@ -243,14 +250,29 @@ public class SuperSmash extends SoloGame if (_powerupTarget == null) { - _powerupTarget = UtilAlg.Random(WorldData.GetDataLocs("RED")); - _powerupCurrent = _powerupTarget.clone().add(0, 100, 0); + Location newTarget = UtilAlg.Random(WorldData.GetDataLocs("RED")); + + _powerupTarget = newTarget; + _powerupCurrent = _powerupTarget.clone().add(0, 160, 0); + + //Blocks + for (int x=-1 ; x<=1 ; x++) + for (int z=-1 ; z<=1 ; z++) + { + _restoreBlock.add(new BlockData(_powerupTarget.getBlock().getRelative(x, -2, z))); + _restoreBlock.add(new BlockData(_powerupTarget.getBlock().getRelative(x, -1, z))); + + _powerupTarget.getBlock().getRelative(x, -2, z).setType(Material.IRON_BLOCK); + _powerupTarget.getBlock().getRelative(x, -1, z).setType(Material.QUARTZ_BLOCK); + } + + _powerupTarget.getBlock().getRelative(BlockFace.DOWN).setType(Material.BEACON); } if (_powerupTarget.getY() < _powerupCurrent.getY()) { _powerupCurrent.add(0, -2, 0); - UtilFirework.playFirework(_powerupCurrent, Type.BURST, Color.WHITE, false, true); + UtilFirework.playFirework(_powerupCurrent, Type.BURST, Color.RED, false, true); } else { @@ -258,8 +280,17 @@ public class SuperSmash extends SoloGame _powerup = _powerupTarget.getWorld().spawn(_powerupTarget, EnderCrystal.class); CreatureAllowOverride = false; + _powerupTarget.getBlock().getRelative(BlockFace.DOWN).setType(Material.GLASS); + _powerupTarget = null; _powerupCurrent = null; + + _lastPowerup = System.currentTimeMillis(); + + //Restore Blocks + for (BlockData block : _restoreBlock) + block.restore(true); + _restoreBlock.clear(); } } } @@ -283,7 +314,7 @@ public class SuperSmash extends SoloGame { double dist = UtilMath.offset(player, _powerup); - if (dist > 3) + if (dist > 2) continue; if (best == null || dist < bestDist) @@ -435,18 +466,6 @@ public class SuperSmash extends SoloGame event.setCancelled(true); } - //XXX Not sure if removing entity_explo will cause problems. - //Block explosion stops explosions createExplosion method from dealing damage (ie Creeper Blast) - //All instances of createExplosion have been removed - @EventHandler - public void ExplosionDamageCancel(EntityDamageEvent event) - { - // if (event.getCause() == DamageCause.BLOCK_EXPLOSION) //event.getCause() == DamageCause.ENTITY_EXPLOSION || - // { - // event.setCancelled(true); - // } - } - @Override public double GetKillsGems(Player killer, Player killed, boolean assist) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmashTeam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmashTeam.java index c380b3ff1..4f4507bd3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmashTeam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmashTeam.java @@ -1,9 +1,7 @@ package nautilus.game.arcade.game.games.smash; -import java.util.ArrayList; import java.util.HashMap; -import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -38,8 +36,6 @@ import nautilus.game.arcade.kit.Kit; public class SuperSmashTeam extends TeamGame { private HashMap _lives = new HashMap(); - - private ArrayList _lastScoreboard = new ArrayList(); public SuperSmashTeam(ArcadeManager manager) { @@ -49,25 +45,26 @@ public class SuperSmashTeam extends TeamGame { new KitSkeleton(manager), - //new KitGolem(manager), - //new KitSpider(manager), - //new KitSlime(manager), - + new KitGolem(manager), + new KitSpider(manager), + new KitSlime(manager), + new KitCreeper(manager), - //new KitEnderman(manager), - //new KitSnowman(manager), + new KitEnderman(manager), + new KitSnowman(manager), new KitWolf(manager), - - + + new KitBlaze(manager), new KitWitch(manager), - //new KitChicken(manager), + new KitChicken(manager), new KitSkeletalHorse(manager), - //new KitPig(manager), + new KitPig(manager), new KitSkySquid(manager), - new KitWitherSkeleton(manager), - //new KitMagmaCube(manager), - + new KitWitherSkeleton(manager), + new KitMagmaCube(manager), + + new KitSheep(manager) }, @@ -302,15 +299,6 @@ public class SuperSmashTeam extends TeamGame event.setCancelled(true); } - @EventHandler - public void ExplosionDamageCancel(EntityDamageEvent event) - { - if (event.getCause() == DamageCause.ENTITY_EXPLOSION || event.getCause() == DamageCause.BLOCK_EXPLOSION) - { - event.setCancelled(true); - } - } - @Override public double GetKillsGems(Player killer, Player killed, boolean assist) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitBlaze.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitBlaze.java index 04c9f49c0..55fe03da6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitBlaze.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitBlaze.java @@ -9,11 +9,13 @@ import org.bukkit.event.EventHandler; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseBlaze; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; @@ -50,8 +52,10 @@ public class KitBlaze extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, C.cYellow + C.Bold + "Hold Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Inferno", new String[] @@ -73,10 +77,36 @@ public class KitBlaze extends SmashKit ChatColor.RESET + "startup time, the skill is cancelled.", })); + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Phoenix", + new String[] + { + ChatColor.RESET + "Unleash all your fiery power and", + ChatColor.RESET + "propel yourself forwards, destroying", + ChatColor.RESET + "everything that comes into your path." + })); + + player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); + } + + @Override + public void giveSuperItems(Player player) + { + player.getInventory().remove(Material.IRON_SWORD); + player.getInventory().remove(Material.IRON_AXE); + + UtilInv.Update(player); + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguiseBlaze disguise = new DisguiseBlaze(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitChicken.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitChicken.java index 2906404e7..e66ed7509 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitChicken.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitChicken.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseChicken; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -39,13 +40,15 @@ public class KitChicken extends SmashKit }, EntityType.CHICKEN, new ItemStack(Material.EGG), - "Airial Blaster", 20000, Sound.CHICKEN_HURT); + "Airial Gunner", 20000, Sound.CHICKEN_HURT); } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, C.cYellow + C.Bold + "Hold Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Egg Blaster", new String[] @@ -76,9 +79,33 @@ public class KitChicken extends SmashKit ChatColor.RESET + "", ChatColor.RESET + C.cAqua + "Flap uses Energy (Experience Bar)", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Airial Gunner", + new String[] + { + ChatColor.RESET + "Unleash an unlimited barrage of eggs", + ChatColor.RESET + "while also gaining permanant flight.", + })); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.LEATHER_CHESTPLATE)); - + } + + @Override + public void giveSuperItems(Player player) + { + player.getInventory().remove(Material.IRON_SWORD); + player.getInventory().remove(Material.IRON_AXE); + + UtilInv.Update(player); + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); + //Disguise DisguiseChicken disguise = new DisguiseChicken(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCow.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCow.java index 62ecd0549..207ff9c34 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCow.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCow.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseCow; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -38,8 +39,10 @@ public class KitCow extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Stampede", new String[] @@ -59,6 +62,18 @@ public class KitCow extends SmashKit player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.IRON_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.IRON_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_BOOTS)); + } + + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguiseCow disguise = new DisguiseCow(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCreeper.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCreeper.java index 65eaa5e2d..bf884989f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCreeper.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitCreeper.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseCreeper; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -45,8 +46,10 @@ public class KitCreeper extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Sulphur Bomb", new String[] @@ -70,7 +73,7 @@ public class KitCreeper extends SmashKit })); if (Manager.GetGame().GetState() == GameState.Recruit) - player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.COAL, (byte)0, 1, C.cYellow + C.Bold + "Passive" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Lightning Shield", new String[] { @@ -80,12 +83,38 @@ public class KitCreeper extends SmashKit ChatColor.RESET + "Lightning Shield blocks 1 melee attack,", ChatColor.RESET + "striking lightning on the attacker.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Atomic Blast", + new String[] + { + ChatColor.RESET + "After a short duration, you will explode", + ChatColor.RESET + "a gigantic explosion which destroys the", + ChatColor.RESET + "map and everyone nearby. You are sent flying", + ChatColor.RESET + "in the direction you are looking." + })); player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.LEATHER_HELMET)); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.LEATHER_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.LEATHER_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.LEATHER_BOOTS)); - + } + + @Override + public void giveSuperItems(Player player) + { + player.getInventory().remove(Material.IRON_SPADE); + player.getInventory().remove(Material.IRON_AXE); + + UtilInv.Update(player); + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); + //Disguise DisguiseCreeper disguise = new DisguiseCreeper(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitEnderman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitEnderman.java index 2a040f0b7..21222ca52 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitEnderman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitEnderman.java @@ -14,11 +14,13 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseEnderman; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; @@ -52,13 +54,15 @@ public class KitEnderman extends SmashKit }, EntityType.ENDERMAN, new ItemStack(Material.ENDER_PEARL), - "Ender Dragon Rider", 40000, Sound.ENDERDRAGON_GROWL); + "Dragon Rider", 30000, Sound.ENDERDRAGON_GROWL); } - + @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, C.cYellow + C.Bold + "Hold/Release Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Block Toss", new String[] @@ -81,12 +85,36 @@ public class KitEnderman extends SmashKit ChatColor.RESET + "", ChatColor.RESET + "You cannot pass through blocks.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Dragon Rider", + new String[] + { + ChatColor.RESET + "Summon a dragon from The End to fly into", + ChatColor.RESET + "your opponents, dealing devestating damage.", + })); player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); - + } + + @Override + public void giveSuperItems(Player player) + { + player.getInventory().remove(Material.IRON_SWORD); + player.getInventory().remove(Material.IRON_AXE); + + UtilInv.Update(player); + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); + //Disguise DisguiseEnderman disguise = new DisguiseEnderman(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitGolem.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitGolem.java index 94a9c999b..b125bf374 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitGolem.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitGolem.java @@ -8,9 +8,11 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseIronGolem; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; @@ -43,8 +45,10 @@ public class KitGolem extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Fissure", new String[] @@ -72,11 +76,33 @@ public class KitGolem extends SmashKit ChatColor.RESET + "slam back into the ground with huge force.", ChatColor.RESET + "Nearby opponents take damage and knockback.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Earthquake", + new String[] + { + ChatColor.RESET + "Begin an earthquake that will give damage", + ChatColor.RESET + "and knockback to any player who is touching", + ChatColor.RESET + "the ground, anywhere on the map!", + })); player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.IRON_HELMET)); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.IRON_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.IRON_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_BOOTS)); + } + + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguiseIronGolem disguise = new DisguiseIronGolem(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitKnight.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitKnight.java index a574a4569..0b26ed961 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitKnight.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitKnight.java @@ -23,6 +23,7 @@ import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilPlayer; import mineplex.core.disguise.disguises.DisguiseSkeleton; import mineplex.core.itemstack.ItemStackFactory; @@ -70,8 +71,10 @@ public class KitKnight extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Horse Kick", new String[] @@ -90,7 +93,17 @@ public class KitKnight extends SmashKit player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.IRON_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.IRON_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.IRON_BOOTS)); - + } + + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { //Disguise DisguiseSkeleton disguise = new DisguiseSkeleton(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitMagmaCube.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitMagmaCube.java index 18686ce4e..98af5d8fa 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitMagmaCube.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitMagmaCube.java @@ -8,9 +8,11 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseMagmaCube; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; @@ -43,8 +45,10 @@ public class KitMagmaCube extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Magma Blast", new String[] @@ -68,10 +72,32 @@ public class KitMagmaCube extends SmashKit ChatColor.RESET + "", ChatColor.RESET + "Right-Click again to end Flame Dash early.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Meteor Shower", + new String[] + { + ChatColor.RESET + "Summon a deadly meteor shower that will rain", + ChatColor.RESET + "down on your target location, causing extreme", + ChatColor.RESET + "damage and knockback to enemies!", + })); player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); + } + + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguiseMagmaCube disguise = new DisguiseMagmaCube(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitPig.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitPig.java index 70ba0b3aa..9dac8b5b3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitPig.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitPig.java @@ -1,6 +1,7 @@ package nautilus.game.arcade.game.games.smash.kits; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguisePig; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; @@ -18,6 +19,7 @@ import nautilus.game.arcade.kit.perks.PerkSmashStats; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -44,12 +46,14 @@ public class KitPig extends SmashKit }, EntityType.PIG, new ItemStack(Material.PORK), - "", 0, null); + "Pig Stink", 40000, Sound.PIG_DEATH); } - + @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Bouncy Bacon", new String[] @@ -85,10 +89,32 @@ public class KitPig extends SmashKit ChatColor.RESET + "When your health returns to 6, you return", ChatColor.RESET + "back to Pig Form.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Pig Stink", + new String[] + { + ChatColor.RESET + "Unleash your inner pig, causing all enemies", + ChatColor.RESET + "to get nausea for a duration, while you become", + ChatColor.RESET + "a powerful Nether Pig!", + })); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); + } + + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguisePig disguise = new DisguisePig(player); @@ -113,7 +139,21 @@ public class KitPig extends SmashKit if (!HasKit(player)) continue; - player.setExp((float) Math.min(0.999, player.getExp()+0.005)); + player.setExp((float) Math.min(0.999, player.getExp() + (isSuperActive(player) ? 0.02 : 0.005))); } } + + @Override + public void activateSuperCustom(Player player) + { + for (Player other : Manager.GetGame().GetPlayers(true)) + if (!player.equals(other)) + Manager.GetCondition().Factory().Confuse("Pig Stink " + player.getName(), other, player, 40, 0, false, false, false); + } + + @Override + public void deactivateSuperCustom(Player player) + { + + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java index 108d70dac..90dfa2574 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSheep.java @@ -10,9 +10,11 @@ import org.bukkit.inventory.ItemStack; import mineplex.core.achievement.Achievement; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseSheep; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; @@ -54,8 +56,10 @@ public class KitSheep extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Static Lazer", new String[] @@ -86,10 +90,32 @@ public class KitSheep extends SmashKit ChatColor.RESET + "", ChatColor.RESET + "Using this recharges your Double Jump.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Homing Sheeples", + new String[] + { + ChatColor.RESET + "Release one Homing Sheeple towards every player.", + ChatColor.RESET + "They will slowly home in on their target and", + ChatColor.RESET + "explode to deal devestating damage.", + })); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); + } + + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguiseSheep disguise = new DisguiseSheep(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeletalHorse.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeletalHorse.java index f6561b936..9fb2f108b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeletalHorse.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeletalHorse.java @@ -14,6 +14,7 @@ import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseHorse; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -39,17 +40,19 @@ public class KitSkeletalHorse extends SmashKit new PerkDoubleJump("Double Jump", 1, 1, false), new PerkHorseKick(), new PerkBoneRush(), - //new PerkInfernalHorror() + new PerkDeadlyBones() }, EntityType.HORSE, new ItemStack(Material.BONE), - "Eternal Rush", 24000, Sound.HORSE_SKELETON_DEATH); + "Bone Storm", 24000, Sound.HORSE_SKELETON_DEATH); } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Bone Kick", new String[] @@ -72,22 +75,46 @@ public class KitSkeletalHorse extends SmashKit })); if (Manager.GetGame().GetState() == GameState.Recruit) - player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BLAZE_POWDER, (byte)0, 1, - C.cYellow + C.Bold + "Passive" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Infernal Horror", + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BONE, (byte)0, 1, + C.cYellow + C.Bold + "Passive" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Deadly Bones", new String[] { - ChatColor.RESET + "Charge your Rage by taking/dealing damage.", - ChatColor.RESET + "When your Rage hits 100%, you transform", - ChatColor.RESET + "into Infernal Horror.", + ChatColor.RESET + "Whenever you take damage, you drop a bone", + ChatColor.RESET + "which will explode after a few seconds", + ChatColor.RESET + "dealing damage and knockback to enemies." + })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Bone Storm", + new String[] + { + ChatColor.RESET + "Charge forth in a mighty bone storm.", + ChatColor.RESET + "Bones deal damage and knockback.", ChatColor.RESET + "", - ChatColor.RESET + "Infernal Horror has Speed 2, 1 Bonus Damage", - ChatColor.RESET + "and improved Bone Rush and Bone Kick.", + ChatColor.RESET + "Holding Crouch will prevent you from", + ChatColor.RESET + "moving forward with the bones.", })); player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); + } + + @Override + public void giveSuperItems(Player player) + { + player.getInventory().remove(Material.IRON_SPADE); + player.getInventory().remove(Material.IRON_AXE); + + UtilInv.Update(player); + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguiseHorse disguise = new DisguiseHorse(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeleton.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeleton.java index a77be02c6..be9b11ee1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeleton.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkeleton.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseSkeleton; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -51,8 +52,10 @@ public class KitSkeleton extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Bone Explosion", new String[] @@ -79,12 +82,33 @@ public class KitSkeleton extends SmashKit ChatColor.RESET + "When you release, you will quickly fire", ChatColor.RESET + "all the arrows in succession.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Arrow Storm", + new String[] + { + ChatColor.RESET + "Fire hundreds of arrows in quick succession", + ChatColor.RESET + "which deal damage and knockback to enemies.", + })); player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); - + } + + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); + //Disguise DisguiseSkeleton disguise = new DisguiseSkeleton(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkySquid.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkySquid.java index b633195d5..ec5ba59fb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkySquid.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSkySquid.java @@ -8,9 +8,11 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseSquid; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; @@ -40,12 +42,14 @@ public class KitSkySquid extends SmashKit }, EntityType.SQUID, new ItemStack(Material.INK_SACK), - "Storm Squid", 20000, Sound.SPLASH2); + "Storm Squid", 24000, Sound.SPLASH2); } @Override - public void GiveItems(Player player) - { + public void giveCoreItems(Player player) + { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Ink Shotgun", new String[] @@ -62,10 +66,44 @@ public class KitSkySquid extends SmashKit ChatColor.RESET + "You become invulnerable and fly through", ChatColor.RESET + "the sky in the direction you are looking.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Storm Squid", + new String[] + { + ChatColor.RESET + "Gain permanent flight, as well as the ability", + ChatColor.RESET + "to strike lightning at your target location", + ChatColor.RESET + "after a short delay.", + })); + player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); + } + + @Override + public void giveSuperItems(Player player) + { + player.getInventory().remove(Material.IRON_SWORD); + player.getInventory().remove(Material.IRON_AXE); + + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_AXE, (byte)0, 1, + C.cYellow + C.Bold + "Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Lightning Strike", + new String[] + { + ChatColor.RESET + "Strikes lightning at target location after", + ChatColor.RESET + "a short delay. Deals large damage and knockback.", + })); + + UtilInv.Update(player); + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguiseSquid disguise = new DisguiseSquid(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java index 3a18d67bd..5e27ba01e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java @@ -12,6 +12,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; @@ -22,6 +23,7 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.condition.Condition.ConditionType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; @@ -49,12 +51,14 @@ public class KitSlime extends SmashKit }, EntityType.SLIME, new ItemStack(Material.SLIME_BALL), - "Giga Slime", 18000, Sound.SLIME_ATTACK); + "Giga Slime", 24000, Sound.SLIME_ATTACK); } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, C.cYellow + C.Bold + "Hold/Release Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Slime Rocket", new String[] @@ -80,9 +84,33 @@ public class KitSlime extends SmashKit ChatColor.RESET + "However, you take 50% of the damage and", ChatColor.RESET + "knockback in the opposite direction.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Giga Slime", + new String[] + { + ChatColor.RESET + "Grow into a gigantic slime that deals damage", + ChatColor.RESET + "and knockback to anyone that comes nearby.", + })); player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); + } + + @Override + public void giveSuperItems(Player player) + { + player.getInventory().remove(Material.IRON_SWORD); + player.getInventory().remove(Material.IRON_AXE); + + UtilInv.Update(player); + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguiseSlime disguise = new DisguiseSlime(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSnowman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSnowman.java index 262f4ca4c..68eb1004d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSnowman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSnowman.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseSnowman; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -50,9 +51,23 @@ public class KitSnowman extends SmashKit setSuperCharges(3); } + @Override + public void giveCoreItems(Player player) + { + + } + + @Override + public void giveSuperItems(Player player) + { + + } + @Override public void GiveItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, C.cYellow + C.Bold + "Hold Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Blizzard", new String[] @@ -82,12 +97,22 @@ public class KitSnowman extends SmashKit ChatColor.RESET + "", ChatColor.RESET + "Your aura shrinks on low energy.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Snow Turret", + new String[] + { + ChatColor.RESET + "Spawn three snow turrets that continously", + ChatColor.RESET + "throw snowballs at the nearest enemy,", + ChatColor.RESET + "dealing damage and knockback.", + })); player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); - + //Disguise DisguiseSnowman disguise = new DisguiseSnowman(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSpider.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSpider.java index 684a3ec86..1bb10abdc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSpider.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSpider.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseSpider; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -41,9 +42,11 @@ public class KitSpider extends SmashKit "", 0, null); } - @Override - public void GiveItems(Player player) + @Override + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, C.cYellow + C.Bold + "Hold/Release Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Needler", new String[] @@ -90,7 +93,19 @@ public class KitSpider extends SmashKit player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); - + } + + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); + //Disguise DisguiseSpider disguise = new DisguiseSpider(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitch.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitch.java index 6460e4d5a..e9b222193 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitch.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitch.java @@ -5,10 +5,10 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseWitch; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -44,8 +44,10 @@ public class KitWitch extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Daze Potion", new String[] @@ -72,11 +74,43 @@ public class KitWitch extends SmashKit ChatColor.RESET + "causing you to be pulled behind them!", })); + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Bat Form", + new String[] + { + ChatColor.RESET + "Transform into a bat that can fly and", + ChatColor.RESET + "launch powerful sonic blasts at opponents,", + ChatColor.RESET + "dealing damage and knockback.", + })); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); - + } + + @Override + public void giveSuperItems(Player player) + { + player.getInventory().remove(Material.IRON_SPADE); + player.getInventory().remove(Material.IRON_AXE); + + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_AXE, (byte)0, 1, + C.cYellow + C.Bold + "Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Sonic Boom", + new String[] + { + ChatColor.RESET + "Screech loudly to create a sonic boom", + ChatColor.RESET + "that deals damage and knockback to enemies!", + })); + + UtilInv.Update(player); + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); + //Disguise DisguiseWitch disguise = new DisguiseWitch(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWither.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWither.java index df6bfd3dd..9aa80de7c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWither.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWither.java @@ -12,6 +12,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.LeatherArmorMeta; import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilServer; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; @@ -46,8 +47,9 @@ public class KitWither extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); player.getInventory().addItem(new ItemStack(Material.ARROW)); @@ -73,6 +75,18 @@ public class KitWither extends SmashKit player.getInventory().setBoots(boots); } + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); + } + @EventHandler public void InvisibilityUpdate(UpdateEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitherSkeleton.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitherSkeleton.java index 11f69c37a..892878acc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitherSkeleton.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWitherSkeleton.java @@ -9,9 +9,11 @@ import org.bukkit.entity.Skeleton.SkeletonType; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseSkeleton; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.SmashKit; @@ -45,8 +47,10 @@ public class KitWitherSkeleton extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, C.cYellow + C.Bold + "Hold Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Guided Wither Skull", new String[] @@ -67,12 +71,44 @@ public class KitWitherSkeleton extends SmashKit ChatColor.RESET + "Use the skill again to swap positions", ChatColor.RESET + "with your image.", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Wither Form", + new String[] + { + ChatColor.RESET + "Transform into a legendary Wither that is", + ChatColor.RESET + "able to launch wither skulls at opponents,", + ChatColor.RESET + "dealing damage and knockback.", + })); player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS)); - + } + + @Override + public void giveSuperItems(Player player) + { + player.getInventory().remove(Material.IRON_SWORD); + player.getInventory().remove(Material.IRON_AXE); + + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_AXE, (byte)0, 1, + C.cYellow + C.Bold + "Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Wither Skull", + new String[] + { + ChatColor.RESET + "Launch a deadly Wither Skull forwards.", + })); + + UtilInv.Update(player); + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); + //Disguise DisguiseSkeleton disguise = new DisguiseSkeleton(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWolf.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWolf.java index ae5b4985c..0dab083e6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWolf.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitWolf.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseWolf; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -40,8 +41,10 @@ public class KitWolf extends SmashKit } @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Cub Tackle", new String[] @@ -69,11 +72,23 @@ public class KitWolf extends SmashKit { ChatColor.RESET + "When you attack someone, you receive", ChatColor.RESET + "+1 Damage for 3 seconds. Bonus damage", - ChatColor.RESET + "stacks from multiple hits..", + ChatColor.RESET + "stacks from multiple hits.", })); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); + } + + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguiseWolf disguise = new DisguiseWolf(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitZombie.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitZombie.java index b1aa0c66d..480c23c3c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitZombie.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitZombie.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; import mineplex.core.disguise.disguises.DisguiseZombie; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; @@ -48,10 +49,12 @@ public class KitZombie extends SmashKit new ItemStack(Material.BOW), "Night of the Living Dead", 0, Sound.AMBIENCE_CAVE); } - + @Override - public void GiveItems(Player player) + public void giveCoreItems(Player player) { + UtilInv.Clear(player); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Deaths Grasp", new String[] @@ -79,9 +82,31 @@ public class KitZombie extends SmashKit ChatColor.RESET + "who are airborne from Deaths Grasp.", ChatColor.RESET + "", })); + + if (Manager.GetGame().GetState() == GameState.Recruit) + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte)0, 1, + C.cYellow + C.Bold + "Smash Crystal" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Night of the Living Dead", + new String[] + { + ChatColor.RESET + "Cast the world into darkness as hundreds", + ChatColor.RESET + "of undead minions sprout up from the ground", + ChatColor.RESET + "to attack your enemies.", + })); player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE)); player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS)); + } + + @Override + public void giveSuperItems(Player player) + { + + } + + @Override + public void GiveItems(Player player) + { + giveCoreItems(player); //Disguise DisguiseZombie disguise = new DisguiseZombie(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesTeams.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesTeams.java index 9f1719883..2a34585ed 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesTeams.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGamesTeams.java @@ -121,12 +121,14 @@ public class SurvivalGamesTeams extends TeamGame new KitKnight(manager), new KitArcher(manager), - //new KitBrawler(manager), + new KitBrawler(manager), - //new KitAssassin(manager), + new KitAssassin(manager), new KitBeastmaster(manager), - //new KitBomber(manager), - //new KitNecromancer(manager) + new KitBomber(manager), + //new KitNecromancer(manager), + + new KitHorseman(manager) }, new String[] @@ -170,6 +172,8 @@ public class SurvivalGamesTeams extends TeamGame this.CompassEnabled = false; //XXX this.InventoryClick = true; + this.InventoryOpenBlock = true; + this.InventoryOpenChest = true; //Blocks this.BlockBreakAllow.add(46); //TNT @@ -1377,6 +1381,9 @@ public class SurvivalGamesTeams extends TeamGame if (other.isSneaking()) continue; + + if (GetTeam(player).equals(GetTeam(other))) + continue; double dist = UtilMath.offset(player, other); @@ -1395,11 +1402,10 @@ public class SurvivalGamesTeams extends TeamGame { ItemStack stack = player.getInventory().getItem(i); - ItemMeta itemMeta = stack.getItemMeta(); itemMeta.setDisplayName( - " " + C.cWhite + C.Bold + "Nearest Player: " + C.cYellow + target.getName() + - " " + C.cWhite + C.Bold + "Distance: " + C.cYellow + UtilMath.trim(1, bestDist)); + " " + C.cWhite + C.Bold + "Nearest Player: " + GetTeam(target).GetColor() + target.getName() + + " " + C.cWhite + C.Bold + "Distance: " + GetTeam(target).GetColor() + UtilMath.trim(1, bestDist)); stack.setItemMeta(itemMeta); player.getInventory().setItem(i, stack); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/AbbreviatedKit.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/AbbreviatedKit.java new file mode 100644 index 000000000..a3ca2e151 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/AbbreviatedKit.java @@ -0,0 +1,59 @@ +package nautilus.game.arcade.kit; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilPlayer; +import nautilus.game.arcade.ArcadeFormat; +import nautilus.game.arcade.ArcadeManager; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public abstract class AbbreviatedKit extends Kit +{ + public AbbreviatedKit(ArcadeManager manager, String name, + KitAvailability kitAvailability, String[] kitDesc, Perk[] kitPerks, + EntityType entityType, ItemStack itemInHand) + { + super(manager, name, kitAvailability, 3000, kitDesc, kitPerks, entityType, itemInHand); + } + + public AbbreviatedKit(ArcadeManager manager, String name, + KitAvailability kitAvailability, int cost, String[] kitDesc, Perk[] kitPerks, + EntityType entityType, ItemStack itemInHand) + { + super(manager, name, kitAvailability, cost, kitDesc, kitPerks, entityType, itemInHand); + } + + @Override + public void DisplayDesc(Player player) + { + for (int i=0 ; i<3 ; i++) + UtilPlayer.message(player, ""); + + UtilPlayer.message(player, ArcadeFormat.Line); + + UtilPlayer.message(player, "§aKit - §f§l" + GetName()); + + //Desc + for (String line : GetDesc()) + { + UtilPlayer.message(player, C.cGray + " " + line); + } + + //Perk Descs + for (Perk perk : GetPerks()) + { + if (!perk.IsVisible()) + continue; + + for (String line : perk.GetDesc()) + { + UtilPlayer.message(player, C.cGray + " " + line); + } + } + + UtilPlayer.message(player, ArcadeFormat.Line); + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashKit.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashKit.java index c3c54fbb2..889cd6256 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashKit.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/SmashKit.java @@ -93,20 +93,30 @@ public abstract class SmashKit extends Kit @EventHandler public void triggerSuper(PlayerInteractEvent event) { + if (!Manager.GetGame().IsLive()) + return; + if (!HasKit(event.getPlayer())) return; if (!UtilGear.isMat(event.getItem(), Material.NETHER_STAR)) return; + if (!Recharge.Instance.use(event.getPlayer(), _superName, 500, true, false)) + return; + UtilInv.remove(event.getPlayer(), Material.NETHER_STAR, (byte)0, 1); activateSuper(event.getPlayer()); //Inform + Effect event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), _superSound, 20f, 1f); - Manager.GetGame().Announce(C.Bold + event.getPlayer().getName() + " activated " + C.cGreen + C.Bold + _superName + ChatColor.RESET + C.Bold + "!"); - UtilTextMiddle.display("Smash Crystal", event.getPlayer().getName() + " used " + C.cGreen + _superName, 5, 50, 5, UtilServer.getPlayers()); + + if (Recharge.Instance.use(event.getPlayer(), _superName + " Announce", 20000, false, false)) + { + Manager.GetGame().Announce(C.Bold + event.getPlayer().getName() + " activated " + C.cGreen + C.Bold + _superName + ChatColor.RESET + C.Bold + "!"); + UtilTextMiddle.display("Smash Crystal", event.getPlayer().getName() + " used " + C.cGreen + _superName, 5, 50, 5, UtilServer.getPlayers()); + } } @EventHandler @@ -129,8 +139,8 @@ public abstract class SmashKit extends Kit @EventHandler public void deathSuper(PlayerDeathEvent event) { - _superActive.remove(event.getEntity()); - deactivateSuper(event.getEntity()); + if (_superActive.remove(event.getEntity()) != null) + deactivateSuper(event.getEntity()); } public void activateSuper(Player player) @@ -151,6 +161,9 @@ public abstract class SmashKit extends Kit if (perk instanceof SmashPerk) ((SmashPerk)perk).addSuperActive(player); + //Items + giveSuperItems(player); + //Custom activateSuperCustom(player); @@ -173,6 +186,9 @@ public abstract class SmashKit extends Kit if (perk instanceof SmashPerk) ((SmashPerk)perk).removeSuperActive(player); + //Items + giveCoreItems(player); + //Custom deactivateSuperCustom(player); } @@ -206,4 +222,7 @@ public abstract class SmashKit extends Kit { _superCharges = charges; } + + public abstract void giveCoreItems(Player player); + public abstract void giveSuperItems(Player player); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlockToss.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlockToss.java index 9b87450af..845c49f4d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlockToss.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlockToss.java @@ -90,7 +90,8 @@ public class PerkBlockToss extends SmashPerk implements IThrown byte data = grab.getData(); //Remove Block - Manager.GetBlockRestore().Add(event.getClickedBlock(), 0, (byte)0, 10000); + //Manager.GetBlockRestore().Add(event.getClickedBlock(), 0, (byte)0, 10000); + event.getClickedBlock().getWorld().playEffect(event.getClickedBlock().getLocation(), Effect.STEP_SOUND, event.getClickedBlock().getType()); _hold.put(player, new BlockTossData(id, data)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneRush.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneRush.java index 93c21a368..1686d476b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneRush.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBoneRush.java @@ -123,7 +123,7 @@ public class PerkBoneRush extends SmashPerk implements IThrown { Item bone = player.getWorld().dropItem(player.getLocation().add(Math.random()*5 - 2.5, Math.random()*3, Math.random()*5 - 2.5), new ItemStack(Material.BONE)); UtilAction.velocity(bone, dir, 0.6 + 0.3 * Math.random(), false, 0, 0.1 + Math.random() * 0.05, 0.3, false); - Manager.GetProjectile().AddThrow(bone, player, this, 40, true, true, true, false, 1d); + Manager.GetProjectile().AddThrow(bone, player, this, -1, true, true, true, false, 1d); } } } @@ -134,7 +134,7 @@ public class PerkBoneRush extends SmashPerk implements IThrown if (event.GetReason() != null && event.GetReason().contains(GetName())) event.AddKnockback(GetName(), 10); - if (event.GetReason() != null && event.GetReason().contains("Eternal Rage")) + if (event.GetReason() != null && event.GetReason().contains("Bone Storm")) event.AddKnockback(GetName(), 15); } @@ -153,8 +153,8 @@ public class PerkBoneRush extends SmashPerk implements IThrown if (isSuperActive(damager)) { - damage = 1.5; - reason = "Eternal Rage"; + damage = 1.4; + reason = "Bone Storm"; } //Damage Event diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java index 11d0ea3dd..3bfdd39b7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeadlyBones.java @@ -1,21 +1,33 @@ package nautilus.game.arcade.kit.perks; +import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.kit.SmashPerk; public class PerkDeadlyBones extends SmashPerk { - private HashSet _active = new HashSet(); + private HashMap _active = new HashMap(); public PerkDeadlyBones() { @@ -41,7 +53,48 @@ public class PerkDeadlyBones extends SmashPerk if (!Recharge.Instance.use(player, GetName(), 400, true, true)) return; - _active.add(player.getWorld().dropItemNaturally(player.getLocation().add(0, 0.5, 0), ItemStackFactory.Instance.CreateStack(Material.BONE, (byte)0, 1, "Explosive Bone " + System.currentTimeMillis()))); + _active.put(player.getWorld().dropItemNaturally(player.getLocation().add(0, 0.5, 0), + ItemStackFactory.Instance.CreateStack(Material.BONE, (byte)0, 1, "Explosive Bone " + System.currentTimeMillis())), player); + } + + @EventHandler + public void update(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + Iterator itemIter = _active.keySet().iterator(); + + while (itemIter.hasNext()) + { + Item item = itemIter.next(); + + //Not Ready + if (item.isValid() && item.getTicksLived() < 60) + continue; + + //Effect + UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, item.getLocation(), 0, 0, 0, 0, 1); + item.getWorld().playSound(item.getLocation(), Sound.EXPLODE, 0.8f, 1.4f); + + Player player = _active.get(item); + + //Damage + HashMap targets = UtilEnt.getInRadius(player.getLocation(), 4); + for (LivingEntity cur : targets.keySet()) + { + if (cur.equals(player)) + continue; + + Manager.GetDamage().NewDamageEvent(cur, player, null, + DamageCause.CUSTOM, 4 * targets.get(cur) + 0.5, true, true, false, + player.getName(), GetName()); + } + + //Remove + item.remove(); + itemIter.remove(); + } } @EventHandler @@ -50,6 +103,6 @@ public class PerkDeadlyBones extends SmashPerk if (event.GetReason() == null || !event.GetReason().contains(GetName())) return; - event.AddKnockback(GetName(), 1.5); + event.AddKnockback(GetName(), 3); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEarthquake.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEarthquake.java index 27591dd05..36fc5f6ed 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEarthquake.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEarthquake.java @@ -61,7 +61,7 @@ public class PerkEarthquake extends SmashPerk EarthquakeData data = quakeIter.next(); //Expire - if (UtilTime.elapsed(data.Time, 18000)) + if (UtilTime.elapsed(data.Time, 16000)) { quakeIter.remove(); continue; @@ -78,7 +78,7 @@ public class PerkEarthquake extends SmashPerk { //Damage Event Manager.GetDamage().NewDamageEvent(player, data.Player, null, - DamageCause.CUSTOM, 1 + 4 * Math.random(), false, false, false, + DamageCause.CUSTOM, 1 + 2 * Math.random(), false, false, false, player.getName(), GetName()); //Velocity @@ -90,7 +90,7 @@ public class PerkEarthquake extends SmashPerk //Effect for (Block block : UtilBlock.getInRadius(player.getLocation(), 5).keySet()) { - if (Math.random() < 0.95) + if (Math.random() < 0.98) continue; if (!UtilBlock.solid(block)) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java index abed5f7df..4f8c1f86b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkEndermanDragon.java @@ -4,11 +4,9 @@ import java.util.HashMap; import org.bukkit.Color; import org.bukkit.Location; -import org.bukkit.Sound; import org.bukkit.FireworkEffect.Type; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEnderDragon; import org.bukkit.entity.EnderDragon; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -18,6 +16,11 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilFirework; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.kit.SmashPerk; @@ -37,10 +40,12 @@ public class PerkEndermanDragon extends SmashPerk public void addSuperCustom(Player player) { Manager.GetGame().CreatureAllowOverride = true; - EnderDragon dragon = player.getWorld().spawn(player.getLocation().add(0, 20, 0), EnderDragon.class); + EnderDragon dragon = player.getWorld().spawn(player.getLocation().add(0, 5, 0), EnderDragon.class); UtilEnt.Vegetate(dragon); Manager.GetGame().CreatureAllowOverride = false; + dragon.setCustomName(C.cYellow + player.getName() + "'s Dragon"); + UtilFirework.playFirework(dragon.getLocation(), Type.BALL_LARGE, Color.BLACK, true, true); _dragons.put(player, dragon); @@ -60,6 +65,9 @@ public class PerkEndermanDragon extends SmashPerk @EventHandler public void update(UpdateEvent event) { + if (event.getType() != UpdateType.TICK) + return; + for (Player player : _dragons.keySet()) { EnderDragon dragon = _dragons.get(player); @@ -107,7 +115,7 @@ public class PerkEndermanDragon extends SmashPerk } @EventHandler(priority = EventPriority.LOW) - public void damageTransfer(CustomDamageEvent event) + public void dragonDamagerCancel(CustomDamageEvent event) { if (event.GetDamagerEntity(false) == null) return; @@ -115,13 +123,44 @@ public class PerkEndermanDragon extends SmashPerk if (!_dragons.values().contains(event.GetDamagerEntity(false))) return; - if (event.GetDamagerEntity(false).getPassenger() == null) + event.SetCancelled("Dragon Damage Cancel"); + } + + @EventHandler + public void updateDamageAoe(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) return; - if (!(event.GetDamagerEntity(false).getPassenger() instanceof LivingEntity)) + for (Player player : _dragons.keySet()) + { + EnderDragon dragon = _dragons.get(player); + + UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, dragon.getLocation(), 0, 0, 0, 0, 1); + + for (Player other : Manager.GetGame().GetPlayers(true)) + { + if (other.equals(player)) + continue; + + if (UtilMath.offset(dragon.getLocation().add(0, 4, 0), other.getLocation()) < 6 && Recharge.Instance.use(other, "Hit By Dragon", 1000, false, false)) + { + //Damage Event + Manager.GetDamage().NewDamageEvent(other, player, null, + DamageCause.CUSTOM, 20, true, true, false, + player.getName(), GetName()); + } + } + } + } + + @EventHandler + public void knockback(CustomDamageEvent event) + { + if (event.GetReason() == null || !event.GetReason().contains(GetName())) return; - - event.SetDamager((LivingEntity)event.GetDamagerEntity(false).getPassenger()); + + event.AddKnockback(GetName(), 4); } @EventHandler(priority = EventPriority.LOW) 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 220dc3271..a3653f8ce 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 @@ -38,7 +38,7 @@ public class PerkKnockback extends Perk if (!Manager.IsAlive(damager)) return; - + event.SetKnockback(false); if (!Recharge.Instance.use(damager, "KB " + UtilEnt.getName(event.GetDamageeEntity()), 400, false, false)) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBomb.java index 0e6ae1c6a..72a756cc7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBomb.java @@ -29,9 +29,9 @@ import mineplex.core.disguise.disguises.DisguisePigZombie; 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.SmashPerk; -public class PerkPigBaconBomb extends Perk +public class PerkPigBaconBomb extends SmashPerk { private WeakHashMap> _pigs = new WeakHashMap>(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBounce.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBounce.java index 7f3d55213..ba0278d67 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBounce.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigBaconBounce.java @@ -1,8 +1,5 @@ package nautilus.game.arcade.kit.perks; -import java.util.HashSet; -import java.util.WeakHashMap; - import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; @@ -34,9 +31,9 @@ import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; import mineplex.core.recharge.Recharge; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkPigBaconBounce extends Perk implements IThrown +public class PerkPigBaconBounce extends SmashPerk implements IThrown { public PerkPigBaconBounce() { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigZombie.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigZombie.java index 336be4ead..f12182cf1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigZombie.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkPigZombie.java @@ -17,9 +17,9 @@ import mineplex.core.disguise.disguises.DisguisePigZombie; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.SmashPerk; -public class PerkPigZombie extends Perk +public class PerkPigZombie extends SmashPerk { public HashSet _active = new HashSet(); @@ -48,7 +48,7 @@ public class PerkPigZombie extends Perk { Manager.GetCondition().Factory().Speed("Pig Zombie", player, player, 0.9, 0, false, false, false); - if (player.getHealth() < 10) + if (player.getHealth() < 10 || isSuperActive(player)) continue; //Deactivate @@ -86,7 +86,7 @@ public class PerkPigZombie extends Perk //Not Active else { - if (player.getHealth() <= 0 || player.getHealth() > 6) + if (player.getHealth() <= 0 || (!isSuperActive(player) && player.getHealth() > 6)) continue; //Activate diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java index 47434ab3a..20ce38db4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSheepHoming.java @@ -33,45 +33,13 @@ public class PerkSheepHoming extends SmashPerk @Override public void addSuperCustom(Player player) - { - ArrayList best3 = new ArrayList(); - - //Find Targets - for (int i=0 ; i<3 ; i++) - { - Player bestTarget = null; - double bestDist = 0; - - for (Player target : Manager.GetGame().GetPlayers(true)) - { - if (target.equals(player)) - continue; - - if (best3.contains(target)) - continue; - - double dist = UtilMath.offset(player, target); - - if (bestTarget == null || dist < bestDist) - { - bestTarget = target; - bestDist = dist; - } - } - - if (bestTarget != null) - { - best3.add(bestTarget); - } - else - { - break; - } - } - + { //Fire Sheep - for (Player target : best3) + for (Player target : Manager.GetGame().GetPlayers(true)) { + if (target.equals(player)) + continue; + Manager.GetGame().CreatureAllowOverride = true; Sheep sheep = player.getWorld().spawn(player.getEyeLocation(), Sheep.class); Manager.GetGame().CreatureAllowOverride = false; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java index 8246bf74c..182864956 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSnowTurret.java @@ -35,7 +35,7 @@ import net.minecraft.server.v1_7_R4.EntityInsentient; public class PerkSnowTurret extends SmashPerk { private WeakHashMap _snowball = new WeakHashMap(); - + private HashMap _turret = new HashMap(); public PerkSnowTurret() @@ -54,10 +54,10 @@ public class PerkSnowTurret extends SmashPerk UtilEnt.Vegetate(ent); UtilEnt.ghost(ent, true, false); - + ent.setMaxHealth(40); ent.setHealth(40); - + UtilAction.velocity(ent, player.getLocation().getDirection(), 1, false, 0, 0.2, 1, false); _turret.put(ent, player); @@ -83,29 +83,29 @@ public class PerkSnowTurret extends SmashPerk snowman.remove(); continue; } - + Player target = UtilPlayer.getClosest(snowman.getLocation(), player); if (target == null) continue; - + snowman.setTarget(target); - + //Snowball double mult = 1 + Math.min(3, UtilMath.offset(snowman, target)/16); double heightBonus = UtilMath.offset(snowman, target)/140; Vector rand = new Vector((Math.random()-0.5)*0.2,(Math.random()-0.5)*0.2,(Math.random()-0.5)*0.2); - + _snowball.put(snowman.launchProjectile(Snowball.class, UtilAlg.getTrajectory(snowman.getLocation(), target.getLocation()).multiply(mult).add(rand).add(new Vector(0,heightBonus,0))), player); - + //Look dir UtilEnt.CreatureMoveFast(snowman, target.getLocation(), 0.1f); - + //Sound snowman.getWorld().playSound(snowman.getLocation(), Sound.STEP_SNOW, 0.6f, 1f); } } - + @EventHandler(priority = EventPriority.LOW) public void snowballHit(CustomDamageEvent event) { @@ -125,30 +125,37 @@ public class PerkSnowTurret extends SmashPerk if (damagee == null) return; event.SetCancelled("Turret"); - + + if (damagee.equals(_snowball.get(proj))) + return; + damagee.setVelocity(proj.getVelocity().multiply(0.3).add(new Vector(0, 0.3, 0))); //Damage Event - if (damagee instanceof Player) - if (Recharge.Instance.use((Player)damagee, GetName() + " Hit", 250, false, false)) - Manager.GetDamage().NewDamageEvent(damagee, _snowball.get(proj), null, - DamageCause.PROJECTILE, 2, false, true, false, - UtilEnt.getName(_snowball.get(proj)), GetName()); + if (!(damagee instanceof LivingEntity)) + return; + + if (!Recharge.Instance.use((Player)damagee, GetName() + " Hit", 250, false, false)) + return; + + Manager.GetDamage().NewDamageEvent(damagee, _snowball.get(proj), null, + DamageCause.PROJECTILE, 2, false, true, false, + UtilEnt.getName(_snowball.get(proj)), GetName()); } - + @EventHandler public void damageCancel(CustomDamageEvent event) { if (_turret.containsKey(event.GetDamageeEntity())) event.SetCancelled("Turret Immunity"); } - + @EventHandler public void clean(ProjectileHitEvent event) { _snowball.remove(event.getEntity()); } - + @EventHandler public void knockback(CustomDamageEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java index 55fd9fe09..83c9de4c0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkStormSquid.java @@ -66,7 +66,7 @@ public class PerkStormSquid extends SmashPerk final Location loc = block.getLocation().add(0.5, 0.5, 0.5); - if (!Recharge.Instance.use(player, GetName() + " Strike", 2000, false, false)) + if (!Recharge.Instance.use(player, GetName() + " Strike", 1600, false, false)) return; //Warning From 505dcc1e8ec10084cabce7e5063f7d5363107d87 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 30 Jan 2015 13:46:07 +1300 Subject: [PATCH 18/18] Add friends gui, deprecate the old chatbased friends display --- .../mineplex/core/common/util/UtilInv.java | 5 + .../mineplex/core/friend/FriendManager.java | 653 +++++++++--------- .../core/friend/command/AddFriend.java | 52 +- .../mineplex/core/friend/data/FriendData.java | 34 +- .../core/friend/data/FriendRepository.java | 4 +- .../core/friend/data/FriendStatus.java | 13 +- .../core/friend/ui/AddFriendPage.java | 186 +++++ .../mineplex/core/friend/ui/FriendPage.java | 36 + .../mineplex/core/friend/ui/FriendsGUI.java | 551 +++++++++++++++ .../mineplex/core/itemstack/ItemLayout.java | 8 + .../Mineplex.Hub/src/mineplex/hub/Hub.java | 2 +- .../src/nautilus/game/arcade/Arcade.java | 2 +- 12 files changed, 1199 insertions(+), 347 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/friend/ui/AddFriendPage.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendPage.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendsGUI.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilInv.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilInv.java index 628df862a..ecff1ccc3 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilInv.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilInv.java @@ -48,6 +48,11 @@ public class UtilInv itemStack.removeEnchantment(_enchantment); } + public static DullEnchantment getDullEnchantment() + { + return _enchantment; + } + @SuppressWarnings("deprecation") public static boolean insert(Player player, ItemStack stack) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/friend/FriendManager.java b/Plugins/Mineplex.Core/src/mineplex/core/friend/FriendManager.java index b9a5057e2..578719c4f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/friend/FriendManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/friend/FriendManager.java @@ -28,327 +28,360 @@ import mineplex.core.friend.command.DeleteFriend; import mineplex.core.friend.data.FriendData; import mineplex.core.friend.data.FriendRepository; import mineplex.core.friend.data.FriendStatus; +import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; public class FriendManager extends MiniDbClientPlugin { - private static FriendSorter _friendSorter = new FriendSorter(); - - private PreferencesManager _preferenceManager; - private FriendRepository _repository; - - public FriendManager(JavaPlugin plugin, CoreClientManager clientManager, PreferencesManager preferences) - { - super("Friends", plugin, clientManager); - - _preferenceManager = preferences; - _repository = new FriendRepository(plugin); - } - - @Override - public void AddCommands() - { - addCommand(new AddFriend(this)); - addCommand(new DeleteFriend(this)); - } - - @Override - protected FriendData AddPlayer(String player) - { - return new FriendData(); - } + private static FriendSorter _friendSorter = new FriendSorter(); - @EventHandler - public void updateFriends(UpdateEvent event) - { - if (event.getType() != UpdateType.SLOW || Bukkit.getOnlinePlayers().size() == 0) - return; - - final Player[] onlinePlayers = UtilServer.getPlayers(); - - Bukkit.getServer().getScheduler().runTaskAsynchronously(_plugin, new Runnable() - { - public void run() - { - final NautHashMap newData = _repository.getFriendsForAll(onlinePlayers); - - Bukkit.getServer().getScheduler().runTask(_plugin, new Runnable() - { - public void run() - { - for (Player player : Bukkit.getOnlinePlayers()) - { - if (newData.containsKey(player.getUniqueId().toString())) - { - Get(player).Friends = newData.get(player.getUniqueId().toString()).Friends; - } - else - { - Get(player).Friends.clear(); - } - } - } - }); - } - }); - } + private PreferencesManager _preferenceManager; + private FriendRepository _repository; + private Portal _portal; - public void addFriend(final Player caller, final String name) - { - boolean update = false; - for (FriendStatus status : Get(caller).Friends) - { - if (status.Name.equalsIgnoreCase(name)) - { - if (status.Status == FriendStatusType.Pending || status.Status == FriendStatusType.Blocked) - { - update = true; - break; - } - else if (status.Status == FriendStatusType.Denied) - { - caller.sendMessage(F.main(getName(), ChatColor.GREEN + name + ChatColor.GRAY + " has denied your friend request.")); - return; - } - else if (status.Status == FriendStatusType.Accepted) - { - caller.sendMessage(F.main(getName(), "You are already friends with " + ChatColor.GREEN + name)); - return; - } - else if (status.Status == FriendStatusType.Sent) - { - caller.sendMessage(F.main(getName(), ChatColor.GREEN + name + ChatColor.GRAY + " has yet to respond to your friend request.")); - return; - } - } - } - - final boolean updateFinal = update; - - Bukkit.getServer().getScheduler().runTaskAsynchronously(GetPlugin(), new Runnable() - { - public void run() - { - if (updateFinal) - { - _repository.updateFriend(caller.getName(), name, "Accepted"); - _repository.updateFriend(name, caller.getName(), "Accepted"); - - Bukkit.getServer().getScheduler().runTask(_plugin, new Runnable() - { - public void run() - { - for (Iterator statusIterator = Get(caller).Friends.iterator(); statusIterator.hasNext();) - { - FriendStatus status = statusIterator.next(); - - if (status.Name.equalsIgnoreCase(name)) - { - status.Status = FriendStatusType.Accepted; - break; - } - } - } - }); - } - else - { - _repository.addFriend(caller, name); - - Bukkit.getServer().getScheduler().runTask(_plugin, new Runnable() - { - public void run() - { - for (Iterator statusIterator = Get(caller).Friends.iterator(); statusIterator.hasNext();) - { - FriendStatus status = statusIterator.next(); - - if (status.Name.equalsIgnoreCase(name)) - { - status.Status = FriendStatusType.Sent; - break; - } - } - } - }); - } - - Bukkit.getServer().getScheduler().runTask(_plugin, new Runnable() - { - public void run() - { - if (updateFinal) - caller.sendMessage(F.main(getName(), "You and " + ChatColor.GREEN + name + ChatColor.GRAY + " are now friends!")); - else - caller.sendMessage(F.main(getName(), "Added " + ChatColor.GREEN + name + ChatColor.GRAY + " to your friends list!")); - } - }); - } - }); - } + public FriendManager(JavaPlugin plugin, CoreClientManager clientManager, PreferencesManager preferences, Portal portal) + { + super("Friends", plugin, clientManager); - public void removeFriend(final Player caller, final String name) - { - Bukkit.getServer().getScheduler().runTaskAsynchronously(GetPlugin(), new Runnable() - { - public void run() - { - _repository.removeFriend(caller.getName(), name); - _repository.removeFriend(name, caller.getName()); - - Bukkit.getServer().getScheduler().runTask(_plugin, new Runnable() - { - public void run() - { - for (Iterator statusIterator = Get(caller).Friends.iterator(); statusIterator.hasNext();) - { - FriendStatus status = statusIterator.next(); - - if (status.Name.equalsIgnoreCase(name)) - { - status.Status = FriendStatusType.Blocked; - break; - } - } - - caller.sendMessage(F.main(getName(), "Deleted " + ChatColor.GREEN + name + ChatColor.GRAY + " from your friends list!")); - } - }); - } - }); - } + _preferenceManager = preferences; + _repository = new FriendRepository(plugin); + _portal = portal; + } + + public Portal getPortal() + { + return _portal; + } - public void showFriends(Player caller) - { - boolean isStaff = ClientManager.Get(caller).GetRank().Has(Rank.HELPER); - boolean gotAFriend = false; - List friendStatuses = Get(caller).Friends; - Collections.sort(friendStatuses, _friendSorter); - - caller.sendMessage(C.cAqua + C.Strike + "======================[" + ChatColor.RESET + C.cWhite + C.Bold + "Friends" + ChatColor.RESET + C.cAqua + C.Strike + "]======================"); - - ArrayList sentLines = new ArrayList(); - ArrayList pendingLines = new ArrayList(); - ArrayList onlineLines = new ArrayList(); - ArrayList offlineLines = new ArrayList(); - - for (FriendStatus friend : friendStatuses) - { - if (friend.Status == FriendStatusType.Blocked || friend.Status == FriendStatusType.Denied) - continue; - - if (!_preferenceManager.Get(caller).PendingFriendRequests && friend.Status == FriendStatusType.Pending) - continue; - - gotAFriend = true; - - ChildJsonMessage message = new JsonMessage("").color("white").extra("").color("white"); + @Override + public void AddCommands() + { + addCommand(new AddFriend(this)); + addCommand(new DeleteFriend(this)); + } - if (friend.Status == FriendStatusType.Accepted) - { - //Online Friend - if (friend.Online) - { - if (friend.ServerName.contains("STAFF") || friend.ServerName.contains("CUST")) - { - if (isStaff && friend.ServerName.contains("STAFF")) - message.add("Teleport").color("green").bold().click("run_command", "/server " + friend.ServerName).hover("show_text", "Teleport to " + friend.Name + "'s server."); - else - message.add("No Teleport").color("yellow").bold(); - } - else - message.add("Teleport").color("green").bold().click("run_command", "/server " + friend.ServerName).hover("show_text", "Teleport to " + friend.Name + "'s server."); - - message.add(" - ").color("white"); - message.add("Delete").color("red").bold().click("run_command", "/unfriend " + friend.Name).hover("show_text", "Remove " + friend.Name + " from your friends list."); - message.add(" - ").color("white"); - message.add(friend.Name).color(friend.Online ? "green" : "gray"); - message.add(" - ").color("white"); - - if (friend.ServerName.contains("STAFF") || friend.ServerName.contains("CUST")) - { - if (isStaff && friend.ServerName.contains("STAFF")) - message.add(friend.ServerName).color("dark_green"); - else - message.add("Private Staff Server").color("dark_green"); - } - else - message.add(friend.ServerName).color("dark_green"); - - onlineLines.add(message); - } - //Offline Friend - else - { - message.add("Delete").color("red").bold().click("run_command", "/unfriend " + friend.Name).hover("show_text", "Remove " + friend.Name + " from your friends list."); - message.add(" - ").color("white"); - message.add(friend.Name).color(friend.Online ? "green" : "gray"); - message.add(" - ").color("white"); - message.add("Offline for ").color("gray").add(UtilTime.MakeStr(friend.LastSeenOnline)).color("gray"); - - offlineLines.add(message); - } - } - //Pending - else if (friend.Status == FriendStatusType.Pending) - { - message.add("Accept").color("green").bold().click("run_command", "/friend " + friend.Name).hover("show_text", "Accept " + friend.Name + "'s friend request."); - message.add(" - ").color("white"); - message.add("Deny").color("red").bold().click("run_command", "/unfriend " + friend.Name).hover("show_text", "Deny " + friend.Name + "'s friend request."); - message.add(" - ").color("white"); - message.add(friend.Name + " Requested Friendship").color("gray"); - - pendingLines.add(message); - } - //Sent - else if (friend.Status == FriendStatusType.Sent) - { - message.add("Cancel").color("red").bold().click("run_command", "/unfriend " + friend.Name).hover("show_text", "Cancel friend request to " + friend.Name); - message.add(" - ").color("white"); - message.add(friend.Name + " Friendship Request").color("gray"); - - sentLines.add(message); - } - } - - //Send In Order - for (JsonMessage msg : sentLines) - msg.sendToPlayer(caller); - - for (JsonMessage msg : offlineLines) - msg.sendToPlayer(caller); - - for (JsonMessage msg : pendingLines) - msg.sendToPlayer(caller); - - for (JsonMessage msg : onlineLines) - msg.sendToPlayer(caller); - - if (!gotAFriend) - { - caller.sendMessage(" "); - caller.sendMessage("Welcome to your Friends List!"); - caller.sendMessage(" "); - caller.sendMessage("To add friends, type " + C.cGreen + "/friend "); - caller.sendMessage(" "); - caller.sendMessage("Type " + C.cGreen + "/friend" + ChatColor.RESET + " at any time to interact with your friends!"); - caller.sendMessage(" "); - } - - caller.sendMessage(C.cAqua + C.Strike + "====================================================="); - } + @Override + protected FriendData AddPlayer(String player) + { + return new FriendData(); + } - @Override - public void processLoginResultSet(String playerName, ResultSet resultSet) throws SQLException - { - Set(playerName, _repository.loadClientInformation(resultSet)); - } + @EventHandler + public void updateFriends(UpdateEvent event) + { + if (event.getType() != UpdateType.SLOW || Bukkit.getOnlinePlayers().size() == 0) + return; - @Override - public String getQuery(String uuid, String name) - { - return "SELECT tA.Name, status, serverName, tA.lastLogin, now() FROM accountFriend INNER Join accounts AS fA ON fA.uuid = uuidSource INNER JOIN accounts AS tA ON tA.uuid = uuidTarget LEFT JOIN playerMap ON tA.name = playerName WHERE uuidSource = '" + uuid + "';"; - } + final Player[] onlinePlayers = UtilServer.getPlayers(); + + Bukkit.getServer().getScheduler().runTaskAsynchronously(_plugin, new Runnable() + { + public void run() + { + final NautHashMap newData = _repository.getFriendsForAll(onlinePlayers); + + Bukkit.getServer().getScheduler().runTask(_plugin, new Runnable() + { + public void run() + { + for (Player player : Bukkit.getOnlinePlayers()) + { + if (newData.containsKey(player.getUniqueId().toString())) + { + Get(player).setFriends(newData.get(player.getUniqueId().toString()).getFriends()); + } + else + { + Get(player).getFriends().clear(); + } + } + } + }); + } + }); + } + + public void addFriend(final Player caller, final String name) + { + if (caller.getName().equalsIgnoreCase(name)) + { + caller.sendMessage(F.main(getName(), ChatColor.GRAY + + "You cannot add yourself as a friend")); + return; + } + + boolean update = false; + for (FriendStatus status : Get(caller).getFriends()) + { + if (status.Name.equalsIgnoreCase(name)) + { + if (status.Status == FriendStatusType.Pending || status.Status == FriendStatusType.Blocked) + { + update = true; + break; + } + else if (status.Status == FriendStatusType.Denied) + { + caller.sendMessage(F.main(getName(), ChatColor.GREEN + name + ChatColor.GRAY + + " has denied your friend request.")); + return; + } + else if (status.Status == FriendStatusType.Accepted) + { + caller.sendMessage(F.main(getName(), "You are already friends with " + ChatColor.GREEN + name)); + return; + } + else if (status.Status == FriendStatusType.Sent) + { + caller.sendMessage(F.main(getName(), ChatColor.GREEN + name + ChatColor.GRAY + + " has yet to respond to your friend request.")); + return; + } + } + } + + final boolean updateFinal = update; + + Bukkit.getServer().getScheduler().runTaskAsynchronously(GetPlugin(), new Runnable() + { + public void run() + { + if (updateFinal) + { + _repository.updateFriend(caller.getName(), name, "Accepted"); + _repository.updateFriend(name, caller.getName(), "Accepted"); + + Bukkit.getServer().getScheduler().runTask(_plugin, new Runnable() + { + public void run() + { + for (Iterator statusIterator = Get(caller).getFriends().iterator(); statusIterator + .hasNext();) + { + FriendStatus status = statusIterator.next(); + + if (status.Name.equalsIgnoreCase(name)) + { + status.Status = FriendStatusType.Accepted; + break; + } + } + } + }); + } + else + { + _repository.addFriend(caller, name); + + Bukkit.getServer().getScheduler().runTask(_plugin, new Runnable() + { + public void run() + { + for (Iterator statusIterator = Get(caller).getFriends().iterator(); statusIterator + .hasNext();) + { + FriendStatus status = statusIterator.next(); + + if (status.Name.equalsIgnoreCase(name)) + { + status.Status = FriendStatusType.Sent; + break; + } + } + } + }); + } + + Bukkit.getServer().getScheduler().runTask(_plugin, new Runnable() + { + public void run() + { + if (updateFinal) + caller.sendMessage(F.main(getName(), "You and " + ChatColor.GREEN + name + ChatColor.GRAY + + " are now friends!")); + else + caller.sendMessage(F.main(getName(), "Added " + ChatColor.GREEN + name + ChatColor.GRAY + + " to your friends list!")); + } + }); + } + }); + } + + public void removeFriend(final Player caller, final String name) + { + Bukkit.getServer().getScheduler().runTaskAsynchronously(GetPlugin(), new Runnable() + { + public void run() + { + _repository.removeFriend(caller.getName(), name); + _repository.removeFriend(name, caller.getName()); + + Bukkit.getServer().getScheduler().runTask(_plugin, new Runnable() + { + public void run() + { + for (Iterator statusIterator = Get(caller).getFriends().iterator(); statusIterator + .hasNext();) + { + FriendStatus status = statusIterator.next(); + + if (status.Name.equalsIgnoreCase(name)) + { + status.Status = FriendStatusType.Blocked; + break; + } + } + + caller.sendMessage(F.main(getName(), "Deleted " + ChatColor.GREEN + name + ChatColor.GRAY + + " from your friends list!")); + } + }); + } + }); + } + + @Deprecated + public void showFriends(Player caller) + { + boolean isStaff = ClientManager.Get(caller).GetRank().Has(Rank.HELPER); + boolean gotAFriend = false; + List friendStatuses = Get(caller).getFriends(); + Collections.sort(friendStatuses, _friendSorter); + + caller.sendMessage(C.cAqua + C.Strike + "======================[" + ChatColor.RESET + C.cWhite + C.Bold + "Friends" + + ChatColor.RESET + C.cAqua + C.Strike + "]======================"); + + ArrayList sentLines = new ArrayList(); + ArrayList pendingLines = new ArrayList(); + ArrayList onlineLines = new ArrayList(); + ArrayList offlineLines = new ArrayList(); + + for (FriendStatus friend : friendStatuses) + { + if (friend.Status == FriendStatusType.Blocked || friend.Status == FriendStatusType.Denied) + continue; + + if (!_preferenceManager.Get(caller).PendingFriendRequests && friend.Status == FriendStatusType.Pending) + continue; + + gotAFriend = true; + + ChildJsonMessage message = new JsonMessage("").color("white").extra("").color("white"); + + if (friend.Status == FriendStatusType.Accepted) + { + // Online Friend + if (friend.Online) + { + if (friend.ServerName.contains("STAFF") || friend.ServerName.contains("CUST")) + { + if (isStaff && friend.ServerName.contains("STAFF")) + message.add("Teleport").color("green").bold().click("run_command", "/server " + friend.ServerName) + .hover("show_text", "Teleport to " + friend.Name + "'s server."); + else + message.add("No Teleport").color("yellow").bold(); + } + else + message.add("Teleport").color("green").bold().click("run_command", "/server " + friend.ServerName) + .hover("show_text", "Teleport to " + friend.Name + "'s server."); + + message.add(" - ").color("white"); + message.add("Delete").color("red").bold().click("run_command", "/unfriend " + friend.Name) + .hover("show_text", "Remove " + friend.Name + " from your friends list."); + message.add(" - ").color("white"); + message.add(friend.Name).color(friend.Online ? "green" : "gray"); + message.add(" - ").color("white"); + + if (friend.ServerName.contains("STAFF") || friend.ServerName.contains("CUST")) + { + if (isStaff && friend.ServerName.contains("STAFF")) + message.add(friend.ServerName).color("dark_green"); + else + message.add("Private Staff Server").color("dark_green"); + } + else + message.add(friend.ServerName).color("dark_green"); + + onlineLines.add(message); + } + // Offline Friend + else + { + message.add("Delete").color("red").bold().click("run_command", "/unfriend " + friend.Name) + .hover("show_text", "Remove " + friend.Name + " from your friends list."); + message.add(" - ").color("white"); + message.add(friend.Name).color(friend.Online ? "green" : "gray"); + message.add(" - ").color("white"); + message.add("Offline for ").color("gray").add(UtilTime.MakeStr(friend.LastSeenOnline)).color("gray"); + + offlineLines.add(message); + } + } + // Pending + else if (friend.Status == FriendStatusType.Pending) + { + message.add("Accept").color("green").bold().click("run_command", "/friend " + friend.Name) + .hover("show_text", "Accept " + friend.Name + "'s friend request."); + message.add(" - ").color("white"); + message.add("Deny").color("red").bold().click("run_command", "/unfriend " + friend.Name) + .hover("show_text", "Deny " + friend.Name + "'s friend request."); + message.add(" - ").color("white"); + message.add(friend.Name + " Requested Friendship").color("gray"); + + pendingLines.add(message); + } + // Sent + else if (friend.Status == FriendStatusType.Sent) + { + message.add("Cancel").color("red").bold().click("run_command", "/unfriend " + friend.Name) + .hover("show_text", "Cancel friend request to " + friend.Name); + message.add(" - ").color("white"); + message.add(friend.Name + " Friendship Request").color("gray"); + + sentLines.add(message); + } + } + + // Send In Order + for (JsonMessage msg : sentLines) + msg.sendToPlayer(caller); + + for (JsonMessage msg : offlineLines) + msg.sendToPlayer(caller); + + for (JsonMessage msg : pendingLines) + msg.sendToPlayer(caller); + + for (JsonMessage msg : onlineLines) + msg.sendToPlayer(caller); + + if (!gotAFriend) + { + caller.sendMessage(" "); + caller.sendMessage("Welcome to your Friends List!"); + caller.sendMessage(" "); + caller.sendMessage("To add friends, type " + C.cGreen + "/friend "); + caller.sendMessage(" "); + caller.sendMessage("Type " + C.cGreen + "/friend" + ChatColor.RESET + " at any time to interact with your friends!"); + caller.sendMessage(" "); + } + + caller.sendMessage(C.cAqua + C.Strike + "====================================================="); + } + + @Override + public void processLoginResultSet(String playerName, ResultSet resultSet) throws SQLException + { + Set(playerName, _repository.loadClientInformation(resultSet)); + } + + @Override + public String getQuery(String uuid, String name) + { + return "SELECT tA.Name, status, serverName, tA.lastLogin, now() FROM accountFriend INNER Join accounts AS fA ON fA.uuid = uuidSource INNER JOIN accounts AS tA ON tA.uuid = uuidTarget LEFT JOIN playerMap ON tA.name = playerName WHERE uuidSource = '" + + uuid + "';"; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/friend/command/AddFriend.java b/Plugins/Mineplex.Core/src/mineplex/core/friend/command/AddFriend.java index 46c40775c..bb6f3aa47 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/friend/command/AddFriend.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/friend/command/AddFriend.java @@ -5,35 +5,35 @@ import org.bukkit.entity.Player; import mineplex.core.command.CommandBase; import mineplex.core.common.Rank; import mineplex.core.common.util.Callback; -import mineplex.core.common.util.F; import mineplex.core.friend.FriendManager; +import mineplex.core.friend.ui.FriendsGUI; public class AddFriend extends CommandBase { - public AddFriend(FriendManager plugin) - { - super(plugin, Rank.ALL, "friend", "f"); - } + public AddFriend(FriendManager plugin) + { + super(plugin, Rank.ALL, "friends", "friend", "f"); + } - @Override - public void Execute(final Player caller, final String[] args) - { - if (args == null) - { - Plugin.showFriends(caller); - } - else - { - CommandCenter.GetClientManager().checkPlayerName(caller, args[0], new Callback() - { - public void run(String result) - { - if (result != null) - { - Plugin.addFriend(caller, result); - } - } - }); - } - } + @Override + public void Execute(final Player caller, final String[] args) + { + if (args == null) + { + new FriendsGUI(Plugin, caller); + } + else + { + CommandCenter.GetClientManager().checkPlayerName(caller, args[0], new Callback() + { + public void run(String result) + { + if (result != null) + { + Plugin.addFriend(caller, result); + } + } + }); + } + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendData.java b/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendData.java index 95d1c5217..983b8d73f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendData.java @@ -1,9 +1,39 @@ package mineplex.core.friend.data; import java.util.ArrayList; -import java.util.List; +import mineplex.core.friend.ui.FriendsGUI; public class FriendData { - public List Friends = new ArrayList(); + private ArrayList _friends = new ArrayList(); + private FriendsGUI _friendsPage; + + public ArrayList getFriends() + { + return _friends; + } + + public void setFriends(ArrayList newFriends) + { + _friends = newFriends; + updateGui(); + } + + private void updateGui() + { + if (_friendsPage != null) + { + _friendsPage.updateGui(); + } + } + + public void setGui(FriendsGUI friendsPage) + { + _friendsPage = friendsPage; + } + + public FriendsGUI getGui() + { + return _friendsPage; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendRepository.java index 9b23e121c..c285ab807 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendRepository.java @@ -95,7 +95,7 @@ public class FriendRepository extends RepositoryBase if (!friends.containsKey(uuidSource)) friends.put(uuidSource, new FriendData()); - friends.get(uuidSource).Friends.add(friend); + friends.get(uuidSource).getFriends().add(friend); } } }); @@ -116,7 +116,7 @@ public class FriendRepository extends RepositoryBase friend.ServerName = resultSet.getString(3); friend.LastSeenOnline = resultSet.getTimestamp(5).getTime() - resultSet.getTimestamp(4).getTime(); - friendData.Friends.add(friend); + friendData.getFriends().add(friend); } return friendData; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendStatus.java b/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendStatus.java index 90fdd42d3..9c60df03f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendStatus.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendStatus.java @@ -4,9 +4,12 @@ import mineplex.core.friend.FriendStatusType; public class FriendStatus { - public String Name; - public String ServerName; - public boolean Online; - public long LastSeenOnline; - public FriendStatusType Status; + public String Name; + public String ServerName; + public boolean Online; + /** + * This seems like it should be unmodified without current time subtracted when set + */ + public long LastSeenOnline; + public FriendStatusType Status; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/AddFriendPage.java b/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/AddFriendPage.java new file mode 100644 index 000000000..1cdda4d1a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/AddFriendPage.java @@ -0,0 +1,186 @@ +package mineplex.core.friend.ui; + +import mineplex.core.command.CommandCenter; +import mineplex.core.common.util.Callback; +import mineplex.core.friend.FriendManager; +import mineplex.core.itemstack.ItemBuilder; +import net.minecraft.server.v1_7_R4.ContainerAnvil; +import net.minecraft.server.v1_7_R4.EntityHuman; +import net.minecraft.server.v1_7_R4.EntityPlayer; +import net.minecraft.server.v1_7_R4.PacketPlayOutOpenWindow; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; + +public class AddFriendPage implements Listener +{ + private class AnvilContainer extends ContainerAnvil + { + private String n; + + public AnvilContainer(EntityHuman entity) + { + super(entity.inventory, entity.world, 0, 0, 0, entity); + } + + @Override + public boolean a(EntityHuman entityhuman) + { + return true; + } + + @Override + public void a(String origString) + { + n = origString; + _itemName = origString; + + /* if (!Objects.equal(origString, itemName)) + { + ItemBuilder builder = new ItemBuilder(Material.PAPER); + + ItemStack item = currentInventory.getItem(2); + + if (item != null && item.getType() != Material.AIR) + { + builder = new ItemBuilder(item); + } + + builder.setRawTitle(origString); + + itemName = origString; + + currentInventory.setItem(2, builder.build()); + }*/ + + if (getSlot(2).hasItem()) + { + net.minecraft.server.v1_7_R4.ItemStack itemstack = getSlot(2).getItem(); + + if (StringUtils.isBlank(origString)) + itemstack.t(); + else + { + itemstack.c(this.n); + } + } + + e(); + } + + } + + private FriendManager _friends; + private Player _player; + private Inventory _currentInventory; + private String _itemName = ""; + private boolean _searching; + + public AddFriendPage(FriendManager friends, Player player) + { + _player = player; + _friends = friends; + + openInventory(); + friends.RegisterEvents(this); + } + + @EventHandler + public void onInventoryClose(InventoryCloseEvent event) + { + if (event.getPlayer() == _player) + { + unregisterListener(); + } + } + + public void unregisterListener() + { + _currentInventory.clear(); + HandlerList.unregisterAll(this); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) + { + if (event.getRawSlot() < 3) + { + event.setCancelled(true); + + if (event.getRawSlot() == 2) + { + if (_itemName.length() > 1 && !_searching) + { + _searching = true; + + CommandCenter.Instance.GetClientManager().checkPlayerName(_player, _itemName, new Callback() + { + public void run(String result) + { + _searching = false; + + if (result != null) + { + _friends.addFriend(_player, result); + _player.playSound(_player.getLocation(), Sound.NOTE_PLING, 1, 1.6f); + + unregisterListener(); + new FriendsGUI(_friends, _player); + } + else + { + // _player.sendMessage(C.Bold + "Player not found"); + _player.playSound(_player.getLocation(), Sound.ITEM_BREAK, 1, .6f); + } + } + }); + } + else + { + _player.playSound(_player.getLocation(), Sound.ITEM_BREAK, 1, .6f); + } + } + } + else if (event.isShiftClick()) + { + event.setCancelled(true); + } + } + + public void openInventory() + { + _player.closeInventory(); + + EntityPlayer p = ((CraftPlayer) _player).getHandle(); + + AnvilContainer container = new AnvilContainer(p); + int c = p.nextContainerCounter(); + + PacketPlayOutOpenWindow packet = new PacketPlayOutOpenWindow(c, 8, "Repairing", 0, true); + + p.playerConnection.sendPacket(packet); + + // Set their active container to the container + p.activeContainer = container; + + // Set their active container window id to that counter stuff + p.activeContainer.windowId = c; + + // Add the slot listener + p.activeContainer.addSlotListener(p); // Set the items to the items from the inventory given + _currentInventory = container.getBukkitView().getTopInventory(); + + _currentInventory.setItem(0, new ItemBuilder(Material.PAPER).setRawTitle("Friend's Name").build()); + _currentInventory.setItem(2, new ItemBuilder(Material.PAPER).setRawTitle("Search").build()); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendPage.java b/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendPage.java new file mode 100644 index 000000000..e10169e3c --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendPage.java @@ -0,0 +1,36 @@ +package mineplex.core.friend.ui; + +import mineplex.core.itemstack.ItemBuilder; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public enum FriendPage +{ + FRIENDS(new ItemBuilder(Material.SKULL_ITEM, 1, (short) 3).setTitle("Friends").build(), "Friends"), + + FRIEND_REQUESTS(new ItemBuilder(Material.RED_ROSE).setTitle("Friend Requests").build(), "Friend Requests"), + + DELETE_FRIENDS(new ItemBuilder(Material.TNT).setTitle("Delete Friends").build(), "Delete Friends"), + + SEND_REQUEST(new ItemBuilder(Material.BOOK_AND_QUILL).setTitle("Send Friend Request").build(), "Send Friend Request"); + + private ItemStack _icon; + private String _name; + + private FriendPage(ItemStack item, String name) + { + _icon = item; + _name = name; + } + + public String getName() + { + return _name; + } + + public ItemStack getIcon() + { + return _icon; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendsGUI.java b/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendsGUI.java new file mode 100644 index 000000000..334d35c31 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendsGUI.java @@ -0,0 +1,551 @@ +package mineplex.core.friend.ui; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; + +import mineplex.core.command.CommandCenter; +import mineplex.core.common.util.C; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilTime; +import mineplex.core.friend.FriendManager; +import mineplex.core.friend.FriendStatusType; +import mineplex.core.friend.data.FriendData; +import mineplex.core.friend.data.FriendStatus; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.itemstack.ItemLayout; +import mineplex.core.shop.item.IButton; +import net.minecraft.server.v1_7_R4.EntityPlayer; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class FriendsGUI implements Listener +{ + private NautHashMap _buttonMap = new NautHashMap(); + private FriendPage _currentPage = FriendPage.FRIENDS; + private FriendPage _previousPage; + private Player _player; + private FriendManager _plugin; + private Inventory _inventory; + private int _page; + private Comparator _friendCompare = new Comparator() + { + + @Override + public int compare(FriendStatus o1, FriendStatus o2) + { + if (o1.Online == o2.Online) + { + return o1.Name.compareToIgnoreCase(o2.Name); + } + + if (o1.Online) + { + return -1; + } + return 1; + } + }; + + public FriendsGUI(FriendManager plugin, Player player) + { + _plugin = plugin; + _player = player; + + buildPage(); + + _plugin.RegisterEvents(this); + + getFriendData().setGui(this); + } + + private void AddButton(int slot, ItemStack item, IButton button) + { + _inventory.setItem(slot, item); + _buttonMap.put(slot, button); + } + + public void buildDeleteFriends() + { + + ArrayList friends = new ArrayList(); + + for (FriendStatus friend : getFriendData().getFriends()) + { + if (friend.Status == FriendStatusType.Accepted) + { + friends.add(friend); + } + } + + Collections.sort(friends, _friendCompare); + + boolean pages = this.addPages(friends.size(), new Runnable() + { + public void run() + { + buildDeleteFriends(); + } + }); + + for (int i = 0; i < (pages ? 27 : 36); i++) + { + int friendSlot = (_page * 27) + i; + int slot = i + 18; + + if (friendSlot >= friends.size()) + { + break; + } + + FriendStatus friend = friends.get(friendSlot); + + ItemBuilder builder = new ItemBuilder(Material.SKULL_ITEM, 1, (short) (friend.Online ? 3 : 0)); + + builder.setTitle(C.cWhite + C.Bold + friend.Name); + + builder.addLore(C.cGray + C.Bold + "Status: " + (friend.Online ? C.cDGreen + "Online" : C.cRed + "Offline")); + + if (friend.Online) + { + builder.addLore(C.cDGray + C.Bold + "Server: " + C.cGray + friend.ServerName); + } + else + { + builder.addLore(C.cGray + "Last seen " + UtilTime.MakeStr(friend.LastSeenOnline) + " ago"); + } + + builder.addLore(""); + + builder.addLore(C.cGray + "Left click to delete from friends"); + + final String name = friend.Name; + + AddButton(slot, builder.build(), new IButton() + { + + @Override + public void onClick(Player player, ClickType clickType) + { + if (clickType.isLeftClick()) + { + CommandCenter.Instance.OnPlayerCommandPreprocess(new PlayerCommandPreprocessEvent(player, "/unfriend " + + name)); + } + } + }); + } + } + + private boolean addPages(int amount, final Runnable runnable) + { + if (amount > 36) + { + if (_page > 0) + { + AddButton(45, new ItemBuilder(Material.SIGN).setTitle("Previous Page").build(), new IButton() + { + + @Override + public void onClick(Player player, ClickType clickType) + { + Iterator itel = _buttonMap.keySet().iterator(); + + while (itel.hasNext()) + { + int slot = itel.next(); + if (slot > 8) + { + itel.remove(); + _inventory.setItem(slot, new ItemStack(Material.AIR)); + } + } + + _page -= 1; + runnable.run(); + } + }); + } + + if (amount > (_page + 1) * 27) + { + AddButton(53, new ItemBuilder(Material.SIGN).setTitle("Next Page").build(), new IButton() + { + + @Override + public void onClick(Player player, ClickType clickType) + { + Iterator itel = _buttonMap.keySet().iterator(); + + while (itel.hasNext()) + { + int slot = itel.next(); + if (slot > 8) + { + itel.remove(); + _inventory.setItem(slot, new ItemStack(Material.AIR)); + } + } + + _page += 1; + runnable.run(); + } + }); + } + + return true; + } + return false; + } + + private void buildFriends() + { + ArrayList friends = new ArrayList(); + + for (FriendStatus friend : getFriendData().getFriends()) + { + if (friend.Status == FriendStatusType.Accepted) + { + friends.add(friend); + } + } + + Collections.sort(friends, _friendCompare); + boolean pages = addPages(friends.size(), new Runnable() + { + + @Override + public void run() + { + buildFriends(); + } + }); + + for (int i = 0; i < (pages ? 27 : 36); i++) + { + int friendSlot = (_page * 27) + i; + int slot = i + 18; + + if (friendSlot >= friends.size()) + { + break; + } + + FriendStatus friend = friends.get(friendSlot); + + ItemBuilder builder = new ItemBuilder(Material.SKULL_ITEM, 1, (short) (friend.Online ? 3 : 0)); + + builder.setTitle(C.cWhite + C.Bold + friend.Name); + + builder.addLore(C.cGray + C.Bold + "Status: " + (friend.Online ? C.cDGreen + "Online" : C.cRed + "Offline")); + + if (friend.Online) + { + builder.addLore(C.cDGray + C.Bold + "Server: " + C.cGray + friend.ServerName); + } + else + { + builder.addLore(C.cGray + "Last seen " + UtilTime.MakeStr(friend.LastSeenOnline) + " ago"); + } + + if (friend.Online) + { + builder.addLore(""); + builder.addLore(C.cGray + "Left click to teleport to their server"); + + final String serverName = friend.ServerName; + + AddButton(slot, builder.build(), new IButton() + { + + @Override + public void onClick(Player player, ClickType clickType) + { + _plugin.getPortal().sendPlayerToServer(player, serverName); + } + }); + } + else + { + _inventory.setItem(slot, builder.build()); + } + } + } + + public void updateGui() + { + if (_currentPage == FriendPage.FRIENDS) + { + buildFriends(); + } + else if (_currentPage == FriendPage.FRIEND_REQUESTS) + { + buildRequests(); + } + else if (_currentPage == FriendPage.DELETE_FRIENDS) + { + buildDeleteFriends(); + } + } + + private void buildPage() + { + + if (_currentPage != _previousPage) + { + _inventory = Bukkit.createInventory(null, 54, _currentPage.getName()); + } + else + { + _inventory.setItem(53, new ItemStack(Material.AIR)); + _inventory.setItem(45, new ItemStack(Material.AIR)); + } + + _page = 0; + _buttonMap.clear(); + + ArrayList itemSlots = new ItemLayout("XOXOXOXOX").getItemSlots(); + + for (int i = 0; i < FriendPage.values().length; i++) + { + final FriendPage page = FriendPage.values()[i]; + + ItemStack icon = page == _currentPage ? + + new ItemBuilder(page.getIcon()).addEnchantment(UtilInv.getDullEnchantment(), 1).build() + + : + + page.getIcon(); + + this.AddButton(itemSlots.get(i), icon, new IButton() + { + + @Override + public void onClick(Player player, ClickType clickType) + { + if (_currentPage != page || _page != 0) + { + _currentPage = page; + buildPage(); + } + } + + }); + } + + if (_currentPage == FriendPage.FRIENDS) + { + buildFriends(); + } + else if (_currentPage == FriendPage.FRIEND_REQUESTS) + { + buildRequests(); + } + else if (_currentPage == FriendPage.DELETE_FRIENDS) + { + buildDeleteFriends(); + } + else if (_currentPage == FriendPage.SEND_REQUEST) + { + unregisterListener(); + + new AddFriendPage(_plugin, _player); + + return; + } + + if (_previousPage != _currentPage) + { + _previousPage = _currentPage; + + EntityPlayer nmsPlayer = ((CraftPlayer) _player).getHandle(); + if (nmsPlayer.activeContainer != nmsPlayer.defaultContainer) + { + // Do this so that other inventories know their time is over. + CraftEventFactory.handleInventoryCloseEvent(nmsPlayer); + nmsPlayer.m(); + } + + _player.openInventory(_inventory); + } + } + + private void buildRequests() + { + ArrayList friends = new ArrayList(); + + for (FriendStatus friend : getFriendData().getFriends()) + { + if (friend.Status == FriendStatusType.Sent || friend.Status == FriendStatusType.Pending) + { + friends.add(friend); + } + } + + Collections.sort(friends, new Comparator() + { + + @Override + public int compare(FriendStatus o1, FriendStatus o2) + { + if (o1.Status == o2.Status) + { + return o1.Name.compareToIgnoreCase(o2.Name); + } + + if (o1.Status == FriendStatusType.Sent) + { + return -1; + } + + return 1; + } + }); + + boolean pages = addPages(friends.size(), new Runnable() + { + + @Override + public void run() + { + buildRequests(); + } + }); + + for (int i = 0; i < (pages ? 27 : 36); i++) + { + int friendSlot = (_page * 27) + i; + final int slot = i + 18; + + if (friendSlot >= friends.size()) + { + break; + } + + FriendStatus friend = friends.get(friendSlot); + + ItemBuilder builder; + + final boolean isSender = friend.Status == FriendStatusType.Sent; + + if (isSender) + { + builder = new ItemBuilder(Material.ENDER_PEARL); + + builder.setTitle(C.cGray + "Friend request to " + C.cWhite + C.Bold + friend.Name); + } + else + { + builder = new ItemBuilder(Material.PAPER); + + builder.setTitle(C.cGray + "Friend request from " + C.cWhite + C.Bold + friend.Name); + } + + builder.addLore(""); + + builder.addLore(C.cGray + (isSender ? "C" : "Left c") + "lick to " + (isSender ? "cancel" : "accept") + + " friend request"); + + if (!isSender) + { + builder.addLore(C.cGray + "Right click to refuse friend request"); + } + + final String name = friend.Name; + + AddButton(slot, builder.build(), new IButton() + { + + @Override + public void onClick(Player player, ClickType clickType) + { + if (isSender || clickType.isRightClick()) + { + CommandCenter.Instance.OnPlayerCommandPreprocess(new PlayerCommandPreprocessEvent(player, "/unfriend " + + name)); + + _inventory.setItem(slot, new ItemStack(Material.AIR)); + _buttonMap.remove(slot); + } + else if (!isSender && clickType.isLeftClick()) + { + CommandCenter.Instance.OnPlayerCommandPreprocess(new PlayerCommandPreprocessEvent(player, "/friend " + + name)); + + _inventory.setItem(slot, new ItemStack(Material.AIR)); + _buttonMap.remove(slot); + } + } + }); + } + } + + private FriendData getFriendData() + { + return _plugin.Get(_player); + } + + @EventHandler + public void OnInventoryClick(InventoryClickEvent event) + { + if (_inventory.getTitle().equals(event.getInventory().getTitle()) && event.getWhoClicked() == _player) + { + if (_buttonMap.containsKey(event.getRawSlot())) + { + if (event.getWhoClicked() instanceof Player) + { + IButton button = _buttonMap.get(event.getRawSlot()); + + button.onClick(((Player) event.getWhoClicked()), event.getClick()); + + _player.playSound(_player.getLocation(), Sound.NOTE_PLING, 1, 1.6f); + } + } + else + { + + _player.playSound(_player.getLocation(), Sound.ITEM_BREAK, 1, .6f); + } + + event.setCancelled(true); + } + } + + @EventHandler + public void OnInventoryClose(InventoryCloseEvent event) + { + if (_inventory.getTitle().equals(event.getInventory().getTitle()) && event.getPlayer() == _player) + { + unregisterListener(); + } + } + + private void unregisterListener() + { + FriendData data = getFriendData(); + + if (data != null && data.getGui() == this) + { + data.setGui(null); + } + + HandlerList.unregisterAll(this); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemLayout.java b/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemLayout.java index b2bf96240..938c45f61 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemLayout.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemLayout.java @@ -37,6 +37,11 @@ public class ItemLayout } } + public ArrayList getItemSlots() + { + return _size; + } + public ItemStack[] generate(ArrayList items) { return generate(items.toArray(new ItemStack[0])); @@ -50,8 +55,10 @@ public class ItemLayout public ItemStack[] generate(boolean doRepeats, ItemStack... items) { ItemStack[] itemArray = new ItemStack[_invSize]; + if (items.length == 0) return itemArray; + int i = 0; for (int slot : _size) { @@ -62,6 +69,7 @@ public class ItemLayout else break; } + itemArray[slot] = items[i]; } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index 68f39ff56..18a4d4972 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -137,7 +137,7 @@ public class Hub extends JavaPlugin implements IRelation new ClassCombatShop(shopManager, clientManager, donationManager, false, "Knight", classManager.GetClass("Knight")); new ClassCombatShop(shopManager, clientManager, donationManager, false, "Assassin", classManager.GetClass("Assassin")); - new FriendManager(this, clientManager, preferenceManager); + new FriendManager(this, clientManager, preferenceManager, portal); //Updates getServer().getScheduler().scheduleSyncRepeatingTask(this, new Updater(this), 1, 1); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java index 55d5ffb02..4a437b540 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -123,7 +123,7 @@ public class Arcade extends JavaPlugin new MemoryFix(this); new CustomTagFix(this, packetHandler); - new FriendManager(this, _clientManager, preferenceManager); + new FriendManager(this, _clientManager, preferenceManager, portal); //Updates getServer().getScheduler().scheduleSyncRepeatingTask(this, new Updater(this), 1, 1);