summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelImpl.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelImpl.kt')
-rw-r--r--src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelImpl.kt22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelImpl.kt b/src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelImpl.kt
index dd3c121..59e84f4 100644
--- a/src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelImpl.kt
+++ b/src/main/kotlin/io/dico/parcels2/defaultimpl/ParcelImpl.kt
@@ -3,11 +3,11 @@ package io.dico.parcels2.defaultimpl
import io.dico.dicore.Formatting
import io.dico.parcels2.*
import io.dico.parcels2.util.Vec2i
-import io.dico.parcels2.util.alsoIfTrue
+import io.dico.parcels2.util.ext.alsoIfTrue
import org.bukkit.Material
import org.bukkit.OfflinePlayer
import org.joda.time.DateTime
-import kotlin.reflect.KProperty
+import java.util.concurrent.atomic.AtomicInteger
class ParcelImpl(override val world: ParcelWorld,
override val x: Int,
@@ -15,8 +15,8 @@ class ParcelImpl(override val world: ParcelWorld,
override val id: ParcelId = this
override val pos get() = Vec2i(x, z)
override var data: ParcelDataHolder = ParcelDataHolder(); private set
- override val infoString by ParcelInfoStringComputer
- override var hasBlockVisitors: Boolean = false; private set
+ override val infoString get() = ParcelInfoStringComputer.getInfoString(this)
+ override val hasBlockVisitors get() = blockVisitors.get() > 0
override val worldId: ParcelWorldId get() = world.id
override fun copyDataIgnoringDatabase(data: ParcelData) {
@@ -115,6 +115,18 @@ class ParcelImpl(override val world: ParcelWorld,
// TODO update storage
}
+ private var blockVisitors = AtomicInteger(0)
+
+ override suspend fun withBlockVisitorPermit(block: suspend () -> Unit) {
+ try {
+ blockVisitors.getAndIncrement()
+ block()
+ } finally {
+ blockVisitors.getAndDecrement()
+ }
+ }
+
+ override fun toString() = toStringExt()
}
private object ParcelInfoStringComputer {
@@ -159,7 +171,7 @@ private object ParcelInfoStringComputer {
}
}
- operator fun getValue(parcel: Parcel, property: KProperty<*>): String = buildString {
+ fun getInfoString(parcel: Parcel): String = buildString {
appendField("ID") {
append(parcel.x)
append(',')