Skip to content

Commit 9f4de3b

Browse files
5.27.17 - commit.3
1 parent 0f4a81e commit 9f4de3b

2 files changed

Lines changed: 38 additions & 8 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx2G
33

44
# Mod properties
55
mod_id=modernfix
6-
version=5.27.17-build.1
6+
version=5.27.17-build.2
77

88
# Minecraft/Fabric
99
minecraft_version=26.2

src/main/java/org/embeddedt/modernfix/common/mixin/perf/worldgen_allocation/SurfaceRulesContextMixin.java

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,18 @@
88
import org.spongepowered.asm.mixin.Mixin;
99
import org.spongepowered.asm.mixin.Overwrite;
1010
import org.spongepowered.asm.mixin.Shadow;
11+
import org.spongepowered.asm.mixin.Unique;
1112

1213
import java.util.function.Function;
13-
import java.util.function.Supplier;
1414

1515
@Mixin(targets = {"net/minecraft/world/level/levelgen/SurfaceRules$Context"}, priority = 100)
1616
public class SurfaceRulesContextMixin {
1717
@Shadow private long lastUpdateY;
1818

19+
@Shadow private int blockX;
20+
21+
@Shadow private int blockZ;
22+
1923
@Shadow private int blockY;
2024

2125
@Shadow private int waterHeight;
@@ -24,27 +28,53 @@ public class SurfaceRulesContextMixin {
2428

2529
@Shadow private int stoneDepthAbove;
2630

27-
@Shadow private Supplier<Holder<Biome>> biome;
31+
@Shadow private Holder<Biome> biome;
2832

2933
@Shadow @Final private Function<BlockPos, Holder<Biome>> biomeGetter;
3034

3135
@Shadow @Final private BlockPos.MutableBlockPos pos;
3236

37+
@Unique
38+
private PositionalBiomeGetter modernfix$biomeCache;
39+
3340
/**
3441
* @author embeddedt
3542
* @reason Reuse supplier object instead of creating new ones every time
3643
*/
3744
@Overwrite
38-
public void updateY(int stoneDepthAbove, int stoneDepthBelow, int waterHeight, int blockX, int blockY, int blockZ) {
45+
protected void updateY(int stoneDepthAbove, int stoneDepthBelow, int waterHeight, int blockY) {
3946
++this.lastUpdateY;
40-
var getter = this.biome;
47+
48+
var getter = this.modernfix$biomeCache;
4149
if(getter == null) {
42-
this.biome = getter = new PositionalBiomeGetter(this.biomeGetter, this.pos);
50+
this.modernfix$biomeCache = getter = new PositionalBiomeGetter(this.biomeGetter, this.pos);
4351
}
44-
((PositionalBiomeGetter)getter).update(blockX, blockY, blockZ);
52+
53+
getter.update(this.blockX, blockY, this.blockZ);
54+
this.biome = null;
4555
this.blockY = blockY;
4656
this.waterHeight = waterHeight;
4757
this.stoneDepthBelow = stoneDepthBelow;
4858
this.stoneDepthAbove = stoneDepthAbove;
4959
}
50-
}
60+
61+
/**
62+
* @author coredex-source
63+
* @reason Reuse a single positional getter object for biome lookups
64+
*/
65+
@Overwrite
66+
protected Holder<Biome> getBiome() {
67+
var biome = this.biome;
68+
if(biome == null) {
69+
var getter = this.modernfix$biomeCache;
70+
if(getter == null) {
71+
this.modernfix$biomeCache = getter = new PositionalBiomeGetter(this.biomeGetter, this.pos);
72+
}
73+
74+
getter.update(this.blockX, this.blockY, this.blockZ);
75+
this.biome = biome = getter.get();
76+
}
77+
78+
return biome;
79+
}
80+
}

0 commit comments

Comments
 (0)