Update Iron Wizard attack priority to use Earthquake when surrounded, lower blocks thrown during Cave In and implement Iron Skin arrow resistance

This commit is contained in:
AlexTheCoder 2016-07-02 17:39:04 -04:00 committed by samczsun
parent 1655811d43
commit d4be749edc
2 changed files with 123 additions and 103 deletions

View File

@ -6,6 +6,7 @@ import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Random;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilBlock;
@ -30,7 +31,9 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.IronGolem; import org.bukkit.entity.IronGolem;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -152,10 +155,17 @@ public class GolemCreature extends EventCreature<IronGolem>
ArrayList<Player> players = getPlayers(dist, UtilMath.r(10) == 0 ? 4 : 3); ArrayList<Player> players = getPlayers(dist, UtilMath.r(10) == 0 ? 4 : 3);
if (!players.isEmpty()) if (!players.isEmpty())
{
if (players.size() >= 4)
{
weight.put(GolemEarthquake.class, 999);
}
else
{ {
weight.put(GolemMeleeAttack.class, 999); weight.put(GolemMeleeAttack.class, 999);
} }
} }
}
if (hp < 0.7) if (hp < 0.7)
{ // Earthquake { // Earthquake
@ -502,6 +512,16 @@ public class GolemCreature extends EventCreature<IronGolem>
{ {
if (event.GetDamageePlayer() != null) if (event.GetDamageePlayer() != null)
{ {
if (event.GetProjectile() != null && event.GetProjectile() instanceof Arrow)
{
if (new Random().nextDouble() <= .5)
{
event.SetCancelled("Iron Skin Reflection");
getEntity().getWorld().playSound(getEntity().getLocation(), Sound.ZOMBIE_METAL, 0.5f, 1.6f);
return;
}
}
double dist = event.GetDamageePlayer().getLocation().distance(getEntity().getLocation()); double dist = event.GetDamageePlayer().getLocation().distance(getEntity().getLocation());
double maxRange = _usedFinalAttack ? 20 : 45; double maxRange = _usedFinalAttack ? 20 : 45;

View File

@ -223,108 +223,108 @@ public class GolemCaveIn extends BossAbility<GolemCreature, IronGolem>
@Override @Override
public void tick() public void tick()
{ {
// if (_tick++ == 0) if (_tick++ == 0)
// { {
// Location l = getLocation(); Location l = getLocation();
//
// ArrayList<Location> blocks = UtilShapes.getSphereBlocks(l, 3, 3, true); ArrayList<Location> blocks = UtilShapes.getSphereBlocks(l, 3, 3, true);
//
// for (Location loc : blocks) for (Location loc : blocks)
// { {
// if (loc.getBlockY() >= l.getBlockY()) if (loc.getBlockY() >= l.getBlockY())
// { {
// Block b = loc.getBlock(); Block b = loc.getBlock();
//
// if (b.getType() == Material.AIR) if (b.getType() == Material.AIR)
// { {
// _blocks.add(b); _blocks.add(b);
//
// loc.setY(l.getY() - 1); loc.setY(l.getY() - 1);
//
// b.setType(loc.getBlock().getType()); b.setType(loc.getBlock().getType());
//
// b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, loc.getBlock().getTypeId()); b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, loc.getBlock().getTypeId());
// } }
// } }
// } }
// } }
//
// if (_tick % 5 == 0) if (_tick % 5 == 0)
//
// { {
// for (Player player : UtilPlayer.getNearby(getLocation(), 2.5, true)) for (Player player : UtilPlayer.getNearby(getLocation(), 2.5, true))
// { {
// player.teleport(player.getLocation().add(0, 4, 0)); player.teleport(player.getLocation().add(0, 4, 0));
// UtilAction.velocity(player, new Vector(UtilMath.r(10) - 5, 3, UtilMath.r(10) - 5).normalize()); UtilAction.velocity(player, new Vector(UtilMath.r(10) - 5, 3, UtilMath.r(10) - 5).normalize());
// } }
// } }
//
// if (_tick < 200) if (_tick < 200)
//
// { {
// Location loc = getLocation(); Location loc = getLocation();
// loc.setY(loc.getY() + 4); loc.setY(loc.getY() + 4);
//
// for (int i = 0; i < 30; i++) for (int i = 0; i < 30; i++)
// { {
// loc.setY(loc.getY() + 1); loc.setY(loc.getY() + 1);
// Block b = loc.getBlock(); Block b = loc.getBlock();
//
// if (UtilBlock.solid(b)) if (UtilBlock.solid(b))
// { {
// break; break;
// } }
// } }
//
// if (!UtilBlock.solid(loc.getBlock())) if (!UtilBlock.solid(loc.getBlock()))
// { {
// return; return;
// } }
//
// List<Player> players = UtilPlayer.getNearby(getLocation(), 50, true); List<Player> players = UtilPlayer.getNearby(getLocation(), 50, true);
//
// for (int i = 0; i < players.size() * 4; i++) for (int i = 0; i < players.size() * 2; i++)
// { {
// int dist = UtilMath.r(10); int dist = UtilMath.r(10);
//
// if (dist < 3) if (dist < 3)
// { {
// dist = 2; dist = 2;
// } }
// else if (dist < 5) else if (dist < 5)
// { {
// dist = 5; dist = 5;
// } }
// else else
// { {
// dist = 10; dist = 10;
// } }
//
// Location l = players.get(UtilMath.r(players.size())).getLocation().add(UtilMath.r(dist * 2) - dist, 0, Location l = players.get(UtilMath.r(players.size())).getLocation().add(UtilMath.r(dist * 2) - dist, 0,
// UtilMath.r(dist * 2) - dist); UtilMath.r(dist * 2) - dist);
// l.setY(loc.getY()); l.setY(loc.getY());
//
// Block b = l.getBlock(); Block b = l.getBlock();
// l.subtract(0, 1, 0); l.subtract(0, 1, 0);
//
// if (UtilBlock.solid(b)) if (UtilBlock.solid(b))
// { {
// if (l.getBlock().getType() == Material.AIR) if (l.getBlock().getType() == Material.AIR)
// { {
// if (UtilAlg.HasSight(l, getLocation().add(0, 4, 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(), FallingBlock block = b.getWorld().spawnFallingBlock(b.getLocation().add(0.5, -1, 0.5), b.getTypeId(),
// b.getData()); b.getData());
//
// block.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, block.getBlockId()); block.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, block.getBlockId());
// block.setDropItem(false); block.setDropItem(false);
//
// _fallingBlocks.add(block); _fallingBlocks.add(block);
// } }
// } }
// } }
// } }
// } }
} }