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:
parent
1655811d43
commit
d4be749edc
@ -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;
|
||||||
@ -153,7 +156,14 @@ public class GolemCreature extends EventCreature<IronGolem>
|
|||||||
|
|
||||||
if (!players.isEmpty())
|
if (!players.isEmpty())
|
||||||
{
|
{
|
||||||
weight.put(GolemMeleeAttack.class, 999);
|
if (players.size() >= 4)
|
||||||
|
{
|
||||||
|
weight.put(GolemEarthquake.class, 999);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
weight.put(GolemMeleeAttack.class, 999);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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;
|
||||||
|
@ -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);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user