Archived
0

Perform some fixes

This commit is contained in:
Dico Karssiens
2019-01-06 12:02:34 +00:00
parent 5ef2584fdb
commit a475226ffc
10 changed files with 1063 additions and 1052 deletions

View File

@@ -1,142 +1,143 @@
package io.dico.parcels2.command
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.Desc
import io.dico.dicore.command.annotation.Flag
import io.dico.dicore.command.annotation.RequireParameters
import io.dico.parcels2.ParcelsPlugin
import io.dico.parcels2.PlayerProfile
import io.dico.parcels2.Privilege
import io.dico.parcels2.command.ParcelTarget.TargetKind
import io.dico.parcels2.util.ext.hasParcelHomeOthers
import io.dico.parcels2.util.ext.hasPermAdminManage
import io.dico.parcels2.util.ext.uuid
import org.bukkit.block.Biome
import org.bukkit.entity.Player
class CommandsGeneral(plugin: ParcelsPlugin, parent: SpecialCommandAddress) : AbstractParcelCommands(plugin) {
@Cmd("auto")
@Desc(
"Finds the unclaimed parcel nearest to origin,",
"and gives it to you",
shortVersion = "sets you up with a fresh, unclaimed parcel"
)
suspend fun WorldScope.cmdAuto(player: Player): Any? {
checkConnected("be claimed")
checkParcelLimit(player, world)
val parcel = world.nextEmptyParcel()
?: err("This world is full, please ask an admin to upsize it")
parcel.owner = PlayerProfile(uuid = player.uuid)
player.teleport(parcel.homeLocation)
return "Enjoy your new parcel!"
}
@Cmd("info", aliases = ["i"])
@Desc(
"Displays general information",
"about the parcel you're on",
shortVersion = "displays information about this parcel"
)
fun ParcelScope.cmdInfo(player: Player) = parcel.infoString
init {
parent.addSpeciallyTreatedKeys("home", "h")
}
@Cmd("home", aliases = ["h"])
@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"
)
@RequireParameters(0)
suspend fun cmdHome(
player: Player,
@TargetKind(TargetKind.OWNER_REAL) target: ParcelTarget
): Any? {
return cmdGoto(player, target)
}
@Cmd("tp", aliases = ["teleport"])
suspend fun cmdTp(
player: Player,
@TargetKind(TargetKind.ID) target: ParcelTarget
): Any? {
return cmdGoto(player, target)
}
@Cmd("goto")
suspend fun cmdGoto(
player: Player,
@TargetKind(TargetKind.ANY) target: ParcelTarget
): Any? {
if (target is ParcelTarget.ByOwner) {
target.resolveOwner(plugin.storage)
if (!target.owner.matches(player) && !player.hasParcelHomeOthers) {
err("You do not have permission to teleport to other people's parcels")
}
}
val match = target.getParcelSuspend(plugin.storage)
?: err("The specified parcel could not be matched")
player.teleport(match.homeLocation)
return null
}
@Cmd("goto_fake")
suspend fun cmdGotoFake(
player: Player,
@TargetKind(TargetKind.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"
)
suspend fun ParcelScope.cmdClaim(player: Player): Any? {
checkConnected("be claimed")
parcel.owner.takeIf { !player.hasPermAdminManage }?.let {
err(if (it.matches(player)) "You already own this parcel" else "This parcel is not available")
}
checkParcelLimit(player, world)
parcel.owner = PlayerProfile(player)
return "Enjoy your new parcel!"
}
@Cmd("unclaim")
@Desc("Unclaims this parcel")
@RequireParcelPrivilege(Privilege.OWNER)
fun ParcelScope.cmdUnclaim(player: Player): Any? {
checkConnected("be unclaimed")
parcel.dispose()
return "Your parcel has been disposed"
}
@Cmd("clear")
@RequireParcelPrivilege(Privilege.OWNER)
fun ParcelScope.cmdClear(context: ExecutionContext, @Flag sure: Boolean): Any? {
Validate.isTrue(!parcel.hasBlockVisitors, "A process is already running in this parcel")
if (!sure) return areYouSureMessage(context)
world.blockManager.clearParcel(parcel.id)?.reportProgressUpdates(context, "Clear")
return null
}
@Cmd("setbiome")
@RequireParcelPrivilege(Privilege.OWNER)
fun ParcelScope.cmdSetbiome(context: ExecutionContext, biome: Biome): Any? {
Validate.isTrue(!parcel.hasBlockVisitors, "A process is already running in this parcel")
world.blockManager.setBiome(parcel.id, biome)?.reportProgressUpdates(context, "Biome change")
return null
}
package io.dico.parcels2.command
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.Desc
import io.dico.dicore.command.annotation.Flag
import io.dico.dicore.command.annotation.RequireParameters
import io.dico.parcels2.ParcelsPlugin
import io.dico.parcels2.PlayerProfile
import io.dico.parcels2.Privilege
import io.dico.parcels2.command.ParcelTarget.TargetKind
import io.dico.parcels2.util.ext.hasParcelHomeOthers
import io.dico.parcels2.util.ext.hasPermAdminManage
import io.dico.parcels2.util.ext.uuid
import org.bukkit.block.Biome
import org.bukkit.entity.Player
class CommandsGeneral(plugin: ParcelsPlugin, parent: SpecialCommandAddress) : AbstractParcelCommands(plugin) {
@Cmd("auto")
@Desc(
"Finds the unclaimed parcel nearest to origin,",
"and gives it to you",
shortVersion = "sets you up with a fresh, unclaimed parcel"
)
suspend fun WorldScope.cmdAuto(player: Player): Any? {
checkConnected("be claimed")
checkParcelLimit(player, world)
val parcel = world.nextEmptyParcel()
?: err("This world is full, please ask an admin to upsize it")
parcel.owner = PlayerProfile(uuid = player.uuid)
player.teleport(parcel.homeLocation)
return "Enjoy your new parcel!"
}
@Cmd("info", aliases = ["i"])
@Desc(
"Displays general information",
"about the parcel you're on",
shortVersion = "displays information about this parcel"
)
fun ParcelScope.cmdInfo(player: Player) = parcel.infoString
init {
parent.addSpeciallyTreatedKeys("home", "h")
}
@Cmd("home", aliases = ["h"])
@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"
)
@RequireParameters(0)
suspend fun cmdHome(
player: Player,
@TargetKind(TargetKind.OWNER_REAL) target: ParcelTarget
): Any? {
return cmdGoto(player, target)
}
@Cmd("tp", aliases = ["teleport"])
suspend fun cmdTp(
player: Player,
@TargetKind(TargetKind.ID) target: ParcelTarget
): Any? {
return cmdGoto(player, target)
}
@Cmd("goto")
suspend fun cmdGoto(
player: Player,
@TargetKind(TargetKind.ANY) target: ParcelTarget
): Any? {
if (target is ParcelTarget.ByOwner) {
target.resolveOwner(plugin.storage)
if (!target.owner.matches(player) && !player.hasParcelHomeOthers) {
err("You do not have permission to teleport to other people's parcels")
}
}
val match = target.getParcelSuspend(plugin.storage)
?: err("The specified parcel could not be matched")
player.teleport(match.homeLocation)
return null
}
@Cmd("goto_fake")
suspend fun cmdGotoFake(
player: Player,
@TargetKind(TargetKind.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"
)
suspend fun ParcelScope.cmdClaim(player: Player): Any? {
checkConnected("be claimed")
parcel.owner.takeIf { !player.hasPermAdminManage }?.let {
err(if (it.matches(player)) "You already own this parcel" else "This parcel is not available")
}
checkParcelLimit(player, world)
parcel.owner = PlayerProfile(player)
return "Enjoy your new parcel!"
}
/*
@Cmd("unclaim")
@Desc("Unclaims this parcel")
@RequireParcelPrivilege(Privilege.OWNER)
fun ParcelScope.cmdUnclaim(player: Player): Any? {
checkConnected("be unclaimed")
parcel.dispose()
return "Your parcel has been disposed"
}*/
@Cmd("clear")
@RequireParcelPrivilege(Privilege.OWNER)
fun ParcelScope.cmdClear(context: ExecutionContext, @Flag sure: Boolean): Any? {
Validate.isTrue(!parcel.hasBlockVisitors, "A process is already running in this parcel")
if (!sure) return areYouSureMessage(context)
world.blockManager.clearParcel(parcel.id)?.reportProgressUpdates(context, "Clear")
return null
}
@Cmd("setbiome")
@RequireParcelPrivilege(Privilege.OWNER)
fun ParcelScope.cmdSetbiome(context: ExecutionContext, biome: Biome): Any? {
Validate.isTrue(!parcel.hasBlockVisitors, "A process is already running in this parcel")
world.blockManager.setBiome(parcel.id, biome)?.reportProgressUpdates(context, "Biome change")
return null
}
}

View File

@@ -106,7 +106,8 @@ sealed class ParcelTarget(val world: ParcelWorld, val parsedKind: Int, val isDef
parcelProvider.getWorld(player.world)
?: invalidInput(parameter, "You cannot omit the world if you're not in a parcel world")
} else {
parcelProvider.getWorld(worldString) ?: invalidInput(parameter, "$worldString is not a parcel world")
parcelProvider.getWorld(worldString)
?: invalidInput(parameter, "$worldString is not a parcel world")
}
val kind = parameter.paramInfo ?: DEFAULT_KIND

View File

@@ -1,73 +1,73 @@
package io.dico.parcels2.defaultimpl
import io.dico.parcels2.Parcel
import io.dico.parcels2.ParcelContainer
import io.dico.parcels2.ParcelId
import io.dico.parcels2.ParcelWorld
class DefaultParcelContainer(val world: ParcelWorld) : ParcelContainer {
private var parcels: Array<Array<Parcel>>
init {
parcels = initArray(world.options.axisLimit, world)
}
fun resizeIfSizeChanged() {
if (parcels.size != world.options.axisLimit * 2 + 1) {
resize(world.options.axisLimit)
}
}
fun resize(axisLimit: Int) {
parcels = initArray(axisLimit, world, this)
}
fun initArray(axisLimit: Int, world: ParcelWorld, cur: DefaultParcelContainer? = null): Array<Array<Parcel>> {
val arraySize = 2 * axisLimit + 1
return Array(arraySize) {
val x = it - axisLimit
Array(arraySize) {
val z = it - axisLimit
cur?.getParcelById(x, z) ?: ParcelImpl(world, x, z)
}
}
}
override fun getParcelById(x: Int, z: Int): Parcel? {
return parcels.getOrNull(x + world.options.axisLimit)?.getOrNull(z + world.options.axisLimit)
}
override fun getParcelById(id: ParcelId): Parcel? {
if (!world.id.equals(id.worldId)) throw IllegalArgumentException()
return when (id) {
is Parcel -> id
else -> getParcelById(id.x, id.z)
}
}
override fun nextEmptyParcel(): Parcel? {
return walkInCircle().find { it.owner == null }
}
private fun walkInCircle(): Iterable<Parcel> = Iterable {
iterator {
val center = world.options.axisLimit
yield(parcels[center][center])
for (radius in 0..center) {
var x = center - radius;
var z = center - radius
repeat(radius * 2) { yield(parcels[x++][z]) }
repeat(radius * 2) { yield(parcels[x][z++]) }
repeat(radius * 2) { yield(parcels[x--][z]) }
repeat(radius * 2) { yield(parcels[x][z--]) }
}
}
}
fun getAllParcels(): Iterator<Parcel> = iterator {
for (array in parcels) {
yieldAll(array.iterator())
}
}
package io.dico.parcels2.defaultimpl
import io.dico.parcels2.Parcel
import io.dico.parcels2.ParcelContainer
import io.dico.parcels2.ParcelId
import io.dico.parcels2.ParcelWorld
class DefaultParcelContainer(val world: ParcelWorld) : ParcelContainer {
private var parcels: Array<Array<Parcel>>
init {
parcels = initArray(world.options.axisLimit, world)
}
fun resizeIfSizeChanged() {
if (parcels.size != world.options.axisLimit * 2 + 1) {
resize(world.options.axisLimit)
}
}
fun resize(axisLimit: Int) {
parcels = initArray(axisLimit, world, this)
}
fun initArray(axisLimit: Int, world: ParcelWorld, cur: DefaultParcelContainer? = null): Array<Array<Parcel>> {
val arraySize = 2 * axisLimit + 1
return Array(arraySize) {
val x = it - axisLimit
Array(arraySize) {
val z = it - axisLimit
cur?.getParcelById(x, z) ?: ParcelImpl(world, x, z)
}
}
}
override fun getParcelById(x: Int, z: Int): Parcel? {
return parcels.getOrNull(x + world.options.axisLimit)?.getOrNull(z + world.options.axisLimit)
}
override fun getParcelById(id: ParcelId): Parcel? {
if (!world.id.equals(id.worldId)) throw IllegalArgumentException()
return when (id) {
is Parcel -> id
else -> getParcelById(id.x, id.z)
}
}
override suspend fun nextEmptyParcel(): Parcel? {
return walkInCircle().find { it.owner == null }
}
private fun walkInCircle(): Iterable<Parcel> = Iterable {
iterator {
val center = world.options.axisLimit
yield(parcels[center][center])
for (radius in 0..center) {
var x = center - radius;
var z = center - radius
repeat(radius * 2) { yield(parcels[x++][z]) }
repeat(radius * 2) { yield(parcels[x][z++]) }
repeat(radius * 2) { yield(parcels[x--][z]) }
repeat(radius * 2) { yield(parcels[x][z--]) }
}
}
}
fun getAllParcels(): Iterator<Parcel> = iterator {
for (array in parcels) {
yieldAll(array.iterator())
}
}
}

View File

@@ -1,75 +1,75 @@
@file:Suppress("CanBePrimaryConstructorProperty", "UsePropertyAccessSyntax")
package io.dico.parcels2.defaultimpl
import io.dico.parcels2.*
import io.dico.parcels2.options.RuntimeWorldOptions
import io.dico.parcels2.storage.Storage
import kotlinx.coroutines.CoroutineScope
import org.bukkit.GameRule
import org.bukkit.World
import org.joda.time.DateTime
import java.util.UUID
class ParcelWorldImpl(
val plugin: ParcelsPlugin,
override val world: World,
override val generator: ParcelGenerator,
override var options: RuntimeWorldOptions,
containerFactory: ParcelContainerFactory
) : ParcelWorld, ParcelWorldId, ParcelContainer, ParcelLocator {
override val id: ParcelWorldId get() = this
override val uid: UUID? get() = world.uid
override val storage get() = plugin.storage
override val globalPrivileges get() = plugin.globalPrivileges
init {
if (generator.world != world) {
throw IllegalArgumentException()
}
}
override val name: String = world.name!!
override val container: ParcelContainer = containerFactory(this)
override val locator: ParcelLocator
override val blockManager: ParcelBlockManager
init {
val (locator, blockManager) = generator.makeParcelLocatorAndBlockManager(plugin.parcelProvider, container, plugin, plugin.jobDispatcher)
this.locator = locator
this.blockManager = blockManager
enforceOptions()
}
fun enforceOptions() {
if (options.dayTime) {
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false)
world.setTime(6000)
}
if (options.noWeather) {
world.setStorm(false)
world.setThundering(false)
world.weatherDuration = Int.MAX_VALUE
}
world.setGameRule(GameRule.DO_TILE_DROPS, options.doTileDrops)
}
// Accessed by ParcelProviderImpl
override var creationTime: DateTime? = null
override fun getParcelAt(x: Int, z: Int): Parcel? = locator.getParcelAt(x, z)
override fun getParcelIdAt(x: Int, z: Int): ParcelId? = locator.getParcelIdAt(x, z)
override fun getParcelById(x: Int, z: Int): Parcel? = container.getParcelById(x, z)
override fun getParcelById(id: ParcelId): Parcel? = container.getParcelById(id)
override fun nextEmptyParcel(): Parcel? = container.nextEmptyParcel()
override fun toString() = parcelWorldIdToString()
}
@file:Suppress("CanBePrimaryConstructorProperty", "UsePropertyAccessSyntax")
package io.dico.parcels2.defaultimpl
import io.dico.parcels2.*
import io.dico.parcels2.options.RuntimeWorldOptions
import io.dico.parcels2.storage.Storage
import kotlinx.coroutines.CoroutineScope
import org.bukkit.GameRule
import org.bukkit.World
import org.joda.time.DateTime
import java.util.UUID
class ParcelWorldImpl(
val plugin: ParcelsPlugin,
override val world: World,
override val generator: ParcelGenerator,
override var options: RuntimeWorldOptions,
containerFactory: ParcelContainerFactory
) : ParcelWorld, ParcelWorldId, ParcelContainer, ParcelLocator {
override val id: ParcelWorldId get() = this
override val uid: UUID? get() = world.uid
override val storage get() = plugin.storage
override val globalPrivileges get() = plugin.globalPrivileges
init {
if (generator.world != world) {
throw IllegalArgumentException()
}
}
override val name: String = world.name!!
override val container: ParcelContainer = containerFactory(this)
override val locator: ParcelLocator
override val blockManager: ParcelBlockManager
init {
val (locator, blockManager) = generator.makeParcelLocatorAndBlockManager(plugin.parcelProvider, container, plugin, plugin.jobDispatcher)
this.locator = locator
this.blockManager = blockManager
enforceOptions()
}
fun enforceOptions() {
if (options.dayTime) {
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false)
world.setTime(6000)
}
if (options.noWeather) {
world.setStorm(false)
world.setThundering(false)
world.weatherDuration = Int.MAX_VALUE
}
world.setGameRule(GameRule.DO_TILE_DROPS, options.doTileDrops)
}
// Accessed by ParcelProviderImpl
override var creationTime: DateTime? = null
override fun getParcelAt(x: Int, z: Int): Parcel? = locator.getParcelAt(x, z)
override fun getParcelIdAt(x: Int, z: Int): ParcelId? = locator.getParcelIdAt(x, z)
override fun getParcelById(x: Int, z: Int): Parcel? = container.getParcelById(x, z)
override fun getParcelById(id: ParcelId): Parcel? = container.getParcelById(id)
override suspend fun nextEmptyParcel(): Parcel? = container.nextEmptyParcel()
override fun toString() = parcelWorldIdToString()
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,79 +1,78 @@
package io.dico.parcels2.listener
import com.sk89q.worldedit.EditSession.Stage.BEFORE_REORDER
import com.sk89q.worldedit.Vector
import com.sk89q.worldedit.Vector2D
import com.sk89q.worldedit.WorldEdit
import com.sk89q.worldedit.bukkit.WorldEditPlugin
import com.sk89q.worldedit.event.extent.EditSessionEvent
import com.sk89q.worldedit.extent.AbstractDelegateExtent
import com.sk89q.worldedit.extent.Extent
import com.sk89q.worldedit.util.eventbus.EventHandler.Priority.VERY_EARLY
import com.sk89q.worldedit.util.eventbus.Subscribe
import com.sk89q.worldedit.world.biome.BaseBiome
import com.sk89q.worldedit.world.block.BlockStateHolder
import io.dico.parcels2.ParcelWorld
import io.dico.parcels2.ParcelsPlugin
import io.dico.parcels2.canBuildFast
import io.dico.parcels2.util.ext.hasPermBuildAnywhere
import io.dico.parcels2.util.ext.sendParcelMessage
import org.bukkit.entity.Player
import org.bukkit.plugin.Plugin
class WorldEditListener(val parcels: ParcelsPlugin, val worldEdit: WorldEdit) {
@Subscribe(priority = VERY_EARLY)
fun onEditSession(event: EditSessionEvent) {
val worldName = event.world?.name ?: return
val world = parcels.parcelProvider.getWorld(worldName) ?: return
if (event.stage == BEFORE_REORDER) return
val actor = event.actor
if (actor == null || !actor.isPlayer) return
val player = parcels.server.getPlayer(actor.uniqueId)
if (player.hasPermBuildAnywhere) return
event.extent = ParcelsExtent(event.extent, world, player)
}
private class ParcelsExtent(extent: Extent,
val world: ParcelWorld,
val player: Player) : AbstractDelegateExtent(extent) {
private var messageSent = false
private fun canBuild(x: Int, z: Int): Boolean {
world.getParcelAt(x, z)?.let { parcel ->
if (parcel.canBuildFast(player)) {
return true
}
}
if (!messageSent) {
messageSent = true
player.sendParcelMessage(except = true, message = "You can't use WorldEdit there")
}
return false
}
override fun setBlock(location: Vector, block: BlockStateHolder<*>): Boolean {
return canBuild(location.blockX, location.blockZ) && super.setBlock(location, block)
}
override fun setBiome(coord: Vector2D, biome: BaseBiome): Boolean {
return canBuild(coord.blockX, coord.blockZ) && super.setBiome(coord, biome)
}
}
companion object {
fun register(parcels: ParcelsPlugin, worldEditPlugin: Plugin) {
if (worldEditPlugin !is WorldEditPlugin) return
val worldEdit = worldEditPlugin.worldEdit
val listener = WorldEditListener(parcels, worldEdit)
worldEdit.eventBus.register(listener)
}
}
package io.dico.parcels2.listener
import com.sk89q.worldedit.EditSession.Stage.BEFORE_REORDER
import com.sk89q.worldedit.WorldEdit
import com.sk89q.worldedit.bukkit.WorldEditPlugin
import com.sk89q.worldedit.event.extent.EditSessionEvent
import com.sk89q.worldedit.extent.AbstractDelegateExtent
import com.sk89q.worldedit.extent.Extent
import com.sk89q.worldedit.math.BlockVector2
import com.sk89q.worldedit.math.BlockVector3
import com.sk89q.worldedit.util.eventbus.EventHandler.Priority.VERY_EARLY
import com.sk89q.worldedit.util.eventbus.Subscribe
import com.sk89q.worldedit.world.biome.BaseBiome
import com.sk89q.worldedit.world.block.BlockStateHolder
import io.dico.parcels2.ParcelWorld
import io.dico.parcels2.ParcelsPlugin
import io.dico.parcels2.canBuildFast
import io.dico.parcels2.util.ext.hasPermBuildAnywhere
import io.dico.parcels2.util.ext.sendParcelMessage
import org.bukkit.entity.Player
import org.bukkit.plugin.Plugin
class WorldEditListener(val parcels: ParcelsPlugin, val worldEdit: WorldEdit) {
@Subscribe(priority = VERY_EARLY)
fun onEditSession(event: EditSessionEvent) {
val worldName = event.world?.name ?: return
val world = parcels.parcelProvider.getWorld(worldName) ?: return
if (event.stage == BEFORE_REORDER) return
val actor = event.actor
if (actor == null || !actor.isPlayer) return
val player = parcels.server.getPlayer(actor.uniqueId)
if (player.hasPermBuildAnywhere) return
event.extent = ParcelsExtent(event.extent, world, player)
}
private class ParcelsExtent(extent: Extent,
val world: ParcelWorld,
val player: Player) : AbstractDelegateExtent(extent) {
private var messageSent = false
private fun canBuild(x: Int, z: Int): Boolean {
world.getParcelAt(x, z)?.let { parcel ->
if (parcel.canBuildFast(player)) {
return true
}
}
if (!messageSent) {
messageSent = true
player.sendParcelMessage(except = true, message = "You can't use WorldEdit there")
}
return false
}
override fun setBiome(coord: BlockVector2, biome: BaseBiome): Boolean {
return canBuild(coord.blockX, coord.blockZ) && super.setBiome(coord, biome)
}
override fun <T : BlockStateHolder<T>> setBlock(location: BlockVector3, block: T): Boolean {
return canBuild(location.blockX, location.blockZ) && super.setBlock(location, block)
}
}
companion object {
fun register(parcels: ParcelsPlugin, worldEditPlugin: Plugin) {
if (worldEditPlugin !is WorldEditPlugin) return
val worldEdit = worldEditPlugin.worldEdit
val listener = WorldEditListener(parcels, worldEdit)
worldEdit.eventBus.register(listener)
}
}
}

View File

@@ -1,3 +1,5 @@
@file:Suppress("RedundantLambdaArrow")
package io.dico.parcels2.util
import org.bukkit.plugin.Plugin
@@ -8,11 +10,10 @@ interface PluginAware {
}
inline fun PluginAware.schedule(delay: Int = 0, crossinline task: () -> Unit): BukkitTask {
return plugin.server.scheduler.runTaskLater(plugin, { task() }, delay.toLong())
return plugin.server.scheduler.runTaskLater(plugin, { -> task() }, delay.toLong())
}
inline fun PluginAware.scheduleRepeating(interval: Int, delay: Int = 0, crossinline task: () -> Unit): BukkitTask {
return plugin.server.scheduler.runTaskTimer(plugin, { task() }, delay.toLong(), interval.toLong())
return plugin.server.scheduler.runTaskTimer(plugin, { -> task() }, delay.toLong(), interval.toLong())
}

View File

@@ -1,9 +0,0 @@
package io.dico.parcels2.util
fun doParallel() {
val array = IntArray(1000)
IntRange(0, 1000).chunked()
}