More event stuff!
This commit is contained in:
parent
9cdf69b19d
commit
d24f01ba86
@ -55,7 +55,7 @@ public class ClansRegions
|
||||
* Initializes a server-side clan and claims area according to the
|
||||
* location and radius properties passed in.
|
||||
* @param clanName - the name of the clan to create/claim territory for
|
||||
* @param location - the center location to begin the claim
|
||||
* @param locations - the center location to begin the claim
|
||||
* @param chunkRadius - the radius (in chunks) to claim
|
||||
* @param claimOffset - the initial offset in claim (creating a 'hole' with chunk offset radius)
|
||||
* @param safe - whether the chunk claimed is considered a 'safe' (pvp-free) region.
|
||||
|
@ -36,10 +36,4 @@ public class ConcreteWorldEventFactory implements WorldEventFactory
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WorldEvent randomFromType(Location locationm, WorldEventType type)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.game.clans.clans.ClansManager;
|
||||
import mineplex.game.clans.clans.worldevent.command.WorldEventCommand;
|
||||
import mineplex.game.clans.clans.worldevent.event.EventState;
|
||||
import mineplex.game.clans.clans.worldevent.event.WorldEvent;
|
||||
import mineplex.minecraft.game.core.damage.DamageManager;
|
||||
|
||||
@ -68,7 +69,7 @@ public class WorldEventManager extends MiniPlugin implements WorldEventListener
|
||||
while (iterator.hasNext())
|
||||
{
|
||||
WorldEvent event = iterator.next();
|
||||
if (event.isRunning()) event.cancel();
|
||||
if (event.getState() != EventState.END) event.cancel();
|
||||
HandlerList.unregisterAll(event);
|
||||
iterator.remove();
|
||||
}
|
||||
@ -93,17 +94,6 @@ public class WorldEventManager extends MiniPlugin implements WorldEventListener
|
||||
_events.remove(event);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK) return;
|
||||
|
||||
for (WorldEvent e : _events)
|
||||
{
|
||||
e.tick();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCommands()
|
||||
{
|
||||
|
@ -21,7 +21,7 @@ public abstract class EventCreature<T extends LivingEntity> implements Listener
|
||||
|
||||
// Spawn Data
|
||||
private T _entity;
|
||||
private Class<T> _entityClass;
|
||||
private Class<? extends T> _entityClass;
|
||||
private Location _spawnLocation;
|
||||
|
||||
// Creature Data
|
||||
@ -51,15 +51,20 @@ public abstract class EventCreature<T extends LivingEntity> implements Listener
|
||||
spawnEntity();
|
||||
}
|
||||
|
||||
protected void spawnEntity()
|
||||
protected final void spawnEntity()
|
||||
{
|
||||
_entity = _spawnLocation.getWorld().spawn(_spawnLocation, _entityClass);
|
||||
Location spawnLocation = _entity == null ? _spawnLocation : _entity.getLocation();
|
||||
T entity = _spawnLocation.getWorld().spawn(spawnLocation, getEntityClass());
|
||||
|
||||
setEntity(entity);
|
||||
updateEntityHealth();
|
||||
updateName();
|
||||
_entity.setRemoveWhenFarAway(false);
|
||||
entity.setRemoveWhenFarAway(false);
|
||||
spawnCustom();
|
||||
}
|
||||
|
||||
protected abstract void spawnCustom();
|
||||
|
||||
protected void updateEntityHealth()
|
||||
{
|
||||
_entity.setMaxHealth(10000d);
|
||||
@ -85,12 +90,18 @@ public abstract class EventCreature<T extends LivingEntity> implements Listener
|
||||
_entity.setCustomNameVisible(_useName);
|
||||
}
|
||||
|
||||
protected void remove()
|
||||
public void remove()
|
||||
{
|
||||
remove(true);
|
||||
}
|
||||
|
||||
public void remove(boolean removeFromEvent)
|
||||
{
|
||||
if (_entity != null)
|
||||
_entity.remove();
|
||||
|
||||
_event.removeCreature(this);
|
||||
if (removeFromEvent)
|
||||
_event.removeCreature(this);
|
||||
}
|
||||
|
||||
protected final void die()
|
||||
@ -118,9 +129,21 @@ public abstract class EventCreature<T extends LivingEntity> implements Listener
|
||||
|
||||
public void setEntity(T entity)
|
||||
{
|
||||
if (_entity != null) _entity.remove();
|
||||
|
||||
_entity = entity;
|
||||
}
|
||||
|
||||
public Class<? extends T> getEntityClass()
|
||||
{
|
||||
return _entityClass;
|
||||
}
|
||||
|
||||
public void setEntityClass(Class<? extends T> clazz)
|
||||
{
|
||||
_entityClass = clazz;
|
||||
}
|
||||
|
||||
public Location getSpawnLocation()
|
||||
{
|
||||
return _spawnLocation;
|
||||
@ -225,6 +248,5 @@ public abstract class EventCreature<T extends LivingEntity> implements Listener
|
||||
updateEntityHealth();
|
||||
|
||||
applyDamage(event.GetDamage());
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package mineplex.game.clans.clans.worldevent.event;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
@ -12,6 +13,7 @@ import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.creature.Creature;
|
||||
import mineplex.core.data.BlockData;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
@ -63,6 +65,7 @@ public abstract class WorldEvent implements Listener
|
||||
public final void cancel()
|
||||
{
|
||||
setState(EventState.END);
|
||||
clearCreatures();
|
||||
customCancel();
|
||||
}
|
||||
|
||||
@ -130,6 +133,11 @@ public abstract class WorldEvent implements Listener
|
||||
return _centerLocation;
|
||||
}
|
||||
|
||||
protected List<EventCreature> getCreatures()
|
||||
{
|
||||
return _creatures;
|
||||
}
|
||||
|
||||
public void registerCreature(EventCreature creature)
|
||||
{
|
||||
UtilServer.getServer().getPluginManager().registerEvents(creature, _eventManager.getPlugin());
|
||||
@ -142,6 +150,22 @@ public abstract class WorldEvent implements Listener
|
||||
_creatures.remove(creature);
|
||||
}
|
||||
|
||||
public void clearCreatures()
|
||||
{
|
||||
for (EventCreature creature : _creatures)
|
||||
{
|
||||
creature.remove(false);
|
||||
HandlerList.unregisterAll(creature);
|
||||
}
|
||||
|
||||
_creatures.clear();
|
||||
}
|
||||
|
||||
public void restoreBlocks()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void setBlock(Block block, int id, byte data)
|
||||
{
|
||||
if (!_blocks.containsKey(block))
|
||||
|
@ -1,90 +0,0 @@
|
||||
package mineplex.game.clans.clans.worldevent.event.boss;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mineplex.core.common.util.UtilTextBottom;
|
||||
import mineplex.game.clans.clans.worldevent.WorldEventManager;
|
||||
import mineplex.game.clans.clans.worldevent.event.WorldEvent;
|
||||
import mineplex.game.clans.clans.worldevent.WorldEventListener;
|
||||
import mineplex.minecraft.game.core.damage.DamageManager;
|
||||
|
||||
public abstract class BossEvent extends WorldEvent
|
||||
{
|
||||
private double _maxHealth;
|
||||
private double _health;
|
||||
private double _lastHealth;
|
||||
|
||||
// Action Bar Messages
|
||||
private float _radiusSquared;
|
||||
|
||||
public BossEvent(WorldEventManager eventManager, DamageManager damageManager, String name, Location center, float radius, double maxHealth)
|
||||
{
|
||||
super(eventManager, damageManager, name, center);
|
||||
_health = maxHealth;
|
||||
_maxHealth = maxHealth;
|
||||
setRadius(radius);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void customTick()
|
||||
{
|
||||
if (_lastHealth != _health || getTicks() % 20 == 0)
|
||||
{
|
||||
for (Player player : Bukkit.getServer().getOnlinePlayers())
|
||||
{
|
||||
if (player.getWorld().equals(getCenterLocation().getWorld()) && getCenterLocation().distanceSquared(player.getLocation()) < _radiusSquared)
|
||||
{
|
||||
UtilTextBottom.displayProgress(getName(), _health / _maxHealth, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_lastHealth = _health;
|
||||
|
||||
if (_health <= 0)
|
||||
{
|
||||
onDeath();
|
||||
if (_health <= 0) // only finish if the health is still less than 0
|
||||
for (WorldEventListener listener : getListeners()) listener.onComplete(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void setRadius(float radius)
|
||||
{
|
||||
_radiusSquared = radius * radius;
|
||||
}
|
||||
|
||||
protected abstract void onDeath();
|
||||
|
||||
protected void damage(double health)
|
||||
{
|
||||
_health -= health;
|
||||
}
|
||||
|
||||
protected void setMaxHealth(double maxHealth)
|
||||
{
|
||||
_maxHealth = maxHealth;
|
||||
}
|
||||
|
||||
public void setHealth(double health)
|
||||
{
|
||||
_health = health;
|
||||
}
|
||||
|
||||
public double getHealth()
|
||||
{
|
||||
return _health;
|
||||
}
|
||||
|
||||
public double getMaxHealth()
|
||||
{
|
||||
return _maxHealth;
|
||||
}
|
||||
|
||||
public boolean inRange(Location loc)
|
||||
{
|
||||
return loc.distanceSquared(getCenterLocation()) <= _radiusSquared;
|
||||
}
|
||||
}
|
@ -1,33 +1,25 @@
|
||||
package mineplex.game.clans.clans.worldevent.event.boss.slime;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.SlimeSplitEvent;
|
||||
|
||||
import mineplex.game.clans.clans.worldevent.WorldEventManager;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.BossEvent;
|
||||
import mineplex.game.clans.clans.worldevent.creature.EventCreature;
|
||||
import mineplex.game.clans.clans.worldevent.event.EventState;
|
||||
import mineplex.game.clans.clans.worldevent.event.WorldEvent;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.creature.SlimeCreature;
|
||||
import mineplex.minecraft.game.core.damage.DamageManager;
|
||||
|
||||
public class SlimeBoss extends BossEvent
|
||||
public class SlimeBoss extends WorldEvent
|
||||
{
|
||||
private static final int MAX_SIZE = 10;
|
||||
private static final int MIN_SIZE = 1;
|
||||
|
||||
private List<SlimePart> _slimes;
|
||||
|
||||
public SlimeBoss(WorldEventManager eventManager, DamageManager damageManager, Location center)
|
||||
{
|
||||
super(eventManager, damageManager, "Slime King", center, 100, 300);
|
||||
|
||||
_slimes = new LinkedList<SlimePart>();
|
||||
super(eventManager, damageManager, "Slime King", center);
|
||||
|
||||
spawnSlime(center, MAX_SIZE);
|
||||
}
|
||||
@ -36,81 +28,20 @@ public class SlimeBoss extends BossEvent
|
||||
protected void customStart()
|
||||
{
|
||||
Bukkit.broadcastMessage("Custom Start");
|
||||
spawnSlime(getCenterLocation(), 10);
|
||||
setState(EventState.LIVE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void customCancel()
|
||||
{
|
||||
Bukkit.broadcastMessage("Custom Cancel");
|
||||
|
||||
// Remove all the slime entities!
|
||||
for (SlimePart slime : _slimes)
|
||||
{
|
||||
slime.getEntity().remove();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void customTick()
|
||||
{
|
||||
super.customTick();
|
||||
|
||||
for (SlimePart slimePart : _slimes)
|
||||
{
|
||||
slimePart.tick();
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onSlimeDamage(EntityDamageEvent event)
|
||||
{
|
||||
if (event.getEntity().getType() == EntityType.SLIME)
|
||||
{
|
||||
for (SlimePart slimePart : _slimes)
|
||||
{
|
||||
if (event.getEntity().equals(slimePart.getEntity()))
|
||||
{
|
||||
// slime.setHealth(slime.getMaxHealth());
|
||||
// event.setDamage(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onSplit(SlimeSplitEvent event)
|
||||
{
|
||||
for (SlimePart slimeData : _slimes)
|
||||
{
|
||||
if (event.getEntity().equals(slimeData.getEntity()))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDeath(EntityDeathEvent event)
|
||||
{
|
||||
if (event.getEntity().getType() == EntityType.SLIME)
|
||||
{
|
||||
Iterator<SlimePart> slimeIterator = _slimes.iterator();
|
||||
|
||||
while (slimeIterator.hasNext())
|
||||
{
|
||||
SlimePart slimePart = slimeIterator.next();
|
||||
|
||||
if (slimePart.getEntity().equals(event.getEntity()))
|
||||
{
|
||||
splitSlime(slimePart);
|
||||
event.setDroppedExp(0);
|
||||
slimeIterator.remove();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if our main boss died every time a slime entity dies
|
||||
checkDeath();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -118,10 +49,22 @@ public class SlimeBoss extends BossEvent
|
||||
*/
|
||||
private void checkDeath()
|
||||
{
|
||||
if (_slimes.size() == 0)
|
||||
if (getCreatures().size() == 0)
|
||||
{
|
||||
// SLIME IS DEAD!
|
||||
setHealth(0);
|
||||
setState(EventState.END);
|
||||
Bukkit.broadcastMessage("FINISHED!");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCreature(EventCreature creature)
|
||||
{
|
||||
super.removeCreature(creature);
|
||||
|
||||
if (creature instanceof SlimeCreature)
|
||||
{
|
||||
splitSlime(((SlimeCreature) creature));
|
||||
checkDeath();
|
||||
}
|
||||
}
|
||||
|
||||
@ -145,7 +88,7 @@ public class SlimeBoss extends BossEvent
|
||||
return 40 * slimeSize;
|
||||
}
|
||||
|
||||
private void splitSlime(SlimePart slime)
|
||||
public void splitSlime(SlimeCreature slime)
|
||||
{
|
||||
int splitCount = getSplitCount(slime.getSize());
|
||||
int splitSize = getSplitSize(slime.getSize());
|
||||
@ -159,16 +102,11 @@ public class SlimeBoss extends BossEvent
|
||||
}
|
||||
}
|
||||
|
||||
private SlimePart spawnSlime(Location location, int size)
|
||||
private SlimeCreature spawnSlime(Location location, int size)
|
||||
{
|
||||
SlimePart slimePart = new SlimePart(this, location, size, getMaxSlimeHealth(size), getEnrageTicks(size));
|
||||
_slimes.add(slimePart);
|
||||
return slimePart;
|
||||
SlimeCreature slimeCreature = new SlimeCreature(this, location, size, getMaxSlimeHealth(size), getEnrageTicks(size));
|
||||
registerCreature(slimeCreature);
|
||||
return slimeCreature;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDeath()
|
||||
{
|
||||
Bukkit.broadcastMessage("DEATH");
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
package mineplex.game.clans.clans.worldevent.event.boss.slime.ability;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
@ -11,7 +10,7 @@ import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.SlimePart;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.creature.SlimeCreature;
|
||||
|
||||
public class AbsorbAbility extends SlimeAbility
|
||||
{
|
||||
@ -20,7 +19,7 @@ public class AbsorbAbility extends SlimeAbility
|
||||
private int _pulseCount;
|
||||
private int _maxDistance;
|
||||
|
||||
public AbsorbAbility(SlimePart slime)
|
||||
public AbsorbAbility(SlimeCreature slime)
|
||||
{
|
||||
super(slime);
|
||||
_ticksPerPulse = 20;
|
||||
@ -57,8 +56,8 @@ public class AbsorbAbility extends SlimeAbility
|
||||
Vector dir = UtilAlg.getTrajectory2d(player, getSlime().getEntity());
|
||||
dir.setY(0.4);
|
||||
player.setVelocity(dir);
|
||||
getSlime().getBoss().getDamageManager().NewDamageEvent(player, getSlime().getEntity(), null,
|
||||
EntityDamageEvent.DamageCause.MAGIC, getDamage(distance), false, false, false, getSlime().getBoss().getName(), "Absorb");
|
||||
getSlime().getEvent().getDamageManager().NewDamageEvent(player, getSlime().getEntity(), null,
|
||||
EntityDamageEvent.DamageCause.MAGIC, getDamage(distance), false, false, false, getSlime().getEvent().getName(), "Absorb");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,14 +10,14 @@ import org.bukkit.util.Vector;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.SlimePart;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.creature.SlimeCreature;
|
||||
|
||||
public class LeapAbility extends SlimeAbility
|
||||
{
|
||||
private Player _target;
|
||||
private int _jumpTick;
|
||||
|
||||
public LeapAbility(SlimePart slime)
|
||||
public LeapAbility(SlimeCreature slime)
|
||||
{
|
||||
super(slime);
|
||||
|
||||
|
@ -19,7 +19,7 @@ import mineplex.core.projectile.IThrown;
|
||||
import mineplex.core.projectile.ProjectileManager;
|
||||
import mineplex.core.projectile.ProjectileUser;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.SlimePart;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.creature.SlimeCreature;
|
||||
|
||||
public class RocketAbility extends SlimeAbility implements IThrown
|
||||
{
|
||||
@ -28,12 +28,12 @@ public class RocketAbility extends SlimeAbility implements IThrown
|
||||
private int _rocketsHit;
|
||||
private LinkedList<ShotData> _shots;
|
||||
|
||||
public RocketAbility(SlimePart slime)
|
||||
public RocketAbility(SlimeCreature slime)
|
||||
{
|
||||
this(slime, 5);
|
||||
}
|
||||
|
||||
public RocketAbility(SlimePart slime, int rocketCount)
|
||||
public RocketAbility(SlimeCreature slime, int rocketCount)
|
||||
{
|
||||
super(slime);
|
||||
_rocketCount = rocketCount;
|
||||
@ -97,7 +97,7 @@ public class RocketAbility extends SlimeAbility implements IThrown
|
||||
projectile.setSize(2);
|
||||
_shots.add(new ShotData(projectile, target));
|
||||
|
||||
ProjectileManager pm = getSlime().getBoss().getEventManager().getClans().getProjectile();
|
||||
ProjectileManager pm = getSlime().getEvent().getEventManager().getClans().getProjectile();
|
||||
pm.AddThrow(projectile, getSlime().getEntity(), this, -1, true, true, true, null, 0, 0, UtilParticle.ParticleType.SLIME, UpdateType.FASTEST, 1F);
|
||||
Bukkit.broadcastMessage("Shot Slime at target " + target);
|
||||
|
||||
|
@ -12,7 +12,7 @@ import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.SlimePart;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.creature.SlimeCreature;
|
||||
|
||||
public class SlamAbility extends SlimeAbility
|
||||
{
|
||||
@ -27,12 +27,12 @@ public class SlamAbility extends SlimeAbility
|
||||
private final int _jumpTick;
|
||||
private final int _diveTick;
|
||||
|
||||
public SlamAbility(SlimePart slime)
|
||||
public SlamAbility(SlimeCreature slime)
|
||||
{
|
||||
this(slime, 40, 60, 80);
|
||||
}
|
||||
|
||||
public SlamAbility(SlimePart slime, int lockTick, int jumpTick, int diveTick)
|
||||
public SlamAbility(SlimeCreature slime, int lockTick, int jumpTick, int diveTick)
|
||||
{
|
||||
super(slime);
|
||||
_hasTarget = false;
|
||||
|
@ -1,15 +1,15 @@
|
||||
package mineplex.game.clans.clans.worldevent.event.boss.slime.ability;
|
||||
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.SlimePart;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.creature.SlimeCreature;
|
||||
|
||||
public abstract class SlimeAbility
|
||||
{
|
||||
private SlimePart _slime;
|
||||
private SlimeCreature _slime;
|
||||
private boolean _idle;
|
||||
private int _ticks;
|
||||
private int _idleTicks;
|
||||
|
||||
public SlimeAbility(SlimePart slime)
|
||||
public SlimeAbility(SlimeCreature slime)
|
||||
{
|
||||
_slime = slime;
|
||||
}
|
||||
@ -42,7 +42,7 @@ public abstract class SlimeAbility
|
||||
return _idle;
|
||||
}
|
||||
|
||||
public SlimePart getSlime()
|
||||
public SlimeCreature getSlime()
|
||||
{
|
||||
return _slime;
|
||||
}
|
||||
|
@ -1,59 +1,53 @@
|
||||
package mineplex.game.clans.clans.worldevent.event.boss.slime;
|
||||
package mineplex.game.clans.clans.worldevent.event.boss.slime.creature;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.MagmaCube;
|
||||
import org.bukkit.entity.Slime;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.SlimeSplitEvent;
|
||||
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.game.clans.clans.worldevent.creature.EventCreature;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.SlimeBoss;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.ability.AbsorbAbility;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.ability.LeapAbility;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.ability.RocketAbility;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.ability.SlamAbility;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.slime.ability.SlimeAbility;
|
||||
|
||||
public class SlimePart
|
||||
public class SlimeCreature extends EventCreature<Slime>
|
||||
{
|
||||
private SlimeBoss _boss;
|
||||
private Slime _slime;
|
||||
private SlimeAbility _currentAbility;
|
||||
private Location _spawnLocation;
|
||||
private boolean _enraged;
|
||||
// Storing size here incase one of the slime states decide to change the slime size
|
||||
private int _size;
|
||||
private double _maxHealth;
|
||||
private int _ticksLived;
|
||||
private int _enrageTicks;
|
||||
|
||||
public SlimePart(SlimeBoss boss, Location location, int size, double maxHealth, int enrageTicks)
|
||||
public SlimeCreature(SlimeBoss boss, Location location, int size, double maxHealth, int enrageTicks)
|
||||
{
|
||||
super(boss, location, "Slime King", true, maxHealth, Slime.class);
|
||||
_boss = boss;
|
||||
_spawnLocation = location;
|
||||
_enraged = false;
|
||||
_size = size;
|
||||
_maxHealth = maxHealth;
|
||||
_ticksLived = 0;
|
||||
_enrageTicks = enrageTicks;
|
||||
spawn(location);
|
||||
}
|
||||
|
||||
private void spawn(Location location)
|
||||
@Override
|
||||
protected void spawnCustom()
|
||||
{
|
||||
double health = _maxHealth;
|
||||
|
||||
// Remove old slime
|
||||
if (_slime != null)
|
||||
{
|
||||
health = _slime.getHealth();
|
||||
_slime.remove();
|
||||
}
|
||||
|
||||
_slime = location.getWorld().spawn(location, _enraged ? MagmaCube.class : Slime.class);
|
||||
_slime.setMaxHealth(_maxHealth);
|
||||
_slime.setHealth(health);
|
||||
_slime.setSize(_size);
|
||||
getEntity().setSize(_size);
|
||||
}
|
||||
|
||||
public void tick()
|
||||
@EventHandler
|
||||
public void abilityTick(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
return;
|
||||
|
||||
_ticksLived++;
|
||||
|
||||
if (_currentAbility == null || (_currentAbility.isIdle() && _currentAbility.getIdleTicks() > 80))
|
||||
@ -86,20 +80,23 @@ public class SlimePart
|
||||
_currentAbility.tick();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onSplit(SlimeSplitEvent event)
|
||||
{
|
||||
if (event.getEntity().equals(getEntity()))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
public void setEnraged(boolean enraged)
|
||||
{
|
||||
if (enraged != _enraged)
|
||||
{
|
||||
_enraged = enraged;
|
||||
spawn(_slime.getLocation());
|
||||
setEntityClass(_enraged ? MagmaCube.class : Slime.class);
|
||||
spawnEntity();
|
||||
}
|
||||
}
|
||||
|
||||
public SlimeBoss getBoss()
|
||||
{
|
||||
return _boss;
|
||||
}
|
||||
|
||||
public boolean isEnraged()
|
||||
{
|
||||
return _enraged;
|
||||
@ -110,13 +107,8 @@ public class SlimePart
|
||||
return _size;
|
||||
}
|
||||
|
||||
public Location getSpawnLocation()
|
||||
@Override
|
||||
public void dieCustom()
|
||||
{
|
||||
return _spawnLocation;
|
||||
}
|
||||
|
||||
public Slime getEntity()
|
||||
{
|
||||
return _slime;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user