Search in sources :

Example 1 with IntegratedRunnable

use of com.skelril.nitro.time.IntegratedRunnable in project Skree by Skelril.

the class GlowingFog method run.

@Override
public void run(Living owner, Living target, DamageEntityEvent event) {
    Location<World> originalLocation = target.getLocation();
    IntegratedRunnable bomb = new IntegratedRunnable() {

        @Override
        public boolean run(int times) {
            Vector3d max = originalLocation.getPosition().add(1, 2, 1);
            Vector3d min = originalLocation.getPosition().sub(1, 0, 1);
            for (int x = min.getFloorX(); x <= max.getFloorX(); ++x) {
                for (int z = min.getFloorZ(); z <= max.getFloorZ(); ++z) {
                    for (int y = min.getFloorY(); y < max.getFloorY(); ++y) {
                        Location<World> loc = target.getLocation().setBlockPosition(new Vector3i(x, y, z));
                        ParticleGenerator.mobSpawnerFlames(loc, 1);
                    }
                }
            }
            getTargetEntities(originalLocation).stream().filter(e -> e instanceof Living).forEach((e -> {
                if (!e.isRemoved() && e instanceof Living) {
                    if (e.equals(owner)) {
                        return;
                    }
                    e.damage(5, damageSource(owner));
                }
            }));
            return true;
        }

        @Override
        public void end() {
        }
    };
    TimedRunnable<IntegratedRunnable> timedRunnable = new TimedRunnable<>(bomb, (Probability.getRandom(15) * 3) + 7);
    Task task = Task.builder().execute(timedRunnable).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst());
    timedRunnable.setTask(task);
    notify(owner, Text.of(TextColors.YELLOW, "Your bow unleashes a powerful glowing fog."));
}
Also used : CuboidContainmentPredicate(com.skelril.nitro.position.CuboidContainmentPredicate) Location(org.spongepowered.api.world.Location) ParticleGenerator(com.skelril.nitro.particle.ParticleGenerator) Collection(java.util.Collection) Vector3d(com.flowpowered.math.vector.Vector3d) Entity(org.spongepowered.api.entity.Entity) SpecialAttack(com.skelril.nitro.registry.dynamic.ability.SpecialAttack) IntegratedRunnable(com.skelril.nitro.time.IntegratedRunnable) TimedRunnable(com.skelril.nitro.time.TimedRunnable) TimeUnit(java.util.concurrent.TimeUnit) SkreePlugin(com.skelril.skree.SkreePlugin) Text(org.spongepowered.api.text.Text) DamageEntityEvent(org.spongepowered.api.event.entity.DamageEntityEvent) Vector3i(com.flowpowered.math.vector.Vector3i) World(org.spongepowered.api.world.World) Task(org.spongepowered.api.scheduler.Task) Probability(com.skelril.nitro.probability.Probability) Living(org.spongepowered.api.entity.living.Living) TextColors(org.spongepowered.api.text.format.TextColors) Task(org.spongepowered.api.scheduler.Task) IntegratedRunnable(com.skelril.nitro.time.IntegratedRunnable) Vector3d(com.flowpowered.math.vector.Vector3d) Living(org.spongepowered.api.entity.living.Living) Vector3i(com.flowpowered.math.vector.Vector3i) World(org.spongepowered.api.world.World) TimedRunnable(com.skelril.nitro.time.TimedRunnable)

Example 2 with IntegratedRunnable

use of com.skelril.nitro.time.IntegratedRunnable in project Skree by Skelril.

the class ShnugglesPrimeInstance method runAttack.

