mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-19 14:59:32 +00:00
56 lines
3.2 KiB
Diff
56 lines
3.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: violetc <58360096+s-yh-china@users.noreply.github.com>
|
|
Date: Mon, 15 Aug 2022 08:23:51 +0800
|
|
Subject: [PATCH] Use thread unsafe random for mob spawning
|
|
|
|
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
|
|
index 01b21f520ef1c834b9bafc3de85c1fa4fcf539d6..1a239af1c3fc254927979752d2ee18e780d17dab 100644
|
|
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
|
|
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
|
|
@@ -419,12 +419,21 @@ public final class NaturalSpawner {
|
|
|
|
private static BlockPos getRandomPosWithin(Level world, LevelChunk chunk) {
|
|
ChunkPos chunkcoordintpair = chunk.getPos();
|
|
- int i = chunkcoordintpair.getMinBlockX() + world.random.nextInt(16);
|
|
- int j = chunkcoordintpair.getMinBlockZ() + world.random.nextInt(16);
|
|
- int k = chunk.getHeight(Heightmap.Types.WORLD_SURFACE, i, j) + 1;
|
|
- int l = Mth.randomBetweenInclusive(world.random, world.getMinBuildHeight(), k);
|
|
-
|
|
- return new BlockPos(i, l, j);
|
|
+ // Leaves start - use thread unsafe random
|
|
+ if (top.leavesmc.leaves.LeavesConfig.useMoreThreadUnsafeRandom) {
|
|
+ int i = chunkcoordintpair.getMinBlockX() + world.getThreadUnsafeRandom().nextInt(16);
|
|
+ int j = chunkcoordintpair.getMinBlockZ() + world.getThreadUnsafeRandom().nextInt(16);
|
|
+ int k = chunk.getHeight(Heightmap.Types.WORLD_SURFACE, i, j) + 1;
|
|
+ int l = Mth.randomBetweenInclusive(world.getThreadUnsafeRandom(), world.getMinBuildHeight(), k);
|
|
+ return new BlockPos(i, l, j);
|
|
+ } else {
|
|
+ int i = chunkcoordintpair.getMinBlockX() + world.random.nextInt(16);
|
|
+ int j = chunkcoordintpair.getMinBlockZ() + world.random.nextInt(16);
|
|
+ int k = chunk.getHeight(Heightmap.Types.WORLD_SURFACE, i, j) + 1;
|
|
+ int l = Mth.randomBetweenInclusive(world.random, world.getMinBuildHeight(), k);
|
|
+ return new BlockPos(i, l, j);
|
|
+ }
|
|
+ // Leaves end - use thread unsafe random
|
|
}
|
|
|
|
public static boolean isValidEmptySpawnBlock(BlockGetter blockView, BlockPos pos, BlockState state, FluidState fluidState, EntityType<?> entityType) {
|
|
diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java
|
|
index 3e06ad7a31d6f35a55f8c2e6b9d2a666618168ab..4f5717d181c591b03cf78694a95e64be982517d8 100644
|
|
--- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java
|
|
+++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java
|
|
@@ -295,6 +295,11 @@ public final class LeavesConfig {
|
|
entityTargetFindingOptimization = getBoolean("settings.performance.entity-target-find-optimization", entityTargetFindingOptimization);
|
|
}
|
|
|
|
+ public static boolean useMoreThreadUnsafeRandom = true;
|
|
+ private static void useMoreThreadUnsafeRandom() {
|
|
+ useMoreThreadUnsafeRandom = getBoolean("settings.performance.use-more-thread-unsafe-random", useMoreThreadUnsafeRandom);
|
|
+ }
|
|
+
|
|
public static final class WorldConfig {
|
|
|
|
public final String worldName;
|