summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/defaultimpl
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/defaultimpl')
-rw-r--r--src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelContainer.kt144
-rw-r--r--src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelWorldImpl.kt150
2 files changed, 147 insertions, 147 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelContainer.kt b/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelContainer.kt
index b49cad4..f3cd8d7 100644
--- a/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelContainer.kt
+++ b/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelContainer.kt
@@ -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())
+ }
+ }
+
} \ No newline at end of file
diff --git a/src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelWorldImpl.kt b/src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelWorldImpl.kt
index 6ce4f26..cb322d4 100644
--- a/src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelWorldImpl.kt
+++ b/src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelWorldImpl.kt
@@ -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()
+}