summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/Parcel.kt
diff options
context:
space:
mode:
authorDico <dico.karssiens@gmail.com>2018-08-02 18:22:36 +0100
committerDico <dico.karssiens@gmail.com>2018-08-02 18:22:36 +0100
commit0af2e615d3fa1d8509be46e14f99d40dc9cdb342 (patch)
tree3864043218969a67b5df17784a05c6af424e3617 /src/main/kotlin/io/dico/parcels2/Parcel.kt
parent6513ad9237dbda0244a52608ae639fee5822b3ee (diff)
Refactor and improve a lot of the API. Move default implementations into a package. Reformatting.
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/Parcel.kt')
-rw-r--r--src/main/kotlin/io/dico/parcels2/Parcel.kt137
1 files changed, 13 insertions, 124 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/Parcel.kt b/src/main/kotlin/io/dico/parcels2/Parcel.kt
index 335b415..a69116a 100644
--- a/src/main/kotlin/io/dico/parcels2/Parcel.kt
+++ b/src/main/kotlin/io/dico/parcels2/Parcel.kt
@@ -1,14 +1,11 @@
package io.dico.parcels2
-import io.dico.dicore.Formatting
import io.dico.parcels2.util.Vec2i
-import io.dico.parcels2.util.getPlayerName
import io.dico.parcels2.util.hasBuildAnywhere
import org.bukkit.OfflinePlayer
import org.bukkit.entity.Player
import org.joda.time.DateTime
-import java.util.*
-import kotlin.reflect.KProperty
+import java.util.UUID
/**
* Parcel implementation of ParcelData will update the database when changes are made.
@@ -18,73 +15,21 @@ import kotlin.reflect.KProperty
* However, this implementation is intentionally not thread-safe.
* Therefore, database query callbacks should schedule their updates using the bukkit scheduler.
*/
-class Parcel(val world: ParcelWorld, val pos: Vec2i) : ParcelData {
- var data: ParcelData = ParcelDataHolder(); private set
+interface Parcel : ParcelData {
+ val id: ParcelId
+ val world: ParcelWorld
+ val pos: Vec2i
+ val x: Int
+ val z: Int
+ val data: ParcelData
+ val infoString: String
+ val hasBlockVisitors: Boolean
- val id get() = "${pos.x}:${pos.z}"
- val homeLocation get() = world.generator.getHomeLocation(this)
+ fun copyDataIgnoringDatabase(data: ParcelData)
- val infoString by ParcelInfoStringComputer
+ fun copyData(data: ParcelData)
- fun copyDataIgnoringDatabase(data: ParcelData) {
- this.data = data
- }
-
- fun copyData(data: ParcelData) {
- copyDataIgnoringDatabase(data)
- world.storage.setParcelData(this, data)
- }
-
- fun dispose() {
- copyDataIgnoringDatabase(ParcelDataHolder())
- world.storage.setParcelData(this, null)
- }
-
- override val addedMap: Map<UUID, AddedStatus> get() = data.addedMap
- override fun getAddedStatus(uuid: UUID) = data.getAddedStatus(uuid)
- override fun isBanned(uuid: UUID) = data.isBanned(uuid)
- override fun isAllowed(uuid: UUID) = data.isAllowed(uuid)
- override fun canBuild(player: OfflinePlayer, checkAdmin: Boolean, checkGlobal: Boolean): Boolean {
- return (data.canBuild(player, checkAdmin, false))
- || checkGlobal && world.globalAddedData[owner ?: return false].isAllowed(player)
- }
-
- val globalAddedMap: Map<UUID, AddedStatus>? get() = owner?.let { world.globalAddedData[it].addedMap }
-
- override val since: DateTime? get() = data.since
-
- override var owner: ParcelOwner?
- get() = data.owner
- set(value) {
- if (data.owner != value) {
- world.storage.setParcelOwner(this, value)
- data.owner = value
- }
- }
-
- override fun setAddedStatus(uuid: UUID, status: AddedStatus): Boolean {
- return data.setAddedStatus(uuid, status).also {
- if (it) world.storage.setParcelPlayerStatus(this, uuid, status)
- }
- }
-
- override var allowInteractInputs: Boolean
- get() = data.allowInteractInputs
- set(value) {
- if (data.allowInteractInputs == value) return
- world.storage.setParcelAllowsInteractInputs(this, value)
- data.allowInteractInputs = value
- }
-
- override var allowInteractInventory: Boolean
- get() = data.allowInteractInventory
- set(value) {
- if (data.allowInteractInventory == value) return
- world.storage.setParcelAllowsInteractInventory(this, value)
- data.allowInteractInventory = value
- }
-
- var hasBlockVisitors: Boolean = false; private set
+ fun dispose()
}
interface ParcelData : AddedData {
@@ -113,59 +58,3 @@ class ParcelDataHolder : AddedDataHolder(), ParcelData {
override var allowInteractInventory = true
}
-private object ParcelInfoStringComputer {
- val infoStringColor1 = Formatting.GREEN
- val infoStringColor2 = Formatting.AQUA
-
- private inline fun StringBuilder.appendField(name: String, value: StringBuilder.() -> Unit) {
- append(infoStringColor1)
- append(name)
- append(": ")
- append(infoStringColor2)
- value()
- append(' ')
- }
-
- operator fun getValue(parcel: Parcel, property: KProperty<*>): String = buildString {
- appendField("ID") {
- append(parcel.pos.x)
- append(':')
- append(parcel.pos.z)
- }
-
- appendField("Owner") {
- val owner = parcel.owner
- if (owner == null) {
- append(infoStringColor1)
- append("none")
- } else {
- append(owner.notNullName)
- }
- }
-
- // plotme appends biome here
-
- append('\n')
-
- val allowedMap = parcel.addedMap.filterValues { it.isAllowed }
- if (allowedMap.isNotEmpty()) appendField("Allowed") {
- allowedMap.keys.map(::getPlayerName).joinTo(this)
- }
-
- val bannedMap = parcel.addedMap.filterValues { it.isBanned }
- if (bannedMap.isNotEmpty()) appendField("Banned") {
- bannedMap.keys.map(::getPlayerName).joinTo(this)
- }
-
- if (!parcel.allowInteractInputs || !parcel.allowInteractInventory) {
- appendField("Options") {
- append("(")
- appendField("inputs") { append(parcel.allowInteractInputs)}
- append(", ")
- appendField("inventory") { append(parcel.allowInteractInventory) }
- append(")")
- }
- }
-
- }
-} \ No newline at end of file