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 | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/command/CommandsAdmin.kt b/src/main/kotlin/io/dico/parcels2/command/CommandsAdmin.kt index 0b155f2..9975535 100644 --- a/src/main/kotlin/io/dico/parcels2/command/CommandsAdmin.kt +++ b/src/main/kotlin/io/dico/parcels2/command/CommandsAdmin.kt @@ -1,11 +1,15 @@ package io.dico.parcels2.command +import io.dico.dicore.command.CommandException 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.command.ParcelTarget.Companion.ID +import io.dico.parcels2.command.ParcelTarget.Kind class CommandsAdmin(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) { @@ -28,18 +32,34 @@ class CommandsAdmin(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) { @Cmd("reset") @RequireParcelPrivilege(Privilege.ADMIN) fun ParcelScope.cmdReset(context: ExecutionContext, @Flag sure: Boolean): Any? { + Validate.isTrue(!parcel.hasBlockVisitors, "A process is already running in this parcel") if (!sure) return areYouSureMessage(context) + parcel.dispose() - clearWithProgressUpdates(context, "Reset") - return null + 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, @Flag sure: Boolean): Any? { + fun ParcelScope.cmdSwap(context: ExecutionContext, + @Kind(ID) target: ParcelTarget, + @Flag sure: Boolean): Any? { + Validate.isTrue(!parcel.hasBlockVisitors, "A process is already running in this parcel") if (!sure) return areYouSureMessage(context) - TODO("implement swap") - } + val parcel2 = (target as ParcelTarget.ByID).getParcel() + ?: 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") + + val data = parcel.data + parcel.copyData(parcel2.data) + parcel2.copyData(data) + + world.blockManager.swapParcels(parcel.id, parcel2.id).reportProgressUpdates(context, "Swap") + return null + } }
\ No newline at end of file |