diff options
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/command/CommandsAdmin.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/command/CommandsAdmin.kt | 49 |
1 files changed, 39 insertions, 10 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/command/CommandsAdmin.kt b/src/main/kotlin/io/dico/parcels2/command/CommandsAdmin.kt index 79028a2..e700d6d 100644 --- a/src/main/kotlin/io/dico/parcels2/command/CommandsAdmin.kt +++ b/src/main/kotlin/io/dico/parcels2/command/CommandsAdmin.kt @@ -5,11 +5,10 @@ import io.dico.dicore.command.ExecutionContext import io.dico.dicore.command.Validate import io.dico.dicore.command.annotation.Cmd import io.dico.dicore.command.annotation.Flag -import io.dico.parcels2.ParcelsPlugin -import io.dico.parcels2.PlayerProfile -import io.dico.parcels2.Privilege +import io.dico.parcels2.* import io.dico.parcels2.command.ParcelTarget.TargetKind -import io.dico.parcels2.resolved +import io.dico.parcels2.defaultimpl.DefaultParcelContainer +import io.dico.parcels2.util.ext.PERM_ADMIN_MANAGE class CommandsAdmin(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) { @@ -23,6 +22,33 @@ class CommandsAdmin(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) { return "${profile.notNullName}$fakeString is the new owner of (${parcel.id.idString})" } + @Cmd("update_all_owner_signs") + fun cmdUpdateAllOwnerSigns(context: ExecutionContext): Any? { + Validate.isAuthorized(context.sender, PERM_ADMIN_MANAGE) + plugin.jobDispatcher.dispatch { + fun getParcelCount(world: ParcelWorld) = (world.options.axisLimit * 2 + 1).let { it * it } + val parcelCount = plugin.parcelProvider.worlds.values.sumBy { getParcelCount(it) }.toDouble() + var processed = 0 + for (world in plugin.parcelProvider.worlds.values) { + markSuspensionPoint() + + val container = world.container as? DefaultParcelContainer + if (container == null) { + processed += getParcelCount(world) + setProgress(processed / parcelCount) + continue + } + + for (parcel in container.getAllParcels()) { + parcel.updateOwnerSign(force = true) + processed++ + setProgress(processed / parcelCount) + } + } + }.reportProgressUpdates(context, "Updating") + return null + } + @Cmd("dispose") @RequireParcelPrivilege(Privilege.ADMIN) fun ParcelScope.cmdDispose(): Any? { @@ -37,15 +63,17 @@ class CommandsAdmin(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) { if (!sure) return areYouSureMessage(context) parcel.dispose() - world.blockManager.clearParcel(parcel.id).reportProgressUpdates(context, "Reset") + world.blockManager.clearParcel(parcel.id)?.reportProgressUpdates(context, "Reset") return "Data of (${parcel.id.idString}) has been disposed" } @Cmd("swap") @RequireParcelPrivilege(Privilege.ADMIN) - fun ParcelScope.cmdSwap(context: ExecutionContext, - @TargetKind(TargetKind.ID) target: ParcelTarget, - @Flag sure: Boolean): Any? { + fun ParcelScope.cmdSwap( + context: ExecutionContext, + @TargetKind(TargetKind.ID) target: ParcelTarget, + @Flag sure: Boolean + ): Any? { Validate.isTrue(!parcel.hasBlockVisitors, "A process is already running in this parcel") if (!sure) return areYouSureMessage(context) @@ -53,13 +81,14 @@ class CommandsAdmin(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) { ?: throw CommandException("Invalid parcel target") // Validate.isTrue(parcel2.world == world, "Parcel must be in the same world") - Validate.isTrue(!parcel2.hasBlockVisitors, "A process is already running in this parcel") + Validate.isTrue(!parcel2.hasBlockVisitors, "A process is already running in that parcel") val data = parcel.data parcel.copyData(parcel2.data) parcel2.copyData(data) - world.blockManager.swapParcels(parcel.id, parcel2.id).reportProgressUpdates(context, "Swap") + val job = plugin.parcelProvider.swapParcels(parcel.id, parcel2.id)?.reportProgressUpdates(context, "Swap") + Validate.notNull(job, "A process is already running in some parcel (internal error)") return null } |