Archived
0

Work on block visiting.

This commit is contained in:
Dico200
2018-07-29 17:52:29 +01:00
parent d043cfae16
commit 33bb19a547
10 changed files with 98 additions and 1 deletions

View File

@@ -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()) {
}

View File

@@ -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() {

View File

@@ -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()) {

View File

@@ -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)

View File

@@ -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) } }
}

View File

@@ -0,0 +1,3 @@
package io.dico.parcels2.blockvisitor
data class BlockVisitorOptions(var pauseTicks: Int = 1, var workMillis: Int = 30)

View 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
}

View File

@@ -0,0 +1,3 @@
package io.dico.parcels2.util
data class Region(val origin: Vec3i, val size: Vec3i)

View 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
)