From 535df42c54bd95960ea7e1bd1a81fd6012c24f11 Mon Sep 17 00:00:00 2001 From: Dico Date: Sun, 23 Sep 2018 06:42:07 +0100 Subject: Tweak --- .../kotlin/io/dico/parcels2/ParcelGenerator.kt | 9 ++-- .../parcels2/command/AbstractParcelCommands.kt | 6 +-- .../io/dico/parcels2/command/CommandsGeneral.kt | 48 ++++++++++++++-------- .../parcels2/defaultimpl/DefaultParcelGenerator.kt | 2 +- 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/src/main/kotlin/io/dico/parcels2/ParcelGenerator.kt b/src/main/kotlin/io/dico/parcels2/ParcelGenerator.kt index 8e7a5df..d69984b 100644 --- a/src/main/kotlin/io/dico/parcels2/ParcelGenerator.kt +++ b/src/main/kotlin/io/dico/parcels2/ParcelGenerator.kt @@ -1,9 +1,6 @@ package io.dico.parcels2 -import io.dico.parcels2.blockvisitor.RegionTraverser -import io.dico.parcels2.blockvisitor.Worker -import io.dico.parcels2.blockvisitor.WorkerScope -import io.dico.parcels2.blockvisitor.WorktimeLimiter +import io.dico.parcels2.blockvisitor.* import io.dico.parcels2.util.Region import io.dico.parcels2.util.Vec2i import io.dico.parcels2.util.get @@ -62,6 +59,8 @@ interface ParcelBlockManager { fun clearParcel(parcel: ParcelId): Worker + fun submitBlockVisitor(parcelId: ParcelId, task: TimeLimitedTask): Worker + /** * Used to update owner blocks in the corner of the parcel */ @@ -70,7 +69,7 @@ interface ParcelBlockManager { inline fun ParcelBlockManager.doBlockOperation(parcel: ParcelId, traverser: RegionTraverser, - crossinline operation: suspend WorkerScope.(Block) -> Unit) = worktimeLimiter.submit { + crossinline operation: suspend WorkerScope.(Block) -> Unit) = submitBlockVisitor(parcel) { val region = getRegion(parcel) val blockCount = region.blockCount.toDouble() val blocks = traverser.traverseRegion(region) diff --git a/src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt b/src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt index bd27fe7..2339309 100644 --- a/src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt +++ b/src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt @@ -1,9 +1,6 @@ package io.dico.parcels2.command -import io.dico.dicore.command.CommandException -import io.dico.dicore.command.EMessageType -import io.dico.dicore.command.ExecutionContext -import io.dico.dicore.command.ICommandReceiver +import io.dico.dicore.command.* import io.dico.parcels2.ParcelWorld import io.dico.parcels2.ParcelsPlugin import io.dico.parcels2.PlayerProfile @@ -43,6 +40,7 @@ abstract class AbstractParcelCommands(val plugin: ParcelsPlugin) : ICommandRecei "Run \"/${context.route.joinToString(" ")} -sure\" if you want to go through with this." protected fun ParcelScope.clearWithProgressUpdates(context: ExecutionContext, action: String) { + Validate.isTrue(!parcel.hasBlockVisitors, "A process is already running in this parcel") world.blockManager.clearParcel(parcel.id) .onProgressUpdate(1000, 1000) { progress, elapsedTime -> val alt = context.getFormat(EMessageType.NUMBER) diff --git a/src/main/kotlin/io/dico/parcels2/command/CommandsGeneral.kt b/src/main/kotlin/io/dico/parcels2/command/CommandsGeneral.kt index 95083b6..eef07fd 100644 --- a/src/main/kotlin/io/dico/parcels2/command/CommandsGeneral.kt +++ b/src/main/kotlin/io/dico/parcels2/command/CommandsGeneral.kt @@ -18,9 +18,11 @@ import org.bukkit.entity.Player class CommandsGeneral(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) { @Cmd("auto") - @Desc("Finds the unclaimed parcel nearest to origin,", + @Desc( + "Finds the unclaimed parcel nearest to origin,", "and gives it to you", - shortVersion = "sets you up with a fresh, unclaimed parcel") + shortVersion = "sets you up with a fresh, unclaimed parcel" + ) suspend fun WorldScope.cmdAuto(player: Player): Any? { checkConnected("be claimed") checkParcelLimit(player, world) @@ -33,32 +35,42 @@ class CommandsGeneral(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) { } @Cmd("info", aliases = ["i"]) - @Desc("Displays general information", + @Desc( + "Displays general information", "about the parcel you're on", - shortVersion = "displays information about this parcel") + shortVersion = "displays information about this parcel" + ) fun ParcelScope.cmdInfo(player: Player) = parcel.infoString @Cmd("home", aliases = ["h"]) - @Desc("Teleports you to your parcels,", + @Desc( + "Teleports you to your parcels,", "unless another player was specified.", "You can specify an index number if you have", "more than one parcel", - shortVersion = "teleports you to parcels") + shortVersion = "teleports you to parcels" + ) @RequireParameters(0) - suspend fun cmdHome(player: Player, - @Kind(ParcelTarget.OWNER_REAL) target: ParcelTarget): Any? { + suspend fun cmdHome( + player: Player, + @Kind(ParcelTarget.OWNER_REAL) target: ParcelTarget + ): Any? { return cmdGoto(player, target) } @Cmd("tp", aliases = ["teleport"]) - suspend fun cmdTp(player: Player, - @Kind(ParcelTarget.ID) target: ParcelTarget): Any? { + suspend fun cmdTp( + player: Player, + @Kind(ParcelTarget.ID) target: ParcelTarget + ): Any? { return cmdGoto(player, target) } @Cmd("goto") - suspend fun cmdGoto(player: Player, - @Kind(ParcelTarget.ANY) target: ParcelTarget): Any? { + suspend fun cmdGoto( + player: Player, + @Kind(ParcelTarget.ANY) target: ParcelTarget + ): Any? { if (target is ParcelTarget.ByOwner) { target.resolveOwner(plugin.storage) if (!target.owner.matches(player) && !player.hasParcelHomeOthers) { @@ -73,14 +85,18 @@ class CommandsGeneral(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) { } @Cmd("goto_fake") - suspend fun cmdGotoFake(player: Player, - @Kind(ParcelTarget.OWNER_FAKE) target: ParcelTarget): Any? { + suspend fun cmdGotoFake( + player: Player, + @Kind(ParcelTarget.OWNER_FAKE) target: ParcelTarget + ): Any? { return cmdGoto(player, target) } @Cmd("claim") - @Desc("If this parcel is unowned, makes you the owner", - shortVersion = "claims this parcel") + @Desc( + "If this parcel is unowned, makes you the owner", + shortVersion = "claims this parcel" + ) suspend fun ParcelScope.cmdClaim(player: Player): Any? { checkConnected("be claimed") parcel.owner.takeIf { !player.hasAdminManage }?.let { diff --git a/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelGenerator.kt b/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelGenerator.kt index 44ecc6c..08d5f2f 100644 --- a/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelGenerator.kt +++ b/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelGenerator.kt @@ -227,7 +227,7 @@ class DefaultParcelGenerator( return world.getParcelById(parcelId) } - private fun submitBlockVisitor(parcelId: ParcelId, task: TimeLimitedTask): Worker { + override fun submitBlockVisitor(parcelId: ParcelId, task: TimeLimitedTask): Worker { val parcel = getParcel(parcelId) ?: return worktimeLimiter.submit(task) if (parcel.hasBlockVisitors) throw IllegalArgumentException("This parcel already has a block visitor") -- cgit v1.2.3