9
0
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:
hayanesuru
2025-11-25 05:32:16 +09:00
committed by GitHub
parent 8184323544
commit fbfec233ce
2 changed files with 56 additions and 19 deletions

View File

@@ -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
}
}
}

View File

@@ -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;
}