diff options
author | Dico <dico.karssiens@gmail.com> | 2018-08-02 18:22:36 +0100 |
---|---|---|
committer | Dico <dico.karssiens@gmail.com> | 2018-08-02 18:22:36 +0100 |
commit | 0af2e615d3fa1d8509be46e14f99d40dc9cdb342 (patch) | |
tree | 3864043218969a67b5df17784a05c6af424e3617 /src/main/kotlin/io/dico/parcels2/Parcel.kt | |
parent | 6513ad9237dbda0244a52608ae639fee5822b3ee (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.kt | 137 |
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 |