public void runAttack(ShnugglesPrimeAttack attackCase) {
    Optional<Giant> optBoss = getBoss();
    if (!optBoss.isPresent()) {
        return;
    }
    Giant boss = optBoss.get();
    double bossHealth = getHealth(boss);
    double maxBossHealth = getMaxHealth(boss);
    double delay = 15000;
    if (lastAttackTime != 0 && System.currentTimeMillis() - lastAttackTime <= delay) {
        return;
    }
    Collection<Player> contained = getPlayers(PARTICIPANT);
    if (contained.isEmpty()) {
        return;
    }
    // AI-ish system
    if ((attackCase == ShnugglesPrimeAttack.EVERLASTING || attackCase == ShnugglesPrimeAttack.MINION_LEECH) && bossHealth > maxBossHealth * .9) {
        attackCase = Probability.getChance(2) ? ShnugglesPrimeAttack.DARK_POTIONS : ShnugglesPrimeAttack.CORRUPTION;
    }
    for (Player player : contained) {
        if (player.get(Keys.HEALTH).get() < 4) {
            attackCase = ShnugglesPrimeAttack.CORRUPTION;
            break;
        }
    }
    Collection<Zombie> zombies = getContained(Zombie.class);
    if (zombies.size() > 200) {
        attackCase = ShnugglesPrimeAttack.BASK_IN_MY_GLORY;
    }
    if (bossHealth < maxBossHealth * .4 && Probability.getChance(5)) {
        if (zombies.size() < 100 && bossHealth > 200) {
            attackCase = ShnugglesPrimeAttack.EVERLASTING;
        } else {
            attackCase = ShnugglesPrimeAttack.MINION_LEECH;
        }
    }
    if ((attackCase == ShnugglesPrimeAttack.BLINDNESS || attackCase == ShnugglesPrimeAttack.FIRE) && bossHealth < maxBossHealth * .15) {
        runRandomAttack();
        return;
    }
    switch(attackCase) {
        case WRATH:
            sendAttackBroadcast("Taste my wrath!", AttackSeverity.NORMAL);
            for (Player player : contained) {
                player.offer(Keys.VELOCITY, new Vector3d(random.nextDouble() * 3 - 1.5, random.nextDouble() * 1 + .5, random.nextDouble() * 3 - 1.5));
                player.offer(Keys.FIRE_TICKS, 20 * 3);
            }
            break;
        case CORRUPTION:
            sendAttackBroadcast("Embrace my corruption!", AttackSeverity.NORMAL);
            PotionEffect witherEffect = PotionEffect.of(PotionEffectTypes.WITHER, 1, 20 * 3);
            for (Player player : contained) {
                List<PotionEffect> potionEffects = player.getOrElse(Keys.POTION_EFFECTS, new ArrayList<>(1));
                potionEffects.add(witherEffect);
                player.offer(Keys.POTION_EFFECTS, potionEffects);
            }
            break;
        case BLINDNESS:
            sendAttackBroadcast("Are you BLIND? Mwhahahaha!", AttackSeverity.NORMAL);
            PotionEffect blindnessEffect = PotionEffect.of(PotionEffectTypes.BLINDNESS, 0, 20 * 4);
            for (Player player : contained) {
                List<PotionEffect> potionEffects = player.getOrElse(Keys.POTION_EFFECTS, new ArrayList<>(1));
                potionEffects.add(blindnessEffect);
                player.offer(Keys.POTION_EFFECTS, potionEffects);
            }
            break;
        case TANGO_TIME:
            sendAttackBroadcast("Tango time!", AttackSeverity.ULTIMATE);
            activeAttacks.add(ShnugglesPrimeAttack.TANGO_TIME);
            Task.builder().delay(7, TimeUnit.SECONDS).execute(() -> {
                if (!isBossSpawned()) {
                    return;
                }
                for (Player player : getPlayers(PARTICIPANT)) {
                    // TODO Convert to Sponge
                    if (((EntityGiantZombie) boss).canEntityBeSeen(tf(player))) {
                        player.sendMessage(Text.of(TextColors.YELLOW, "Come closer..."));
                        player.setLocation(boss.getLocation());
                        EntityDamageSource source = EntityDamageSource.builder().entity(boss).type(DamageTypes.ATTACK).build();
                        player.damage(100, source, Cause.source(boss).build());
                        player.offer(Keys.VELOCITY, new Vector3d(random.nextDouble() * 1.7 - 1.5, random.nextDouble() * 2, random.nextDouble() * 1.7 - 1.5));
                    } else {
                        player.sendMessage(Text.of(TextColors.YELLOW, "Fine... No tango this time..."));
                    }
                }
                sendAttackBroadcast("Now wasn't that fun?", AttackSeverity.INFO);
                activeAttacks.remove(ShnugglesPrimeAttack.TANGO_TIME);
            }).submit(SkreePlugin.inst());
            break;
        case EVERLASTING:
            if (!damageHeals) {
                activeAttacks.add(ShnugglesPrimeAttack.EVERLASTING);
                sendAttackBroadcast("I am everlasting!", AttackSeverity.NORMAL);
                damageHeals = true;
                Task.builder().delay(12, TimeUnit.SECONDS).execute(() -> {
                    if (damageHeals) {
                        damageHeals = false;
                        if (!isBossSpawned()) {
                            return;
                        }
                        sendAttackBroadcast("Thank you for your assistance.", AttackSeverity.INFO);
                    }
                    activeAttacks.remove(ShnugglesPrimeAttack.EVERLASTING);
                }).submit(SkreePlugin.inst());
                break;
            }
            runRandomAttack();
            return;
        case FIRE:
            sendAttackBroadcast("Fire is your friend...", AttackSeverity.NORMAL);
            for (Player player : contained) {
                player.offer(Keys.FIRE_TICKS, 20 * 5);
            }
            break;
        case BASK_IN_MY_GLORY:
            if (!damageHeals) {
                sendAttackBroadcast("Bask in my glory!", AttackSeverity.ULTIMATE);
                activeAttacks.add(ShnugglesPrimeAttack.BASK_IN_MY_GLORY);
                Task.builder().delay(7, TimeUnit.SECONDS).execute(() -> {
                    if (!isBossSpawned()) {
                        return;
                    }
                    boolean baskInGlory = false;
                    for (Player player : getContained(Player.class)) {
                        // TODO Convert to Sponge
                        if (((EntityGiantZombie) boss).canEntityBeSeen(tf(player))) {
                            player.sendMessage(Text.of(TextColors.DARK_RED, "You!"));
                            baskInGlory = true;
                        }
                    }
                    // Attack
                    if (baskInGlory) {
                        damageHeals = true;
                        spawnPts.stream().filter(pt -> Probability.getChance(12)).forEach(pt -> {
                            Explosion explosion = Explosion.builder().shouldDamageEntities(true).location(pt).radius(10).build();
                            getRegion().getExtent().triggerExplosion(explosion, Cause.source(SkreePlugin.container()).owner(boss).build());
                        });
                        // Schedule Reset
                        Task.builder().delay(500, TimeUnit.MILLISECONDS).execute(() -> {
                            damageHeals = false;
                        }).submit(SkreePlugin.inst());
                        return;
                    }
                    // Notify if avoided
                    sendAttackBroadcast("Gah... Afraid are you friends?", AttackSeverity.INFO);
                    activeAttacks.remove(ShnugglesPrimeAttack.BASK_IN_MY_GLORY);
                }).submit(SkreePlugin.inst());
                break;
            }
            runRandomAttack();
            break;
        case DARK_POTIONS:
            sendAttackBroadcast("Unleash the inner darkness!", AttackSeverity.NORMAL);
            PotionEffect instantDamageEffect = PotionEffect.of(PotionEffectTypes.INSTANT_DAMAGE, 0, 1);
            for (Living entity : getContained(Zombie.class)) {
                if (!Probability.getChance(5)) {
                    continue;
                }
                entity.offer(Keys.HEALTH, 0D);
                Location targetLoc = entity.getLocation();
                Entity potion = getRegion().getExtent().createEntity(EntityTypes.SPLASH_POTION, targetLoc.getPosition());
                potion.offer(Keys.POTION_EFFECTS, Lists.newArrayList(instantDamageEffect));
                getRegion().getExtent().spawnEntity(potion, Cause.source(SpawnCause.builder().type(SpawnTypes.PLUGIN).build()).build());
            }
            return;
        case MINION_LEECH:
            sendAttackBroadcast("My minions our time is now!", AttackSeverity.ULTIMATE);
            activeAttacks.add(ShnugglesPrimeAttack.MINION_LEECH);
            IntegratedRunnable minionEater = new IntegratedRunnable() {

                @Override
                public boolean run(int times) {
                    if (!isBossSpawned()) {
                        return true;
                    }
                    for (Living entity : getContained(Living.class)) {
                        // TODO convert to Sponge
                        if (entity instanceof Giant || !Probability.getChance(5) || !((EntityGiantZombie) boss).canEntityBeSeen((EntityLivingBase) entity)) {
                            continue;
                        }
                        double realDamage = entity.get(Keys.HEALTH).get();
                        // TODO convert to Sponge
                        if (entity instanceof Zombie && ((EntityZombie) entity).isChild()) {
                            entity.offer(Keys.HEALTH, 0D);
                        } else {
                            DamageSource source = DamageSource.builder().type(DamageTypes.ATTACK).build();
                            entity.damage(realDamage, source, Cause.source(boss).build());
                        }
                        toHeal += Math.min(1, realDamage / 3);
                    }
                    if (new TimeFilter(-1, 2).matchesFilter(times + 1)) {
                        getPlayerMessageChannel(SPECTATOR).send(Text.of(TextColors.DARK_AQUA, "The boss has drawn in: " + (int) toHeal + " health."));
                    }
                    return true;
                }

                @Override
                public void end() {
                    if (!isBossSpawned()) {
                        return;
                    }
                    heal(boss, toHeal);
                    toHeal = 0;
                    sendAttackBroadcast("Thank you my minions!", AttackSeverity.INFO);
                    printBossHealth();
                    activeAttacks.remove(ShnugglesPrimeAttack.MINION_LEECH);
                }
            };
            TimedRunnable<IntegratedRunnable> minonEatingTask = new TimedRunnable<>(minionEater, 20);
            Task minionEatingTaskExecutor = Task.builder().interval(500, TimeUnit.MILLISECONDS).execute(minonEatingTask).submit(SkreePlugin.inst());
            minonEatingTask.setTask(minionEatingTaskExecutor);
            break;
    }
    lastAttackTime = System.currentTimeMillis();
    lastAttack = attackCase;
}
Also used : Boss(com.skelril.openboss.Boss) BossManager(com.skelril.openboss.BossManager) SpawnCause(org.spongepowered.api.event.cause.entity.spawn.SpawnCause) DamageSource(org.spongepowered.api.event.cause.entity.damage.source.DamageSource) TimedRunnable(com.skelril.nitro.time.TimedRunnable) PotionEffectTypes(org.spongepowered.api.effect.potion.PotionEffectTypes) SkreePlugin(com.skelril.skree.SkreePlugin) TextColor(org.spongepowered.api.text.format.TextColor) TimeFilter(com.skelril.nitro.time.TimeFilter) PotionEffect(org.spongepowered.api.effect.potion.PotionEffect) ZoneBossDetail(com.skelril.skree.content.zone.ZoneBossDetail) Living(org.spongepowered.api.entity.living.Living) ForgeTransformer.tf(com.skelril.nitro.transformer.ForgeTransformer.tf) Location(org.spongepowered.api.world.Location) BlockTypes(org.spongepowered.api.block.BlockTypes) DamageTypes(org.spongepowered.api.event.cause.entity.damage.DamageTypes) CustomItemTypes(com.skelril.skree.content.registry.item.CustomItemTypes) Cause(org.spongepowered.api.event.cause.Cause) Explosion(org.spongepowered.api.world.explosion.Explosion) World(org.spongepowered.api.world.World) BlockType(org.spongepowered.api.block.BlockType) Player(org.spongepowered.api.entity.living.player.Player) Giant(org.spongepowered.api.entity.living.monster.Giant) EntityHealthPrinter(com.skelril.nitro.entity.EntityHealthPrinter) EntityDamageSource(org.spongepowered.api.event.cause.entity.damage.source.EntityDamageSource) EntityHealthUtil(com.skelril.nitro.entity.EntityHealthUtil) LegacyZoneBase(com.skelril.skree.content.zone.LegacyZoneBase) java.util(java.util) Keys(org.spongepowered.api.data.key.Keys) EntityZombie(net.minecraft.entity.monster.EntityZombie) PARTICIPANT(com.skelril.skree.service.internal.zone.PlayerClassifier.PARTICIPANT) Vector3d(com.flowpowered.math.vector.Vector3d) IntegratedRunnable(com.skelril.nitro.time.IntegratedRunnable) Lists(com.google.common.collect.Lists) EntityTypes(org.spongepowered.api.entity.EntityTypes) Text(org.spongepowered.api.text.Text) ZoneRegion(com.skelril.skree.service.internal.zone.ZoneRegion) Task(org.spongepowered.api.scheduler.Task) ZoneStatus(com.skelril.skree.service.internal.zone.ZoneStatus) Probability(com.skelril.nitro.probability.Probability) Zombie(org.spongepowered.api.entity.living.monster.Zombie) TextColors(org.spongepowered.api.text.format.TextColors) Nullable(javax.annotation.Nullable) PlaceHolderText(com.skelril.nitro.text.PlaceHolderText) Zone(com.skelril.skree.service.internal.zone.Zone) Entity(org.spongepowered.api.entity.Entity) SPECTATOR(com.skelril.skree.service.internal.zone.PlayerClassifier.SPECTATOR) TimeUnit(java.util.concurrent.TimeUnit) SpawnTypes(org.spongepowered.api.event.cause.entity.spawn.SpawnTypes) EntityLivingBase(net.minecraft.entity.EntityLivingBase) Vector3i(com.flowpowered.math.vector.Vector3i) CombinedText(com.skelril.nitro.text.CombinedText) EntityGiantZombie(net.minecraft.entity.monster.EntityGiantZombie) Clause(com.skelril.nitro.Clause) Entity(org.spongepowered.api.entity.Entity) Player(org.spongepowered.api.entity.living.player.Player) Task(org.spongepowered.api.scheduler.Task) Explosion(org.spongepowered.api.world.explosion.Explosion) DamageSource(org.spongepowered.api.event.cause.entity.damage.source.DamageSource) EntityDamageSource(org.spongepowered.api.event.cause.entity.damage.source.EntityDamageSource) EntityZombie(net.minecraft.entity.monster.EntityZombie) Zombie(org.spongepowered.api.entity.living.monster.Zombie) EntityGiantZombie(net.minecraft.entity.monster.EntityGiantZombie) PotionEffect(org.spongepowered.api.effect.potion.PotionEffect) Living(org.spongepowered.api.entity.living.Living) TimeFilter(com.skelril.nitro.time.TimeFilter) EntityGiantZombie(net.minecraft.entity.monster.EntityGiantZombie) TimedRunnable(com.skelril.nitro.time.TimedRunnable) EntityDamageSource(org.spongepowered.api.event.cause.entity.damage.source.EntityDamageSource) Vector3d(com.flowpowered.math.vector.Vector3d) IntegratedRunnable(com.skelril.nitro.time.IntegratedRunnable) Giant(org.spongepowered.api.entity.living.monster.Giant) Location(org.spongepowered.api.world.Location)

