summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDico200 <dico.karssiens@gmail.com>2018-07-29 17:52:29 +0100
committerDico200 <dico.karssiens@gmail.com>2018-07-29 17:52:29 +0100
commit33bb19a54779547726165fa47d20f222cbe1e0a6 (patch)
treef5bb7556a52d7ad51539303724f3acfa634a2032
parentd043cfae16b0e81be597d8eb5a7a4c1bfa163622 (diff)
Work on block visiting.
-rw-r--r--build.gradle.kts1
-rw-r--r--src/main/kotlin/io/dico/parcels2/Options.kt4
-rw-r--r--src/main/kotlin/io/dico/parcels2/Parcel.kt1
-rw-r--r--src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt4
-rw-r--r--src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitor.kt5
-rw-r--r--src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitorManager.kt52
-rw-r--r--src/main/kotlin/io/dico/parcels2/blockvisitor/BlockVisitorOptions.kt3
-rw-r--r--src/main/kotlin/io/dico/parcels2/blockvisitor/Schematic.kt13
-rw-r--r--src/main/kotlin/io/dico/parcels2/util/Region.kt3
-rw-r--r--src/main/kotlin/io/dico/parcels2/util/Vec3i.kt13
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