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."));
}
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;
}
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;
}
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;
}
}
}
}
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);
}
Aggregations