diff --git a/build.gradle.kts b/build.gradle.kts index d8f933582..118673ea8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -161,7 +161,7 @@ dependencies { compileOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-forge-api:${jei_version}")) runtimeOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-forge:${jei_version}")) - runtimeOnly(fg.deobf("ru.dbotthepony:particle-collider:0.4.1")) + runtimeOnly(fg.deobf("ru.dbotthepony:particle-collider:0.4.2")) implementation(fg.deobf("curse.maven:jade-324717:${jade_id}")) //runtimeOnly(fg.deobf("curse.maven:configured-457570:${configured_id}")) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/ReferenceHashStrategy.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/ReferenceHashStrategy.kt index 76c362060..a7888bebf 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/ReferenceHashStrategy.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/ReferenceHashStrategy.kt @@ -29,3 +29,23 @@ object ReferenceHashStrategy : Hash.Strategy { return o.hashCode() } } + +object StrictReferenceHashStrategy : Hash.Strategy { + @Suppress("UNCHECKED_CAST") + override fun equals(a: Any?, b: Any?): Boolean { + if (a === b) return true + + if (a is Reference<*>) { + if (b is Reference<*>) return false + return b != null && (a as Reference).refersTo(b) + } else if (b is Reference<*>) { + return a != null && (b as Reference).refersTo(a) + } else { + return a == b + } + } + + override fun hashCode(o: Any?): Int { + return o.hashCode() + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/WeakHashSet.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/WeakHashSet.kt index 6464b7d87..6279aedfe 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/WeakHashSet.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/WeakHashSet.kt @@ -8,7 +8,7 @@ import java.lang.ref.ReferenceQueue class WeakHashSet(initialCapacity: Int = 16, loadFactor: Float = 0.75f, linked: Boolean = false) : MutableSet { private val queue = ReferenceQueue() - private val backing: ObjectSet = if (linked) ObjectLinkedOpenCustomHashSet(initialCapacity, loadFactor, ReferenceHashStrategy) else ObjectOpenCustomHashSet(initialCapacity, loadFactor, ReferenceHashStrategy) + private val backing: ObjectSet = if (linked) ObjectLinkedOpenCustomHashSet(initialCapacity, loadFactor, StrictReferenceHashStrategy) else ObjectOpenCustomHashSet(initialCapacity, loadFactor, StrictReferenceHashStrategy) private fun purge() { var next = queue.poll()