summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/Interactable.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/Interactable.kt')
-rw-r--r--src/main/kotlin/io/dico/parcels2/Interactable.kt13
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