Work on block visiting.
This commit is contained in:
@@ -66,6 +66,7 @@ dependencies {
|
|||||||
c.kotlinStd(kotlin("stdlib-jdk8"))
|
c.kotlinStd(kotlin("stdlib-jdk8"))
|
||||||
c.kotlinStd(kotlin("reflect"))
|
c.kotlinStd(kotlin("reflect"))
|
||||||
c.kotlinStd(kotlinx("coroutines-core:0.23.4"))
|
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("org.jetbrains.exposed:exposed:0.10.3") { isTransitive = false }
|
||||||
compile("joda-time:joda-time:2.10")
|
compile("joda-time:joda-time:2.10")
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package io.dico.parcels2
|
|||||||
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore
|
import com.fasterxml.jackson.annotation.JsonIgnore
|
||||||
|
import io.dico.parcels2.blockvisitor.BlockVisitorOptions
|
||||||
import io.dico.parcels2.storage.Storage
|
import io.dico.parcels2.storage.Storage
|
||||||
import io.dico.parcels2.storage.StorageFactory
|
import io.dico.parcels2.storage.StorageFactory
|
||||||
import io.dico.parcels2.storage.yamlObjectMapper
|
import io.dico.parcels2.storage.yamlObjectMapper
|
||||||
@@ -39,7 +40,8 @@ data class WorldOptions(var gameMode: GameMode? = GameMode.CREATIVE,
|
|||||||
var blockMobSpawning: Boolean = true,
|
var blockMobSpawning: Boolean = true,
|
||||||
var blockedItems: Set<Material> = EnumSet.of(Material.FLINT_AND_STEEL, Material.SNOWBALL),
|
var blockedItems: Set<Material> = EnumSet.of(Material.FLINT_AND_STEEL, Material.SNOWBALL),
|
||||||
var axisLimit: Int = 10,
|
var axisLimit: Int = 10,
|
||||||
var generator: GeneratorOptions = DefaultGeneratorOptions()) {
|
var generator: GeneratorOptions = DefaultGeneratorOptions(),
|
||||||
|
var blockVisitor: BlockVisitorOptions = BlockVisitorOptions()) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ interface ParcelData : AddedData {
|
|||||||
class Parcel(val world: ParcelWorld, val pos: Vec2i) : ParcelData {
|
class Parcel(val world: ParcelWorld, val pos: Vec2i) : ParcelData {
|
||||||
val id get() = "${pos.x}:${pos.z}"
|
val id get() = "${pos.x}:${pos.z}"
|
||||||
val homeLocation get() = world.generator.getHomeLocation(this)
|
val homeLocation get() = world.generator.getHomeLocation(this)
|
||||||
|
private var blockVisitors = 0
|
||||||
|
|
||||||
val infoString: String
|
val infoString: String
|
||||||
get() {
|
get() {
|
||||||
|
|||||||
@@ -9,10 +9,12 @@ import io.dico.parcels2.listener.ParcelListeners
|
|||||||
import io.dico.parcels2.storage.Storage
|
import io.dico.parcels2.storage.Storage
|
||||||
import io.dico.parcels2.storage.yamlObjectMapper
|
import io.dico.parcels2.storage.yamlObjectMapper
|
||||||
import io.dico.parcels2.util.tryCreate
|
import io.dico.parcels2.util.tryCreate
|
||||||
|
import kotlinx.coroutines.experimental.asCoroutineDispatcher
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
import org.bukkit.plugin.java.JavaPlugin
|
import org.bukkit.plugin.java.JavaPlugin
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.util.concurrent.Executor
|
||||||
|
|
||||||
val logger = LoggerFactory.getLogger("ParcelsPlugin")
|
val logger = LoggerFactory.getLogger("ParcelsPlugin")
|
||||||
private inline val plogger get() = logger
|
private inline val plogger get() = logger
|
||||||
@@ -28,6 +30,8 @@ class ParcelsPlugin : JavaPlugin() {
|
|||||||
private var listeners: ParcelListeners? = null
|
private var listeners: ParcelListeners? = null
|
||||||
private var cmdDispatcher: ICommandDispatcher? = null
|
private var cmdDispatcher: ICommandDispatcher? = null
|
||||||
|
|
||||||
|
val mainThreadDispatcher = Executor { server.scheduler.runTask(this, it) }.asCoroutineDispatcher()
|
||||||
|
|
||||||
override fun onEnable() {
|
override fun onEnable() {
|
||||||
plogger.info("Debug enabled: ${plogger.isDebugEnabled}")
|
plogger.info("Debug enabled: ${plogger.isDebugEnabled}")
|
||||||
if (!init()) {
|
if (!init()) {
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -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) } }
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
package io.dico.parcels2.blockvisitor
|
||||||
|
|
||||||
|
data class BlockVisitorOptions(var pauseTicks: Int = 1, var workMillis: Int = 30)
|
||||||
13
src/main/kotlin/io/dico/parcels2/blockvisitor/Schematic.kt
Normal file
13
src/main/kotlin/io/dico/parcels2/blockvisitor/Schematic.kt
Normal file
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
3
src/main/kotlin/io/dico/parcels2/util/Region.kt
Normal file
3
src/main/kotlin/io/dico/parcels2/util/Region.kt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
package io.dico.parcels2.util
|
||||||
|
|
||||||
|
data class Region(val origin: Vec3i, val size: Vec3i)
|
||||||
13
src/main/kotlin/io/dico/parcels2/util/Vec3i.kt
Normal file
13
src/main/kotlin/io/dico/parcels2/util/Vec3i.kt
Normal file
@@ -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
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user