summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDico200 <dico.karssiens@gmail.com>2018-07-22 21:20:59 +0200
committerDico200 <dico.karssiens@gmail.com>2018-07-22 21:20:59 +0200
commit13b73dad61e8624322df7fb9ddf9bab90db9cc95 (patch)
tree516cff8f752808a0ec778bfe92b65a66ad1c78d7
parent9e31ea7e51762292301858b6821e27e971b3981b (diff)
Use ParcelContainerFactory on world initialization
-rw-r--r--src/main/kotlin/io/dico/parcels2/ParcelWorld.kt60
1 files changed, 31 insertions, 29 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/ParcelWorld.kt b/src/main/kotlin/io/dico/parcels2/ParcelWorld.kt
index 495a770..3ae9536 100644
--- a/src/main/kotlin/io/dico/parcels2/ParcelWorld.kt
+++ b/src/main/kotlin/io/dico/parcels2/ParcelWorld.kt
@@ -2,7 +2,9 @@ package io.dico.parcels2
import io.dico.parcels2.math.Vec2i
import io.dico.parcels2.math.floor
+import io.dico.parcels2.storage.Storage
import io.dico.parcels2.util.doAwait
+import kotlinx.coroutines.experimental.launch
import org.bukkit.Bukkit
import org.bukkit.Location
import org.bukkit.World
@@ -10,15 +12,14 @@ import org.bukkit.WorldCreator
import org.bukkit.block.Block
import org.bukkit.entity.Entity
import org.bukkit.entity.Player
-import org.bukkit.plugin.Plugin
import java.util.*
import kotlin.coroutines.experimental.buildSequence
-class Worlds(private val plugin: Plugin) {
+class Worlds(private val plugin: ParcelsPlugin) {
val worlds: Map<String, ParcelWorld> get() = _worlds
private val _worlds: MutableMap<String, ParcelWorld> = HashMap()
- fun getWorld(name: String): ParcelWorld? = _worlds.get(name)
+ fun getWorld(name: String): ParcelWorld? = _worlds[name]
fun getWorld(world: World): ParcelWorld? = getWorld(world.name)
@@ -40,7 +41,16 @@ class Worlds(private val plugin: Plugin) {
for ((worldName, worldOptions) in options.worlds.entries) {
val world: ParcelWorld
try {
- world = ParcelWorld(worldName, worldOptions, worldOptions.generator.getGenerator(this, worldName))
+ val containerFactory: ParcelContainerFactory = { parcelWorld ->
+ DefaultParcelContainer(parcelWorld, plugin.storage)
+ }
+
+ world = ParcelWorld(
+ worldName,
+ worldOptions,
+ worldOptions.generator.getGenerator(this, worldName),
+ containerFactory)
+
} catch (ex: Exception) {
ex.printStackTrace()
continue
@@ -89,18 +99,12 @@ interface ParcelProvider {
fun parcelAt(block: Block): Parcel? = parcelAt(block.x, block.z)
}
-class ParcelWorld(val name: String,
- val options: WorldOptions,
- val generator: ParcelGenerator) : ParcelProvider by generator {
- val world: World by lazy {
- val tmp = Bukkit.getWorld(name)
- if (tmp == null) {
- throw NullPointerException("World $name does not appear to be loaded")
- }
- tmp
- }
-
- val container: ParcelContainer = DefaultParcelContainer(this)
+class ParcelWorld constructor(val name: String,
+ val options: WorldOptions,
+ val generator: ParcelGenerator,
+ containerFactory: ParcelContainerFactory) : ParcelProvider by generator {
+ val world: World by lazy { Bukkit.getWorld(name) ?: throw NullPointerException("World $name does not appear to be loaded") }
+ val container: ParcelContainer = containerFactory(this)
fun parcelByID(x: Int, z: Int): Parcel? {
TODO("not implemented")
@@ -135,7 +139,10 @@ abstract class ParcelContainer {
}
-class DefaultParcelContainer(private val world: ParcelWorld) : ParcelContainer() {
+typealias ParcelContainerFactory = (ParcelWorld) -> ParcelContainer
+
+class DefaultParcelContainer(private val world: ParcelWorld,
+ private val storage: Storage) : ParcelContainer() {
private var parcels: Array<Array<Parcel>>
init {
@@ -154,13 +161,13 @@ class DefaultParcelContainer(private val world: ParcelWorld) : ParcelContainer()
fun initArray(axisLimit: Int, world: ParcelWorld, cur: DefaultParcelContainer? = null): Array<Array<Parcel>> {
val arraySize = 2 * axisLimit + 1
- return Array(arraySize, {
+ return Array(arraySize) {
val x = it - axisLimit
- Array(arraySize, {
+ Array(arraySize) {
val z = it - axisLimit
cur?.ployByID(x, z) ?: Parcel(world, Vec2i(x, z))
- })
- })
+ }
+ }
}
override fun ployByID(x: Int, z: Int): Parcel? {
@@ -178,17 +185,12 @@ class DefaultParcelContainer(private val world: ParcelWorld) : ParcelContainer()
}
fun loadAllData() {
- /*
- val channel = Main.instance.storage.readParcelData(allParcels(), 100).channel
- launch(Main.instance.storage.asyncDispatcher) {
+ val channel = storage.readParcelData(allParcels(), 100)
+ launch(storage.asyncDispatcher) {
for ((parcel, data) in channel) {
- if (data != null) {
- parcel.data = data
- }
+ data?.let { parcel.data = it }
}
}
- */
- TODO()
}
} \ No newline at end of file