restructure things a bit for use in actual gameplay
This commit is contained in:
@ -1,8 +1,50 @@
|
||||
package com.pobnellion.aoe.building
|
||||
|
||||
import com.pobnellion.aoe.Aoe
|
||||
import com.pobnellion.aoe.entity.goals.EntityWorkTarget
|
||||
import com.sk89q.worldedit.WorldEdit
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats
|
||||
import com.sk89q.worldedit.function.operation.Operation
|
||||
import com.sk89q.worldedit.function.operation.Operations
|
||||
import com.sk89q.worldedit.math.BlockVector3
|
||||
import com.sk89q.worldedit.session.ClipboardHolder
|
||||
import org.bukkit.Location
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
|
||||
abstract class Building(val location: Location, val variant: Int) {
|
||||
abstract class Building(val location: Location, val variant: Int): EntityWorkTarget {
|
||||
override var currentProgressPercent: Float = 0f
|
||||
override fun isComplete(): Boolean = currentProgressPercent >= 1.0f
|
||||
override fun addProgress(amount: Float) {}
|
||||
override fun setProgress(amount: Float) {}
|
||||
override fun removeProgress(amount: Float) {}
|
||||
override fun onComplete() {}
|
||||
|
||||
abstract var populationCapacity: Int
|
||||
abstract fun getSchematicName(variant: Int): String
|
||||
|
||||
fun placeFull() {
|
||||
currentProgressPercent = 1f
|
||||
var clipboard: Clipboard
|
||||
|
||||
val file: File = Aoe.getSchematicFile(getSchematicName(variant))
|
||||
val format = ClipboardFormats.findByFile(file)
|
||||
format!!.getReader(FileInputStream(file)).use { reader ->
|
||||
clipboard = reader.read()
|
||||
}
|
||||
|
||||
val offset = clipboard.region.minimumPoint.subtract(clipboard.origin)
|
||||
|
||||
WorldEdit.getInstance().newEditSession(BukkitAdapter.adapt(location.world)).use { editSession ->
|
||||
val operation: Operation = ClipboardHolder(clipboard)
|
||||
.createPaste(editSession)
|
||||
.to(BlockVector3.at(location.x, location.y, location.z).subtract(offset))
|
||||
.build()
|
||||
Operations.complete(operation)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface BuildingInfo {
|
||||
|
||||
Reference in New Issue
Block a user