mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-27 02:49:19 +00:00
don't load chunks to spread grass (#540)
* Pluto: don't load chunks to spread grass * block pos
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: hayanesuru <hayanesuru@outlook.jp>
|
||||
Date: Sat, 9 Aug 2025 15:39:09 +0900
|
||||
Subject: [PATCH] Pluto: don't load chunks to spread grass
|
||||
|
||||
Original license: GPL-3.0
|
||||
Original project: https://github.com/Yive/Pluto
|
||||
|
||||
diff --git a/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java b/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java
|
||||
index f8cc3f870d88715386bb4de0da81a74fa04fd216..075b520b8dbdb5ef29d4acea9f027718aa578d35 100644
|
||||
--- a/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java
|
||||
+++ b/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java
|
||||
@@ -52,7 +52,7 @@ public abstract class SpreadingSnowyDirtBlock extends SnowyDirtBlock {
|
||||
protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
||||
if (this instanceof GrassBlock && level.paperConfig().tickRates.grassSpread != 1 && (level.paperConfig().tickRates.grassSpread < 1 || (net.minecraft.server.MinecraftServer.currentTick + pos.hashCode()) % level.paperConfig().tickRates.grassSpread != 0)) { return; } // Paper - Configurable random tick rates for blocks
|
||||
// Paper start - Perf: optimize dirt and snow spreading
|
||||
- final net.minecraft.world.level.chunk.ChunkAccess cachedBlockChunk = level.getChunkIfLoaded(pos);
|
||||
+ final net.minecraft.world.level.chunk.LevelChunk cachedBlockChunk = level.getChunkAtIfLoadedUnchecked(pos.getX() >> 4, pos.getZ() >> 4); // Leaf - optimize get chunk
|
||||
if (cachedBlockChunk == null) { // Is this needed?
|
||||
return;
|
||||
}
|
||||
@@ -71,21 +71,29 @@ public abstract class SpreadingSnowyDirtBlock extends SnowyDirtBlock {
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
BlockPos blockPos = pos.offset(random.nextInt(3) - 1, random.nextInt(5) - 3, random.nextInt(3) - 1);
|
||||
+ // Pluto start - don't load chunks to spread grass
|
||||
// Paper start - Perf: optimize dirt and snow spreading
|
||||
if (pos.getX() == blockPos.getX() && pos.getY() == blockPos.getY() && pos.getZ() == blockPos.getZ()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
- final net.minecraft.world.level.chunk.ChunkAccess access;
|
||||
- if (cachedBlockChunk.locX == blockPos.getX() >> 4 && cachedBlockChunk.locZ == blockPos.getZ() >> 4) {
|
||||
+ int x = blockPos.getX();
|
||||
+ int y = blockPos.getY();
|
||||
+ int z = blockPos.getZ();
|
||||
+ final net.minecraft.world.level.chunk.LevelChunk access;
|
||||
+ if (cachedBlockChunk.locX == x >> 4 && cachedBlockChunk.locZ == z >> 4) {
|
||||
access = cachedBlockChunk;
|
||||
} else {
|
||||
- access = level.getChunkAt(blockPos);
|
||||
+ access = level.getChunkAtIfLoadedUnchecked(x >> 4, z >> 4);
|
||||
+ if (access == null) {
|
||||
+ continue;
|
||||
+ }
|
||||
}
|
||||
- if (access.getBlockState(blockPos).is(Blocks.DIRT) && SpreadingSnowyDirtBlock.canPropagate(access, blockState, level, blockPos)) {
|
||||
- org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockSpreadEvent(level, pos, blockPos, blockState.setValue(SNOWY, isSnowySetting(access.getBlockState(blockPos.above()))), 3); // CraftBukkit
|
||||
+ if (access.getBlockStateFinal(x, y, z).is(Blocks.DIRT) && SpreadingSnowyDirtBlock.canPropagate(access, blockState, level, blockPos)) {
|
||||
+ org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockSpreadEvent(level, pos, blockPos, blockState.setValue(SNOWY, isSnowySetting(access.getBlockStateFinal(x, y + 1, z))), 3); // CraftBukkit
|
||||
// Paper end - Perf: optimize dirt and snow spreading
|
||||
}
|
||||
+ // Pluto end - don't load chunks to spread grass
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: hayanesuru <hayanesuru@outlook.jp>
|
||||
Date: Sat, 9 Aug 2025 15:39:09 +0900
|
||||
Subject: [PATCH] optimize SpreadingSnowyDirtBlock#randomTick
|
||||
|
||||
|
||||
diff --git a/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java b/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java
|
||||
index f8cc3f870d88715386bb4de0da81a74fa04fd216..07eb777ac9657318831b5bf00e4a4c9e8aca76db 100644
|
||||
--- a/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java
|
||||
+++ b/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java
|
||||
@@ -52,7 +52,7 @@ public abstract class SpreadingSnowyDirtBlock extends SnowyDirtBlock {
|
||||
protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
||||
if (this instanceof GrassBlock && level.paperConfig().tickRates.grassSpread != 1 && (level.paperConfig().tickRates.grassSpread < 1 || (net.minecraft.server.MinecraftServer.currentTick + pos.hashCode()) % level.paperConfig().tickRates.grassSpread != 0)) { return; } // Paper - Configurable random tick rates for blocks
|
||||
// Paper start - Perf: optimize dirt and snow spreading
|
||||
- final net.minecraft.world.level.chunk.ChunkAccess cachedBlockChunk = level.getChunkIfLoaded(pos);
|
||||
+ final net.minecraft.world.level.chunk.ChunkAccess cachedBlockChunk = level.getChunkAtIfLoadedUnchecked(pos.getX() >> 4, pos.getZ() >> 4); // Leaf - optimize get chunk
|
||||
if (cachedBlockChunk == null) { // Is this needed?
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user