Search in sources :

Example 36 with Entity

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();
}
Also used : CatacombsBossDetail(com.skelril.skree.content.zone.group.catacombs.CatacombsBossDetail) Entity(org.spongepowered.api.entity.Entity) CatacombsInstance(com.skelril.skree.content.zone.group.catacombs.CatacombsInstance) Zombie(org.spongepowered.api.entity.living.monster.Zombie) World(org.spongepowered.api.world.World)

Example 37 with Entity

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();
}
Also used : CatacombsBossDetail(com.skelril.skree.content.zone.group.catacombs.CatacombsBossDetail) Entity(org.spongepowered.api.entity.Entity) Player(org.spongepowered.api.entity.living.player.Player) Zombie(org.spongepowered.api.entity.living.monster.Zombie) Living(org.spongepowered.api.entity.living.Living)

Example 38 with Entity

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());
}
Also used : Entity(org.spongepowered.api.entity.Entity) Boss(com.skelril.openboss.Boss) Living(org.spongepowered.api.entity.living.Living) ZoneBossDetail(com.skelril.skree.content.zone.ZoneBossDetail)

Example 39 with Entity

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;
    }
}
Also used : Entity(org.spongepowered.api.entity.Entity) Living(org.spongepowered.api.entity.living.Living) Monster(org.spongepowered.api.entity.living.monster.Monster) Vector3i(com.flowpowered.math.vector.Vector3i) ZoneBoundingBox(com.skelril.skree.service.internal.zone.ZoneBoundingBox)

Example 40 with Entity

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);
    }
}
Also used : Entity(org.spongepowered.api.entity.Entity) Player(org.spongepowered.api.entity.living.player.Player) HitList(com.skelril.skree.content.zone.global.cursedmine.hitlist.HitList) Listener(org.spongepowered.api.event.Listener)

Aggregations

Entity (org.spongepowered.api.entity.Entity)59 Player (org.spongepowered.api.entity.living.player.Player)23 World (org.spongepowered.api.world.World)19 Living (org.spongepowered.api.entity.living.Living)17 Listener (org.spongepowered.api.event.Listener)13 Vector3d (com.flowpowered.math.vector.Vector3d)10 ArrayList (java.util.ArrayList)8 DamageSource (org.spongepowered.api.event.cause.entity.damage.source.DamageSource)8 Instruction (com.skelril.openboss.Instruction)7 ItemStack (org.spongepowered.api.item.inventory.ItemStack)7 Location (org.spongepowered.api.world.Location)7 Zombie (org.spongepowered.api.entity.living.monster.Zombie)6 IndirectEntityDamageSource (org.spongepowered.api.event.cause.entity.damage.source.IndirectEntityDamageSource)6 ZoneBossDetail (com.skelril.skree.content.zone.ZoneBossDetail)5 PotionEffect (org.spongepowered.api.effect.potion.PotionEffect)5 EntityDamageSource (org.spongepowered.api.event.cause.entity.damage.source.EntityDamageSource)5 DamageEntityEvent (org.spongepowered.api.event.entity.DamageEntityEvent)5 TileEntity (org.spongepowered.api.block.tileentity.TileEntity)4 Vector3i (com.flowpowered.math.vector.Vector3i)3 PlayerCombatParser (com.skelril.nitro.combat.PlayerCombatParser)3