diff options
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/Interactable.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/Interactable.kt | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/Interactable.kt b/src/main/kotlin/io/dico/parcels2/Interactable.kt index cb83d6e..100e433 100644 --- a/src/main/kotlin/io/dico/parcels2/Interactable.kt +++ b/src/main/kotlin/io/dico/parcels2/Interactable.kt @@ -1,5 +1,6 @@ package io.dico.parcels2 +import io.dico.parcels2.util.ext.ceilDiv import io.dico.parcels2.util.ext.getMaterialsWithWoodTypePrefix import org.bukkit.Material import java.util.EnumMap @@ -115,9 +116,10 @@ interface InteractableConfiguration { fun isInteractable(material: Material): Boolean fun isInteractable(clazz: Interactables): Boolean + fun isDefault(): Boolean + fun setInteractable(clazz: Interactables, interactable: Boolean): Boolean fun clear(): Boolean - fun copyFrom(other: InteractableConfiguration) = Interactables.classesById.fold(false) { cur, elem -> setInteractable(elem, other.isInteractable(elem) || cur) } @@ -128,7 +130,7 @@ interface InteractableConfiguration { fun InteractableConfiguration.isInteractable(clazz: Interactables?) = clazz != null && isInteractable(clazz) class BitmaskInteractableConfiguration : InteractableConfiguration { - val bitmaskArray = IntArray((Interactables.classesById.size + 31) / 32) + val bitmaskArray = IntArray(Interactables.classesById.size ceilDiv Int.SIZE_BITS) private fun isBitSet(classId: Int): Boolean { val idx = classId.ushr(5) @@ -144,6 +146,13 @@ class BitmaskInteractableConfiguration : InteractableConfiguration { return isBitSet(clazz.id) != clazz.interactableByDefault } + override fun isDefault(): Boolean { + for (x in bitmaskArray) { + if (x != 0) return false + } + return true + } + override fun setInteractable(clazz: Interactables, interactable: Boolean): Boolean { val idx = clazz.id.ushr(5) if (idx >= bitmaskArray.size) return false |