mirror of
https://github.com/Samsuik/Sakura.git
synced 2025-12-22 16:29:16 +00:00
Fix npe in clean block cache after being invalidated
This commit is contained in:
@@ -680,7 +680,7 @@ index ed0234d6a2718d35af635c4b74243bb2afd40769..2800af98260ebdab107466c596d2ec8c
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa590454a8c 100644
|
||||
index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..87a61b091bb839460394e285e030244fd6140379 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
@@ -55,14 +55,16 @@ public class Explosion {
|
||||
@@ -769,7 +769,7 @@ index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa5
|
||||
++missedRays;
|
||||
}
|
||||
}
|
||||
@@ -375,12 +388,76 @@ public class Explosion {
|
||||
@@ -375,12 +388,80 @@ public class Explosion {
|
||||
return (float)missedRays / (float)totalRays;
|
||||
}
|
||||
// Paper end - optimise collisions
|
||||
@@ -793,7 +793,11 @@ index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa5
|
||||
+
|
||||
+ protected void cleanBlockCache(List<BlockPos> blocks) {
|
||||
+ for (BlockPos blow : blocks) {
|
||||
+ blockCache.get(blow.asLong()).shouldExplode = null;
|
||||
+ ExplosionBlockCache cache = blockCache.get(blow.asLong());
|
||||
+ // May be null if the cache is invalidated then retrieved from the ExplosionBlockCache[]
|
||||
+ if (cache != null) {
|
||||
+ cache.shouldExplode = null;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
@@ -847,7 +851,7 @@ index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa5
|
||||
AABB axisalignedbb = entity.getBoundingBox();
|
||||
double d0 = 1.0D / ((axisalignedbb.maxX - axisalignedbb.minX) * 2.0D + 1.0D);
|
||||
double d1 = 1.0D / ((axisalignedbb.maxY - axisalignedbb.minY) * 2.0D + 1.0D);
|
||||
@@ -400,7 +477,11 @@ public class Explosion {
|
||||
@@ -400,7 +481,11 @@ public class Explosion {
|
||||
double d10 = Mth.lerp(d7, axisalignedbb.minZ, axisalignedbb.maxZ);
|
||||
Vec3 vec3d1 = new Vec3(d8 + d3, d9, d10 + d4);
|
||||
|
||||
@@ -860,7 +864,7 @@ index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa5
|
||||
++i;
|
||||
}
|
||||
|
||||
@@ -429,7 +510,29 @@ public class Explosion {
|
||||
@@ -429,7 +514,29 @@ public class Explosion {
|
||||
return;
|
||||
}
|
||||
// CraftBukkit end
|
||||
@@ -890,7 +894,7 @@ index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa5
|
||||
Set<BlockPos> set = Sets.newHashSet();
|
||||
boolean flag = true;
|
||||
|
||||
@@ -437,14 +540,7 @@ public class Explosion {
|
||||
@@ -437,14 +544,7 @@ public class Explosion {
|
||||
int j;
|
||||
|
||||
// Paper start - optimise explosions
|
||||
@@ -906,7 +910,7 @@ index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa5
|
||||
// use initial cache value that is most likely to be used: the source position
|
||||
final ExplosionBlockCache initialCache;
|
||||
{
|
||||
@@ -541,10 +637,15 @@ public class Explosion {
|
||||
@@ -541,10 +641,15 @@ public class Explosion {
|
||||
}
|
||||
|
||||
this.toBlow.addAll(set);
|
||||
@@ -924,7 +928,7 @@ index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa5
|
||||
int l = Mth.floor(this.y - (double) f2 - 1.0D);
|
||||
int i1 = Mth.floor(this.y + (double) f2 + 1.0D);
|
||||
int j1 = Mth.floor(this.z - (double) f2 - 1.0D);
|
||||
@@ -590,11 +691,11 @@ public class Explosion {
|
||||
@@ -590,11 +695,11 @@ public class Explosion {
|
||||
for (EnderDragonPart entityComplexPart : ((EnderDragon) entity).subEntities) {
|
||||
// Calculate damage separately for each EntityComplexPart
|
||||
if (list.contains(entityComplexPart)) {
|
||||
@@ -938,7 +942,7 @@ index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa5
|
||||
}
|
||||
|
||||
if (entity.lastDamageCancelled) { // SPIGOT-5339, SPIGOT-6252, SPIGOT-6777: Skip entity if damage event was cancelled
|
||||
@@ -655,9 +756,7 @@ public class Explosion {
|
||||
@@ -655,9 +760,7 @@ public class Explosion {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -949,7 +953,7 @@ index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa5
|
||||
}
|
||||
|
||||
public void finalizeExplosion(boolean particles) {
|
||||
@@ -725,6 +824,12 @@ public class Explosion {
|
||||
@@ -725,6 +828,12 @@ public class Explosion {
|
||||
if (this.wasCanceled) {
|
||||
return;
|
||||
}
|
||||
@@ -962,7 +966,7 @@ index 39c30a295df9dfbc3c861f1678a958ef2ed2ba93..f7b2ebc636b8f01654ac917e2b9c4aa5
|
||||
// CraftBukkit end
|
||||
objectlistiterator = this.toBlow.iterator();
|
||||
|
||||
@@ -871,15 +976,22 @@ public class Explosion {
|
||||
@@ -871,15 +980,22 @@ public class Explosion {
|
||||
private BlockInteraction() {}
|
||||
}
|
||||
// Paper start - Optimize explosions
|
||||
|
||||
@@ -124,7 +124,7 @@ index a8008c7550488be34b51f4280f5569170b1ebd1d..2e5a46b9d27b930870c68dbde93d8731
|
||||
public String getDescriptionId() {
|
||||
return this.getOrCreateDescriptionId();
|
||||
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
index f7b2ebc636b8f01654ac917e2b9c4aa590454a8c..08c7109b0bb613388b5a98a5d312b4ba32770fbf 100644
|
||||
index 87a61b091bb839460394e285e030244fd6140379..5b4286a53c0521c23fc4c36ecb5e53ca15dbfb15 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
@@ -212,6 +212,17 @@ public class Explosion {
|
||||
@@ -145,7 +145,7 @@ index f7b2ebc636b8f01654ac917e2b9c4aa590454a8c..08c7109b0bb613388b5a98a5d312b4ba
|
||||
ret = new ExplosionBlockCache(
|
||||
key, pos, blockState, fluidState,
|
||||
(resistance.orElse(ZERO_RESISTANCE).floatValue() + 0.3f) * 0.3f,
|
||||
@@ -838,6 +849,16 @@ public class Explosion {
|
||||
@@ -842,6 +853,16 @@ public class Explosion {
|
||||
// CraftBukkit start - TNTPrimeEvent
|
||||
BlockState iblockdata = this.level.getBlockState(blockposition);
|
||||
Block block = iblockdata.getBlock();
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Consistent Explosion Radius
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
index c247797a2e3c910836d7b9785b051e90a9840e89..0c9f364922fe28cb099add25d0589dfab966f51e 100644
|
||||
index 97bcc95563fcde50b7d13183f94d41b80128c70c..144c2c9c11c3df3c8a95e252458828154728f555 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
@@ -586,7 +586,7 @@ public class Explosion {
|
||||
@@ -590,7 +590,7 @@ public class Explosion {
|
||||
double d2 = CACHED_RAYS[ray + 2];
|
||||
ray += 3;
|
||||
// Paper end - optimise explosions
|
||||
|
||||
@@ -458,7 +458,7 @@ index 19397e2556a3cdc7180a5f8889aefb5ef23715b7..26fc6a8018cfde3c219a7d828f743663
|
||||
// Paper end - Option to prevent TNT from moving in water
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
index e09d159007922d29a2cdc1b2597a52c16958b819..e10a78213da1514f54e0659960f7633843adc8af 100644
|
||||
index 144c2c9c11c3df3c8a95e252458828154728f555..6adf7e5945dcf8d11b133c7497a2c1eea0990860 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
@@ -74,6 +74,7 @@ public class Explosion {
|
||||
@@ -477,7 +477,7 @@ index e09d159007922d29a2cdc1b2597a52c16958b819..e10a78213da1514f54e0659960f76338
|
||||
}
|
||||
|
||||
// Paper start - optimise collisions
|
||||
@@ -495,9 +497,17 @@ public class Explosion {
|
||||
@@ -499,9 +501,17 @@ public class Explosion {
|
||||
Vec3 vec3d1 = new Vec3(d8 + d3, d9, d10 + d4);
|
||||
|
||||
// Sakura start
|
||||
@@ -497,7 +497,7 @@ index e09d159007922d29a2cdc1b2597a52c16958b819..e10a78213da1514f54e0659960f76338
|
||||
// Sakura end
|
||||
++i;
|
||||
}
|
||||
@@ -611,6 +621,10 @@ public class Explosion {
|
||||
@@ -615,6 +625,10 @@ public class Explosion {
|
||||
}
|
||||
|
||||
if (cachedBlock.outOfWorld) {
|
||||
@@ -508,7 +508,7 @@ index e09d159007922d29a2cdc1b2597a52c16958b819..e10a78213da1514f54e0659960f76338
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -681,10 +695,17 @@ public class Explosion {
|
||||
@@ -685,10 +699,17 @@ public class Explosion {
|
||||
|
||||
if (d7 <= 1.0D) {
|
||||
double d8 = entity.getX() - this.x;
|
||||
@@ -527,7 +527,7 @@ index e09d159007922d29a2cdc1b2597a52c16958b819..e10a78213da1514f54e0659960f76338
|
||||
if (d11 != 0.0D) {
|
||||
d8 /= d11;
|
||||
d9 /= d11;
|
||||
@@ -1012,7 +1033,14 @@ public class Explosion {
|
||||
@@ -1016,7 +1037,14 @@ public class Explosion {
|
||||
return data.density();
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Allow explosions to destroy lava
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
index e10a78213da1514f54e0659960f7633843adc8af..9c35e3cd73eb324c36d383c9410f1c3a4e23d978 100644
|
||||
index 6adf7e5945dcf8d11b133c7497a2c1eea0990860..0b90b05bd538186f8f1d51376560dd6485fdce57 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
@@ -228,6 +228,10 @@ public class Explosion {
|
||||
@@ -19,7 +19,7 @@ index e10a78213da1514f54e0659960f7633843adc8af..9c35e3cd73eb324c36d383c9410f1c3a
|
||||
}
|
||||
// Sakura end - explosion durable blocks
|
||||
|
||||
@@ -449,6 +453,12 @@ public class Explosion {
|
||||
@@ -453,6 +457,12 @@ public class Explosion {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Add explosions dropping items config
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
index 9c35e3cd73eb324c36d383c9410f1c3a4e23d978..d1edbd59588c9a83cff0bf191c3791550adc7384 100644
|
||||
index 0b90b05bd538186f8f1d51376560dd6485fdce57..7d68fc98f2fe995391c57a220f7f5986aea07166 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
|
||||
@@ -911,6 +911,12 @@ public class Explosion {
|
||||
@@ -915,6 +915,12 @@ public class Explosion {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user