use of org.spongepowered.api.entity.Entity in project Skree by Skelril.
the class ExplosiveArrowBarrage method apply.
@Override
public Optional<Instruction<DamagedCondition, Boss<Zombie, CatacombsBossDetail>>> apply(DamagedCondition damagedCondition, Boss<Zombie, CatacombsBossDetail> zombieCatacombsBossDetailBoss) {
CatacombsBossDetail detail = zombieCatacombsBossDetailBoss.getDetail();
CatacombsInstance inst = detail.getZone();
Zombie boss = zombieCatacombsBossDetailBoss.getTargetEntity().get();
if (activate(detail)) {
List<Entity> arrows = VelocityEntitySpawner.sendRadial(EntityTypes.TIPPED_ARROW, boss, Cause.source(SpawnCause.builder().type(SpawnTypes.PROJECTILE).build()).build());
Task.builder().execute(() -> {
for (Entity arrow : arrows) {
Location<World> target = arrow.getLocation();
target.getExtent().triggerExplosion(Explosion.builder().location(target).radius(explosionStrength(detail)).canCauseFire(allowFire(detail)).shouldBreakBlocks(allowBlockBreak(detail)).shouldDamageEntities(true).build(), Cause.source(SkreePlugin.container()).owner(boss).build());
}
}).delay(getDelay(detail), TimeUnit.SECONDS).submit(SkreePlugin.inst());
}
return Optional.empty();
}
use of org.spongepowered.api.entity.Entity in project Skree by Skelril.
the class SoulReaper method apply.
@Override
public Optional<Instruction<DamageCondition, Boss<Zombie, CatacombsBossDetail>>> apply(DamageCondition damageCondition, Boss<Zombie, CatacombsBossDetail> zombieCatacombsBossDetailBoss) {
CatacombsBossDetail detail = zombieCatacombsBossDetailBoss.getDetail();
Entity attacked = damageCondition.getAttacked();
if (attacked instanceof Player && activate(detail)) {
Task.builder().execute(() -> {
Optional<Zombie> optZombie = zombieCatacombsBossDetailBoss.getTargetEntity();
if (optZombie.isPresent()) {
Zombie boss = optZombie.get();
double stolen = EntityHealthUtil.getHealth((Living) attacked) - 1;
attacked.offer(Keys.HEALTH, 1D);
EntityHealthUtil.heal(boss, stolen);
((Player) attacked).sendMessage(Text.of(TextColors.RED, "The necromancer reaps your soul."));
}
}).delayTicks(1).submit(SkreePlugin.inst());
}
return Optional.empty();
}
use of org.spongepowered.api.entity.Entity in project Skree by Skelril.
the class FreakyFourInstance method spawnBoss.
public void spawnBoss(FreakyFourBoss boss, long delay) {
loadingBoss = true;
Task.builder().execute(() -> {
Entity entity = getRegion().getExtent().createEntity(boss.getEntityType(), getCenter(boss));
getRegion().getExtent().spawnEntity(entity, Cause.source(SpawnCause.builder().type(SpawnTypes.PLUGIN).build()).build());
Boss<Living, ZoneBossDetail<FreakyFourInstance>> aBoss = new Boss<>((Living) entity, new ZoneBossDetail<>(this));
bossManagers.get(boss).bind(aBoss);
bosses.put(boss, aBoss);
loadingBoss = false;
}).delayTicks(delay).submit(SkreePlugin.inst());
}
use of org.spongepowered.api.entity.Entity in project Skree by Skelril.
the class FreakyFourInstance method runCharlotte.
private void runCharlotte() {
Living boss = getBoss(FreakyFourBoss.CHARLOTTE).get();
for (int i = Probability.getRandom(10); i > 0; --i) {
spawnCharlotteMinion(boss.getLocation().getPosition());
}
ZoneBoundingBox charlotte_RG = regions.get(FreakyFourBoss.CHARLOTTE);
switch(Probability.getRandom(3)) {
case 1:
createWall(charlotte_RG, type -> type == BlockTypes.AIR, type -> type == BlockTypes.WEB, BlockTypes.AIR, BlockTypes.WEB, 1, config.charlotteFloorWeb);
break;
case 2:
if (boss instanceof Monster) {
Optional<Entity> optTarget = ((Monster) boss).getTarget();
if (optTarget.isPresent() && contains(optTarget.get())) {
Entity target = optTarget.get();
ZoneBoundingBox targetArea = new ZoneBoundingBox(target.getLocation().getPosition().sub(1, 1, 1).toInt(), new Vector3i(3, 3, 3));
targetArea.forAll(pt -> {
if (getRegion().getExtent().getBlockType(pt) == BlockTypes.AIR) {
getRegion().getExtent().setBlockType(pt, BlockTypes.WEB, Cause.source(SkreePlugin.container()).build());
}
});
}
break;
}
case 3:
charlotte_RG.forAll(pt -> {
if (!Probability.getChance(config.charlotteWebSpider)) {
return;
}
if (getRegion().getExtent().getBlockType(pt) == BlockTypes.WEB) {
getRegion().getExtent().setBlockType(pt, BlockTypes.AIR, Cause.source(SkreePlugin.container()).build());
spawnCharlotteMinion(pt.toDouble().add(.5, 0, .5));
}
});
break;
}
}
use of org.spongepowered.api.entity.Entity in project Skree by Skelril.
the class CursedMineListener method onPlayerDeath.
@Listener
public void onPlayerDeath(DestructEntityEvent.Death event) {
Entity entity = event.getTargetEntity();
if (!(entity instanceof Player)) {
return;
}
Player player = (Player) entity;
Optional<CursedMineInstance> optInst = manager.getApplicableZone(player);
HitList hitList = manager.getHitList();
if (optInst.isPresent() || hitList.isOnHitList(player)) {
if (!optInst.isPresent()) {
optInst = manager.getActiveZone();
}
if (optInst.isPresent()) {
optInst.get().revertPlayer(player);
optInst.get().clearCurses(player);
}
if (hitList.isOnHitList(player)) {
hitList.remPlayer(player);
}
String deathMessage;
switch(Probability.getRandom(11)) {
case 1:
deathMessage = " was killed by Dave";
break;
case 2:
deathMessage = " got on Dave's bad side";
break;
case 3:
deathMessage = " was slain by an evil spirit";
break;
case 4:
deathMessage = " needs to stay away from the cursed mine";
break;
case 5:
deathMessage = " enjoys death a little too much";
break;
case 6:
deathMessage = " seriously needs to stop mining";
break;
case 7:
deathMessage = " angered an evil spirit";
break;
case 8:
deathMessage = " doesn't get a cookie from COOKIE";
break;
case 9:
deathMessage = " should stay away";
break;
case 10:
deathMessage = " needs to consider retirement";
break;
default:
deathMessage = "'s head is now on Dave's mantel";
break;
}
event.setMessage(Text.of(player.getName(), deathMessage));
// addSkull(player);
}
}
Aggregations