[Clans] More work on world events
This commit is contained in:
parent
20fadcd187
commit
6b10d9f3c9
@ -92,7 +92,7 @@ public class Clans extends JavaPlugin
|
||||
new BuildingShop(clans, _clientManager, _donationManager);
|
||||
new PvpShop(clans, _clientManager, _donationManager);
|
||||
|
||||
new WorldEventManager(this);
|
||||
new WorldEventManager(this, clans);
|
||||
|
||||
//Updates
|
||||
getServer().getScheduler().scheduleSyncRepeatingTask(this, new Updater(this), 1, 1);
|
||||
|
@ -77,6 +77,7 @@ public class ClansManager extends MiniClientPlugin<ClientClan> implements IRelat
|
||||
private ClassCombatShop _classShop;
|
||||
private ClassManager _classManager;
|
||||
private WarManager _warManager;
|
||||
private ProjectileManager _projectileManager;
|
||||
|
||||
private int _inviteExpire = 2;
|
||||
private int _nameMin = 3;
|
||||
@ -124,15 +125,15 @@ public class ClansManager extends MiniClientPlugin<ClientClan> implements IRelat
|
||||
|
||||
new Weapon(plugin, energy);
|
||||
new Gameplay(plugin, this, blockRestore, damageManager);
|
||||
ProjectileManager throwManager = new ProjectileManager(plugin);
|
||||
_projectileManager = new ProjectileManager(plugin);
|
||||
Fire fire = new Fire(plugin, _condition, damageManager);
|
||||
|
||||
HashSet<String> itemIgnore = new HashSet<String>();
|
||||
itemIgnore.add("Proximity Explosive");
|
||||
itemIgnore.add("Proximity Zapper");
|
||||
|
||||
ItemFactory itemFactory = new ItemFactory(plugin, blockRestore, _condition, damageManager, energy, fire, throwManager, webServerAddress, itemIgnore);
|
||||
SkillFactory skillManager = new SkillFactory(plugin, damageManager, this, _combatManager, _condition, throwManager, disguiseManager, blockRestore, fire, new Movement(plugin), teleport, energy, webServerAddress);
|
||||
ItemFactory itemFactory = new ItemFactory(plugin, blockRestore, _condition, damageManager, energy, fire, _projectileManager, webServerAddress, itemIgnore);
|
||||
SkillFactory skillManager = new SkillFactory(plugin, damageManager, this, _combatManager, _condition, _projectileManager, disguiseManager, blockRestore, fire, new Movement(plugin), teleport, energy, webServerAddress);
|
||||
skillManager.RemoveSkill("Dwarf Toss", "Block Toss");
|
||||
_classManager = new ClassManager(plugin, _clientManager, donationManager, skillManager, itemFactory, webServerAddress);
|
||||
|
||||
@ -498,6 +499,11 @@ public class ClansManager extends MiniClientPlugin<ClientClan> implements IRelat
|
||||
return _warManager;
|
||||
}
|
||||
|
||||
public ProjectileManager getProjectile()
|
||||
{
|
||||
return _projectileManager;
|
||||
}
|
||||
|
||||
public int convertGoldToEnergy(int gold)
|
||||
{
|
||||
return gold * 4;
|
||||
|
@ -12,6 +12,7 @@ import org.bukkit.plugin.java.JavaPlugin;
|
||||
import mineplex.core.MiniPlugin;
|
||||
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.AbstractWorldEvent;
|
||||
|
||||
@ -20,10 +21,13 @@ public class WorldEventManager extends MiniPlugin implements WorldEventListener
|
||||
private final WorldEventFactory _factory;
|
||||
private final Set<AbstractWorldEvent> _events;
|
||||
|
||||
public WorldEventManager(JavaPlugin plugin)
|
||||
private ClansManager _clansManager;
|
||||
|
||||
public WorldEventManager(JavaPlugin plugin, ClansManager clansManager)
|
||||
{
|
||||
super("World Event", plugin);
|
||||
|
||||
_clansManager = clansManager;
|
||||
_factory = new ConcreteWorldEventFactory(this);
|
||||
_events = new HashSet<AbstractWorldEvent>();
|
||||
}
|
||||
@ -45,6 +49,11 @@ public class WorldEventManager extends MiniPlugin implements WorldEventListener
|
||||
return event;
|
||||
}
|
||||
|
||||
public ClansManager getClans()
|
||||
{
|
||||
return _clansManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete(AbstractWorldEvent event)
|
||||
{
|
||||
|
@ -16,6 +16,7 @@ import org.bukkit.util.Vector;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.AbstractBoss;
|
||||
import mineplex.game.clans.clans.worldevent.event.state.RocketState;
|
||||
|
||||
public class SlamState extends BossState
|
||||
{
|
||||
@ -102,7 +103,7 @@ public class SlamState extends BossState
|
||||
fallLoc.getWorld().playSound(fallLoc, Sound.ANVIL_LAND, 10, 0.5F);
|
||||
|
||||
event.setCancelled(true);
|
||||
getBoss().setState(null);
|
||||
getBoss().setState(new RocketState(getBoss(), _entity));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,154 @@
|
||||
package mineplex.game.clans.clans.worldevent.event.state;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Slime;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
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.AbstractBoss;
|
||||
import mineplex.game.clans.clans.worldevent.event.boss.state.BossState;
|
||||
|
||||
public class RocketState extends BossState implements IThrown
|
||||
{
|
||||
private LivingEntity _shooter;
|
||||
private LinkedList<ShotData> _shots;
|
||||
|
||||
public RocketState(AbstractBoss boss, LivingEntity shooter)
|
||||
{
|
||||
super(boss);
|
||||
_shooter = shooter;
|
||||
_shots = new LinkedList<ShotData>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTick()
|
||||
{
|
||||
if (getTicks() % 20 == 0)
|
||||
{
|
||||
int c = getTicks() / 20;
|
||||
double mod = (c / 5.0) * Math.PI;
|
||||
double x = Math.sin(mod);
|
||||
double z = Math.cos(mod);
|
||||
double y = -0.1;
|
||||
|
||||
List<Entity> entities = _shooter.getNearbyEntities(20, 20, 20);
|
||||
|
||||
for (Entity e : entities)
|
||||
{
|
||||
if (e instanceof Player)
|
||||
{
|
||||
// Vector v = UtilAlg.getTrajectory(_shooter.getEyeLocation(), e.getLocation());
|
||||
fireProjectile(((Player) e));
|
||||
}
|
||||
}
|
||||
|
||||
// fireProjectile(new Vector(x, y, z));
|
||||
|
||||
if (c == 5)
|
||||
{
|
||||
getBoss().setState(null);
|
||||
}
|
||||
}
|
||||
|
||||
Iterator<ShotData> it = _shots.iterator();
|
||||
|
||||
while (it.hasNext())
|
||||
{
|
||||
ShotData next = it.next();
|
||||
|
||||
if (next.getEntity().isDead())
|
||||
{
|
||||
it.remove();
|
||||
}
|
||||
else
|
||||
{
|
||||
Vector v = UtilAlg.getTrajectory(next.getEntity(), next.getTarget());
|
||||
next.getEntity().setVelocity(v.multiply(new Vector(0.3, 0.1, 0.3)));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStateStart()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStateStop()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void fireProjectile(LivingEntity target)
|
||||
{
|
||||
Location loc = _shooter.getEyeLocation();
|
||||
loc.add(loc.getDirection().normalize().multiply(2));
|
||||
Slime projectile = loc.getWorld().spawn(loc, Slime.class);
|
||||
projectile.setSize(2);
|
||||
// projectile.setVelocity(direction);
|
||||
_shots.add(new ShotData(projectile, target));
|
||||
|
||||
ProjectileManager pm = getBoss().getEventManager().getClans().getProjectile();
|
||||
pm.AddThrow(projectile, _shooter, this, -1, true, true, true, null, 0, 0, UtilParticle.ParticleType.SLIME, UpdateType.FASTEST, 1F);
|
||||
Bukkit.broadcastMessage("Shot Slime");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
||||
{
|
||||
Bukkit.broadcastMessage("COLLIDE " + target);
|
||||
UtilParticle.PlayParticle(UtilParticle.ParticleType.LARGE_EXPLODE, data.GetThrown().getLocation(), 0, 0, 0, 0, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Idle(ProjectileUser data)
|
||||
{
|
||||
Bukkit.broadcastMessage("IDLE");
|
||||
UtilParticle.PlayParticle(UtilParticle.ParticleType.LARGE_EXPLODE, data.GetThrown().getLocation(), 0, 0, 0, 0, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Expire(ProjectileUser data)
|
||||
{
|
||||
Bukkit.broadcastMessage("EXPIRE");
|
||||
UtilParticle.PlayParticle(UtilParticle.ParticleType.LARGE_EXPLODE, data.GetThrown().getLocation(), 0, 0, 0, 0, 1);
|
||||
}
|
||||
|
||||
private static class ShotData
|
||||
{
|
||||
private LivingEntity _entity;
|
||||
private LivingEntity _target;
|
||||
|
||||
public ShotData(LivingEntity entity, LivingEntity target)
|
||||
{
|
||||
_entity = entity;
|
||||
_target = target;
|
||||
}
|
||||
|
||||
public LivingEntity getEntity()
|
||||
{
|
||||
return _entity;
|
||||
}
|
||||
|
||||
public LivingEntity getTarget()
|
||||
{
|
||||
return _target;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user