From 676817601a1b49b07512b4a3cff6918b5a406f92 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Fri, 28 Aug 2015 17:31:09 -0700 Subject: [PATCH 01/16] Prevent players from logging into the wrong clans server --- .../game/clans/clans/ClansManager.java | 3 + .../clans/commands/ClansLoginManager.java | 68 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 1da753018..6a42a4cae 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -56,6 +56,7 @@ import mineplex.game.clans.clans.commands.ClanManagementCommand; import mineplex.game.clans.clans.commands.ClansAllyChatCommand; import mineplex.game.clans.clans.commands.ClansChatCommand; import mineplex.game.clans.clans.commands.ClansCommand; +import mineplex.game.clans.clans.commands.ClansLoginManager; import mineplex.game.clans.clans.commands.MapCommand; import mineplex.game.clans.clans.commands.RegionsCommand; import mineplex.game.clans.clans.commands.ServerTimeCommand; @@ -182,6 +183,8 @@ public class ClansManager extends MiniClientPlugin implements IRelat _itemMapManager = new ItemMapManager(this, _worldEvent); _explosion = new Explosion(plugin, blockRestore); + + new ClansLoginManager(getPlugin(), clientManager, _serverName); Energy energy = new Energy(plugin); // TODO: Re-enable customtagfix with NCP update? diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java new file mode 100644 index 000000000..f8d2f6de7 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java @@ -0,0 +1,68 @@ +package mineplex.game.clans.clans.commands; + +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClientManager; +import mineplex.core.account.ILoginProcessor; +import mineplex.core.common.util.UtilPlayer; +import mineplex.database.Tables; +import org.jooq.impl.DSL; + +public class ClansLoginManager extends MiniPlugin implements ILoginProcessor +{ + private String _serverName; + + public ClansLoginManager(JavaPlugin plugin, CoreClientManager clientManager, String serverName) + { + super("Clans Login Manager", plugin); + + _serverName = serverName; + clientManager.addStoredProcedureLoginProcessor(this); + } + + private void kickPlayer(Player player, String homeServer) + { + player.kickPlayer("This is not your home server. To play clans, connect to " + homeServer); + + } + + @Override + public void processLoginResultSet(final String playerName, int accountId, ResultSet resultSet) throws SQLException + { + while (resultSet.next()) + { + final String serverName = resultSet.getString(1); + + if (serverName != null) + { + System.out.println("Player " + playerName + " is from server: " + serverName); + + + if (!serverName.equals(_serverName)) + { + runSyncLater(new Runnable() + { + @Override + public void run() + { + final Player player = UtilPlayer.searchExact(playerName); + if (player != null) + kickPlayer(player, serverName); + } + }, 20); + } + } + } + } + + @Override + public String getQuery(int accountId, String uuid, String name) + { + return "SELECT `clanServer`.`serverName` FROM `accountClan` JOIN `clans` ON `clans`.`id` = `accountClan`.`clanId` JOIN `clanServer` ON `clanServer`.`id` = `clans`.`serverId` WHERE `accountClan`.`accountId` = " + accountId + ";"; + } +} From e7f861a6c2d55c1a979269d2565a7e84eb577f86 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 29 Aug 2015 12:04:53 -0700 Subject: [PATCH 02/16] Push golem changes, snakes code and rename bossability thingy --- .../mineplex/core/common/util/UtilAlg.java | 4 +- .../game/core/boss/EventCreature.java | 2 +- .../minecraft/game/core/boss/WorldEvent.java | 5 + .../core/boss/ironwizard/GolemCreature.java | 46 +++- .../{GolemAbility.java => BossAbility.java} | 13 +- .../ironwizard/abilities/GolemBlockHail.java | 6 +- .../ironwizard/abilities/GolemBlockShot.java | 5 +- .../ironwizard/abilities/GolemCaveIn.java | 19 +- .../ironwizard/abilities/GolemEarthquake.java | 5 +- .../abilities/GolemExplodingAura.java | 11 +- .../abilities/GolemExplosiveBlock.java | 2 +- .../abilities/GolemMeleeAttack.java | 5 +- .../ironwizard/abilities/GolemRumble.java | 4 +- .../ironwizard/abilities/GolemRupture.java | 5 +- .../boss/ironwizard/abilities/GolemSlam.java | 5 +- .../abilities/GolemWallExplode.java | 5 +- .../game/core/boss/snake/SnakeBoss.java | 61 +++++ .../game/core/boss/snake/SnakeCreature.java | 166 ++++++++++++ .../game/core/boss/snake/SnakeTail.java | 118 +++++++++ .../game/games/bossbattles/BattleBoss.java | 21 +- .../game/games/bossbattles/BossBattles.java | 14 +- .../bossbattles/displays/SnakeDisplay.java | 242 ++++++++++++++++++ 22 files changed, 683 insertions(+), 81 deletions(-) rename Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/{GolemAbility.java => BossAbility.java} (86%) create mode 100644 Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java create mode 100644 Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java create mode 100644 Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java index 3f2c2c5f4..756947520 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java @@ -42,7 +42,7 @@ public class UtilAlg public static Vector getTrajectory(Vector from, Vector to) { - return to.subtract(from).normalize(); + return to.clone().subtract(from).normalize(); } public static Vector getTrajectory2d(Entity from, Entity to) @@ -57,7 +57,7 @@ public class UtilAlg public static Vector getTrajectory2d(Vector from, Vector to) { - return to.subtract(from).setY(0).normalize(); + return to.clone().subtract(from).setY(0).normalize(); } public static boolean HasSight(Location from, Player to) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/EventCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/EventCreature.java index 71354b01d..2f40d503e 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/EventCreature.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/EventCreature.java @@ -56,7 +56,7 @@ public abstract class EventCreature implements Listener return getEvent().getDifficulty(); } - protected final void spawnEntity() + protected void spawnEntity() { Location spawnLocation = _entity == null ? _spawnLocation : _entity.getLocation(); T entity = _spawnLocation.getWorld().spawn(spawnLocation, getEntityClass()); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/WorldEvent.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/WorldEvent.java index 482e524f9..976ab31c4 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/WorldEvent.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/WorldEvent.java @@ -279,6 +279,11 @@ public abstract class WorldEvent implements Listener _lastActive = System.currentTimeMillis(); } + public EventMap getEventMap() + { + return _map; + } + public void setMap(EventMap map, final Runnable onComplete) { _map = map; diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java index 77490d206..f30a11bb0 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java @@ -16,7 +16,7 @@ import mineplex.core.common.util.UtilTime; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.boss.EventCreature; -import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemAbility; +import mineplex.minecraft.game.core.boss.ironwizard.abilities.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemBlockHail; import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemBlockShot; import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemCaveIn; @@ -35,6 +35,7 @@ import org.bukkit.entity.IronGolem; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; public class GolemCreature extends EventCreature @@ -49,7 +50,7 @@ public class GolemCreature extends EventCreature private HashMap _preferedCombos = new HashMap(); private Class _lastAttack; private boolean _usedFinalAttack; - private ArrayList _currentAbilities = new ArrayList(); + private ArrayList _currentAbilities = new ArrayList(); private double _canCaveIn = 450; private Vector _afkWalk = new Vector(); private long _lastSlam; @@ -108,12 +109,12 @@ public class GolemCreature extends EventCreature // if (_currentAbility == null || _currentAbility.hasFinished()) // { - Iterator itel = _currentAbilities.iterator(); + Iterator itel = _currentAbilities.iterator(); boolean canDoNew = _currentAbilities.size() < 3; while (itel.hasNext()) { - GolemAbility ability = itel.next(); + BossAbility ability = itel.next(); if (ability.hasFinished()) { @@ -179,9 +180,9 @@ public class GolemCreature extends EventCreature } { // Wall explode - if (!getPlayers(dist, 12).isEmpty() && getPlayers(dist, 4).isEmpty()) + if (!getPlayers(dist, 13).isEmpty() && getPlayers(dist, 4).isEmpty()) { - weight.put(GolemWallExplode.class, 5); + weight.put(GolemWallExplode.class, 8); } } @@ -220,7 +221,7 @@ public class GolemCreature extends EventCreature { ArrayList players = getPlayers(dist, 30); - for (GolemAbility ability : _currentAbilities) + for (BossAbility ability : _currentAbilities) { if (ability instanceof GolemExplodingAura) { @@ -270,12 +271,12 @@ public class GolemCreature extends EventCreature } } - for (GolemAbility ability : _currentAbilities) + for (BossAbility ability : _currentAbilities) { weight.remove(ability.getClass()); } - GolemAbility ability = null; + BossAbility ability = null; if (!weight.isEmpty()) { @@ -298,7 +299,7 @@ public class GolemCreature extends EventCreature { try { - ability = (GolemAbility) entry.getKey().getConstructor(GolemCreature.class).newInstance(this); + ability = (BossAbility) entry.getKey().getConstructor(GolemCreature.class).newInstance(this); if (ability.getTarget() == null) { @@ -350,7 +351,7 @@ public class GolemCreature extends EventCreature boolean canMove = true; - for (GolemAbility ability : _currentAbilities) + for (BossAbility ability : _currentAbilities) { ability.tick(); @@ -527,7 +528,7 @@ public class GolemCreature extends EventCreature private void endAbility() { - for (GolemAbility ability : _currentAbilities) + for (BossAbility ability : _currentAbilities) { ability.setFinished(); HandlerList.unregisterAll(ability); @@ -548,4 +549,25 @@ public class GolemCreature extends EventCreature endAbility(); } } + + @EventHandler + public void onPlayerDamage(CustomDamageEvent event) + { + if (!(event.GetDamageeEntity() instanceof Player)) + { + return; + } + + if (event.GetCause() != DamageCause.FALL) + { + return; + } + + if (!getEvent().getEventMap().isInMap(event.GetDamageeEntity().getLocation())) + { + return; + } + + event.AddMod("Fall negation", 0.5); + } } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemAbility.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/BossAbility.java similarity index 86% rename from Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemAbility.java rename to Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/BossAbility.java index 47361630a..4165efef4 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemAbility.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/BossAbility.java @@ -6,6 +6,7 @@ import java.util.UUID; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; +import mineplex.minecraft.game.core.boss.EventCreature; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -16,9 +17,9 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -public abstract class GolemAbility implements Listener +public abstract class BossAbility implements Listener { - private GolemCreature _creature; + private T _creature; private HashMap _damaged = new HashMap(); public boolean canDamage(Entity player) @@ -36,7 +37,7 @@ public abstract class GolemAbility implements Listener return true; } - public GolemAbility(GolemCreature creature) + public BossAbility(T creature) { _creature = creature; } @@ -50,12 +51,12 @@ public abstract class GolemAbility implements Listener return 60; } - public IronGolem getEntity() + public Y getEntity() { - return getGolem().getEntity(); + return (Y) getGolem().getEntity(); } - public GolemCreature getGolem() + public T getGolem() { return _creature; } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockHail.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockHail.java index 41a609c9a..c4c83d564 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockHail.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockHail.java @@ -46,7 +46,7 @@ import org.bukkit.util.Vector; * Rumble is where the golem picks a target then starts playing a animation for a second where its obviously preparing to use it. * Copy this from Wizards */ -public class GolemBlockHail extends GolemAbility +public class GolemBlockHail extends BossAbility { private int _currentBlock; private int _currentLevel; @@ -222,7 +222,7 @@ public class GolemBlockHail extends GolemAbility // if (canDamage(victim)) { getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, - DamageCause.CONTACT, 6 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Block Hail", + DamageCause.CONTACT, 10 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Block Hail", "Iron Wizard Block Hail"); } @@ -305,7 +305,7 @@ public class GolemBlockHail extends GolemAbility if (canDamage(player)) { getGolem().getEvent().getDamageManager().NewDamageEvent(player, getEntity(), null, - DamageCause.CONTACT, 6 * getGolem().getDifficulty(), true, true, false, + DamageCause.CONTACT, 10 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Protection", "Iron Wizard Protection"); loc.getWorld().playEffect(player.getLocation(), Effect.STEP_SOUND, Material.OBSIDIAN.getId()); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockShot.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockShot.java index 2ca37783d..cfa76031c 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockShot.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockShot.java @@ -43,13 +43,14 @@ import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftIronGolem; import org.bukkit.entity.Entity; import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.IronGolem; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; -public class GolemBlockShot extends GolemAbility +public class GolemBlockShot extends BossAbility { private HashMap _blockLoc = new HashMap(); private HashMap _blockType = new HashMap(); @@ -226,7 +227,7 @@ public class GolemBlockShot extends GolemAbility cur.getWorld().playEffect(victim.getEyeLocation().subtract(0, 0.5, 0), Effect.STEP_SOUND, cur.getBlockId()); getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, - DamageCause.CONTACT, 6 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Block Shot", + DamageCause.CONTACT, 10 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Block Shot", "Iron Wizard Block Shot"); cur.remove(); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemCaveIn.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemCaveIn.java index 49a50bc06..d7bba9036 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemCaveIn.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemCaveIn.java @@ -27,10 +27,12 @@ import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity; import org.bukkit.entity.Entity; import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.IronGolem; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -38,7 +40,7 @@ import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; -public class GolemCaveIn extends GolemAbility +public class GolemCaveIn extends BossAbility { private ArrayList _blocks = new ArrayList(); private ArrayList _fallingBlocks = new ArrayList(); @@ -166,7 +168,7 @@ public class GolemCaveIn extends GolemAbility if (canDamage(victim)) { getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, - DamageCause.CONTACT, 6 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Cave In", + DamageCause.CONTACT, 10 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Cave In", "Iron Wizard Cave In"); } @@ -216,15 +218,6 @@ public class GolemCaveIn extends GolemAbility block.setType(Material.AIR); } } - - @EventHandler - public void onPhysics(BlockPhysicsEvent event) - { - if (_blocks.contains(event.getBlock())) - { - event.setCancelled(true); - } - } @Override public void tick() @@ -289,7 +282,7 @@ public class GolemCaveIn extends GolemAbility List players = UtilPlayer.getNearby(getLocation(), 50, true); - for (int i = 0; i < players.size(); i++) + for (int i = 0; i < players.size() * 4; i++) { int dist = UtilMath.r(10); @@ -317,7 +310,7 @@ public class GolemCaveIn extends GolemAbility { if (l.getBlock().getType() == Material.AIR) { - if (UtilAlg.HasSight(l, getLocation().add(0, 8, 0))) + if (UtilAlg.HasSight(l, getLocation().add(0, 4, 0))) { FallingBlock block = b.getWorld().spawnFallingBlock(b.getLocation().add(0.5, -1, 0.5), b.getTypeId(), b.getData()); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemEarthquake.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemEarthquake.java index 06685bc95..395a37ea4 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemEarthquake.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemEarthquake.java @@ -17,12 +17,13 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Entity; +import org.bukkit.entity.IronGolem; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; -public class GolemEarthquake extends GolemAbility +public class GolemEarthquake extends BossAbility { private Location _center; private float _range; @@ -139,7 +140,7 @@ public class GolemEarthquake extends GolemAbility _damaged.add(player.getUniqueId()); getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) player, getEntity(), null, - DamageCause.CONTACT, 12 * getGolem().getDifficulty(), false, true, false, "Iron Wizard Earthquake", + DamageCause.CONTACT, 14 * getGolem().getDifficulty(), false, true, false, "Iron Wizard Earthquake", "Iron Wizard Earthquake"); getGolem().getEvent().getCondition().Factory().Slow("Earthquake", (LivingEntity) player, getEntity(), 3, 1, false, diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplodingAura.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplodingAura.java index 221e701d5..7041575b0 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplodingAura.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplodingAura.java @@ -27,6 +27,7 @@ import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.IronGolem; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -47,7 +48,7 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -public class GolemExplodingAura extends GolemAbility +public class GolemExplodingAura extends BossAbility { private HashMap _blocks = new HashMap(); @@ -118,7 +119,7 @@ public class GolemExplodingAura extends GolemAbility for (Player player : UtilPlayer.getNearby(getLocation(), 3, true)) { getGolem().getEvent().getDamageManager().NewDamageEvent(player, getEntity(), null, DamageCause.CONTACT, - 2 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Protection", "Iron Wizard Protection"); + 6 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Protection", "Iron Wizard Protection"); UtilAction.velocity(player, UtilAlg.getTrajectory(getEntity(), player), 1, true, 0.3, 0, 0.3, false); } } @@ -351,12 +352,6 @@ public class GolemExplodingAura extends GolemAbility "Blocky Iron Wizard Aura"); } - if (victim instanceof Player) - { - getGolem().getEvent().getCondition().Factory().Slow("Blocky Iron Wizard Aura", (LivingEntity) victim, - getEntity(), 3, 2, false, false, false, false); - } - fallingIterator.remove(); cur.remove(); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplosiveBlock.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplosiveBlock.java index eda1d77d3..9d8e825f4 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplosiveBlock.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplosiveBlock.java @@ -52,7 +52,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.util.Vector; -public class GolemExplosiveBlock extends GolemAbility +public class GolemExplosiveBlock extends BossAbility { private HashMap _blocksLocation = new HashMap(); private Location _center; diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemMeleeAttack.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemMeleeAttack.java index 5347c1bac..8a28a753f 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemMeleeAttack.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemMeleeAttack.java @@ -8,11 +8,12 @@ import net.minecraft.server.v1_7_R4.EntityIronGolem; import org.bukkit.Sound; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftIronGolem; +import org.bukkit.entity.IronGolem; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; -public class GolemMeleeAttack extends GolemAbility +public class GolemMeleeAttack extends BossAbility { private boolean _attacked; @@ -65,7 +66,7 @@ public class GolemMeleeAttack extends GolemAbility UtilEnt.CreatureLook(getEntity(), target); getGolem().getEvent().getDamageManager().NewDamageEvent(target, getEntity(), null, DamageCause.ENTITY_ATTACK, - 6 * getGolem().getDifficulty(), false, true, false, "Iron Wizard Melee Attack", "Iron Wizard Melee Attack"); + 10 * getGolem().getDifficulty(), false, true, false, "Iron Wizard Melee Attack", "Iron Wizard Melee Attack"); Vector vec = getLocation().getDirection(); vec.setY(0).normalize().setY(0.5).multiply(2.4); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRumble.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRumble.java index d5b57480c..d4d15ec0c 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRumble.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRumble.java @@ -28,7 +28,7 @@ import org.bukkit.util.Vector; * Rumble is where the golem picks a target then starts playing a animation for a second where its obviously preparing to use it. * Copy this from Wizards */ -public class GolemRumble extends GolemAbility +public class GolemRumble extends BossAbility { private Location _loc; private int _ticks; @@ -186,7 +186,7 @@ public class GolemRumble extends GolemAbility if (canDamage(entity)) { getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) entity, getEntity(), null, - DamageCause.CONTACT, 4 * getGolem().getDifficulty(), false, true, false, "Iron Wizard Rumble", + DamageCause.CONTACT, 8 * getGolem().getDifficulty(), false, true, false, "Iron Wizard Rumble", "Iron Wizard Rumble"); } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRupture.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRupture.java index 54faedf56..ada73583d 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRupture.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRupture.java @@ -13,6 +13,7 @@ import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftIronGolem; +import org.bukkit.entity.IronGolem; import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -39,7 +40,7 @@ import mineplex.core.common.util.UtilTime; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import net.minecraft.server.v1_7_R4.EntityIronGolem; -public class GolemRupture extends GolemAbility +public class GolemRupture extends BossAbility { private ArrayList> _ruptures = new ArrayList>(); private HashMap _ruptureTime = new HashMap(); @@ -291,7 +292,7 @@ public class GolemRupture extends GolemAbility // Damage Event getGolem().getEvent().getDamageManager().NewDamageEvent(cur, getEntity(), null, DamageCause.CUSTOM, - 4 * getGolem().getDifficulty(), false, true, false, "Iron Wizard", "Rupture"); + 8 * getGolem().getDifficulty(), false, true, false, "Iron Wizard", "Rupture"); } ArrayList blocks = new ArrayList(); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemSlam.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemSlam.java index 538174dfd..29798abb9 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemSlam.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemSlam.java @@ -19,6 +19,7 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.entity.Entity; +import org.bukkit.entity.IronGolem; import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -28,7 +29,7 @@ import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -public class GolemSlam extends GolemAbility +public class GolemSlam extends BossAbility { private ArrayList _items = new ArrayList(); private int _ticksFinished; @@ -194,7 +195,7 @@ public class GolemSlam extends GolemAbility // Damage Event getGolem().getEvent().getDamageManager().NewDamageEvent(cur, getEntity(), null, DamageCause.CUSTOM, - 4 * getGolem().getDifficulty(), false, true, false, "Iron Wizard", "Rupture"); + 8 * getGolem().getDifficulty(), false, true, false, "Iron Wizard", "Rupture"); } ArrayList blocks = new ArrayList(); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemWallExplode.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemWallExplode.java index 761953d3d..d4de385cb 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemWallExplode.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemWallExplode.java @@ -34,13 +34,14 @@ import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity; import org.bukkit.entity.Entity; import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.IronGolem; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; -public class GolemWallExplode extends GolemAbility +public class GolemWallExplode extends BossAbility { private HashMap> _blockWalls = new HashMap>(); private ArrayList _dontTarget = new ArrayList(); @@ -193,7 +194,7 @@ public class GolemWallExplode extends GolemAbility if (canDamage(victim)) { getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, - DamageCause.CONTACT, 6 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Wall Explosion", + DamageCause.CONTACT, 10 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Wall Explosion", "Iron Wizard Wall Explosion"); } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java new file mode 100644 index 000000000..ba67bb00c --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java @@ -0,0 +1,61 @@ +package mineplex.minecraft.game.core.boss.snake; + +import org.bukkit.Bukkit; +import org.bukkit.Location; + +import mineplex.core.blockrestore.BlockRestore; +import mineplex.minecraft.game.core.boss.EventCreature; +import mineplex.minecraft.game.core.boss.EventState; +import mineplex.minecraft.game.core.boss.WorldEvent; +import mineplex.minecraft.game.core.condition.ConditionManager; +import mineplex.minecraft.game.core.damage.DamageManager; + +public class SnakeBoss extends WorldEvent +{ + + public SnakeBoss(DamageManager damageManager, BlockRestore blockRestore, ConditionManager conditionManager, String name, + Location cornerLocation) + { + super(damageManager, blockRestore, conditionManager, name, cornerLocation); + } + + @Override + protected void customStart() + { + Bukkit.broadcastMessage("Custom Start"); + spawnGolem(getCenterLocation()); + setState(EventState.LIVE); + announceStart(); + } + + /** + * Check if this slime boss has been defeated + */ + private void checkDeath() + { + if (getCreatures().size() == 0) + { + setState(EventState.COMPLETE); + Bukkit.broadcastMessage("FINISHED!"); + } + } + + @Override + public void removeCreature(EventCreature creature) + { + super.removeCreature(creature); + + if (creature instanceof SnakeCreature) + { + checkDeath(); + } + } + + private SnakeCreature spawnGolem(Location location) + { + SnakeCreature slimeCreature = new SnakeCreature(this, location); + registerCreature(slimeCreature); + return slimeCreature; + } + +} diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java new file mode 100644 index 000000000..6dc114e31 --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java @@ -0,0 +1,166 @@ +package mineplex.minecraft.game.core.boss.snake; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.entity.Silverfish; +import org.bukkit.event.EventHandler; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.EventCreature; +import mineplex.minecraft.game.core.boss.WorldEvent; +import net.minecraft.server.v1_7_R4.Packet; +import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy; + +public class SnakeCreature extends EventCreature +{ + private ArrayList _snakeTail = new ArrayList(); + private HashMap _direction = new HashMap(); + private double _seperator = 0.5; + private ArrayList _canSee = new ArrayList(); + + public SnakeCreature(WorldEvent event, Location spawnLocation) + { + super(event, spawnLocation, "Serpent Lord", false, 2000, Silverfish.class); + } + + @Override + protected void spawnCustom() + { + getEntity().addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 10000, 0)); + UtilEnt.Vegetate(getEntity()); + Vector dir = new Vector(UtilMath.rr(1, true), 0, UtilMath.rr(1, true)).normalize().multiply(_seperator); + + for (int i = 0; i < getHealth() / 50; i++) + { + SnakeTail tail = new SnakeTail(getSpawnLocation().toVector().subtract(dir.clone().multiply(-i)), + new ItemStack(i == 0 ? Material.COBBLESTONE : Material.STONE)); + + _direction.put(tail, dir); + _snakeTail.add(tail); + } + } + + @EventHandler + public void onSecond(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + { + return; + } + + Location loc = _snakeTail.get(0).getLocation().toLocation(getSpawnLocation().getWorld()); + + ArrayList canSee = new ArrayList(); + + for (Player player : loc.getWorld().getPlayers()) + { + if (player.getLocation().distance(loc) < 120) + { + canSee.add(player); + } + } + + Iterator itel2 = _canSee.iterator(); + + int[] ids = new int[_snakeTail.size()]; + + for (int a = 0; a < _snakeTail.size(); a++) + { + ids[a] = _snakeTail.get(a).getId(); + } + + Packet destroy = new PacketPlayOutEntityDestroy(ids); + + while (itel2.hasNext()) + { + Player player = itel2.next(); + if (!canSee.contains(player)) + { + itel2.remove(); + UtilPlayer.sendPacket(player, destroy); + } + } + for (Player player : canSee) + { + if (!_canSee.contains(player)) + { + _canSee.add(player); + + for (SnakeTail tail : _snakeTail) + { + UtilPlayer.sendPacket(player, tail.getSpawn()); + } + } + } + } + + @Override + public void dieCustom() + { + int[] ids = new int[_snakeTail.size()]; + + for (int a = 0; a < _snakeTail.size(); a++) + { + ids[a] = _snakeTail.get(a).getId(); + } + + Packet destroy = new PacketPlayOutEntityDestroy(ids); + + for (Player player : _canSee) + { + UtilPlayer.sendPacket(player, destroy); + } + } + + @EventHandler + public void onTick(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + Packet[] packets = new Packet[_snakeTail.size()]; + + for (int i = 0; i < _snakeTail.size(); i++) + { + SnakeTail tail = _snakeTail.get(i); + + Vector vec = _direction.get(tail); + + if (i == 0) + { + vec.add(new Vector(0.01, 0, 0)); + // TODO + } + else + { + vec.add(_direction.get(_snakeTail.get(i - 1)).multiply(0.9)); + } + + vec.normalize().multiply(0.6); + + packets[i] = tail.moveEntity(vec); + } + + for (Player player : _canSee) + { + UtilPlayer.sendPacket(player, packets); + } + } + +} diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java new file mode 100644 index 000000000..80589f6dd --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java @@ -0,0 +1,118 @@ +package mineplex.minecraft.game.core.boss.snake; + +import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; +import net.minecraft.server.v1_7_R4.DataWatcher; +import net.minecraft.server.v1_7_R4.Packet; +import net.minecraft.server.v1_7_R4.PacketPlayOutEntityEquipment; +import net.minecraft.server.v1_7_R4.PacketPlayOutEntityTeleport; +import net.minecraft.server.v1_7_R4.PacketPlayOutRelEntityMoveLook; +import net.minecraft.server.v1_7_R4.PacketPlayOutSpawnEntityLiving; + +public class SnakeTail +{ + private int _entityId = UtilEnt.getNewEntityId(); + private Vector _entityLocation; + private ItemStack _item; + private Vector _previous; + + public SnakeTail(Vector location, ItemStack item) + { + _entityLocation = location.clone(); + _item = item; + } + + public int getId() + { + return _entityId; + } + + public Vector getPrevious() + { + return _previous; + } + + public Packet moveEntity(Vector toMove) + { + int x = (int) Math.floor(32 * toMove.getX()); + int y = (int) Math.floor(32 * toMove.getY()); + int z = (int) Math.floor(32 * toMove.getZ()); + + if (x >= -128 && x <= 127 && y >= -128 && y <= 127 && z >= -128 && z <= 127) + { + _entityLocation.add(new Vector(x / 32D, y / 32D, z / 32D)); + + PacketPlayOutRelEntityMoveLook relMove = new PacketPlayOutRelEntityMoveLook(); + + relMove.a = getId(); + relMove.b = (byte) x; + relMove.c = (byte) y; + relMove.d = (byte) z; + relMove.e = (byte) (int) (UtilAlg.GetYaw(toMove) * 256.0F / 360.0F); + relMove.f = (byte) (int) (UtilAlg.GetPitch(toMove) * 256.0F / 360.0F); + + return relMove; + } + else + { + _entityLocation.add(toMove); + + x = (int) Math.floor(_entityLocation.getX() * 32); + y = (int) Math.floor(_entityLocation.getY() * 32); + z = (int) Math.floor(_entityLocation.getZ() * 32); + + PacketPlayOutEntityTeleport teleportPacket = new PacketPlayOutEntityTeleport(); + teleportPacket.a = getId(); + teleportPacket.b = x; + teleportPacket.c = y; + teleportPacket.d = z; + teleportPacket.e = (byte) (int) (UtilAlg.GetYaw(toMove) * 256.0F / 360.0F); + teleportPacket.f = (byte) (int) (UtilAlg.GetPitch(toMove) * 256.0F / 360.0F); + + return teleportPacket; + } + } + + public Vector getLocation() + { + return _entityLocation; + } + + public Packet[] getSpawn() + { + PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(); + + DataWatcher watcher = new DataWatcher(null); + watcher.a(0, (byte) 0); + watcher.a(1, 0); + + watcher.a(10, (byte) 0); + + for (int i = 11; i < 17; i++) + { + watcher.a(i, new Vector(0, 0, 0)); + } + + packet.a = getId(); + packet.b = 30; + packet.c = (int) Math.floor(_entityLocation.getX() * 32); + packet.d = (int) Math.floor(_entityLocation.getY() * 32); + packet.e = (int) Math.floor(_entityLocation.getZ() * 32); + packet.l = watcher; + + PacketPlayOutEntityEquipment packet2 = new PacketPlayOutEntityEquipment(); + + packet2.a = getId(); + packet2.b = 4; + packet2.c = CraftItemStack.asNMSCopy(_item); + + return new Packet[] + { + packet, packet2 + }; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java index 130bcb33a..4af9f32a3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java @@ -2,30 +2,27 @@ package nautilus.game.arcade.game.games.bossbattles; import mineplex.minecraft.game.core.boss.ironwizard.GolemBoss; import mineplex.minecraft.game.core.boss.slimeking.SlimeBoss; -import nautilus.game.arcade.game.games.bossbattles.displays.BossDisplay; -import nautilus.game.arcade.game.games.bossbattles.displays.IronWizardDisplay; -import nautilus.game.arcade.game.games.bossbattles.displays.SlimeKingDisplay; +import mineplex.minecraft.game.core.boss.snake.SnakeBoss; +import nautilus.game.arcade.game.games.bossbattles.displays.*; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; public enum BattleBoss { - GOLEM(GolemBoss.class, IronWizardDisplay.class, new ItemStack( - Material.IRON_BLOCK)), + GOLEM(GolemBoss.class, IronWizardDisplay.class), - SLIME(SlimeBoss.class, SlimeKingDisplay.class, new ItemStack( - Material.EMERALD_BLOCK)); + SNAKE(SnakeBoss.class, SnakeDisplay.class), + + SLIME(SlimeBoss.class, SlimeKingDisplay.class); private Class _bossClass; - private ItemStack _bossHead; private Class _bossDisplay; private BattleBoss(Class bossClass, - Class displayClass, ItemStack bossHead) + Class displayClass) { _bossClass = bossClass; - _bossHead = bossHead; _bossDisplay = displayClass; } @@ -39,8 +36,4 @@ public enum BattleBoss return _bossDisplay; } - public ItemStack getItem() - { - return _bossHead; - } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java index b95610f1e..e3190ceec 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java @@ -52,6 +52,8 @@ public class BossBattles extends TeamGame { "Fight some bosses" }); + + HungerSet = 20; } @Override @@ -110,12 +112,10 @@ public class BossBattles extends TeamGame return; } - CreatureAllowOverride = false; - HandlerList.unregisterAll(_currentBoss); // If the event was cancelled, we don't need to run a cleanup - if (_currentBoss.getState() == EventState.COMPLETE) + if (_currentBoss.getState() != EventState.CANCELLED) _currentBoss.cleanup(); } @@ -224,7 +224,7 @@ public class BossBattles extends TeamGame int i = 0; ArrayList locations = UtilShapes.getPointsInCircle( new Location(UtilWorld.getWorld("world"), 0, 104, 0), - BattleBoss.values().length, 5); + BattleBoss.values().length, 4.5); for (BattleBoss boss : BattleBoss.values()) { @@ -242,12 +242,12 @@ public class BossBattles extends TeamGame BossDisplay bossDisplay = constructor.newInstance(this, BattleBoss.values()[i], loc); - Bukkit.getPluginManager().registerEvents(bossDisplay, - getArcadeManager().getPlugin()); - bossDisplay.start(); bossDisplay.spawnHologram(); + Bukkit.getPluginManager().registerEvents(bossDisplay, + getArcadeManager().getPlugin()); + _displays.add(bossDisplay); System.out.print( diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java new file mode 100644 index 000000000..15a7d0ee2 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java @@ -0,0 +1,242 @@ +package nautilus.game.arcade.game.games.bossbattles.displays; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.NumberConversions; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.snake.SnakeTail; +import nautilus.game.arcade.game.games.bossbattles.BattleBoss; +import nautilus.game.arcade.game.games.bossbattles.BossBattles; +import net.minecraft.server.v1_7_R4.Packet; +import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy; + +public class SnakeDisplay extends BossDisplay +{ + private ArrayList _snakeTail = new ArrayList(); + private double _seperator = 0.5; + private ArrayList _canSee = new ArrayList(); + private Entity _entity; + private float _yaw; + private float _pitch; + + public SnakeDisplay(BossBattles plugin, BattleBoss boss, Location location) + { + super(plugin, boss, location); + } + + @Override + public String getDisplayName() + { + return C.cDGreen + "Snake"; + } + + @Override + public void removeBoss() + { + int[] ids = new int[_snakeTail.size()]; + + for (int a = 0; a < _snakeTail.size(); a++) + { + ids[a] = _snakeTail.get(a).getId(); + } + + Packet destroy = new PacketPlayOutEntityDestroy(ids); + + for (Player player : _canSee) + { + UtilPlayer.sendPacket(player, destroy); + } + + _entity.remove(); + } + + @Override + public void start() + { + Vector dir = new Vector(UtilMath.rr(1, true), 0, UtilMath.rr(1, true)) + .normalize().multiply(_seperator); + + for (int i = 0; i < 20; i++) + { + Vector loc = getLocation().toVector() + .subtract(dir.clone().multiply(-i)); + + SnakeTail tail = new SnakeTail(loc, new ItemStack( + i == 0 ? Material.COBBLESTONE : Material.STONE)); + _snakeTail.add(tail); + } + + Plugin.CreatureAllowOverride = true; + + _entity = getLocation().getWorld().spawnEntity(getLocation(), + EntityType.IRON_GOLEM); + UtilEnt.Vegetate(_entity); + ((LivingEntity) _entity).addPotionEffect( + new PotionEffect(PotionEffectType.INVISIBILITY, 10000, 0)); + + Plugin.CreatureAllowOverride = false; + + addEntity(_entity); + } + + @EventHandler + public void onSecond(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + { + return; + } + + ArrayList canSee = new ArrayList(); + + for (Player player : getLocation().getWorld().getPlayers()) + { + if (player.getLocation().distance(getLocation()) < 120) + { + canSee.add(player); + } + } + + Iterator itel2 = _canSee.iterator(); + + int[] ids = new int[_snakeTail.size()]; + + for (int a = 0; a < _snakeTail.size(); a++) + { + ids[a] = _snakeTail.get(a).getId(); + } + + Packet destroy = new PacketPlayOutEntityDestroy(ids); + + while (itel2.hasNext()) + { + Player player = itel2.next(); + + if (!canSee.contains(player)) + { + itel2.remove(); + UtilPlayer.sendPacket(player, destroy); + } + } + + for (Player player : canSee) + { + if (!_canSee.contains(player)) + { + _canSee.add(player); + + for (SnakeTail tail : _snakeTail) + { + UtilPlayer.sendPacket(player, tail.getSpawn()); + } + } + } + } + + @EventHandler + public void onInteract(PlayerInteractEntityEvent event) + { + if (!event.getRightClicked().equals(_entity)) + { + return; + } + + setChosen(event.getPlayer()); + } + + public void setYaw(float yaw) + { + _yaw = (yaw + 720) % 360; + } + + public void setPitch(float pitch) + { + _pitch = (pitch + 720) % 360; + } + + public float getPitch() + { + return _pitch; + } + + public float getYaw() + { + return _yaw; + } + + @EventHandler + public void onTick(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + Packet[] packets = new Packet[_snakeTail.size()]; + + for (int i = 0; i < _snakeTail.size(); i++) + { + SnakeTail tail = _snakeTail.get(i); + Vector vector = new Vector(); + + if (i == 0) + { + setPitch(getPitch() + 3); + + double rotX = getYaw(); + double rotY = getPitch(); + + vector.setY(-Math.sin(Math.toRadians(rotY))); + + double xz = Math.cos(Math.toRadians(rotY)); + + vector.setX(-xz * Math.sin(Math.toRadians(rotX))); + vector.setZ(xz * Math.cos(Math.toRadians(rotX))); + + vector.normalize().multiply(0.2); + } + else + { + SnakeTail t = _snakeTail.get(i - 1); + + vector = t.getPrevious().clone().subtract(tail.getLocation()); + } + + packets[i] = tail + .moveEntity(tail.getLocation().clone().add(vector)); + } + + for (Player player : _canSee) + { + UtilPlayer.sendPacket(player, packets); + } + } + + @Override + public Location getHologramLocation() + { + return getLocation().clone().add(0, 3, 0); + } + +} From 7cd98c82e9efa1ce56cbb97adfb63c1b48558ab5 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 29 Aug 2015 12:06:57 -0700 Subject: [PATCH 03/16] Refactor and move BossAbiliy --- .../abilities => }/BossAbility.java | 19 ++++++++++++++----- .../core/boss/ironwizard/GolemCreature.java | 2 +- .../ironwizard/abilities/GolemBlockHail.java | 11 ++++++----- .../ironwizard/abilities/GolemBlockShot.java | 5 +++-- .../ironwizard/abilities/GolemCaveIn.java | 5 +++-- .../ironwizard/abilities/GolemEarthquake.java | 9 +++++---- .../abilities/GolemExplodingAura.java | 11 ++++++----- .../abilities/GolemExplosiveBlock.java | 3 ++- .../abilities/GolemMeleeAttack.java | 7 ++++--- .../ironwizard/abilities/GolemRumble.java | 7 ++++--- .../ironwizard/abilities/GolemRupture.java | 7 ++++--- .../boss/ironwizard/abilities/GolemSlam.java | 7 ++++--- .../abilities/GolemWallExplode.java | 5 +++-- 13 files changed, 59 insertions(+), 39 deletions(-) rename Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/{ironwizard/abilities => }/BossAbility.java (88%) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/BossAbility.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/BossAbility.java similarity index 88% rename from Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/BossAbility.java rename to Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/BossAbility.java index 4165efef4..c29f78693 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/BossAbility.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/BossAbility.java @@ -1,4 +1,4 @@ -package mineplex.minecraft.game.core.boss.ironwizard.abilities; +package mineplex.minecraft.game.core.boss; import java.util.HashMap; import java.util.UUID; @@ -6,7 +6,6 @@ import java.util.UUID; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; -import mineplex.minecraft.game.core.boss.EventCreature; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -53,10 +52,10 @@ public abstract class BossAbility imp public Y getEntity() { - return (Y) getGolem().getEntity(); + return (Y) getBoss().getEntity(); } - public T getGolem() + public T getBoss() { return _creature; } @@ -71,7 +70,7 @@ public abstract class BossAbility imp return getTarget(30); } - public Player getTarget(double maxDistance) + public Player getTarget(double minDistance, double maxDistance) { Player target = null; double dist = 0; @@ -85,6 +84,11 @@ public abstract class BossAbility imp double d = player.getLocation().distance(getLocation()); + if (d < minDistance) + { + continue; + } + if (target == null || dist > d) { target = player; @@ -95,6 +99,11 @@ public abstract class BossAbility imp return target; } + public Player getTarget(double maxDistance) + { + return getTarget(0, maxDistance); + } + public abstract boolean hasFinished(); public abstract void setFinished(); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java index f30a11bb0..06f1dc23d 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java @@ -15,8 +15,8 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.EventCreature; -import mineplex.minecraft.game.core.boss.ironwizard.abilities.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemBlockHail; import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemBlockShot; import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemCaveIn; diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockHail.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockHail.java index c4c83d564..70f5efa13 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockHail.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockHail.java @@ -16,6 +16,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilShapes; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import net.minecraft.server.v1_7_R4.AxisAlignedBB; import net.minecraft.server.v1_7_R4.EntityIronGolem; @@ -221,14 +222,14 @@ public class GolemBlockHail extends BossAbility // if (canDamage(victim)) { - getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, - DamageCause.CONTACT, 10 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Block Hail", + getBoss().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, + DamageCause.CONTACT, 10 * getBoss().getDifficulty(), true, true, false, "Iron Wizard Block Hail", "Iron Wizard Block Hail"); } if (victim instanceof Player) { - getGolem().getEvent().getCondition().Factory().Slow("Iron Wizard Block Hail", (LivingEntity) victim, + getBoss().getEvent().getCondition().Factory().Slow("Iron Wizard Block Hail", (LivingEntity) victim, getEntity(), 3, 2, false, false, false, false); } @@ -304,8 +305,8 @@ public class GolemBlockHail extends BossAbility { if (canDamage(player)) { - getGolem().getEvent().getDamageManager().NewDamageEvent(player, getEntity(), null, - DamageCause.CONTACT, 10 * getGolem().getDifficulty(), true, true, false, + getBoss().getEvent().getDamageManager().NewDamageEvent(player, getEntity(), null, + DamageCause.CONTACT, 10 * getBoss().getDifficulty(), true, true, false, "Iron Wizard Protection", "Iron Wizard Protection"); loc.getWorld().playEffect(player.getLocation(), Effect.STEP_SOUND, Material.OBSIDIAN.getId()); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockShot.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockShot.java index cfa76031c..850046b60 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockShot.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemBlockShot.java @@ -20,6 +20,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import net.minecraft.server.v1_7_R4.AxisAlignedBB; import net.minecraft.server.v1_7_R4.EntityIronGolem; @@ -226,8 +227,8 @@ public class GolemBlockShot extends BossAbility { cur.getWorld().playEffect(victim.getEyeLocation().subtract(0, 0.5, 0), Effect.STEP_SOUND, cur.getBlockId()); - getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, - DamageCause.CONTACT, 10 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Block Shot", + getBoss().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, + DamageCause.CONTACT, 10 * getBoss().getDifficulty(), true, true, false, "Iron Wizard Block Shot", "Iron Wizard Block Shot"); cur.remove(); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemCaveIn.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemCaveIn.java index d7bba9036..852612c87 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemCaveIn.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemCaveIn.java @@ -16,6 +16,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilShapes; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import net.minecraft.server.v1_7_R4.AxisAlignedBB; import net.minecraft.server.v1_7_R4.MathHelper; @@ -167,8 +168,8 @@ public class GolemCaveIn extends BossAbility if (canDamage(victim)) { - getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, - DamageCause.CONTACT, 10 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Cave In", + getBoss().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, + DamageCause.CONTACT, 10 * getBoss().getDifficulty(), true, true, false, "Iron Wizard Cave In", "Iron Wizard Cave In"); } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemEarthquake.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemEarthquake.java index 395a37ea4..1d06110c2 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemEarthquake.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemEarthquake.java @@ -10,6 +10,7 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilServer; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import org.bukkit.Bukkit; @@ -139,11 +140,11 @@ public class GolemEarthquake extends BossAbility { _damaged.add(player.getUniqueId()); - getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) player, getEntity(), null, - DamageCause.CONTACT, 14 * getGolem().getDifficulty(), false, true, false, "Iron Wizard Earthquake", + getBoss().getEvent().getDamageManager().NewDamageEvent((LivingEntity) player, getEntity(), null, + DamageCause.CONTACT, 14 * getBoss().getDifficulty(), false, true, false, "Iron Wizard Earthquake", "Iron Wizard Earthquake"); - getGolem().getEvent().getCondition().Factory().Slow("Earthquake", (LivingEntity) player, getEntity(), 3, 1, false, + getBoss().getEvent().getCondition().Factory().Slow("Earthquake", (LivingEntity) player, getEntity(), 3, 1, false, false, false, false); // Velocity @@ -151,7 +152,7 @@ public class GolemEarthquake extends BossAbility 1.8, true, 0, 0.5, 0.5, true); // Condition - getGolem().getEvent().getCondition().Factory().Falling("Earthquake", player, getEntity(), 10, false, true); + getBoss().getEvent().getCondition().Factory().Falling("Earthquake", player, getEntity(), 10, false, true); } } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplodingAura.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplodingAura.java index 7041575b0..b61d13743 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplodingAura.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplodingAura.java @@ -45,6 +45,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -106,7 +107,7 @@ public class GolemExplodingAura extends BossAbility @Override public void tick() { - if (_tick < 25 * 25 && getGolem().getHealth() > 30) + if (_tick < 25 * 25 && getBoss().getHealth() > 30) { double angle = (2 * Math.PI) / UtilMath.random.nextDouble(); double x = 1.7 * Math.cos(angle); @@ -118,8 +119,8 @@ public class GolemExplodingAura extends BossAbility for (Player player : UtilPlayer.getNearby(getLocation(), 3, true)) { - getGolem().getEvent().getDamageManager().NewDamageEvent(player, getEntity(), null, DamageCause.CONTACT, - 6 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Protection", "Iron Wizard Protection"); + getBoss().getEvent().getDamageManager().NewDamageEvent(player, getEntity(), null, DamageCause.CONTACT, + 6 * getBoss().getDifficulty(), true, true, false, "Iron Wizard Protection", "Iron Wizard Protection"); UtilAction.velocity(player, UtilAlg.getTrajectory(getEntity(), player), 1, true, 0.3, 0, 0.3, false); } } @@ -347,8 +348,8 @@ public class GolemExplodingAura extends BossAbility // if (canDamage(victim)) { - getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, - DamageCause.CONTACT, 6 * getGolem().getDifficulty(), true, true, false, "Blocky Iron Wizard Aura", + getBoss().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, + DamageCause.CONTACT, 6 * getBoss().getDifficulty(), true, true, false, "Blocky Iron Wizard Aura", "Blocky Iron Wizard Aura"); } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplosiveBlock.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplosiveBlock.java index 9d8e825f4..62fdb8e23 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplosiveBlock.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemExplosiveBlock.java @@ -17,6 +17,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import net.minecraft.server.v1_7_R4.AxisAlignedBB; @@ -170,7 +171,7 @@ public class GolemExplosiveBlock extends BossAbility { _explosionsLeft++; - Bukkit.getScheduler().scheduleSyncDelayedTask(getGolem().getEvent().getPlugin(), new Runnable() + Bukkit.getScheduler().scheduleSyncDelayedTask(getBoss().getEvent().getPlugin(), new Runnable() { public void run() { diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemMeleeAttack.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemMeleeAttack.java index 8a28a753f..f35b7f5ac 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemMeleeAttack.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemMeleeAttack.java @@ -3,6 +3,7 @@ package mineplex.minecraft.game.core.boss.ironwizard.abilities; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import net.minecraft.server.v1_7_R4.EntityIronGolem; @@ -65,15 +66,15 @@ public class GolemMeleeAttack extends BossAbility UtilEnt.CreatureLook(getEntity(), target); - getGolem().getEvent().getDamageManager().NewDamageEvent(target, getEntity(), null, DamageCause.ENTITY_ATTACK, - 10 * getGolem().getDifficulty(), false, true, false, "Iron Wizard Melee Attack", "Iron Wizard Melee Attack"); + getBoss().getEvent().getDamageManager().NewDamageEvent(target, getEntity(), null, DamageCause.ENTITY_ATTACK, + 10 * getBoss().getDifficulty(), false, true, false, "Iron Wizard Melee Attack", "Iron Wizard Melee Attack"); Vector vec = getLocation().getDirection(); vec.setY(0).normalize().setY(0.5).multiply(2.4); UtilAction.velocity(target, vec); - getGolem().getEvent().getCondition().Factory().Falling("Iron Wizard Throw", target, getEntity(), 3, false, false); + getBoss().getEvent().getCondition().Factory().Falling("Iron Wizard Throw", target, getEntity(), 3, false, false); target.getWorld().playSound(target.getLocation(), Sound.IRONGOLEM_THROW, 3, 0.9F); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRumble.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRumble.java index d4d15ec0c..47b914479 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRumble.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRumble.java @@ -8,6 +8,7 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import net.minecraft.server.v1_7_R4.EntityIronGolem; @@ -185,8 +186,8 @@ public class GolemRumble extends BossAbility if (canDamage(entity)) { - getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) entity, getEntity(), null, - DamageCause.CONTACT, 8 * getGolem().getDifficulty(), false, true, false, "Iron Wizard Rumble", + getBoss().getEvent().getDamageManager().NewDamageEvent((LivingEntity) entity, getEntity(), null, + DamageCause.CONTACT, 8 * getBoss().getDifficulty(), false, true, false, "Iron Wizard Rumble", "Iron Wizard Rumble"); } @@ -194,7 +195,7 @@ public class GolemRumble extends BossAbility if (entity instanceof Player) { - getGolem().getEvent().getCondition().Factory().Slow("Rumble", (LivingEntity) entity, getEntity(), 3, 1, + getBoss().getEvent().getCondition().Factory().Slow("Rumble", (LivingEntity) entity, getEntity(), 3, 1, false, false, false, false); } } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRupture.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRupture.java index ada73583d..df3b08229 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRupture.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemRupture.java @@ -37,6 +37,7 @@ import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.common.util.UtilTime; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import net.minecraft.server.v1_7_R4.EntityIronGolem; @@ -288,11 +289,11 @@ public class GolemRupture extends BossAbility 0.8 + 0.8 * targets.get(cur), true, 0, 0.4 + 1.0 * targets.get(cur), 1.4, true); // Condition - getGolem().getEvent().getCondition().Factory().Falling("Rupture", cur, getEntity(), 10, false, true); + getBoss().getEvent().getCondition().Factory().Falling("Rupture", cur, getEntity(), 10, false, true); // Damage Event - getGolem().getEvent().getDamageManager().NewDamageEvent(cur, getEntity(), null, DamageCause.CUSTOM, - 8 * getGolem().getDifficulty(), false, true, false, "Iron Wizard", "Rupture"); + getBoss().getEvent().getDamageManager().NewDamageEvent(cur, getEntity(), null, DamageCause.CUSTOM, + 8 * getBoss().getDifficulty(), false, true, false, "Iron Wizard", "Rupture"); } ArrayList blocks = new ArrayList(); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemSlam.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemSlam.java index 29798abb9..a98f67bfd 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemSlam.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemSlam.java @@ -11,6 +11,7 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import org.bukkit.Effect; @@ -191,11 +192,11 @@ public class GolemSlam extends BossAbility 0.8 + 0.8 * targets.get(cur), true, 0, 0.4 + 1.0 * targets.get(cur), 1.4, true); // Condition - getGolem().getEvent().getCondition().Factory().Falling("Rupture", cur, getEntity(), 10, false, true); + getBoss().getEvent().getCondition().Factory().Falling("Rupture", cur, getEntity(), 10, false, true); // Damage Event - getGolem().getEvent().getDamageManager().NewDamageEvent(cur, getEntity(), null, DamageCause.CUSTOM, - 8 * getGolem().getDifficulty(), false, true, false, "Iron Wizard", "Rupture"); + getBoss().getEvent().getDamageManager().NewDamageEvent(cur, getEntity(), null, DamageCause.CUSTOM, + 8 * getBoss().getDifficulty(), false, true, false, "Iron Wizard", "Rupture"); } ArrayList blocks = new ArrayList(); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemWallExplode.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemWallExplode.java index d4de385cb..7cebf5961 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemWallExplode.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/abilities/GolemWallExplode.java @@ -18,6 +18,7 @@ import mineplex.core.common.util.UtilShapes; import mineplex.core.common.util.UtilTime; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.BossAbility; import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; import net.minecraft.server.v1_7_R4.AxisAlignedBB; import net.minecraft.server.v1_7_R4.MathHelper; @@ -193,8 +194,8 @@ public class GolemWallExplode extends BossAbility if (canDamage(victim)) { - getGolem().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, - DamageCause.CONTACT, 10 * getGolem().getDifficulty(), true, true, false, "Iron Wizard Wall Explosion", + getBoss().getEvent().getDamageManager().NewDamageEvent((LivingEntity) victim, getEntity(), null, + DamageCause.CONTACT, 10 * getBoss().getDifficulty(), true, true, false, "Iron Wizard Wall Explosion", "Iron Wizard Wall Explosion"); } From 5d2850947447d318b32d9e73684e89ba65208afd Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 29 Aug 2015 12:38:19 -0700 Subject: [PATCH 04/16] Snakes tail final location instead of rel movement --- .../minecraft/game/core/boss/snake/SnakeTail.java | 6 ++++-- .../arcade/game/games/bossbattles/BossBattles.java | 13 +++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java index 80589f6dd..142c4e09d 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java @@ -36,8 +36,10 @@ public class SnakeTail return _previous; } - public Packet moveEntity(Vector toMove) + public Packet moveEntity(Vector newLocation) { + Vector toMove = newLocation.clone().subtract(_entityLocation); + int x = (int) Math.floor(32 * toMove.getX()); int y = (int) Math.floor(32 * toMove.getY()); int z = (int) Math.floor(32 * toMove.getZ()); @@ -59,7 +61,7 @@ public class SnakeTail } else { - _entityLocation.add(toMove); + _entityLocation = newLocation.clone(); x = (int) Math.floor(_entityLocation.getX() * 32); y = (int) Math.floor(_entityLocation.getY() * 32); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java index e3190ceec..6cadf9887 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java @@ -9,6 +9,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; +import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.util.Vector; import mineplex.core.common.util.C; @@ -54,6 +55,14 @@ public class BossBattles extends TeamGame }); HungerSet = 20; + CreatureAllowOverride = true; + } + + @EventHandler + public void onSpawn(CreatureSpawnEvent event) + { + if (event.getSpawnReason() != event.getSpawnReason().CUSTOM) + event.setCancelled(true); } @Override @@ -281,14 +290,10 @@ public class BossBattles extends TeamGame return; } - CreatureAllowOverride = true; - _currentBoss.start(); Bukkit.getPluginManager().registerEvents(_currentBoss, getArcadeManager().getPlugin()); - - CreatureAllowOverride = false; } public WorldEvent createInstance(Class clazz, Location centerLocation) From d2bc4b8cb41a0b99624efa749ae38e7632842a15 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sat, 29 Aug 2015 13:13:04 -0700 Subject: [PATCH 05/16] SNAAAKE --- .../game/core/boss/snake/SnakeBoss.java | 4 +- .../game/core/boss/snake/SnakeCreature.java | 67 +++++++++++-------- .../{SnakeTail.java => SnakeSegment.java} | 10 +-- .../bossbattles/displays/SnakeDisplay.java | 12 ++-- 4 files changed, 50 insertions(+), 43 deletions(-) rename Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/{SnakeTail.java => SnakeSegment.java} (95%) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java index ba67bb00c..5fe76e901 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java @@ -23,7 +23,7 @@ public class SnakeBoss extends WorldEvent protected void customStart() { Bukkit.broadcastMessage("Custom Start"); - spawnGolem(getCenterLocation()); + spawn(getCenterLocation()); setState(EventState.LIVE); announceStart(); } @@ -51,7 +51,7 @@ public class SnakeBoss extends WorldEvent } } - private SnakeCreature spawnGolem(Location location) + private SnakeCreature spawn(Location location) { SnakeCreature slimeCreature = new SnakeCreature(this, location); registerCreature(slimeCreature); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java index 6dc114e31..84d4836f3 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java @@ -15,6 +15,7 @@ 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.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; @@ -27,10 +28,11 @@ import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy; public class SnakeCreature extends EventCreature { - private ArrayList _snakeTail = new ArrayList(); - private HashMap _direction = new HashMap(); + private ArrayList _segments = new ArrayList(); private double _seperator = 0.5; private ArrayList _canSee = new ArrayList(); + + private Location _waypoint; public SnakeCreature(WorldEvent event, Location spawnLocation) { @@ -44,16 +46,22 @@ public class SnakeCreature extends EventCreature UtilEnt.Vegetate(getEntity()); Vector dir = new Vector(UtilMath.rr(1, true), 0, UtilMath.rr(1, true)).normalize().multiply(_seperator); + getNewWaypoint(); + for (int i = 0; i < getHealth() / 50; i++) { - SnakeTail tail = new SnakeTail(getSpawnLocation().toVector().subtract(dir.clone().multiply(-i)), + SnakeSegment tail = new SnakeSegment(getSpawnLocation().toVector().subtract(dir.clone().multiply(-i)), new ItemStack(i == 0 ? Material.COBBLESTONE : Material.STONE)); - _direction.put(tail, dir); - _snakeTail.add(tail); + _segments.add(tail); } } + private void getNewWaypoint() + { + _waypoint = getSpawnLocation().clone().add(Math.random() * 40 - 20, Math.random() * 24 - 8, Math.random() * 40 - 20); + } + @EventHandler public void onSecond(UpdateEvent event) { @@ -62,7 +70,7 @@ public class SnakeCreature extends EventCreature return; } - Location loc = _snakeTail.get(0).getLocation().toLocation(getSpawnLocation().getWorld()); + Location loc = _segments.get(0).getLocation().toLocation(getSpawnLocation().getWorld()); ArrayList canSee = new ArrayList(); @@ -74,23 +82,23 @@ public class SnakeCreature extends EventCreature } } - Iterator itel2 = _canSee.iterator(); + Iterator iter2 = _canSee.iterator(); - int[] ids = new int[_snakeTail.size()]; + int[] ids = new int[_segments.size()]; - for (int a = 0; a < _snakeTail.size(); a++) + for (int a = 0; a < _segments.size(); a++) { - ids[a] = _snakeTail.get(a).getId(); + ids[a] = _segments.get(a).getId(); } Packet destroy = new PacketPlayOutEntityDestroy(ids); - while (itel2.hasNext()) + while (iter2.hasNext()) { - Player player = itel2.next(); + Player player = iter2.next(); if (!canSee.contains(player)) { - itel2.remove(); + iter2.remove(); UtilPlayer.sendPacket(player, destroy); } } @@ -100,7 +108,7 @@ public class SnakeCreature extends EventCreature { _canSee.add(player); - for (SnakeTail tail : _snakeTail) + for (SnakeSegment tail : _segments) { UtilPlayer.sendPacket(player, tail.getSpawn()); } @@ -111,11 +119,11 @@ public class SnakeCreature extends EventCreature @Override public void dieCustom() { - int[] ids = new int[_snakeTail.size()]; + int[] ids = new int[_segments.size()]; - for (int a = 0; a < _snakeTail.size(); a++) + for (int a = 0; a < _segments.size(); a++) { - ids[a] = _snakeTail.get(a).getId(); + ids[a] = _segments.get(a).getId(); } Packet destroy = new PacketPlayOutEntityDestroy(ids); @@ -127,34 +135,39 @@ public class SnakeCreature extends EventCreature } @EventHandler - public void onTick(UpdateEvent event) + public void onTickMove(UpdateEvent event) { if (event.getType() != UpdateType.TICK) { return; } - Packet[] packets = new Packet[_snakeTail.size()]; + Packet[] packets = new Packet[_segments.size()]; - for (int i = 0; i < _snakeTail.size(); i++) + + for (int i = _segments.size()-1; i>=0; i++) { - SnakeTail tail = _snakeTail.get(i); - - Vector vec = _direction.get(tail); + SnakeSegment seg = _segments.get(i); + + Vector vec = seg.getLocation(); if (i == 0) { - vec.add(new Vector(0.01, 0, 0)); - // TODO + vec.add(UtilAlg.getTrajectory(vec, _waypoint.toVector()).multiply(0.01)); + + if (UtilMath.offset(vec, _waypoint.toVector()) < 5) + { + getNewWaypoint(); + } } else { - vec.add(_direction.get(_snakeTail.get(i - 1)).multiply(0.9)); + vec = _segments.get(i-1).getLocation(); } vec.normalize().multiply(0.6); - packets[i] = tail.moveEntity(vec); + packets[i] = seg.moveEntity(vec); } for (Player player : _canSee) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeSegment.java similarity index 95% rename from Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java rename to Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeSegment.java index 142c4e09d..e8360bc83 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeTail.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeSegment.java @@ -13,14 +13,13 @@ import net.minecraft.server.v1_7_R4.PacketPlayOutEntityTeleport; import net.minecraft.server.v1_7_R4.PacketPlayOutRelEntityMoveLook; import net.minecraft.server.v1_7_R4.PacketPlayOutSpawnEntityLiving; -public class SnakeTail +public class SnakeSegment { private int _entityId = UtilEnt.getNewEntityId(); private Vector _entityLocation; private ItemStack _item; - private Vector _previous; - public SnakeTail(Vector location, ItemStack item) + public SnakeSegment(Vector location, ItemStack item) { _entityLocation = location.clone(); _item = item; @@ -31,11 +30,6 @@ public class SnakeTail return _entityId; } - public Vector getPrevious() - { - return _previous; - } - public Packet moveEntity(Vector newLocation) { Vector toMove = newLocation.clone().subtract(_entityLocation); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java index 15a7d0ee2..998273540 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java @@ -25,7 +25,7 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import mineplex.minecraft.game.core.boss.snake.SnakeTail; +import mineplex.minecraft.game.core.boss.snake.SnakeSegment; import nautilus.game.arcade.game.games.bossbattles.BattleBoss; import nautilus.game.arcade.game.games.bossbattles.BossBattles; import net.minecraft.server.v1_7_R4.Packet; @@ -33,7 +33,7 @@ import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy; public class SnakeDisplay extends BossDisplay { - private ArrayList _snakeTail = new ArrayList(); + private ArrayList _snakeTail = new ArrayList(); private double _seperator = 0.5; private ArrayList _canSee = new ArrayList(); private Entity _entity; @@ -82,7 +82,7 @@ public class SnakeDisplay extends BossDisplay Vector loc = getLocation().toVector() .subtract(dir.clone().multiply(-i)); - SnakeTail tail = new SnakeTail(loc, new ItemStack( + SnakeSegment tail = new SnakeSegment(loc, new ItemStack( i == 0 ? Material.COBBLESTONE : Material.STONE)); _snakeTail.add(tail); } @@ -146,7 +146,7 @@ public class SnakeDisplay extends BossDisplay { _canSee.add(player); - for (SnakeTail tail : _snakeTail) + for (SnakeSegment tail : _snakeTail) { UtilPlayer.sendPacket(player, tail.getSpawn()); } @@ -197,7 +197,7 @@ public class SnakeDisplay extends BossDisplay for (int i = 0; i < _snakeTail.size(); i++) { - SnakeTail tail = _snakeTail.get(i); + SnakeSegment tail = _snakeTail.get(i); Vector vector = new Vector(); if (i == 0) @@ -218,7 +218,7 @@ public class SnakeDisplay extends BossDisplay } else { - SnakeTail t = _snakeTail.get(i - 1); + SnakeSegment t = _snakeTail.get(i - 1); vector = t.getPrevious().clone().subtract(tail.getLocation()); } From fae27df496cd6874c591dbec3034abb92f8370a8 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sat, 29 Aug 2015 13:35:31 -0700 Subject: [PATCH 06/16] Add ClansLoginManager, TNT Generators (Still needs persistence) --- .../mineplex/core/common/util/UtilWorld.java | 51 +++- .../mineplex/game/clans/clans/ClanInfo.java | 13 + .../clans/clans/ClansDataAccessLayer.java | 65 +++-- .../mineplex/game/clans/clans/ClansGame.java | 2 +- .../game/clans/clans/ClansManager.java | 17 +- .../clans/commands/ClansLoginManager.java | 35 +-- .../clans/clans/event/ClanDeleteEvent.java | 37 +++ .../clans/tntGenerator/TntGenerator.java | 45 ++++ .../tntGenerator/TntGeneratorManager.java | 255 ++++++++++++++++++ .../game/clans/gameplay/Gameplay.java | 15 -- 10 files changed, 464 insertions(+), 71 deletions(-) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/ClanDeleteEvent.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGenerator.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java index af3aa4f91..923256dc6 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java @@ -7,6 +7,7 @@ import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.World.Environment; +import org.bukkit.block.Block; import org.bukkit.util.Vector; public class UtilWorld @@ -45,7 +46,55 @@ public class UtilWorld return null; } } - + + public static String blockToStr(Block block) + { + if (block == null) + return ""; + + return block.getWorld().getName() + "," + + block.getX() + "," + + block.getY() + "," + + block.getZ(); + } + + public static String blockToStrClean(Block block) + { + if (block == null) + return ""; + + return "(" + block.getX() + "," + + block.getY() + "," + + block.getZ() + ")"; + } + + public static Block strToBlock(String string) + { + if (string.length() == 0) + return null; + + String[] parts = string.split(","); + + try + { + for (World cur : UtilServer.getServer().getWorlds()) + { + if (cur.getName().equalsIgnoreCase(parts[0])) + { + int x = Integer.parseInt(parts[1]); + int y = Integer.parseInt(parts[1]); + int z = Integer.parseInt(parts[1]); + cur.getBlockAt(x, y, z); + } + } + } + catch (Exception e) + { + } + + return null; + } + public static String locToStr(Location loc) { if (loc == null) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java index 9e721cdf8..174bae42b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java @@ -26,6 +26,7 @@ import mineplex.game.clans.clans.repository.tokens.ClanEnemyToken; import mineplex.game.clans.clans.repository.tokens.ClanMemberToken; import mineplex.game.clans.clans.repository.tokens.ClanTerritoryToken; import mineplex.game.clans.clans.repository.tokens.ClanToken; +import mineplex.game.clans.clans.tntGenerator.TntGenerator; public class ClanInfo { @@ -47,6 +48,8 @@ public class ClanInfo private Timestamp _dateCreated; private Timestamp _lastOnline = null; + private TntGenerator _generator; + // Loaded from Client private NautHashMap _memberMap = new NautHashMap(); private NautHashMap _allyMap = new NautHashMap(); @@ -433,6 +436,16 @@ public class ClanInfo TimeUnit.FIT) + " to Protection"; } + public TntGenerator getGenerator() + { + return _generator; + } + + public void setGenerator(TntGenerator generator) + { + _generator = generator; + } + public boolean isAdmin() { return _admin; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java index 36a5ce169..b0c75e4d4 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java @@ -2,17 +2,20 @@ package mineplex.game.clans.clans; import java.sql.Timestamp; +import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import com.sun.org.apache.xpath.internal.operations.Bool; import mineplex.core.common.util.Callback; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilWorld; +import mineplex.game.clans.clans.event.ClanDeleteEvent; import mineplex.game.clans.clans.repository.ClanRepository; import mineplex.game.clans.clans.repository.ClanTerritory; import mineplex.game.clans.clans.repository.tokens.ClanEnemyToken; @@ -39,36 +42,46 @@ public class ClansDataAccessLayer @Override public void run() { - boolean out = _repository.deleteClan(clan.getId()); + final boolean out = _repository.deleteClan(clan.getId()); - if (out) + runSync(new Runnable() { - //Territory Unclaim - for (String cur : clan.getClaimSet()) - _manager.getClaimMap().remove(cur); - - _manager.getClanMap().remove(clan.getName()); - - for (String cur : clan.getMembers().keySet()) + @Override + public void run() { - _manager.getClanMemberMap().remove(cur); + if (out) + { + //Territory Unclaim + for (String cur : clan.getClaimSet()) + _manager.getClaimMap().remove(cur); + + _manager.getClanMap().remove(clan.getName()); + + for (String cur : clan.getMembers().keySet()) + { + _manager.getClanMemberMap().remove(cur); + } + + //Clean from Others + for (ClanInfo cur : _manager.getClanMap().values()) + { + cur.getAllyMap().remove(clan.getName()); + cur.getRequestMap().remove(clan.getName()); + } + + //Scoreboard + _scoreboard.refresh(clan); + + //Log + _manager.log("Deleted [" + clan.getName() + "]."); + + ClanDeleteEvent event = new ClanDeleteEvent(clan); + Bukkit.getServer().getPluginManager().callEvent(event); + } + + if (callback != null) callback.run(out); } - - //Clean from Others - for (ClanInfo cur : _manager.getClanMap().values()) - { - cur.getAllyMap().remove(clan.getName()); - cur.getRequestMap().remove(clan.getName()); - } - - //Scoreboard - _scoreboard.refresh(clan); - - //Log - _manager.log("Deleted [" + clan.getName() + "]."); - } - - if (callback != null) callback.run(out); + }); } }); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansGame.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansGame.java index 6baa2ec3f..1619e4b75 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansGame.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansGame.java @@ -80,7 +80,7 @@ public class ClansGame extends MiniPlugin } } - @EventHandler(priority = EventPriority.LOW) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void SkillTrigger(SkillTriggerEvent event) { if (!Clans.getClanUtility().isSafe(event.GetPlayer())) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 6a42a4cae..dd4dfc1b1 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -6,6 +6,7 @@ import java.util.TimeZone; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack; import org.bukkit.craftbukkit.v1_7_R4.util.CraftMagicNumbers; import org.bukkit.entity.Player; @@ -38,6 +39,7 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilWorld; import mineplex.core.creature.Creature; import mineplex.core.creature.event.CreatureSpawnCustomEvent; import mineplex.core.disguise.DisguiseManager; @@ -69,6 +71,7 @@ import mineplex.game.clans.clans.repository.tokens.ClanMemberToken; import mineplex.game.clans.clans.repository.tokens.ClanTerritoryToken; import mineplex.game.clans.clans.repository.tokens.ClanToken; import mineplex.game.clans.clans.scoreboard.ClansScoreboardManager; +import mineplex.game.clans.clans.tntGenerator.TntGeneratorManager; import mineplex.game.clans.clans.war.WarManager; import mineplex.game.clans.economy.GoldManager; import mineplex.game.clans.clans.worldevent.WorldEventManager; @@ -181,6 +184,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat _clanGame = new ClansGame(plugin, this); _clanUtility = new ClansUtility(this); _itemMapManager = new ItemMapManager(this, _worldEvent); + new TntGeneratorManager(plugin, this); _explosion = new Explosion(plugin, blockRestore); @@ -726,19 +730,6 @@ public class ClansManager extends MiniClientPlugin implements IRelat } - @EventHandler - public void onBreak(BlockBreakEvent event) - { - if (event.getPlayer().getName().equals("Eniloo")) - { - ItemStack item = event.getPlayer().getItemInHand(); - event.getPlayer().sendMessage("Item: " + item.getType().toString()); - event.getPlayer().sendMessage("Id: " + item.getTypeId()); - event.getPlayer().sendMessage("Durability: " + item.getDurability()); - event.getPlayer().sendMessage("Data: " + ((CraftItemStack) item).getHandle().getData()); - } - } - // @EventHandler public void blockBreak(BlockBreakEvent event) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java index f8d2f6de7..9c6561ab2 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java @@ -15,6 +15,7 @@ import org.jooq.impl.DSL; public class ClansLoginManager extends MiniPlugin implements ILoginProcessor { + private boolean _enabled; private String _serverName; public ClansLoginManager(JavaPlugin plugin, CoreClientManager clientManager, String serverName) @@ -22,6 +23,7 @@ public class ClansLoginManager extends MiniPlugin implements ILoginProcessor super("Clans Login Manager", plugin); _serverName = serverName; + _enabled = false; clientManager.addStoredProcedureLoginProcessor(this); } @@ -34,27 +36,30 @@ public class ClansLoginManager extends MiniPlugin implements ILoginProcessor @Override public void processLoginResultSet(final String playerName, int accountId, ResultSet resultSet) throws SQLException { - while (resultSet.next()) + if (_enabled) { - final String serverName = resultSet.getString(1); - - if (serverName != null) + while (resultSet.next()) { - System.out.println("Player " + playerName + " is from server: " + serverName); + final String serverName = resultSet.getString(1); - - if (!serverName.equals(_serverName)) + if (serverName != null) { - runSyncLater(new Runnable() + System.out.println("Player " + playerName + " is from server: " + serverName); + + + if (!serverName.equals(_serverName)) { - @Override - public void run() + runSyncLater(new Runnable() { - final Player player = UtilPlayer.searchExact(playerName); - if (player != null) - kickPlayer(player, serverName); - } - }, 20); + @Override + public void run() + { + final Player player = UtilPlayer.searchExact(playerName); + if (player != null) + kickPlayer(player, serverName); + } + }, 20); + } } } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/ClanDeleteEvent.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/ClanDeleteEvent.java new file mode 100644 index 000000000..20b4bdf35 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/ClanDeleteEvent.java @@ -0,0 +1,37 @@ +package mineplex.game.clans.clans.event; + +import mineplex.core.gadget.types.Gadget; +import mineplex.core.mount.Mount; +import mineplex.game.clans.clans.ClanInfo; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ClanDeleteEvent extends Event +{ + private static final HandlerList handlers = new HandlerList(); + + private ClanInfo _clanInfo; + + public ClanDeleteEvent(ClanInfo clanInfo) + { + _clanInfo = clanInfo; + } + + public ClanInfo getClanInfo() + { + return _clanInfo; + } + + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGenerator.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGenerator.java new file mode 100644 index 000000000..3712896f2 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGenerator.java @@ -0,0 +1,45 @@ +package mineplex.game.clans.clans.tntGenerator; + +import org.bukkit.block.Block; + +public class TntGenerator +{ + private Block _block; + private int _ticks; + private int _stock; + + public TntGenerator(Block block) + { + _block = block; + } + + public int getTicks() + { + return _ticks; + } + + public void setTicks(int ticks) + { + _ticks = ticks; + } + + public void incrementTicks() + { + _ticks++; + } + + public int getStock() + { + return _stock; + } + + public void setStock(int stock) + { + _stock = stock; + } + + public Block getBlock() + { + return _block; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java new file mode 100644 index 000000000..a9c62633c --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java @@ -0,0 +1,255 @@ +package mineplex.game.clans.clans.tntGenerator; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; +import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; + +import net.minecraft.server.v1_7_R4.TileEntityBrewingStand; + +import mineplex.core.MiniPlugin; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilWorld; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.event.ClanDeleteEvent; + +public class TntGeneratorManager extends MiniPlugin +{ + public static final Material GENERATOR_MATERIAL = Material.BREWING_STAND; + public static final Material GENERATOR_DROP_MATERIAL = Material.BREWING_STAND_ITEM; + public static final int TICKS_PER_TNT = 60 * 60 * 10; // 10 Hours + public static final int MAX_GENERATOR_STOCK = 3; + + private ClansManager _clansManager; + + public TntGeneratorManager(JavaPlugin plugin, ClansManager clansManager) + { + super("Tnt Generator", plugin); + + _clansManager = clansManager; + } + + @EventHandler + public void updateGenerators(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + return; + + for (ClanInfo clanInfo : _clansManager.getClanMap().values()) + { + TntGenerator generator = clanInfo.getGenerator(); + if (generator != null) + { + // Check that generator still exists + if (generator.getBlock().getType() != GENERATOR_MATERIAL) + { + clanInfo.setGenerator(null); + continue; + } + + // Check that generator is still in clan territory + ClanInfo owner = _clansManager.getClanUtility().getOwner(generator.getBlock().getLocation()); + if (!clanInfo.equals(owner)) + { + _clansManager.messageClan(clanInfo, F.main("Clans", "Your " + F.elem("TNT Generator") + " has been destroyed due to the land no longer being claimed")); + destroyGenerator(generator); + clanInfo.setGenerator(null); + continue; + } + + + if (generator.getStock() >= MAX_GENERATOR_STOCK) + { + generator.setTicks(0); + } + else + { + if (generator.getTicks() >= TICKS_PER_TNT) + { + _clansManager.messageClan(clanInfo, F.main("Clans", "Your " + F.elem("TNT Generator") + " has a new TNT available")); + generator.setStock(generator.getStock() + 1); + generator.setTicks(0); + updateBrewingStand(generator); + } + + generator.incrementTicks(); + } + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlace(BlockPlaceEvent event) + { + if (event.getBlockPlaced().getType() == GENERATOR_MATERIAL) + { + ClanInfo clan = _clansManager.getClan(event.getPlayer()); + + if (clan == null) + { + UtilPlayer.message(event.getPlayer(), F.main("Clans", "You must be in a clan to place a " + F.elem("TNT Generator"))); + event.setCancelled(true); + return; + } + + // Confirm they are placing in their own land + ClanInfo owner = _clansManager.getClanUtility().getOwner(event.getBlock().getLocation()); + if (!clan.equals(owner)) + { + UtilPlayer.message(event.getPlayer(), F.main("Clans", "You must place the " + F.elem("TNT Generator") + " on your own land")); + event.setCancelled(true); + return; + } + + TntGenerator oldGenerator = clan.getGenerator(); + + if (oldGenerator != null) + { + UtilPlayer.message(event.getPlayer(), F.main("Clans", "Your clan already has a " + F.elem("TNT Generator"))); + event.setCancelled(true); + return; + } + +// event.getBlockPlaced().setType(GENERATOR_MATERIAL); + + TntGenerator generator = new TntGenerator(event.getBlock()); + clan.setGenerator(generator); + + _clansManager.messageClan(clan, F.main("Clans", F.name(event.getPlayer().getName()) + " placed a " + F.elem("TNT Generator") + " at " + F.elem(UtilWorld.blockToStrClean(event.getBlock())))); + } + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onBreak(BlockBreakEvent event) + { + if (event.getBlock() != null && event.getBlock().getType() == GENERATOR_MATERIAL) + { + ClanInfo clan = getGenerator(event.getBlock()); + if (clan != null) + { + destroyGenerator(clan.getGenerator()); + clan.setGenerator(null); + _clansManager.messageClan(clan, F.main("Clans", "Your " + F.elem("TNT Generator") + " has been destroyed by " + F.elem(event.getPlayer().getName()))); + } + + clearStand(event.getBlock()); + event.getBlock().setTypeId(0); + event.setCancelled(true); + } + } + + @EventHandler + public void onInteract(PlayerInteractEvent event) + { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock() != null && event.getClickedBlock().getType() == GENERATOR_MATERIAL) + { + ClanInfo clan = getGenerator(event.getClickedBlock()); + if (clan != null) + { + TntGenerator generator = clan.getGenerator(); + int stock = generator.getStock(); + + if (stock > 0) + { + generator.setStock(stock - 1); + updateBrewingStand(generator); + dropItem(event.getClickedBlock(), new ItemStack(Material.TNT)); + } + else + { + int secondLeft = TICKS_PER_TNT - generator.getTicks(); + int msLeft = secondLeft * 1000; + UtilTextMiddle.display("", C.cRed + "Next TNT in " + C.cGold + UtilTime.convertString(msLeft, 1, UtilTime.TimeUnit.FIT), event.getPlayer()); + } + } + + event.setCancelled(true); + } + } + + @EventHandler + public void onDelete(ClanDeleteEvent event) + { + ClanInfo clan = event.getClanInfo(); + + if (clan != null && clan.getGenerator() != null) + { + clearStand(clan.getGenerator().getBlock()); + clan.getGenerator().getBlock().setTypeId(0); + } + } + + private void dropItem(Block dropLocation, ItemStack item) + { + dropLocation.getWorld().dropItemNaturally(dropLocation.getLocation().add(0.5, 0.5, 0.5), item); + } + + public ClanInfo getGenerator(Block block) + { + for (ClanInfo clanInfo : _clansManager.getClanMap().values()) + { + TntGenerator generator = clanInfo.getGenerator(); + + if (generator != null && block.equals(generator.getBlock())) + return clanInfo; + } + + return null; + } + + private void destroyGenerator(TntGenerator generator) + { + for (int i = 0; i < generator.getStock(); i++) + { + dropItem(generator.getBlock(), new ItemStack(Material.TNT)); + } + + generator.setStock(0); + dropItem(generator.getBlock(), new ItemStack(GENERATOR_DROP_MATERIAL)); + clearStand(generator.getBlock()); + generator.getBlock().setTypeId(0); + } + + private void clearStand(Block block) + { + TileEntityBrewingStand tileEntity = (TileEntityBrewingStand)((CraftWorld)block.getWorld()).getTileEntityAt(block.getX(), block.getY(), block.getZ()); + for (int i = 0; i < 4; i++) + { + tileEntity.items[i] = null; + } + } + + private void updateBrewingStand(TntGenerator generator) + { + Block block = generator.getBlock(); + + if (block != null && block.getType() == Material.BREWING_STAND) + { + TileEntityBrewingStand tileEntity = (TileEntityBrewingStand)((CraftWorld)block.getWorld()).getTileEntityAt(block.getX(), block.getY(), block.getZ()); + for (int i = 0; i < 3; i++) + { + ItemStack item = new ItemStack(Material.TNT); + net.minecraft.server.v1_7_R4.ItemStack nmsItem = CraftItemStack.asNMSCopy(item); + + int itemSlot = i; + tileEntity.items[itemSlot] = (generator.getStock() > i) ? nmsItem : null; + } + tileEntity.update(); + } + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java index 89f49e5a6..981b1d3a3 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java @@ -332,21 +332,6 @@ public class Gameplay extends MiniPlugin event.setCancelled(true); } - @EventHandler - public void BrewingBreak(BlockBreakEvent event) - { - if (event.isCancelled()) - return; - - if (event.getBlock().getType() != Material.BREWING_STAND) - return; - - event.setCancelled(true); - - event.getBlock().setTypeId(0); - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5, 0.5, 0.5), ItemStackFactory.Instance.CreateStack(Material.BREWING_STAND)); - } - @EventHandler public void AnvilDisable(PlayerInteractEvent event) { From b7b81ecaaae3629a550b1adbaed5fa235cc6e003 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sat, 29 Aug 2015 13:38:40 -0700 Subject: [PATCH 07/16] snake --- .../game/core/boss/snake/SnakeBoss.java | 2 +- .../game/games/bossbattles/BattleBoss.java | 2 +- .../game/games/bossbattles/BossBattles.java | 2 +- .../bossbattles/displays/SnakeDisplay.java | 236 +++--------------- 4 files changed, 37 insertions(+), 205 deletions(-) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java index 5fe76e901..a64d59878 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java @@ -16,7 +16,7 @@ public class SnakeBoss extends WorldEvent public SnakeBoss(DamageManager damageManager, BlockRestore blockRestore, ConditionManager conditionManager, String name, Location cornerLocation) { - super(damageManager, blockRestore, conditionManager, name, cornerLocation); + super(damageManager, blockRestore, conditionManager, "Snaaaake", cornerLocation, "schematic/Golem.schematic"); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java index 4af9f32a3..23f6280ef 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java @@ -10,7 +10,7 @@ import org.bukkit.inventory.ItemStack; public enum BattleBoss { - GOLEM(GolemBoss.class, IronWizardDisplay.class), + GOLEM(GolemBoss.class, IronWizardDisplay.class), SNAKE(SnakeBoss.class, SnakeDisplay.class), diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java index 6cadf9887..963c96d1d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java @@ -42,7 +42,7 @@ public class BossBattles extends TeamGame .r(BattleBoss.values().length)]; private ArrayList _displays = new ArrayList(); - public BossBattles(ArcadeManager manager) + public BossBattles(ArcadeManager manager) { super(manager, GameType.BossBattles, new Kit[] { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java index 998273540..06d38bd77 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java @@ -1,163 +1,32 @@ package nautilus.game.arcade.game.games.bossbattles.displays; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.util.NumberConversions; -import org.bukkit.util.Vector; - import mineplex.core.common.util.C; import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.minecraft.game.core.boss.snake.SnakeSegment; import nautilus.game.arcade.game.games.bossbattles.BattleBoss; import nautilus.game.arcade.game.games.bossbattles.BossBattles; -import net.minecraft.server.v1_7_R4.Packet; -import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy; + +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Slime; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerInteractEntityEvent; public class SnakeDisplay extends BossDisplay { - private ArrayList _snakeTail = new ArrayList(); - private double _seperator = 0.5; - private ArrayList _canSee = new ArrayList(); - private Entity _entity; - private float _yaw; - private float _pitch; + private Sheep _sheep; - public SnakeDisplay(BossBattles plugin, BattleBoss boss, Location location) + public SnakeDisplay(BossBattles plugin, BattleBoss boss, + Location location) { super(plugin, boss, location); } - @Override - public String getDisplayName() - { - return C.cDGreen + "Snake"; - } - - @Override - public void removeBoss() - { - int[] ids = new int[_snakeTail.size()]; - - for (int a = 0; a < _snakeTail.size(); a++) - { - ids[a] = _snakeTail.get(a).getId(); - } - - Packet destroy = new PacketPlayOutEntityDestroy(ids); - - for (Player player : _canSee) - { - UtilPlayer.sendPacket(player, destroy); - } - - _entity.remove(); - } - - @Override - public void start() - { - Vector dir = new Vector(UtilMath.rr(1, true), 0, UtilMath.rr(1, true)) - .normalize().multiply(_seperator); - - for (int i = 0; i < 20; i++) - { - Vector loc = getLocation().toVector() - .subtract(dir.clone().multiply(-i)); - - SnakeSegment tail = new SnakeSegment(loc, new ItemStack( - i == 0 ? Material.COBBLESTONE : Material.STONE)); - _snakeTail.add(tail); - } - - Plugin.CreatureAllowOverride = true; - - _entity = getLocation().getWorld().spawnEntity(getLocation(), - EntityType.IRON_GOLEM); - UtilEnt.Vegetate(_entity); - ((LivingEntity) _entity).addPotionEffect( - new PotionEffect(PotionEffectType.INVISIBILITY, 10000, 0)); - - Plugin.CreatureAllowOverride = false; - - addEntity(_entity); - } - - @EventHandler - public void onSecond(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC) - { - return; - } - - ArrayList canSee = new ArrayList(); - - for (Player player : getLocation().getWorld().getPlayers()) - { - if (player.getLocation().distance(getLocation()) < 120) - { - canSee.add(player); - } - } - - Iterator itel2 = _canSee.iterator(); - - int[] ids = new int[_snakeTail.size()]; - - for (int a = 0; a < _snakeTail.size(); a++) - { - ids[a] = _snakeTail.get(a).getId(); - } - - Packet destroy = new PacketPlayOutEntityDestroy(ids); - - while (itel2.hasNext()) - { - Player player = itel2.next(); - - if (!canSee.contains(player)) - { - itel2.remove(); - UtilPlayer.sendPacket(player, destroy); - } - } - - for (Player player : canSee) - { - if (!_canSee.contains(player)) - { - _canSee.add(player); - - for (SnakeSegment tail : _snakeTail) - { - UtilPlayer.sendPacket(player, tail.getSpawn()); - } - } - } - } - @EventHandler public void onInteract(PlayerInteractEntityEvent event) { - if (!event.getRightClicked().equals(_entity)) + if (!event.getRightClicked().equals(_sheep)) { return; } @@ -165,78 +34,41 @@ public class SnakeDisplay extends BossDisplay setChosen(event.getPlayer()); } - public void setYaw(float yaw) + @Override + public void start() { - _yaw = (yaw + 720) % 360; + Plugin.CreatureAllowOverride = true; + + _sheep = (Sheep) getLocation().getWorld().spawnEntity(getLocation(), + EntityType.SHEEP); + + _sheep.teleport(getLocation()); + + UtilEnt.Vegetate(_sheep); + + Plugin.CreatureAllowOverride = false; + + addEntity(_sheep); } - public void setPitch(float pitch) + @Override + public String getDisplayName() { - _pitch = (pitch + 720) % 360; + return C.cDGreen + "SNAAAAAAAAAAAAAAAAAKE"; } - public float getPitch() + @Override + public void spawnHologram() { - return _pitch; - } + super.spawnHologram(); - public float getYaw() - { - return _yaw; - } - - @EventHandler - public void onTick(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - { - return; - } - - Packet[] packets = new Packet[_snakeTail.size()]; - - for (int i = 0; i < _snakeTail.size(); i++) - { - SnakeSegment tail = _snakeTail.get(i); - Vector vector = new Vector(); - - if (i == 0) - { - setPitch(getPitch() + 3); - - double rotX = getYaw(); - double rotY = getPitch(); - - vector.setY(-Math.sin(Math.toRadians(rotY))); - - double xz = Math.cos(Math.toRadians(rotY)); - - vector.setX(-xz * Math.sin(Math.toRadians(rotX))); - vector.setZ(xz * Math.cos(Math.toRadians(rotX))); - - vector.normalize().multiply(0.2); - } - else - { - SnakeSegment t = _snakeTail.get(i - 1); - - vector = t.getPrevious().clone().subtract(tail.getLocation()); - } - - packets[i] = tail - .moveEntity(tail.getLocation().clone().add(vector)); - } - - for (Player player : _canSee) - { - UtilPlayer.sendPacket(player, packets); - } + getHologram().setFollowEntity(_sheep); } @Override public Location getHologramLocation() { - return getLocation().clone().add(0, 3, 0); + return _sheep.getEyeLocation().add(0, 0.1, 0); } } From f0f9a4c674b8c74f57f95566b36bc8cae4d0f229 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 29 Aug 2015 13:46:09 -0700 Subject: [PATCH 08/16] Push it like a pushy pushy lady. --- .../src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java | 2 +- .../game/arcade/game/games/bossbattles/BossBattles.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java index a64d59878..7668d15cc 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeBoss.java @@ -13,7 +13,7 @@ import mineplex.minecraft.game.core.damage.DamageManager; public class SnakeBoss extends WorldEvent { - public SnakeBoss(DamageManager damageManager, BlockRestore blockRestore, ConditionManager conditionManager, String name, + public SnakeBoss(DamageManager damageManager, BlockRestore blockRestore, ConditionManager conditionManager, Location cornerLocation) { super(damageManager, blockRestore, conditionManager, "Snaaaake", cornerLocation, "schematic/Golem.schematic"); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java index 963c96d1d..6cadf9887 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BossBattles.java @@ -42,7 +42,7 @@ public class BossBattles extends TeamGame .r(BattleBoss.values().length)]; private ArrayList _displays = new ArrayList(); - public BossBattles(ArcadeManager manager) + public BossBattles(ArcadeManager manager) { super(manager, GameType.BossBattles, new Kit[] { From 62cf58bd556ce225eceeb2e6f12b6c122e49390a Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sat, 29 Aug 2015 13:56:26 -0700 Subject: [PATCH 09/16] Fix a bug where claiming a new land would display that land as neutral --- Plugins/.idea/compiler.xml | 1 - .../src/mineplex/game/clans/clans/ClanInfo.java | 6 ++++++ .../src/mineplex/game/clans/clans/ClansDataAccessLayer.java | 1 + .../src/mineplex/game/clans/clans/ClansUtility.java | 3 ++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Plugins/.idea/compiler.xml b/Plugins/.idea/compiler.xml index 438bdb117..f1153fde6 100644 --- a/Plugins/.idea/compiler.xml +++ b/Plugins/.idea/compiler.xml @@ -5,7 +5,6 @@ - diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java index 174bae42b..2c042ed8b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java @@ -594,6 +594,12 @@ public class ClanInfo if (p != null) playerOffline(p); } + @Override + public String toString() + { + return _id + "," + _name; + } + public void playerOffline(Player player) { _onlinePlayers.remove(player.getUniqueId()); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java index b0c75e4d4..d8b33aca2 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java @@ -456,6 +456,7 @@ public class ClansDataAccessLayer ClanTerritory claim = new ClanTerritory(); claim.Owner = name; claim.Safe = safe; + claim.Chunk = chunk; clan.getClaimSet().add(chunk); _manager.getClaimMap().put(chunk, claim); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java index 92a696d1d..61b6ce377 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java @@ -6,6 +6,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map.Entry; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; import org.bukkit.Location; @@ -449,7 +450,7 @@ public class ClansUtility public ClanRelation rel(ClanInfo cA, ClanInfo cB) { - if (cA == null || cB == null) + if (cA == null || cB == null) return ClanRelation.NEUTRAL; //Self From efd435396ff1c42bf79ee2e88b9afcc8a3d24f82 Mon Sep 17 00:00:00 2001 From: Mini-Chiss Date: Sat, 29 Aug 2015 14:27:40 -0700 Subject: [PATCH 10/16] snake --- .../mineplex/core/common/util/UtilWorld.java | 8 ++++++ .../game/core/boss/snake/SnakeCreature.java | 28 +++++++++++++++---- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java index af3aa4f91..69c32641c 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java @@ -65,6 +65,14 @@ public class UtilWorld return "(" + loc.getBlockX() + ", " + loc.getBlockY() + ", " + loc.getBlockZ() + ")"; } + public static String vecToStrClean(Vector loc) + { + if (loc == null) + return "Null"; + + return "(" + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ")"; + } + public static Location strToLoc(String string) { if (string.length() == 0) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java index 84d4836f3..9ba5e9189 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java @@ -5,11 +5,13 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.entity.Silverfish; import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -19,6 +21,7 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilWorld; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.boss.EventCreature; @@ -33,6 +36,8 @@ public class SnakeCreature extends EventCreature private ArrayList _canSee = new ArrayList(); private Location _waypoint; + + private boolean _enabled = false; public SnakeCreature(WorldEvent event, Location spawnLocation) { @@ -44,6 +49,7 @@ public class SnakeCreature extends EventCreature { getEntity().addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 10000, 0)); UtilEnt.Vegetate(getEntity()); + UtilEnt.ghost(getEntity(), true, false); Vector dir = new Vector(UtilMath.rr(1, true), 0, UtilMath.rr(1, true)).normalize().multiply(_seperator); getNewWaypoint(); @@ -51,14 +57,17 @@ public class SnakeCreature extends EventCreature for (int i = 0; i < getHealth() / 50; i++) { SnakeSegment tail = new SnakeSegment(getSpawnLocation().toVector().subtract(dir.clone().multiply(-i)), - new ItemStack(i == 0 ? Material.COBBLESTONE : Material.STONE)); + new ItemStack(i == 0 ? Material.EMERALD_BLOCK : Material.STONE)); _segments.add(tail); + + break; } } private void getNewWaypoint() { + Bukkit.broadcastMessage("NEW WAYPOINT!"); _waypoint = getSpawnLocation().clone().add(Math.random() * 40 - 20, Math.random() * 24 - 8, Math.random() * 40 - 20); } @@ -137,7 +146,7 @@ public class SnakeCreature extends EventCreature @EventHandler public void onTickMove(UpdateEvent event) { - if (event.getType() != UpdateType.TICK) + if (event.getType() != UpdateType.TICK || !_enabled) { return; } @@ -145,7 +154,7 @@ public class SnakeCreature extends EventCreature Packet[] packets = new Packet[_segments.size()]; - for (int i = _segments.size()-1; i>=0; i++) + for (int i = _segments.size()-1; i>=0; i--) { SnakeSegment seg = _segments.get(i); @@ -153,7 +162,9 @@ public class SnakeCreature extends EventCreature if (i == 0) { - vec.add(UtilAlg.getTrajectory(vec, _waypoint.toVector()).multiply(0.01)); + vec.add(UtilAlg.getTrajectory(vec, _waypoint.toVector()).multiply(0.1)); + + Bukkit.broadcastMessage("Loc: " + UtilWorld.vecToStrClean(vec)); if (UtilMath.offset(vec, _waypoint.toVector()) < 5) { @@ -165,8 +176,6 @@ public class SnakeCreature extends EventCreature vec = _segments.get(i-1).getLocation(); } - vec.normalize().multiply(0.6); - packets[i] = seg.moveEntity(vec); } @@ -175,5 +184,12 @@ public class SnakeCreature extends EventCreature UtilPlayer.sendPacket(player, packets); } } + + @EventHandler + public void command(PlayerCommandPreprocessEvent event) + { + if (event.getMessage().contains("start")) + _enabled = true; + } } From 8f1da698d2f4b1ce23a2effd2217c33d831a31d5 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sat, 29 Aug 2015 14:37:35 -0700 Subject: [PATCH 11/16] TNT generator storage in mysql (needs testing still) --- .../clans/clans/ClansDataAccessLayer.java | 41 ++++++++++++++++++- .../clans/repository/ClanRepository.java | 8 ++++ .../tntGenerator/TntGeneratorManager.java | 30 +++++++++++--- 3 files changed, 73 insertions(+), 6 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java index d8b33aca2..ebfb9ed7a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java @@ -21,6 +21,7 @@ import mineplex.game.clans.clans.repository.ClanTerritory; import mineplex.game.clans.clans.repository.tokens.ClanEnemyToken; import mineplex.game.clans.clans.repository.tokens.ClanToken; import mineplex.game.clans.clans.scoreboard.ClansScoreboardManager; +import mineplex.game.clans.clans.tntGenerator.TntGenerator; public class ClansDataAccessLayer { @@ -430,7 +431,7 @@ public class ClansDataAccessLayer @Override public void run() { - _repository.addTerritoryClaims(clan.getId(), safe, chunks); + _repository.addTerritoryClaims(clan.getId(), safe, chunks); //Log _manager.log("Successfully added [" + chunks.length + "] Claims for [" + name + "] by [" + player + "]."); @@ -611,6 +612,44 @@ public class ClansDataAccessLayer //Log _manager.log("Updated Enemy Data for [" + clan.getName() + ", " + otherClan.getName() + "]"); } + + public void updateGenerator(final ClanInfo clanInfo, final Callback callback) + { + TntGenerator generator = clanInfo.getGenerator(); + final String location; + final int generatorStock; + + if (generator != null) + { + location = UtilWorld.blockToStr(generator.getBlock()); + generatorStock = generator.getStock(); + } + else + { + location = ""; + generatorStock = 0; + } + + runAsync(new Runnable() + { + @Override + public void run() + { + final boolean ran = _repository.updateClanGenerator(clanInfo.getId(), location, generatorStock); + runSync(new Runnable() + { + @Override + public void run() + { + if (callback != null) + { + callback.run(ran); + } + } + }); + } + }); + } public void updateEnergy(ClanInfo clan) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java index 566e32b52..2696addd0 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java @@ -22,6 +22,7 @@ import mineplex.core.database.column.ColumnInt; import mineplex.core.database.column.ColumnTimestamp; import mineplex.core.database.column.ColumnVarChar; import mineplex.database.tables.records.ClansRecord; +import mineplex.game.clans.clans.ClanInfo; import mineplex.game.clans.clans.repository.tokens.ClanAllianceToken; import mineplex.game.clans.clans.repository.tokens.ClanEnemyToken; import mineplex.game.clans.clans.repository.tokens.ClanMemberToken; @@ -66,6 +67,7 @@ public class ClanRepository extends RepositoryBase private static String UPDATE_CLAN_ALLIANCE = "UPDATE clanAlliances SET trusted = ? WHERE clanId = ? AND otherClanId = ?;"; private static String UPDATE_CLAN_ENEMY = "UPDATE clanEnemies SET clanScore = ?, otherClanScore = ?, clanKills = ?, otherClanKills = ? WHERE clanId = ? AND otherClanId = ?;"; private static String UPDATE_CLAN_TERRITORY = "UPDATE clanTerritory SET safe = ? WHERE serverId = ? AND chunk = ?;"; + private static String UPDATE_CLAN_GENERATOR = "UPDATE clans SET generator = ?, generatorCount = ? WHERE id = ?;"; private static String GET_CLAN_SERVER = "SELECT id FROM clanServer WHERE clanServer.serverName = ?"; private static String ADD_CLAN_SERVER = "INSERT INTO clanServer (serverName) VALUES (?);"; @@ -414,6 +416,12 @@ public class ClanRepository extends RepositoryBase new ColumnInt("otherClanKills", otherClanKills), new ColumnInt("clanId", clanId), new ColumnInt("otherClanId", otherClanId)); } + public boolean updateClanGenerator(int clanId, String generator, int generatorStock) + { + return executeUpdate(UPDATE_CLAN_GENERATOR, new ColumnVarChar("generator", 140, generator), new ColumnInt("generatorStock", generatorStock), new ColumnInt("clanId", clanId)) + > 0; + } + public void updateTerritoryClaim(String chunk, boolean safe) { executeUpdate(UPDATE_CLAN_TERRITORY, new ColumnBoolean("safe", safe), new ColumnInt("serverId", _serverId), new ColumnVarChar("chunk", 100, chunk)); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java index a9c62633c..b5ef3b8f6 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java @@ -17,6 +17,7 @@ import net.minecraft.server.v1_7_R4.TileEntityBrewingStand; import mineplex.core.MiniPlugin; import mineplex.core.common.util.C; +import mineplex.core.common.util.Callback; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTextMiddle; @@ -59,6 +60,7 @@ public class TntGeneratorManager extends MiniPlugin if (generator.getBlock().getType() != GENERATOR_MATERIAL) { clanInfo.setGenerator(null); + _clansManager.getClanDataAccess().updateGenerator(clanInfo, null); continue; } @@ -69,6 +71,7 @@ public class TntGeneratorManager extends MiniPlugin _clansManager.messageClan(clanInfo, F.main("Clans", "Your " + F.elem("TNT Generator") + " has been destroyed due to the land no longer being claimed")); destroyGenerator(generator); clanInfo.setGenerator(null); + _clansManager.getClanDataAccess().updateGenerator(clanInfo, null); continue; } @@ -85,6 +88,7 @@ public class TntGeneratorManager extends MiniPlugin generator.setStock(generator.getStock() + 1); generator.setTicks(0); updateBrewingStand(generator); + _clansManager.getClanDataAccess().updateGenerator(clanInfo, null); } generator.incrementTicks(); @@ -129,6 +133,7 @@ public class TntGeneratorManager extends MiniPlugin TntGenerator generator = new TntGenerator(event.getBlock()); clan.setGenerator(generator); + _clansManager.getClanDataAccess().updateGenerator(clan, null); _clansManager.messageClan(clan, F.main("Clans", F.name(event.getPlayer().getName()) + " placed a " + F.elem("TNT Generator") + " at " + F.elem(UtilWorld.blockToStrClean(event.getBlock())))); } @@ -154,21 +159,36 @@ public class TntGeneratorManager extends MiniPlugin } @EventHandler - public void onInteract(PlayerInteractEvent event) + public void onInteract(final PlayerInteractEvent event) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock() != null && event.getClickedBlock().getType() == GENERATOR_MATERIAL) { ClanInfo clan = getGenerator(event.getClickedBlock()); if (clan != null) { - TntGenerator generator = clan.getGenerator(); - int stock = generator.getStock(); + final TntGenerator generator = clan.getGenerator(); + final int stock = generator.getStock(); if (stock > 0) { generator.setStock(stock - 1); - updateBrewingStand(generator); - dropItem(event.getClickedBlock(), new ItemStack(Material.TNT)); + _clansManager.getClanDataAccess().updateGenerator(clan, new Callback() + { + @Override + public void run(Boolean data) + { + if (data) + { + updateBrewingStand(generator); + dropItem(event.getClickedBlock(), new ItemStack(Material.TNT)); + } + else + { + // failed + generator.setStock(stock); + } + } + }); } else { From 5030ae7d576d710b73ea94f61562c2602cd5e32c Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 29 Aug 2015 15:03:22 -0700 Subject: [PATCH 12/16] For Chiss, may the code never break. --- .../game/core/boss/snake/SnakeCreature.java | 2 +- .../game/core/boss/snake/SnakeSegment.java | 48 ++- .../game/core/boss/spider/SpiderBoss.java | 69 ++++ .../game/core/boss/spider/SpiderCreature.java | 316 ++++++++++++++++++ .../boss/spider/SpiderMinionCreature.java | 66 ++++ .../boss/spider/attacks/SpiderEggplosm.java | 232 +++++++++++++ .../game/games/bossbattles/BattleBoss.java | 7 +- .../bossbattles/displays/BossDisplay.java | 10 + .../displays/IronWizardDisplay.java | 11 - .../displays/SlimeKingDisplay.java | 11 - .../bossbattles/displays/SnakeDisplay.java | 14 +- .../bossbattles/displays/SpiderDisplay.java | 42 +++ 12 files changed, 773 insertions(+), 55 deletions(-) create mode 100644 Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderBoss.java create mode 100644 Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderCreature.java create mode 100644 Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderMinionCreature.java create mode 100644 Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/attacks/SpiderEggplosm.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SpiderDisplay.java diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java index 9ba5e9189..629e41461 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeCreature.java @@ -176,7 +176,7 @@ public class SnakeCreature extends EventCreature vec = _segments.get(i-1).getLocation(); } - packets[i] = seg.moveEntity(vec); + packets[i] = seg.moveEntity(new Vector(UtilMath.rr(10, true), 12, UtilMath.rr(10, true))); } for (Player player : _canSee) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeSegment.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeSegment.java index e8360bc83..2a2c1aaf7 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeSegment.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/snake/SnakeSegment.java @@ -1,6 +1,7 @@ package mineplex.minecraft.game.core.boss.snake; import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack; +import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; @@ -75,7 +76,7 @@ public class SnakeSegment public Vector getLocation() { - return _entityLocation; + return _entityLocation.clone(); } public Packet[] getSpawn() @@ -86,29 +87,42 @@ public class SnakeSegment watcher.a(0, (byte) 0); watcher.a(1, 0); - watcher.a(10, (byte) 0); - - for (int i = 11; i < 17; i++) - { - watcher.a(i, new Vector(0, 0, 0)); - } - packet.a = getId(); - packet.b = 30; packet.c = (int) Math.floor(_entityLocation.getX() * 32); packet.d = (int) Math.floor(_entityLocation.getY() * 32); packet.e = (int) Math.floor(_entityLocation.getZ() * 32); packet.l = watcher; - PacketPlayOutEntityEquipment packet2 = new PacketPlayOutEntityEquipment(); + if (_item != null) + { + watcher.a(10, (byte) 0); - packet2.a = getId(); - packet2.b = 4; - packet2.c = CraftItemStack.asNMSCopy(_item); - - return new Packet[] + for (int i = 11; i < 17; i++) { - packet, packet2 - }; + watcher.a(i, new Vector(0, 0, 0)); + } + + packet.b = 30; + + PacketPlayOutEntityEquipment packet2 = new PacketPlayOutEntityEquipment(); + + packet2.a = getId(); + packet2.b = 4; + packet2.c = CraftItemStack.asNMSCopy(_item); + + return new Packet[] + { + packet, packet2 + }; + } + else + { + packet.b = EntityType.MAGMA_CUBE.getTypeId(); + + return new Packet[] + { + packet + }; + } } } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderBoss.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderBoss.java new file mode 100644 index 000000000..3d328e7d1 --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderBoss.java @@ -0,0 +1,69 @@ +package mineplex.minecraft.game.core.boss.spider; + +import org.bukkit.Bukkit; +import org.bukkit.Location; + +import mineplex.core.blockrestore.BlockRestore; +import mineplex.minecraft.game.core.boss.EventCreature; +import mineplex.minecraft.game.core.boss.EventState; +import mineplex.minecraft.game.core.boss.WorldEvent; +import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; +import mineplex.minecraft.game.core.condition.ConditionManager; +import mineplex.minecraft.game.core.damage.DamageManager; + +public class SpiderBoss extends WorldEvent +{ + + public SpiderBoss(DamageManager damageManager, BlockRestore blockRestore, ConditionManager conditionManager, + Location cornerLocation) + { + super(damageManager, blockRestore, conditionManager, "Brood Mother", cornerLocation); + } + + @Override + protected void customStart() + { + Bukkit.broadcastMessage("Custom Start"); + spawnGolem(getCenterLocation()); + setState(EventState.LIVE); + announceStart(); + } + + /** + * Check if this slime boss has been defeated + */ + private void checkDeath() + { + if (getCreatures().size() == 0) + { + setState(EventState.COMPLETE); + Bukkit.broadcastMessage("FINISHED!"); + } + } + + @Override + public void removeCreature(EventCreature creature) + { + super.removeCreature(creature); + + if (creature instanceof GolemCreature) + { + checkDeath(); + } + } + + public SpiderMinionCreature spawnMinion(Location location) + { + SpiderMinionCreature slimeCreature = new SpiderMinionCreature(this, location, 2500); + registerCreature(slimeCreature); + return slimeCreature; + } + + private SpiderCreature spawnGolem(Location location) + { + SpiderCreature slimeCreature = new SpiderCreature(this, location, 2500); + registerCreature(slimeCreature); + return slimeCreature; + } + +} diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderCreature.java new file mode 100644 index 000000000..d3b5877a0 --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderCreature.java @@ -0,0 +1,316 @@ +package mineplex.minecraft.game.core.boss.spider; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.entity.Spider; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.util.Vector; + +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.common.util.UtilTime; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.BossAbility; +import mineplex.minecraft.game.core.boss.EventCreature; +import mineplex.minecraft.game.core.boss.ironwizard.GolemBoss; +import mineplex.minecraft.game.core.boss.ironwizard.GolemCreature; +import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemBlockHail; +import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemCaveIn; +import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemEarthquake; +import mineplex.minecraft.game.core.boss.ironwizard.abilities.GolemSlam; +import mineplex.minecraft.game.core.boss.spider.attacks.SpiderEggplosm; + +public class SpiderCreature extends EventCreature +{ + private ArrayList _currentAbilities = new ArrayList(); + private int _lastAbility; + private long _lastWalked; + private long _reverseWalk; + private Location _standing; + private Vector _afkWalk = new Vector(); + + public SpiderCreature(SpiderBoss boss, Location location, double maxHealth) + { + super(boss, location, "Brood Mother", true, maxHealth, Spider.class); + } + + @Override + protected void spawnCustom() + { + UtilEnt.Vegetate(getEntity()); + } + + @Override + public void dieCustom() + { + } + + @EventHandler + public void onTick(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + Iterator itel = _currentAbilities.iterator(); + boolean canDoNew = _currentAbilities.size() < 3; + + while (itel.hasNext()) + { + BossAbility ability = itel.next(); + + if (ability.hasFinished()) + { + itel.remove(); + ability.setFinished(); + _lastAbility = 20;// _currentAbility.getCooldown(); + + HandlerList.unregisterAll(ability); + System.out.print("Unregistered golem ability " + ability.getClass().getSimpleName()); + } + else if (!ability.inProgress()) + { + canDoNew = false; + } + } + + if (_lastAbility-- <= 0 && canDoNew && UtilBlock.solid(getEntity().getLocation().getBlock().getRelative(BlockFace.DOWN))) + { + HashMap weight = new HashMap(); + HashMap dist = new HashMap(); + + for (Player player : UtilPlayer.getNearby(getEntity().getLocation(), 50, true)) + { + if (player.hasLineOfSight(getEntity())) + { + dist.put(player, player.getLocation().distance(getEntity().getLocation())); + } + } + + if (!dist.isEmpty()) + { + {// Egg explosion + ArrayList players = getPlayers(dist, 30); + + if (!players.isEmpty()) + { + weight.put(SpiderEggplosm.class, 4); + } + } + + } + for (BossAbility ability : _currentAbilities) + { + weight.remove(ability.getClass()); + } + + BossAbility ability = null; + + if (!weight.isEmpty()) + { + int i = 0; + + for (Integer entry : weight.values()) + { + i += entry; + } + + for (int a = 0; a < 10; a++) + { + int luckyNumber = UtilMath.r(i); + + for (Entry entry : weight.entrySet()) + { + luckyNumber -= entry.getValue(); + + if (luckyNumber <= 0) + { + try + { + ability = (BossAbility) entry.getKey().getConstructor(GolemCreature.class).newInstance(this); + + if (ability.getTarget() == null) + { + ability = null; + } + else + { + break; + } + } + catch (Exception ex) + { + ex.printStackTrace(); + } + + break; + } + } + } + } + + if (ability != null && ability.getTarget() != null) + { + + Bukkit.getPluginManager().registerEvents(ability, getEvent().getPlugin()); + + System.out.print("Spider boss is using " + ability.getClass().getSimpleName()); + + _currentAbilities.add(ability); + } + + _lastAbility = 10; + } + + boolean canMove = true; + + for (BossAbility ability : _currentAbilities) + { + ability.tick(); + + if (!ability.canMove()) + { + canMove = false; + } + } + + if (canMove) + { + Player target = null; + double dist = 0; + + for (Player player : UtilPlayer.getNearby(getEntity().getLocation(), 50, true)) + { + if (!player.hasLineOfSight(getEntity())) + { + continue; + } + + double d = player.getLocation().distance(getEntity().getLocation()); + + if (d > 1.5 && (d < 7 || d > 15) && (target == null || (d < 50 && dist > d))) + { + target = player; + dist = d; + } + } + + Vector vec = null; + boolean superWalk = false; + + if (target != null) + { + vec = target.getLocation().subtract(getEntity().getLocation()).toVector(); + vec.setY(getEntity().getLocation().getY()); + + double len = vec.length(); + + vec.setX(vec.getX() * (UtilMath.random.nextDouble() / 3D)); + vec.setZ(vec.getZ() * (UtilMath.random.nextDouble() / 3D)); + + vec.multiply(len); + + if (target != null && dist < 8) + { + vec.multiply(-1); + superWalk = true; + } + + if (!UtilAlg.HasSight(getEntity().getLocation(), + getEntity().getLocation().add(vec.clone().normalize().multiply(2)))) + { + _reverseWalk = System.currentTimeMillis(); + } + + if (!UtilTime.elapsed(_reverseWalk, 4000)) + { + vec.multiply(-1); + } + + } + else if (!UtilTime.elapsed(_lastWalked, 7000)) + { + vec = _afkWalk; + } + else if (UtilTime.elapsed(_lastWalked, 12000)) + { + _afkWalk = new Vector(); + + for (int i = 0; i < 10; i++) + { + Vector vector = new Vector(UtilMath.r(20) - 10, 0, UtilMath.r(20) - 10); + + if (UtilAlg.HasSight(getEntity().getLocation(), + getEntity().getLocation().add(vector.clone().normalize().multiply(2)))) + { + vec = _afkWalk = vector; + break; + } + } + + _lastWalked = System.currentTimeMillis(); + } + + if (vec != null) + { + // if (vec.length() > 1) + { + UtilEnt.CreatureMoveFast(getEntity(), getEntity().getLocation().add(vec), + (target != null ? 1.8F : 1.1F) + (superWalk ? 0.4F : 0)); + } + } + + _standing = getEntity().getLocation(); + } + else + { + Location l = getEntity().getLocation(); + + _standing.setYaw(l.getYaw()); + _standing.setPitch(l.getPitch()); + _standing.setY(l.getY()); + + getEntity().teleport(_standing); + } + } + + private ArrayList getPlayers(final HashMap map, double maxDist) + { + ArrayList list = new ArrayList(); + + for (Player p : map.keySet()) + { + if (map.get(p) <= maxDist) + { + list.add(p); + } + } + + Collections.sort(list, new Comparator() + { + + @Override + public int compare(Player o1, Player o2) + { + return Double.compare(map.get(o2), map.get(o1)); + } + }); + + return list; + } +} diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderMinionCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderMinionCreature.java new file mode 100644 index 000000000..1aaaf8b35 --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/SpiderMinionCreature.java @@ -0,0 +1,66 @@ +package mineplex.minecraft.game.core.boss.spider; + +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.CaveSpider; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.EventCreature; + +public class SpiderMinionCreature extends EventCreature +{ + public SpiderMinionCreature(SpiderBoss boss, Location location, double maxHealth) + { + super(boss, location, "Spider Minion", false, maxHealth, CaveSpider.class); + } + + @Override + protected void spawnCustom() + { + UtilEnt.Vegetate(getEntity()); + } + + @Override + public void dieCustom() + { + } + + @EventHandler + public void onTick(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + Player target = UtilPlayer.getClosest(getEntity().getLocation()); + + UtilEnt.CreatureMoveFast(getEntity(), target.getLocation(), 1.4F); + + if (UtilMath.r(50) == 0) + { + getEntity().getWorld().playSound(getEntity().getLocation(), Sound.SPIDER_IDLE, 2.5F, 1); + } + + if (target.getLocation().distance(getEntity().getLocation()) < 2) + { + Vector vec = UtilAlg.getTrajectory2d(getEntity(), target); + vec.multiply(0.4).setY(0.3); + + getEntity().setVelocity(vec); + + getEvent().getDamageManager().NewDamageEvent(target, getEntity(), null, DamageCause.ENTITY_ATTACK, + 6 * getDifficulty(), true, false, false, "Spider Minion Attack", "Spider Minion Attack"); + } + } + +} diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/attacks/SpiderEggplosm.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/attacks/SpiderEggplosm.java new file mode 100644 index 000000000..eb00056e8 --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/spider/attacks/SpiderEggplosm.java @@ -0,0 +1,232 @@ +package mineplex.minecraft.game.core.boss.spider.attacks; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; + +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.Spider; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.util.Vector; + +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.UtilServer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.boss.BossAbility; +import mineplex.minecraft.game.core.boss.spider.SpiderBoss; +import mineplex.minecraft.game.core.boss.spider.SpiderCreature; +import net.minecraft.server.v1_7_R4.MathHelper; +import net.minecraft.server.v1_7_R4.MovingObjectPosition; +import net.minecraft.server.v1_7_R4.Vec3D; + +public class SpiderEggplosm extends BossAbility +{ + private int _eggsToSpray = 30; + private HashMap _eggs = new HashMap(); + private ArrayList _fallingBlocks = new ArrayList(); + private int _tick; + private float _yaw; + private float _addYaw; + + public SpiderEggplosm(SpiderCreature creature) + { + super(creature); + + _addYaw = 360F / _eggsToSpray; + } + + @Override + public boolean canMove() + { + return inProgress(); + } + + @EventHandler + public void onMove(PlayerMoveEvent event) + { + if (UtilPlayer.isSpectator(event.getPlayer())) + return; + + if (event.getPlayer().getGameMode() == GameMode.CREATIVE) + return; + + Block block = event.getTo().getBlock().getRelative(BlockFace.DOWN); + + if (!_eggs.containsKey(block)) + { + return; + } + + _eggs.remove(block); + + block.setType(Material.AIR); + block.getWorld().playSound(block.getLocation(), Sound.FALL_BIG, 2.5F, 0F); + UtilParticle.PlayParticle(ParticleType.BLOCK_DUST.getParticle(Material.DRAGON_EGG, 0), + block.getLocation().add(0.5, 0.6, 0.5), 0.6F, 0.5F, 0.6F, 0, 100, ViewDist.NORMAL, UtilServer.getPlayers()); + + } + + @Override + public boolean inProgress() + { + return _eggsToSpray > 0; + } + + @Override + public boolean hasFinished() + { + return _eggsToSpray <= 0 && _fallingBlocks.isEmpty() && _eggs.isEmpty(); + } + + @Override + public void setFinished() + { + for (FallingBlock block : _fallingBlocks) + { + block.remove(); + } + + for (Block b : _eggs.keySet()) + { + b.setType(Material.AIR); + } + } + + @Override + public void tick() + { + if (_eggsToSpray > 0 && _tick % 10 == 0) + { + _eggsToSpray--; + + UtilEnt.CreatureLook(getEntity(), 0, _yaw); + + _yaw += _addYaw; + + Vector vec = getEntity().getLocation().getDirection(); + + vec.setY(0).normalize().setY(0.4 + (UtilMath.rr(0.4, false))); + + FallingBlock block = getLocation().getWorld().spawnFallingBlock(vec.toLocation(getLocation().getWorld()), + Material.WEB, (byte) 0); + block.setDropItem(false); + + _fallingBlocks.add(block); + } + else + { + Iterator> itel = _eggs.entrySet().iterator(); + + while (itel.hasNext()) + { + Entry entry = itel.next(); + + if (entry.getValue() < System.currentTimeMillis()) + { + itel.remove(); + entry.getKey().setType(Material.AIR); + entry.getKey().getWorld().playEffect(entry.getKey().getLocation(), Effect.STEP_SOUND, + Material.DRAGON_EGG.getId()); + ((SpiderBoss) getBoss().getEvent()).spawnMinion(entry.getKey().getLocation().add(0.5, 0.1, 0.5)); + } + } + } + } + + @EventHandler + public void onUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + Iterator fallingIterator = _fallingBlocks.iterator(); + + while (fallingIterator.hasNext()) + { + FallingBlock cur = fallingIterator.next(); + + if (cur.isDead() || !cur.isValid() || cur.getTicksLived() > 400 + || !cur.getWorld().isChunkLoaded(cur.getLocation().getBlockX() >> 4, cur.getLocation().getBlockZ() >> 4)) + { + fallingIterator.remove(); + + Block block = cur.getLocation().getBlock(); + block.setType(Material.DRAGON_EGG); + _eggs.put(block, System.currentTimeMillis() + 10000 + UtilMath.r(10000)); + + // Expire + if (cur.getTicksLived() > 400 + || !cur.getWorld().isChunkLoaded(cur.getLocation().getBlockX() >> 4, cur.getLocation().getBlockZ() >> 4)) + { + cur.remove(); + continue; + } + + cur.remove(); + continue; + } + + net.minecraft.server.v1_7_R4.Entity nmsEntity = ((CraftEntity) cur).getHandle(); + Vec3D vec3d = Vec3D.a(nmsEntity.locX, nmsEntity.locY, nmsEntity.locZ); + Vec3D vec3d1 = Vec3D.a(nmsEntity.locX + nmsEntity.motX, nmsEntity.locY + nmsEntity.motY, + nmsEntity.locZ + nmsEntity.motZ); + + MovingObjectPosition finalObjectPosition = nmsEntity.world.rayTrace(vec3d, vec3d1, false, true, false); + vec3d = Vec3D.a(nmsEntity.locX, nmsEntity.locY, nmsEntity.locZ); + vec3d1 = Vec3D.a(nmsEntity.locX + nmsEntity.motX, nmsEntity.locY + nmsEntity.motY, nmsEntity.locZ + nmsEntity.motZ); + + if (finalObjectPosition != null) + { + vec3d1 = Vec3D.a(finalObjectPosition.pos.a, finalObjectPosition.pos.b, finalObjectPosition.pos.c); + } + + if (finalObjectPosition != null) + { + Block block = cur.getWorld().getBlockAt(finalObjectPosition.b, finalObjectPosition.c, finalObjectPosition.d); + + if (!UtilBlock.airFoliage(block) && !block.isLiquid()) + { + nmsEntity.motX = ((float) (finalObjectPosition.pos.a - nmsEntity.locX)); + nmsEntity.motY = ((float) (finalObjectPosition.pos.b - nmsEntity.locY)); + nmsEntity.motZ = ((float) (finalObjectPosition.pos.c - nmsEntity.locZ)); + float f2 = MathHelper.sqrt( + nmsEntity.motX * nmsEntity.motX + nmsEntity.motY * nmsEntity.motY + nmsEntity.motZ * nmsEntity.motZ); + nmsEntity.locX -= nmsEntity.motX / f2 * 0.0500000007450581D; + nmsEntity.locY -= nmsEntity.motY / f2 * 0.0500000007450581D; + nmsEntity.locZ -= nmsEntity.motZ / f2 * 0.0500000007450581D; + + block.setType(Material.DRAGON_EGG); + _eggs.put(block, System.currentTimeMillis() + 10000 + UtilMath.r(10000)); + + fallingIterator.remove(); + cur.remove(); + } + } + else + { + UtilParticle.PlayParticle(ParticleType.BLOCK_DUST.getParticle(Material.STONE, 0), + cur.getLocation().add(0, 0.5, 0), 0.3F, 0.3F, 0.3F, 0, 2, UtilParticle.ViewDist.NORMAL, + UtilServer.getPlayers()); + } + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java index 23f6280ef..ac364d49c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/BattleBoss.java @@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.bossbattles; import mineplex.minecraft.game.core.boss.ironwizard.GolemBoss; import mineplex.minecraft.game.core.boss.slimeking.SlimeBoss; import mineplex.minecraft.game.core.boss.snake.SnakeBoss; +import mineplex.minecraft.game.core.boss.spider.SpiderBoss; import nautilus.game.arcade.game.games.bossbattles.displays.*; import org.bukkit.Material; @@ -10,11 +11,13 @@ import org.bukkit.inventory.ItemStack; public enum BattleBoss { - GOLEM(GolemBoss.class, IronWizardDisplay.class), + GOLEM(GolemBoss.class, IronWizardDisplay.class), SNAKE(SnakeBoss.class, SnakeDisplay.class), - SLIME(SlimeBoss.class, SlimeKingDisplay.class); + SLIME(SlimeBoss.class, SlimeKingDisplay.class), + + SPIDER(SpiderBoss.class, SpiderDisplay.class); private Class _bossClass; private Class _bossDisplay; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/BossDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/BossDisplay.java index 42a8dcff9..73343fa16 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/BossDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/BossDisplay.java @@ -10,6 +10,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEntityEvent; import mineplex.core.common.util.UtilAlg; import mineplex.core.hologram.Hologram; @@ -31,6 +32,15 @@ public abstract class BossDisplay implements Listener _bossLocation = location; } + @EventHandler + public void onEntityInteractEvent(PlayerInteractEntityEvent event) + { + if (_entities.contains(event.getRightClicked())) + { + setChosen(event.getPlayer()); + } + } + public void addEntity(Entity entity) { _entities.add(entity); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java index bd3b78169..fc099c1d4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java @@ -21,17 +21,6 @@ public class IronWizardDisplay extends BossDisplay super(plugin, boss, location); } - @EventHandler - public void onInteract(PlayerInteractEntityEvent event) - { - if (!event.getRightClicked().equals(_golem)) - { - return; - } - - setChosen(event.getPlayer()); - } - @Override public void start() { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java index e939d2360..cb71f1adc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java @@ -22,17 +22,6 @@ public class SlimeKingDisplay extends BossDisplay super(plugin, boss, location); } - @EventHandler - public void onInteract(PlayerInteractEntityEvent event) - { - if (!event.getRightClicked().equals(_slime)) - { - return; - } - - setChosen(event.getPlayer()); - } - @Override public void start() { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java index 06d38bd77..6e8440d6e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java @@ -17,23 +17,11 @@ public class SnakeDisplay extends BossDisplay { private Sheep _sheep; - public SnakeDisplay(BossBattles plugin, BattleBoss boss, - Location location) + public SnakeDisplay(BossBattles plugin, BattleBoss boss, Location location) { super(plugin, boss, location); } - @EventHandler - public void onInteract(PlayerInteractEntityEvent event) - { - if (!event.getRightClicked().equals(_sheep)) - { - return; - } - - setChosen(event.getPlayer()); - } - @Override public void start() { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SpiderDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SpiderDisplay.java new file mode 100644 index 000000000..1afd06f6a --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SpiderDisplay.java @@ -0,0 +1,42 @@ +package nautilus.game.arcade.game.games.bossbattles.displays; + +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilEnt; +import nautilus.game.arcade.game.games.bossbattles.BattleBoss; +import nautilus.game.arcade.game.games.bossbattles.BossBattles; + +public class SpiderDisplay extends BossDisplay +{ + + public SpiderDisplay(BossBattles plugin, BattleBoss boss, Location location) + { + super(plugin, boss, location); + } + + @Override + public String getDisplayName() + { + return C.cDBlue + "Brood Mother"; + } + + @Override + public void start() + { + Entity entity = getLocation().getWorld().spawnEntity(getLocation(), + EntityType.SPIDER); + + UtilEnt.Vegetate(entity); + this.addEntity(entity); + } + + @Override + public Location getHologramLocation() + { + return getLocation().clone().add(0, 2, 0); + } + +} From 6ae801314cdc9f337e2b08edea53be6ec21a6693 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 29 Aug 2015 15:07:51 -0700 Subject: [PATCH 13/16] Fix spawning --- .../game/games/bossbattles/displays/IronWizardDisplay.java | 4 ---- .../game/games/bossbattles/displays/SlimeKingDisplay.java | 4 ---- .../arcade/game/games/bossbattles/displays/SnakeDisplay.java | 4 ---- 3 files changed, 12 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java index fc099c1d4..614728267 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java @@ -24,15 +24,11 @@ public class IronWizardDisplay extends BossDisplay @Override public void start() { - Plugin.CreatureAllowOverride = true; - _golem = (IronGolem) getLocation().getWorld().spawnEntity(getLocation(), EntityType.IRON_GOLEM); _golem.teleport(getLocation()); UtilEnt.Vegetate(_golem); - Plugin.CreatureAllowOverride = false; - addEntity(_golem); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java index cb71f1adc..a2da07725 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java @@ -25,8 +25,6 @@ public class SlimeKingDisplay extends BossDisplay @Override public void start() { - Plugin.CreatureAllowOverride = true; - _slime = (Slime) getLocation().getWorld().spawnEntity(getLocation(), EntityType.SLIME); _slime.setSize(4); @@ -35,8 +33,6 @@ public class SlimeKingDisplay extends BossDisplay UtilEnt.Vegetate(_slime); - Plugin.CreatureAllowOverride = false; - addEntity(_slime); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java index 6e8440d6e..44a373b6f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java @@ -25,8 +25,6 @@ public class SnakeDisplay extends BossDisplay @Override public void start() { - Plugin.CreatureAllowOverride = true; - _sheep = (Sheep) getLocation().getWorld().spawnEntity(getLocation(), EntityType.SHEEP); @@ -34,8 +32,6 @@ public class SnakeDisplay extends BossDisplay UtilEnt.Vegetate(_sheep); - Plugin.CreatureAllowOverride = false; - addEntity(_sheep); } From 4aee4f8fd70fb5aa6fc54f1f6abc267f105a4c41 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sat, 29 Aug 2015 15:09:02 -0700 Subject: [PATCH 14/16] Fix generators --- .../mineplex/core/common/util/UtilWorld.java | 6 +++--- .../mineplex/game/clans/clans/ClanInfo.java | 21 +++++++++++++++++++ .../clans/repository/ClanRepository.java | 14 +++++++------ .../clans/repository/tokens/ClanToken.java | 2 ++ .../tntGenerator/TntGeneratorManager.java | 7 +++++-- 5 files changed, 39 insertions(+), 11 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java index 62448d59b..c2a3c40ab 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java @@ -82,9 +82,9 @@ public class UtilWorld if (cur.getName().equalsIgnoreCase(parts[0])) { int x = Integer.parseInt(parts[1]); - int y = Integer.parseInt(parts[1]); - int z = Integer.parseInt(parts[1]); - cur.getBlockAt(x, y, z); + int y = Integer.parseInt(parts[2]); + int z = Integer.parseInt(parts[3]); + return cur.getBlockAt(x, y, z); } } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java index 2c042ed8b..e3dbbe3a8 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.bukkit.Location; import org.bukkit.Sound; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import mineplex.core.common.util.C; @@ -80,6 +81,26 @@ public class ClanInfo catch (Exception e) { + } + + try + { + System.out.println("Generator: " + token.Generator); + System.out.println("Stock: " + token.GeneratorStock); + if (token.Generator != null && token.Generator.length() > 0) + { + Block block = UtilWorld.strToBlock(token.Generator); + if (block != null) + { + System.out.println("Set Generator!"); + _generator = new TntGenerator(block); + _generator.setStock(token.GeneratorStock); + } + } + } + catch (Exception e) + { + } _energy = token.Energy; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java index 2696addd0..6a0e96d96 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java @@ -41,7 +41,7 @@ public class ClanRepository extends RepositoryBase private static String CREATE_CLAN_TERRITORY_TABLE = "CREATE TABLE IF NOT EXISTS clanTerritory (id INT NOT NULL AUTO_INCREMENT, clanId INT, serverId INT NOT NULL, chunk VARCHAR(100), safe BIT(1), PRIMARY KEY (id), FOREIGN KEY (clanId) REFERENCES clans(id), INDEX clanIdIndex (clanId, serverId));"; private static String CREATE_CLAN_ALLIANCE_TABLE = "CREATE TABLE IF NOT EXISTS clanAlliances (id INT NOT NULL AUTO_INCREMENT, clanId INT, otherClanId INT, trusted BIT(1), PRIMARY KEY (id), FOREIGN KEY (otherClanId) REFERENCES clans(id), FOREIGN KEY (clanId) REFERENCES clans(id), INDEX clanIdIndex (clanId));"; - private static String RETRIEVE_START_CLAN_INFO = "SELECT c.id, c.name, c.description, c.home, c.admin, c.energy, c.kills, c.murder, c.deaths, c.warWins, c.warLosses, c.dateCreated, c.lastOnline, ct.chunk, ct.safe FROM clans AS c LEFT JOIN clanTerritory AS ct ON ct.clanId = c.id WHERE c.serverId = ?;"; + private static String RETRIEVE_START_CLAN_INFO = "SELECT c.id, c.name, c.description, c.home, c.admin, c.energy, c.kills, c.murder, c.deaths, c.warWins, c.warLosses, c.generator, c.generatorStock, c.dateCreated, c.lastOnline, ct.chunk, ct.safe FROM clans AS c LEFT JOIN clanTerritory AS ct ON ct.clanId = c.id WHERE c.serverId = ?;"; private static String RETRIEVE_CLAN_MEMBER_INFO = "SELECT c.name, a.name, a.uuid, clanRole FROM accountClan AS ac INNER JOIN accounts AS a ON a.id = ac.accountId INNER JOIN clans AS c on c.id = ac.clanId WHERE c.serverId = ?;"; private static String RETRIEVE_CLAN_ALLIANCE_INFO = "SELECT c.name, cOther.name, ca.trusted FROM clanAlliances AS ca INNER JOIN clans AS c ON c.id = ca.clanId INNER JOIN clans as cOther ON cOther.id = ca.otherClanId WHERE c.serverId = ?;"; private static String RETRIEVE_CLAN_ENEMY_INFO = "SELECT c.name, cOther.name, clanScore, otherClanScore, clanKills, otherClanKills, timeFormed FROM clanEnemies AS ce INNER JOIN clans AS c ON c.id = ce.clanId INNER JOIN clans as cOther ON cOther.id = ce.otherClanId WHERE c.serverId = ?;"; @@ -67,7 +67,7 @@ public class ClanRepository extends RepositoryBase private static String UPDATE_CLAN_ALLIANCE = "UPDATE clanAlliances SET trusted = ? WHERE clanId = ? AND otherClanId = ?;"; private static String UPDATE_CLAN_ENEMY = "UPDATE clanEnemies SET clanScore = ?, otherClanScore = ?, clanKills = ?, otherClanKills = ? WHERE clanId = ? AND otherClanId = ?;"; private static String UPDATE_CLAN_TERRITORY = "UPDATE clanTerritory SET safe = ? WHERE serverId = ? AND chunk = ?;"; - private static String UPDATE_CLAN_GENERATOR = "UPDATE clans SET generator = ?, generatorCount = ? WHERE id = ?;"; + private static String UPDATE_CLAN_GENERATOR = "UPDATE clans SET generator = ?, generatorStock = ? WHERE id = ?;"; private static String GET_CLAN_SERVER = "SELECT id FROM clanServer WHERE clanServer.serverName = ?"; private static String ADD_CLAN_SERVER = "INSERT INTO clanServer (serverName) VALUES (?);"; @@ -150,13 +150,15 @@ public class ClanRepository extends RepositoryBase token.Deaths = resultSet.getInt(9); token.WarWins = resultSet.getInt(10); token.WarLosses = resultSet.getInt(11); - token.DateCreated = resultSet.getTimestamp(12); - token.LastOnline = resultSet.getTimestamp(13); + token.Generator = resultSet.getString(12); + token.GeneratorStock = resultSet.getInt(13); + token.DateCreated = resultSet.getTimestamp(14); + token.LastOnline = resultSet.getTimestamp(15); ClanTerritoryToken territoryToken = new ClanTerritoryToken(); territoryToken.ClanName = token.Name; - territoryToken.Chunk = resultSet.getString(14); - territoryToken.Safe = resultSet.getBoolean(15); + territoryToken.Chunk = resultSet.getString(16); + territoryToken.Safe = resultSet.getBoolean(17); if (!clans.containsKey(token.Name)) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/tokens/ClanToken.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/tokens/ClanToken.java index d739ceb69..e85353dbc 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/tokens/ClanToken.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/tokens/ClanToken.java @@ -17,6 +17,8 @@ public class ClanToken public int Deaths; public int WarWins; public int WarLosses; + public String Generator; + public int GeneratorStock; public Timestamp DateCreated; public Timestamp LastOnline; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java index b5ef3b8f6..b71dec391 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/tntGenerator/TntGeneratorManager.java @@ -248,9 +248,12 @@ public class TntGeneratorManager extends MiniPlugin private void clearStand(Block block) { TileEntityBrewingStand tileEntity = (TileEntityBrewingStand)((CraftWorld)block.getWorld()).getTileEntityAt(block.getX(), block.getY(), block.getZ()); - for (int i = 0; i < 4; i++) + if (tileEntity != null) { - tileEntity.items[i] = null; + for (int i = 0; i < 4; i++) + { + tileEntity.items[i] = null; + } } } From 16b317a877ab7538af01e326ff7551164f7978bc Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sat, 29 Aug 2015 15:17:03 -0700 Subject: [PATCH 15/16] Forgot to remove debug code --- .../src/mineplex/game/clans/clans/ClanInfo.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java index e3dbbe3a8..2f670044f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java @@ -85,14 +85,11 @@ public class ClanInfo try { - System.out.println("Generator: " + token.Generator); - System.out.println("Stock: " + token.GeneratorStock); if (token.Generator != null && token.Generator.length() > 0) { Block block = UtilWorld.strToBlock(token.Generator); if (block != null) { - System.out.println("Set Generator!"); _generator = new TntGenerator(block); _generator.setStock(token.GeneratorStock); } From 5db4a55ddacc860d08454dbaf29bfc655981d5ed Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sat, 29 Aug 2015 15:41:37 -0700 Subject: [PATCH 16/16] Enable clans login manager --- .../mineplex/game/clans/clans/commands/ClansLoginManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java index 9c6561ab2..9fd73a193 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansLoginManager.java @@ -23,7 +23,7 @@ public class ClansLoginManager extends MiniPlugin implements ILoginProcessor super("Clans Login Manager", plugin); _serverName = serverName; - _enabled = false; + _enabled = true; clientManager.addStoredProcedureLoginProcessor(this); }