diff options
author | Dico200 <dico.karssiens@gmail.com> | 2018-07-29 17:52:29 +0100 |
---|---|---|
committer | Dico200 <dico.karssiens@gmail.com> | 2018-07-29 17:52:29 +0100 |
commit | 33bb19a54779547726165fa47d20f222cbe1e0a6 (patch) | |
tree | f5bb7556a52d7ad51539303724f3acfa634a2032 | |
parent | d043cfae16b0e81be597d8eb5a7a4c1bfa163622 (diff) |
Work on block visiting.
10 files changed, 98 insertions, 1 deletions
diff --git a/build.gradle.kts b/build.gradle.kts index c3bd432..cd04016 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -66,6 +66,7 @@ dependencies { c.kotlinStd(kotlin("stdlib-jdk8")) c.kotlinStd(kotlin("reflect")) c.kotlinStd(kotlinx("coroutines-core:0.23.4")) + c.kotlinStd("org.jetbrains.kotlinx:atomicfu-common:0.11.0") compile("org.jetbrains.exposed:exposed:0.10.3") { isTransitive = false } compile("joda-time:joda-time:2.10") diff --git a/src/main/kotlin/io/dico/parcels2/Options.kt b/src/main/kotlin/io/dico/parcels2/Options.kt index 1ae8410..41b3568 100644 --- a/src/main/kotlin/io/dico/parcels2/Options.kt +++ b/src/main/kotlin/io/dico/parcels2/Options.kt @@ -2,6 +2,7 @@ package io.dico.parcels2 import com.fasterxml.jackson.annotation.JsonIgnore +import io.dico.parcels2.blockvisitor.BlockVisitorOptions import io.dico.parcels2.storage.Storage import io.dico.parcels2.storage.StorageFactory import io.dico.parcels2.storage.yamlObjectMapper @@ -39,7 +40,8 @@ data class WorldOptions(var gameMode: GameMode? = GameMode.CREATIVE, var blockMobSpawning: Boolean = true, var blockedItems: Set<Material> = EnumSet.of(Material.FLINT_AND_STEEL, Material.SNOWBALL), var axisLimit: Int = 10, - var generator: GeneratorOptions = DefaultGeneratorOptions()) { + var generator: GeneratorOptions = DefaultGeneratorOptions(), + var blockVisitor: BlockVisitorOptions = BlockVisitorOptions()) { } diff --git a/src/main/kotlin/io/dico/parcels2/Parcel.kt b/src/main/kotlin/io/dico/parcels2/Parcel.kt index 61c0862..e86667b 100644 --- a/src/main/kotlin/io/dico/parcels2/Parcel.kt +++ b/src/main/kotlin/io/dico/parcels2/Parcel.kt @@ -59,6 +59,7 @@ interface ParcelData : AddedData { class Parcel(val world: ParcelWorld, val pos: Vec2i) : ParcelData { val id get() = "${pos.x}:${pos.z}" val homeLocation get() = world.generator.getHomeLocation(this) + private var blockVisitors = 0 val infoString: String get() { diff --git a/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt b/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt index 1f5eedb..fd4270f 100644 --- a/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt +++ b/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt @@ -9,10 +9,12 @@ import io.dico.parcels2.listener.ParcelListeners import io.dico.parcels2.storage.Storage import io.dico.parcels2.storage.yamlObjectMapper import io.dico.parcels2.util.tryCreate +import kotlinx.coroutines.experimental.asCoroutineDispatcher import org.bukkit.Bukkit import org.bukkit.plugin.java.JavaPlugin import org.slf4j.LoggerFactory import java.io.File +import java.util.concurrent.Executor val logger = LoggerFactory.getLogger("ParcelsPlugin") private inline val plogger get() = logger @@ -28,6 +30,8 @@ class ParcelsPlugin : JavaPlugin() { private var listeners: ParcelListeners? = null private var cmdDispatcher: ICommandDispatcher? = null + val mainThreadDispatcher = Executor { server.scheduler.runTask(this, it) }.asCoroutineDispatcher() + override fun onEnable() { plogger.info("Debug enabled: ${plogger.isDebugEnabled}") if (!init()) { diff --git a/src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitor.kt b/src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitor.kt new file mode 100644 index 0000000..12433e1 --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitor.kt @@ -0,0 +1,5 @@ +package io.dico.parcels2.blockvisitor + +import io.dico.dicore.task.IteratorTask + +abstract class BlockVisitor<T>(iterator: Iterator<T>?) : IteratorTask<T>(iterator) diff --git a/src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitorManager.kt b/src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitorManager.kt new file mode 100644 index 0000000..a26328f --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitorManager.kt @@ -0,0 +1,52 @@ +package io.dico.parcels2.blockvisitor + +import io.dico.parcels2.util.MutableVec3i +import io.dico.parcels2.util.Region +import kotlinx.coroutines.experimental.Deferred +import org.bukkit.block.Block +import org.bukkit.plugin.Plugin +import kotlin.coroutines.experimental.SequenceBuilder +import kotlin.coroutines.experimental.buildIterator + +typealias BlockProcessor = (Block) -> Boolean + +class BlockVisitorManager(val plugin: Plugin, var options: BlockVisitorOptions) { + + + fun doOperationSynchronously(region: Region, processor: BlockProcessor): Deferred<Unit> { + + + } + + +} + +class RegionOperation(val region: Region, val processor: BlockProcessor) { + + fun process(maxMillis: Int) { + + } + + +} + +enum class RegionTraversal(private val builder: suspend SequenceBuilder<MutableVec3i>.(Region) -> Unit) { + XZY({ region -> + val origin = region.origin + val result = MutableVec3i(origin.x, origin.y, origin.z) + + val size = region.size + + repeat(size.y) { y -> + repeat() + + result.y++ + } + + }) + + ; + + fun regionTraverser(region: Region) = Iterable { buildIterator { builder(region) } } + +} diff --git a/src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitorOptions.kt b/src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitorOptions.kt new file mode 100644 index 0000000..e4ebf48 --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitorOptions.kt @@ -0,0 +1,3 @@ +package io.dico.parcels2.blockvisitor + +data class BlockVisitorOptions(var pauseTicks: Int = 1, var workMillis: Int = 30)
\ No newline at end of file diff --git a/src/main/kotlin/io/dico/parcels2/blockvisitor/Schematic.kt b/src/main/kotlin/io/dico/parcels2/blockvisitor/Schematic.kt new file mode 100644 index 0000000..b48e4f1 --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/blockvisitor/Schematic.kt @@ -0,0 +1,13 @@ +package io.dico.parcels2.blockvisitor + +import io.dico.parcels2.util.Vec3i +import org.bukkit.block.data.BlockData + +class Schematic(val origin: Vec3i, val size: Vec3i) { + private var data: Array<BlockData>? = null + + + + + +}
\ No newline at end of file diff --git a/src/main/kotlin/io/dico/parcels2/util/Region.kt b/src/main/kotlin/io/dico/parcels2/util/Region.kt new file mode 100644 index 0000000..8cc98df --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/util/Region.kt @@ -0,0 +1,3 @@ +package io.dico.parcels2.util + +data class Region(val origin: Vec3i, val size: Vec3i)
\ No newline at end of file diff --git a/src/main/kotlin/io/dico/parcels2/util/Vec3i.kt b/src/main/kotlin/io/dico/parcels2/util/Vec3i.kt new file mode 100644 index 0000000..d400fac --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/util/Vec3i.kt @@ -0,0 +1,13 @@ +package io.dico.parcels2.util + +data class Vec3i( + val x: Int, + val y: Int, + val z: Int +) + +data class MutableVec3i( + var x: Int, + var y: Int, + var z: Int +)
\ No newline at end of file |