Example 3 with IntegratedRunnable

use of com.skelril.nitro.time.IntegratedRunnable in project Skree by Skelril.

the class ShutdownServiceImpl method shutdown.

@Override
public boolean shutdown(int seconds, long downtime, Text message) {
    if (seconds < 1) {
        return false;
    }
    reopenDate = PrettyText.dateFromCur(System.currentTimeMillis() + downtime + (seconds * 1000));
    if (runnable != null) {
        runnable.setTimes(seconds);
        return true;
    }
    IntegratedRunnable shutdown = new IntegratedRunnable() {

        @Override
        public boolean run(int times) {
            if (FILTER.matchesFilter(times)) {
                String rawMessage = "Sever shutting down in " + times + " seconds - for " + reopenDate + ".";
                MessageChannel.TO_ALL.send(Text.of(TextColors.RED, rawMessage));
                GameChatterPlugin.inst().sendSystemMessage(rawMessage);
            }
            return true;
        }

        @Override
        public void end() {
            String rawMessage = "Server shutting down!";
            MessageChannel.TO_ALL.send(Text.of(TextColors.RED, rawMessage));
            GameChatterPlugin.inst().sendSystemMessage(rawMessage);
            forceShutdown(message);
        }
    };
    TimedRunnable<IntegratedRunnable> runnable = new TimedRunnable<>(shutdown, seconds);
    Task task = Task.builder().execute(runnable).interval(1, TimeUnit.SECONDS).submit(SkreePlugin.inst());
    runnable.setTask(task);
    this.runnable = runnable;
    return true;
}
Also used : Task(org.spongepowered.api.scheduler.Task) IntegratedRunnable(com.skelril.nitro.time.IntegratedRunnable) TimedRunnable(com.skelril.nitro.time.TimedRunnable)

