Work on block visiting.
This commit is contained in:
@@ -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()) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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