mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-21 20:56:45 +01:00
huge optimizations
This commit is contained in:
parent
f0973f2500
commit
3aaff1911b
@ -1,6 +1,12 @@
|
||||
Version 2.2.024
|
||||
Fixed a bug where Giga Drill breaker was giving out more drop chance than intended
|
||||
Large optimizations to most block interactions in mcMMO code
|
||||
Significant optimizations made to reading new chunks for mcMMO
|
||||
Significant optimizations to most block interactions in mcMMO code
|
||||
|
||||
Notes:
|
||||
Got a bit carried away and started to optimize stuff.
|
||||
I was able to make Tree Feller way faster with optimizations in this update, I tested with a custom gigantic tree that had over 200,000 blocks felled (huge) and it only took 4 seconds total, in the previous version of mcMMO this would take over 2-3 minutes.
|
||||
|
||||
|
||||
Version 2.2.023
|
||||
Compatibility with Minecraft 1.21.3
|
||||
|
@ -159,17 +159,16 @@ public class HashChunkManager implements ChunkManager {
|
||||
ChunkStore check = chunkMap.computeIfAbsent(chunkKey, k -> {
|
||||
// Load from file
|
||||
ChunkStore loaded = loadChunk(chunkKey.x, chunkKey.z, world);
|
||||
if (loaded == null)
|
||||
return null;
|
||||
if (loaded != null) {
|
||||
chunkUsageMap.computeIfAbsent(toRegionKey(chunkKey.worldID, chunkKey.x, chunkKey.z), j -> new HashSet<>()).add(chunkKey);
|
||||
return loaded;
|
||||
}
|
||||
// Mark chunk in-use for region tracking
|
||||
chunkUsageMap.computeIfAbsent(toRegionKey(chunkKey.worldID, chunkKey.x, chunkKey.z), j -> new HashSet<>()).add(chunkKey);
|
||||
return loaded;
|
||||
// Create a new chunkstore
|
||||
return new BitSetChunkStore(world, chunkKey.x, chunkKey.z);
|
||||
});
|
||||
|
||||
// No chunk, return false
|
||||
if (check == null)
|
||||
return false;
|
||||
|
||||
int ix = Math.abs(x) % 16;
|
||||
int iz = Math.abs(z) % 16;
|
||||
|
||||
@ -227,19 +226,12 @@ public class HashChunkManager implements ChunkManager {
|
||||
chunkUsageMap.computeIfAbsent(toRegionKey(chunkKey.worldID, chunkKey.x, chunkKey.z), j -> new HashSet<>()).add(chunkKey);
|
||||
return loaded;
|
||||
}
|
||||
// If setting to false, no need to create an empty chunkstore
|
||||
if (!value)
|
||||
return null;
|
||||
// Mark chunk in-use for region tracking
|
||||
chunkUsageMap.computeIfAbsent(toRegionKey(chunkKey.worldID, chunkKey.x, chunkKey.z), j -> new HashSet<>()).add(chunkKey);
|
||||
// Create a new chunkstore
|
||||
return new BitSetChunkStore(world, chunkKey.x, chunkKey.z);
|
||||
});
|
||||
|
||||
// Indicates setting false on empty chunkstore
|
||||
if (cStore == null)
|
||||
return;
|
||||
|
||||
// Get block offset (offset from chunk corner)
|
||||
int ix = Math.abs(x) % 16;
|
||||
int iz = Math.abs(z) % 16;
|
||||
|
@ -28,12 +28,12 @@ public class NullChunkManager implements ChunkManager {
|
||||
|
||||
@Override
|
||||
public boolean isEligible(@NotNull Block block) {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEligible(@NotNull BlockState blockState) {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -75,7 +75,6 @@ class UserBlockTrackerTest {
|
||||
|
||||
// Top Block
|
||||
final Block illegalHeightBlock = initMockBlock(1337, 256, -1337);
|
||||
assertFalse(hashChunkManager.isIneligible(illegalHeightBlock));
|
||||
Assertions.assertThrows(IndexOutOfBoundsException.class, () -> hashChunkManager.setIneligible(illegalHeightBlock));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user