Example 4 with IntegratedRunnable

use of com.skelril.nitro.time.IntegratedRunnable in project Skree by Skelril.

the class CursedMineInstance method ghost.

public void ghost(final Player player, BlockType blockID) {
    if (Probability.getChance(player.getLocation().getBlockY())) {
        if (Probability.getChance(2)) {
            switch(Probability.getRandom(6)) {
                case 1:
                    player.sendMessage(Text.of(TextColors.YELLOW, "Caspher the friendly ghost drops some bread."));
                    new ItemDropper(player.getLocation()).dropStacks(Lists.newArrayList(newItemStack(ItemTypes.BREAD, Probability.getRandom(16))), SpawnTypes.DROPPED_ITEM);
                    break;
                case 2:
                    player.sendMessage(Text.of(TextColors.YELLOW, "COOKIE gives you a cookie."));
                    new ItemDropper(player.getLocation()).dropStacks(Lists.newArrayList(newItemStack(ItemTypes.COOKIE)), SpawnTypes.DROPPED_ITEM);
                    break;
                case 3:
                    player.sendMessage(Text.of(TextColors.YELLOW, "Caspher the friendly ghost appears."));
                    List<ItemStack> caspherLoot = new ArrayList<>();
                    for (int i = 0; i < 8; i++) {
                        caspherLoot.add(newItemStack(ItemTypes.IRON_INGOT, Probability.getRandom(64)));
                        caspherLoot.add(newItemStack(ItemTypes.GOLD_INGOT, Probability.getRandom(64)));
                        caspherLoot.add(newItemStack(ItemTypes.DIAMOND, Probability.getRandom(64)));
                    }
                    new ItemDropper(player.getLocation()).dropStacks(caspherLoot, SpawnTypes.DROPPED_ITEM);
                    break;
                case 4:
                    player.sendMessage(Text.of(TextColors.YELLOW, "John gives you a new jacket."));
                    new ItemDropper(player.getLocation()).dropStacks(Lists.newArrayList(newItemStack(ItemTypes.LEATHER_CHESTPLATE)), SpawnTypes.DROPPED_ITEM);
                    break;
                case 5:
                    player.sendMessage(Text.of(TextColors.YELLOW, "Tim teleports items to you."));
                    getContained(Item.class).forEach(i -> i.setLocation(player.getLocation()));
                    // Add in some extra drops just in case the loot wasn't very juicy
                    List<ItemStack> teleportLootExtras = Lists.newArrayList(newItemStack(ItemTypes.IRON_INGOT, Probability.getRandom(64)), newItemStack(ItemTypes.GOLD_INGOT, Probability.getRandom(64)), newItemStack(ItemTypes.DIAMOND, Probability.getRandom(64)));
                    new ItemDropper(player.getLocation()).dropStacks(teleportLootExtras, SpawnTypes.DROPPED_ITEM);
                    break;
                case 6:
                    player.sendMessage(Text.of(TextColors.YELLOW, "Dan gives you a sparkling touch."));
                    ItemType sparkingType;
                    switch(Probability.getRandom(3)) {
                        case 1:
                            sparkingType = ItemTypes.IRON_INGOT;
                            break;
                        case 2:
                            sparkingType = ItemTypes.GOLD_INGOT;
                            break;
                        case 3:
                            sparkingType = ItemTypes.DIAMOND;
                            break;
                        default:
                            sparkingType = ItemTypes.REDSTONE;
                            break;
                    }
                    TimedRunnable inventoryFX = new TimedRunnable<>(new IntegratedRunnable() {

                        @Override
                        public boolean run(int times) {
                            new InventoryCurse(sparkingType, 64).accept(player);
                            return true;
                        }

                        @Override
                        public void end() {
                        }
                    }, 10);
                    inventoryFX.setTask(Task.builder().execute(inventoryFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
                    activeTask.merge(player, Lists.newArrayList(inventoryFX.getTask()), (a, b) -> {
                        a.addAll(b);
                        return a;
                    });
                    break;
                default:
                    break;
            }
        } else {
            switch(Probability.getRandom(11)) {
                case 1:
                    if (Probability.getChance(4)) {
                        if (blockID == BlockTypes.DIAMOND_ORE) {
                            hitList.addPlayer(player);
                            player.sendMessage(Text.of(TextColors.RED, "You ignite fumes in the air!"));
                            EditSession ess = WorldEdit.getInstance().getEditSessionFactory().getEditSession(new WorldResolver(getRegion().getExtent()).getWorldEditWorld(), -1);
                            try {
                                Vector3d pos = player.getLocation().getPosition();
                                ess.fillXZ(new Vector(pos.getX(), pos.getY(), pos.getZ()), WorldEdit.getInstance().getBaseBlockFactory().getBaseBlock(BlockID.FIRE), 20, 20, true);
                            } catch (MaxChangedBlocksException ignored) {
                            }
                            for (int i = Probability.getRandom(24) + 20; i > 0; --i) {
                                final boolean untele = i == 11;
                                Task.builder().execute(() -> {
                                    if (untele) {
                                        recordSystem.revertByPlayer(player.getUniqueId());
                                        hitList.remPlayer(player);
                                    }
                                    if (!contains(player)) {
                                        return;
                                    }
                                    Vector3i pos = new PositionRandomizer(3).createPosition3i(player.getLocation().getPosition());
                                    player.getLocation().getExtent().triggerExplosion(Explosion.builder().radius(3).location(player.getLocation().setPosition(pos.toDouble().add(.5, .5, .5))).shouldDamageEntities(true).canCauseFire(true).build(), Cause.source(SkreePlugin.container()).build());
                                }).delayTicks(12 * i).submit(SkreePlugin.inst());
                            }
                        } else {
                            hitList.addPlayer(player);
                            // player.chat("Who's a good ghost?!?!");
                            Task.builder().execute(() -> {
                                // player.chat("Don't hurt me!!!");
                                Task.builder().execute(() -> {
                                    // player.chat("Nooooooooooo!!!");
                                    TimedRunnable cannonFX = new TimedRunnable<>(new IntegratedRunnable() {

                                        @Override
                                        public boolean run(int times) {
                                            new CannonCurse().accept(player);
                                            return true;
                                        }

                                        @Override
                                        public void end() {
                                        }
                                    }, 120);
                                    cannonFX.setTask(Task.builder().execute(cannonFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
                                    activeTask.merge(player, Lists.newArrayList(cannonFX.getTask()), (a, b) -> {
                                        a.addAll(b);
                                        return a;
                                    });
                                }).delay(1, TimeUnit.SECONDS).submit(SkreePlugin.inst());
                            }).delay(1, TimeUnit.SECONDS).submit(SkreePlugin.inst());
                        }
                        break;
                    }
                case 2:
                    player.sendMessage(Text.of(TextColors.RED, "Dave attaches to your soul..."));
                    for (int i = 20; i > 0; --i) {
                        Task.builder().execute(() -> {
                            if (!contains(player)) {
                                return;
                            }
                            player.offer(Keys.HEALTH, Probability.getRandom(Probability.getRandom(player.get(Keys.MAX_HEALTH).get())) - 1);
                        }).delayTicks(12 * i).submit(SkreePlugin.inst());
                    }
                    break;
                case 3:
                    player.sendMessage(Text.of(TextColors.RED, "George plays with fire, sadly too close to you."));
                    TimedRunnable fireFX = new TimedRunnable<>(new IntegratedRunnable() {

                        @Override
                        public boolean run(int times) {
                            new FireCurse().accept(player);
                            return true;
                        }

                        @Override
                        public void end() {
                        }
                    }, 90);
                    fireFX.setTask(Task.builder().execute(fireFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
                    activeTask.merge(player, Lists.newArrayList(fireFX.getTask()), (a, b) -> {
                        a.addAll(b);
                        return a;
                    });
                    break;
                case 4:
                    player.sendMessage(Text.of(TextColors.RED, "Simon says pick up sticks."));
                    List<ItemStack> sticks = new ArrayList<>();
                    for (int i = 0; i < player.getInventory().size() * 1.5; i++) {
                        sticks.add(newItemStack(ItemTypes.STICK, 64));
                    }
                    new ItemDropper(player.getLocation()).dropStacks(sticks, SpawnTypes.DROPPED_ITEM);
                    break;
                case 5:
                    player.sendMessage(Text.of(TextColors.RED, "Ben dumps out your backpack."));
                    TimedRunnable butterFingerFX = new TimedRunnable<>(new IntegratedRunnable() {

                        @Override
                        public boolean run(int times) {
                            new ButterFingersCurse().accept(player);
                            return true;
                        }

                        @Override
                        public void end() {
                        }
                    }, 20);
                    butterFingerFX.setTask(Task.builder().execute(butterFingerFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
                    activeTask.merge(player, Lists.newArrayList(butterFingerFX.getTask()), (a, b) -> {
                        a.addAll(b);
                        return a;
                    });
                    break;
                case 6:
                    player.sendMessage(Text.of(TextColors.RED, "Merlin attacks with a mighty rage!"));
                    TimedRunnable merlinFX = new TimedRunnable<>(new IntegratedRunnable() {

                        @Override
                        public boolean run(int times) {
                            new MerlinCurse().accept(player);
                            return true;
                        }

                        @Override
                        public void end() {
                        }
                    }, 40);
                    merlinFX.setTask(Task.builder().execute(merlinFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
                    activeTask.merge(player, Lists.newArrayList(merlinFX.getTask()), (a, b) -> {
                        a.addAll(b);
                        return a;
                    });
                    break;
                case 7:
                    player.sendMessage(Text.of(TextColors.RED, "Dave tells everyone that your mining!"));
                    MessageChannel.TO_PLAYERS.send(Text.of(TextColors.GOLD, player.getName() + " is mining in the cursed mine!!!"));
                    break;
                case 8:
                    player.sendMessage(Text.of(TextColors.RED, "Dave likes your food."));
                    hitList.addPlayer(player);
                    TimedRunnable starvationFX = new TimedRunnable<>(new IntegratedRunnable() {

                        @Override
                        public boolean run(int times) {
                            new StarvationCurse().accept(player);
                            return true;
                        }

                        @Override
                        public void end() {
                        }
                    }, 40);
                    starvationFX.setTask(Task.builder().execute(starvationFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
                    activeTask.merge(player, Lists.newArrayList(starvationFX.getTask()), (a, b) -> {
                        a.addAll(b);
                        return a;
                    });
                    break;
                case 9:
                    player.sendMessage(Text.of(TextColors.RED, "Hallow declares war on YOU!"));
                    for (int i = 0; i < Probability.getRangedRandom(10, 30); i++) {
                        Blaze blaze = (Blaze) getRegion().getExtent().createEntity(EntityTypes.BLAZE, player.getLocation().getPosition());
                        blaze.setTarget(player);
                        getRegion().getExtent().spawnEntity(blaze, Cause.source(SpawnCause.builder().type(SpawnTypes.BLOCK_SPAWNING).build()).build());
                    }
                    break;
                case 10:
                    player.sendMessage(Text.of(TextColors.RED, "A legion of hell hounds appears!"));
                    for (int i = 0; i < Probability.getRangedRandom(10, 30); i++) {
                        Wolf wolf = (Wolf) getRegion().getExtent().createEntity(EntityTypes.WOLF, player.getLocation().getPosition());
                        wolf.setTarget(player);
                        getRegion().getExtent().spawnEntity(wolf, Cause.source(SpawnCause.builder().type(SpawnTypes.BLOCK_SPAWNING).build()).build());
                    }
                    break;
                case 11:
                    if (blockID == BlockTypes.EMERALD_ORE) {
                        player.sendMessage(Text.of(TextColors.RED, "Dave got a chemistry set!"));
                        hitList.addPlayer(player);
                        TimedRunnable deadlyPotionFX = new TimedRunnable<>(new IntegratedRunnable() {

                            @Override
                            public boolean run(int times) {
                                new DeadlyPotionCurse().accept(player);
                                return true;
                            }

                            @Override
                            public void end() {
                            }
                        }, 2 * 60 * 30);
                        deadlyPotionFX.setTask(Task.builder().execute(deadlyPotionFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
                        activeTask.merge(player, Lists.newArrayList(deadlyPotionFX.getTask()), (a, b) -> {
                            a.addAll(b);
                            return a;
                        });
                    } else {
                        player.sendMessage(Text.of(TextColors.RED, "Dave says hi, that's not good."));
                        hitList.addPlayer(player);
                        TimedRunnable attackOfDaveFX = new TimedRunnable<>(new IntegratedRunnable() {

                            @Override
                            public boolean run(int times) {
                                new AttackOfDaveCurse().accept(player);
                                return true;
                            }

                            @Override
                            public void end() {
                            }
                        }, 2 * 60 * 30);
                        attackOfDaveFX.setTask(Task.builder().execute(attackOfDaveFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
                        activeTask.merge(player, Lists.newArrayList(attackOfDaveFX.getTask()), (a, b) -> {
                            a.addAll(b);
                            return a;
                        });
                    }
                    break;
                default:
                    break;
            }
        }
    }
}
Also used : PositionRandomizer(com.skelril.nitro.position.PositionRandomizer) ItemDropper(com.skelril.nitro.item.ItemDropper) WorldResolver(com.skelril.skree.service.internal.zone.WorldResolver) ItemType(org.spongepowered.api.item.ItemType) MaxChangedBlocksException(com.sk89q.worldedit.MaxChangedBlocksException) Item(org.spongepowered.api.entity.Item) Wolf(org.spongepowered.api.entity.living.animal.Wolf) Vector(com.sk89q.worldedit.Vector) TimedRunnable(com.skelril.nitro.time.TimedRunnable) IntegratedRunnable(com.skelril.nitro.time.IntegratedRunnable) Vector3d(com.flowpowered.math.vector.Vector3d) Blaze(org.spongepowered.api.entity.living.monster.Blaze) Vector3i(com.flowpowered.math.vector.Vector3i) EditSession(com.sk89q.worldedit.EditSession) ItemStack(org.spongepowered.api.item.inventory.ItemStack) ItemStackFactory.newItemStack(com.skelril.nitro.item.ItemStackFactory.newItemStack)

Example 5 with IntegratedRunnable

use of com.skelril.nitro.time.IntegratedRunnable in project Skree by Skelril.

the class FreakyFourInstance method createWall.

private void createWall(ZoneBoundingBox region, Predicate<BlockType> oldExpr, Predicate<BlockType> newExpr, BlockType oldType, BlockType newType, int density, int floodFloor) {
    final Vector3i min = region.getMinimumPoint();
    final Vector3i max = region.getMaximumPoint();
    int minX = min.getX();
    int minY = min.getY();
    int minZ = min.getZ();
    int maxX = max.getX();
    int maxY = max.getY();
    int maxZ = max.getZ();
    int initialTimes = maxZ - minZ + 1;
    IntegratedRunnable integratedRunnable = new IntegratedRunnable() {

        @Override
        public boolean run(int times) {
            int startZ = minZ + (initialTimes - times) - 1;
            for (int x = minX; x <= maxX; ++x) {
                for (int z = startZ; z < Math.min(maxZ, startZ + 4); ++z) {
                    boolean flood = Probability.getChance(density);
                    for (int y = minY; y <= maxY; ++y) {
                        BlockType block = getRegion().getExtent().getBlockType(x, y, z);
                        if (z == startZ && newExpr.test(block)) {
                            getRegion().getExtent().setBlockType(x, y, z, oldType, Cause.source(SkreePlugin.container()).build());
                        } else if (flood && oldExpr.test(block)) {
                            getRegion().getExtent().setBlockType(x, y, z, newType, Cause.source(SkreePlugin.container()).build());
                        }
                    }
                }
            }
            return true;
        }

        @Override
        public void end() {
            if (floodFloor != -1) {
                for (int x = minX; x <= maxX; ++x) {
                    for (int z = minZ; z <= maxZ; ++z) {
                        if (!Probability.getChance(floodFloor)) {
                            continue;
                        }
                        BlockType block = getRegion().getExtent().getBlockType(x, minY, z);
                        if (oldExpr.test(block)) {
                            getRegion().getExtent().setBlockType(x, minY, z, newType, Cause.source(SkreePlugin.container()).build());
                        }
                    }
                }
            }
        }
    };
    TimedRunnable<IntegratedRunnable> timedRunnable = new TimedRunnable<>(integratedRunnable, initialTimes);
    Task task = Task.builder().execute(timedRunnable).interval(500, MILLISECONDS).submit(SkreePlugin.inst());
    timedRunnable.setTask(task);
}
Also used : Task(org.spongepowered.api.scheduler.Task) IntegratedRunnable(com.skelril.nitro.time.IntegratedRunnable) BlockType(org.spongepowered.api.block.BlockType) Vector3i(com.flowpowered.math.vector.Vector3i) TimedRunnable(com.skelril.nitro.time.TimedRunnable)

Aggregations

IntegratedRunnable (com.skelril.nitro.time.IntegratedRunnable)12 TimedRunnable (com.skelril.nitro.time.TimedRunnable)12 Task (org.spongepowered.api.scheduler.Task)9 Vector3d (com.flowpowered.math.vector.Vector3d)5 Vector3i (com.flowpowered.math.vector.Vector3i)5 Living (org.spongepowered.api.entity.living.Living)5 SkreePlugin (com.skelril.skree.SkreePlugin)4 TimeUnit (java.util.concurrent.TimeUnit)4 Entity (org.spongepowered.api.entity.Entity)4 Location (org.spongepowered.api.world.Location)4 World (org.spongepowered.api.world.World)4 CuboidContainmentPredicate (com.skelril.nitro.position.CuboidContainmentPredicate)3 BlockType (org.spongepowered.api.block.BlockType)3 Player (org.spongepowered.api.entity.living.player.Player)3 Text (org.spongepowered.api.text.Text)3 TextColors (org.spongepowered.api.text.format.TextColors)3 ParticleGenerator (com.skelril.nitro.particle.ParticleGenerator)2 Probability (com.skelril.nitro.probability.Probability)2 SpecialAttack (com.skelril.nitro.registry.dynamic.ability.SpecialAttack)2 Collection (java.util.Collection)2