9
0
mirror of https://github.com/Samsuik/Sakura.git synced 2025-12-31 12:46:32 +00:00

Change block cache optimisation to be disabled by default

This commit is contained in:
Samsuik
2024-05-25 12:59:01 +01:00
parent 231214d91e
commit 46e1e7f538
3 changed files with 23 additions and 11 deletions

View File

@@ -647,10 +647,10 @@ index 0000000000000000000000000000000000000000..f8770f97e3ad6c2746bc436b2b2c895c
+}
diff --git a/src/main/java/me/samsuik/sakura/configuration/WorldConfiguration.java b/src/main/java/me/samsuik/sakura/configuration/WorldConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..12cbf3e424a0d3218d7e8c5ea37c32ff3bad4e98
index 0000000000000000000000000000000000000000..33ead866ae736fd191ed97ed8e9b8e30292e6fe6
--- /dev/null
+++ b/src/main/java/me/samsuik/sakura/configuration/WorldConfiguration.java
@@ -0,0 +1,204 @@
@@ -0,0 +1,205 @@
+package me.samsuik.sakura.configuration;
+
+import com.mojang.logging.LogUtils;
@@ -745,6 +745,7 @@ index 0000000000000000000000000000000000000000..12cbf3e424a0d3218d7e8c5ea37c32ff
+ public boolean consistentRadius = false;
+ public boolean explosionsHurtPlayers = true;
+ public boolean explosionsDropItems = true;
+ public boolean useBlockCacheAcrossExplosions = false;
+ }
+
+ public Mechanics mechanics = new Mechanics();

View File

@@ -23,10 +23,10 @@ index 0fd814f1d65c111266a2b20f86561839a4cef755..932f7a0d030d2d4932e6e6d4a5805e9b
if (index >= 0) {
diff --git a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
new file mode 100644
index 0000000000000000000000000000000000000000..d741021bb53d56383ea751441163c7ff7223b16a
index 0000000000000000000000000000000000000000..0611555b4afb461e2045585e3d81601420792c7c
--- /dev/null
+++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
@@ -0,0 +1,197 @@
@@ -0,0 +1,199 @@
+package me.samsuik.sakura.explosion.special;
+
+import io.papermc.paper.util.WorldUtil;
@@ -119,9 +119,11 @@ index 0000000000000000000000000000000000000000..d741021bb53d56383ea751441163c7ff
+ }
+
+ protected void postExplosion(List<BlockPos> foundBlocks, boolean destroyedBlocks) {
+ // The purpose of this is to make sure papers blockCache doesn't become outdated
+ // by removing stale entries from the block cache map and the recent cache array.
+ if (!foundBlocks.isEmpty() && !destroyedBlocks) {
+ // optimisation: Keep the block cache across explosions and invalidate any found blocks.
+ // This can help reduce block retrievals while block searching when there's a durable block,
+ // and when ray tracing for obstructions. This is disabled by default because plugins can
+ // change blocks in the explosion event.
+ if (this.level.sakuraConfig().cannons.explosion.useBlockCacheAcrossExplosions && !foundBlocks.isEmpty() && !destroyedBlocks) {
+ this.markBlocksInCacheAsExplodable(foundBlocks);
+ } else {
+ super.blockCache.clear();
@@ -477,7 +479,7 @@ index 4f695305794c2564517d99b4edd3180d7ea07845..8acef487b0579febb3497cc88b23c4fc
@Override
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index c9cf9373d3eae4e54ae27fbb8993f858e91e98cc..8e80e602368d784a64c68a061505d4e08997566b 100644
index c9cf9373d3eae4e54ae27fbb8993f858e91e98cc..5ab0de07b1da8c14b62044747bf6e4288ecc7506 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -55,9 +55,11 @@ public class Explosion {
@@ -535,6 +537,15 @@ index c9cf9373d3eae4e54ae27fbb8993f858e91e98cc..8e80e602368d784a64c68a061505d4e0
final long key, final boolean calculateResistance) {
ExplosionBlockCache ret = this.blockCache.get(key);
if (ret != null) {
@@ -310,7 +334,7 @@ public class Explosion {
(currZ & BLOCK_EXPLOSION_CACHE_MASK) << (BLOCK_EXPLOSION_CACHE_SHIFT + BLOCK_EXPLOSION_CACHE_SHIFT);
ExplosionBlockCache cachedBlock = blockCache[cacheKey];
if (cachedBlock == null || cachedBlock.key != key) {
- blockCache[cacheKey] = cachedBlock = this.getOrCacheExplosionBlock(currX, currY, currZ, key, false);
+ blockCache[cacheKey] = cachedBlock = this.getOrCacheExplosionBlock(currX, currY, currZ, key, this.level.sakuraConfig().cannons.explosion.useBlockCacheAcrossExplosions); // Sakura - specialised explosions
}
final BlockState blockState = cachedBlock.blockState;
@@ -501,14 +525,7 @@ public class Explosion {
int j;

View File

@@ -68,10 +68,10 @@ index 19086bbfdf3a015eafec5ca868c8d2451f554ef0..510d722fffd4bdcee2db42aefa662c49
if (xSmaller && z != 0.0) {
z = performAABBCollisionsZ(axisalignedbb, z, aabbs);
diff --git a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
index d741021bb53d56383ea751441163c7ff7223b16a..2e83f0efc47ddabbd2aa5ec8f95c40f95e6e76e0 100644
index 0611555b4afb461e2045585e3d81601420792c7c..ed492ba7df4ea041a1b5916a14eb2944a2b69187 100644
--- a/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
+++ b/src/main/java/me/samsuik/sakura/explosion/special/SpecialisedExplosion.java
@@ -169,9 +169,15 @@ public abstract class SpecialisedExplosion<T extends Entity> extends Explosion {
@@ -171,9 +171,15 @@ public abstract class SpecialisedExplosion<T extends Entity> extends Explosion {
if (distanceFromBottom <= 1.0) {
double x = entity.getX() - pos.x;
@@ -487,7 +487,7 @@ index f5d391ae2a9b015f4dd753f7658ac359bc5db43e..c65e178206041600b09b238214440ed6
// 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 71c2e458673372a8a332c49ab3cb0cf8560b970e..b52270ce23eb67d7b9acac53a4332191bb88f057 100644
index d441e7d5e2ef15a2d719bae6bbc8ada116787416..ae350482fe2eff621dc32c6ed8f28d9bbe2fbd16 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 {