/** * Gets the scheduler used to schedule tasks. * * @return The scheduler */ default Scheduler getScheduler() { return Sponge.getScheduler(); }
public void onReload() { //run this task sync in order let it finish before the process ends database.close(); Sponge.getScheduler().getScheduledTasks(this).forEach(Task::cancel); Collection<Player> onlinePlayers = Sponge.getServer().getOnlinePlayers(); onlinePlayers.forEach(protectionManager::unprotect); init(); onlinePlayers.stream() .peek(protectionManager::protect) .parallel() .forEach(database::loadAccount); }
private Task.Builder taskBuilder(Runnable runnable) { return Sponge.getScheduler().createTaskBuilder().execute(runnable); }
@Override public void disable() { super.disable(); for (Task task : Sponge.getScheduler().getScheduledTasks(plugin)) { task.cancel(); } } }
@Override public void executeBlocking(Runnable runnable) { Sponge.getScheduler().createTaskBuilder().execute(runnable).submit(plugin); }
private void removeChair(Chair<?> chair, boolean clearPassengers) { Player passenger = chair.chairEntity.getPassengers().stream().filter((entity -> entity instanceof Player)).map(e -> (Player) e).findFirst().orElse(null); if (passenger != null && clearPassengers) { passenger.setVehicle(null); chair.chairEntity.clearPassengers(); passenger.sendMessage(Text.of(TextColors.YELLOW, "You stand up!")); if (exitAtEntry.getValue()) { Sponge.getScheduler().createTaskBuilder().delayTicks(5L).execute(() -> passenger.setLocation(chair.playerExitLocation)).submit(CraftBookPlugin.inst()); } } chair.chairEntity.remove(); chairs.values().remove(chair); }
@Override public void onVoteReceived(Channel channel, final Vote vote, VotifierSession.ProtocolVersion protocolVersion) { if (debug) { if (protocolVersion == VotifierSession.ProtocolVersion.ONE) { logger.info("Got a protocol v1 vote record from " + channel.remoteAddress() + " -> " + vote); } else { logger.info("Got a protocol v2 vote record from " + channel.remoteAddress() + " -> " + vote); } } Sponge.getScheduler().createTaskBuilder() .execute(() -> { VotifierEvent event = new VotifierEvent(vote, Sponge.getCauseStackManager().getCurrentCause()); Sponge.getEventManager().post(event); }) .submit(this); }
@Override public void executeAsync(Runnable runnable) { Sponge.getScheduler().createTaskBuilder().execute(runnable).async().submit(plugin); }
@Override public void run() { // Plugin was disabled, e.g. because of a reload (is this even possible in Sponge?) if (!Sponge.getPluginManager().isLoaded(plugin.getId())) { timer.cancel(); return; } // The data collection (e.g. for custom graphs) is done sync // Don't be afraid! The connection to the bStats server is still async, only the stats collection is sync ;) Scheduler scheduler = Sponge.getScheduler(); Task.Builder taskBuilder = scheduler.createTaskBuilder(); taskBuilder.execute(() -> submitData()).submit(plugin); } }, 1000*60*5, 1000*60*30);
@Override public void executeBlockingLater(Runnable runnable, long time, TimeUnit unit) { Sponge.getScheduler().createTaskBuilder().execute(runnable).delay(time, unit).submit(plugin); }
@Override public void executeAsyncLater(Runnable runnable, long time, TimeUnit unit) { Sponge.getScheduler().createTaskBuilder().execute(runnable).async().delay(time, unit).submit(plugin); }
@Listener public void onStarting(GameStartingServerEvent event) { // Here we use the scheduler to call some code later. // In this instance we use it to call the code in the execute block // every tick. // We could also have delayed execution by some amount of ticks, // or used real like time units instead. Sponge.getScheduler().createTaskBuilder() .execute(() -> { for (Map.Entry<Projectile, Vector3d> entry : fireballMap.entrySet()) { entry.getKey().offer(Keys.VELOCITY, entry.getValue()); } }) // Tells it how often to call the code. // 1 is every tick, 2 is every 2 ticks, 3 is every 3 ticks, // and so on. .intervalTicks(1) // We submit the task, and give it our plugin instance .submit(this.container); }
@Listener public void onBlockBreak(ChangeBlockEvent.Break event, @First Player player) { event.getTransactions().stream() .map(Transaction::getOriginal) .filter(snapshot -> snapshot.getState().getType() == BlockTypes.DOUBLE_PLANT) .filter(snapshot -> snapshot.getState().get(Keys.DOUBLE_PLANT_TYPE).orElse(DoublePlantTypes.GRASS).equals(DoublePlantTypes.FERN)) .filter(snapshot -> snapshot.getState().get(Keys.PORTION_TYPE).orElse(PortionTypes.BOTTOM).equals(PortionTypes.TOP)) .forEach(snapshot -> Sponge.getScheduler().createTaskBuilder().execute(task -> { snapshot.getLocation().get().getRelative(Direction.DOWN) .setBlock(BlockState.builder().blockType(BlockTypes.TALLGRASS).add(Keys.SHRUB_TYPE, ShrubTypes.FERN).build()); if (player.get(Keys.GAME_MODE).orElse(GameModes.SURVIVAL) != GameModes.CREATIVE) { Item item = (Item) snapshot.getLocation().get().getExtent().createEntity(EntityTypes.ITEM, snapshot.getPosition()); item.offer(Keys.REPRESENTED_ITEM, ItemStack.builder().itemType(ItemTypes.TALLGRASS).add(Keys.SHRUB_TYPE, ShrubTypes.FERN).build().createSnapshot()); snapshot.getLocation().get().spawnEntity(item); } }).submit(CraftBookPlugin.spongeInst().getContainer())); }
@Override public void onForward(final Vote v) { if (debug) { logger.info("Got a forwarded vote -> " + v); } Sponge.getScheduler().createTaskBuilder() .execute(() -> { VotifierEvent event = new VotifierEvent(v, Sponge.getCauseStackManager().getCurrentCause()); Sponge.getEventManager().post(event); }) .submit(this); } }
private void checkForPhysics(Location<World> block) { if(fallingLadders.getValue() && FallingLadders.isValid(block)) { Sponge.getScheduler().createTaskBuilder() .execute(new FallingLadders(this, block)) .submit(CraftBookPlugin.spongeInst().getContainer()); } }
void startShow() { position = 0; if (task != null) task.cancel(); ShowInterpreter show; if(!fyrestone) show = new BasicShowInterpreter(); else show = new FyrestoneInterpreter(); task = Sponge.getScheduler().createTaskBuilder().execute(show).submit(CraftBookPlugin.spongeInst().getContainer()); }
@Listener public void onDismount(RideEntityEvent.Dismount event, @First Player player) { if (event.getTargetEntity() instanceof Minecart) { Sponge.getScheduler().createTaskBuilder().delayTicks(2) .execute(new CartRemover(player, (Minecart) event.getTargetEntity())) .submit(CraftBookPlugin.spongeInst()); } }
@Listener public void onDismount(RideEntityEvent.Dismount event, @First Player player) { if (event.getTargetEntity() instanceof Boat) { Sponge.getScheduler().createTaskBuilder().delayTicks(2) .execute(new BoatRemover(player, (Boat) event.getTargetEntity())) .submit(CraftBookPlugin.spongeInst()); } }
@Listener public void onDismount(RideEntityEvent.Dismount event, @First Player player) { if (event.getTargetEntity() instanceof ArmorStand) { Chair<?> chair = getChair(event.getTargetEntity()); if (chair != null) { player.sendMessage(Text.of(TextColors.YELLOW, "You stand up!")); Sponge.getScheduler().createTaskBuilder().execute(() -> { removeChair(chair, false); if (!exitAtEntry.getValue()) { Sponge.getGame().getTeleportHelper().getSafeLocation(chair.chairLocation).ifPresent(player::setLocation); } }).submit(CraftBookPlugin.inst()); } } }
@Override public CommandResult execute(CommandSource sender, CommandContext args) throws CommandException { if (plugin.getApiClient() == null) { sender.sendMessage(Text.builder(plugin.getI18n().get("need_secret_key")).color(TextColors.RED).build()); return CommandResult.success(); } if (plugin.getDuePlayerFetcher().inProgress()) { sender.sendMessage(Text.builder(plugin.getI18n().get("already_checking_for_purchases")).color(TextColors.RED).build()); return CommandResult.success(); } Sponge.getScheduler().createTaskBuilder().execute(() -> plugin.getDuePlayerFetcher().run(false)).async().submit(plugin); sender.sendMessage(Text.builder(plugin.getI18n().get("forcecheck_queued")).color(TextColors.GREEN).build()); return CommandResult.success(); } }