From 65e1048cd063e6b463993d534bd0c47c652d3caa Mon Sep 17 00:00:00 2001 From: Samsuik Date: Thu, 18 Sep 2025 23:20:37 +0100 Subject: [PATCH] fix merge-level none causing an exception Fixes #33 --- .../0003-Specialised-Explosions.patch | 20 +++++++++++-------- .../sakura/explosion/TntExplosion.java | 4 ++-- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/sakura-server/paper-patches/features/0003-Specialised-Explosions.patch b/sakura-server/paper-patches/features/0003-Specialised-Explosions.patch index a965af7..94c196e 100644 --- a/sakura-server/paper-patches/features/0003-Specialised-Explosions.patch +++ b/sakura-server/paper-patches/features/0003-Specialised-Explosions.patch @@ -5,19 +5,23 @@ Subject: [PATCH] Specialised Explosions diff --git a/src/main/java/ca/spottedleaf/moonrise/common/list/IteratorSafeOrderedReferenceSet.java b/src/main/java/ca/spottedleaf/moonrise/common/list/IteratorSafeOrderedReferenceSet.java -index ece6db7b9a0dfd535141c0c756947c4898140503..b9e4971b1a0bffbe2437f940e767539fe1b3ed39 100644 +index ece6db7b9a0dfd535141c0c756947c4898140503..fbe351a877aa0313d522b8b01fc06bcf36d567af 100644 --- a/src/main/java/ca/spottedleaf/moonrise/common/list/IteratorSafeOrderedReferenceSet.java +++ b/src/main/java/ca/spottedleaf/moonrise/common/list/IteratorSafeOrderedReferenceSet.java -@@ -127,6 +127,12 @@ public final class IteratorSafeOrderedReferenceSet { - } +@@ -42,6 +42,16 @@ public final class IteratorSafeOrderedReferenceSet { + this.listElements = (E[])Array.newInstance(arrComponent, arrayCapacity); } -+ // Sakura start - specialised explosions; add indexOf method ++ // Sakura start - specialised explosions; add indexOf and rawGet methods ++ public E rawGet(final int index) { ++ return this.listElements[index]; ++ } ++ + public int indexOf(final E element) { + return this.indexMap.getInt(element); + } -+ // Sakura end - specialised explosions; add indexOf method ++ // Sakura end - specialised explosions; add indexOf and rawGet methods + - public boolean remove(final E element) { - final int index = this.indexMap.removeInt(element); - if (index >= 0) { + // includes null (gravestone) elements + public E[] getListRaw() { + return this.listElements; diff --git a/sakura-server/src/main/java/me/samsuik/sakura/explosion/TntExplosion.java b/sakura-server/src/main/java/me/samsuik/sakura/explosion/TntExplosion.java index 7c4e0d3..873ff96 100644 --- a/sakura-server/src/main/java/me/samsuik/sakura/explosion/TntExplosion.java +++ b/sakura-server/src/main/java/me/samsuik/sakura/explosion/TntExplosion.java @@ -162,8 +162,8 @@ public final class TntExplosion extends SpecialisedExplosion { entities.createRawIterator(); // iterate over the entityTickList to find entities that are exploding in the same position. - while ((index = entities.advanceRawIterator(index)) != -1) { - Entity foundEntity = entities.getListRaw()[index]; + while ((index = entities.advanceRawIterator(index)) != Integer.MAX_VALUE) { + Entity foundEntity = entities.rawGet(index); if (!(foundEntity instanceof MergeableEntity mergeEntity) || foundEntity.isRemoved() || !foundEntity.compareState(this.cause) || !mergeEntity.isSafeToMergeInto(this.cause, true)) break; this.level().mergeHandler.mergeEntity(mergeEntity, this.cause);