Skip to content

Commit 1b488e9

Browse files
5.27.5 - commit.3
- Patched SurfaceRulesContext to work on 26.2-snapshot-4
1 parent ae65473 commit 1b488e9

2 files changed

Lines changed: 42 additions & 10 deletions

File tree

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ mod_id=modernfix
77
version=5.27.5-build.2
88

99
# Minecraft/Fabric
10-
minecraft_version=26.2-snapshot-2
11-
loader_version=0.19.1
10+
minecraft_version=26.2-snapshot-4
11+
loader_version=0.19.2
1212
loom_version=1.16-SNAPSHOT
1313

1414
# Fabric API
15-
fabric_api_version=0.145.5+26.2
15+
fabric_api_version=0.146.2+26.2
1616

1717
# Dependencies
1818
mixinextras_version=0.4.1

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

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,20 @@
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;
14+
15+
// Update the file when embeddedt patches this file for 26.2 in the neoforge version to keep it conisitent with the upstream changes.
1416

1517
@Mixin(targets = {"net/minecraft/world/level/levelgen/SurfaceRules$Context"}, priority = 100)
1618
public class SurfaceRulesContextMixin {
1719
@Shadow private long lastUpdateY;
1820

21+
@Shadow private int blockX;
22+
23+
@Shadow private int blockZ;
24+
1925
@Shadow private int blockY;
2026

2127
@Shadow private int waterHeight;
@@ -24,27 +30,53 @@ public class SurfaceRulesContextMixin {
2430

2531
@Shadow private int stoneDepthAbove;
2632

27-
@Shadow private Supplier<Holder<Biome>> biome;
33+
@Shadow private Holder<Biome> biome;
2834

2935
@Shadow @Final private Function<BlockPos, Holder<Biome>> biomeGetter;
3036

3137
@Shadow @Final private BlockPos.MutableBlockPos pos;
3238

39+
@Unique
40+
private PositionalBiomeGetter modernfix$biomeCache;
41+
3342
/**
3443
* @author embeddedt
35-
* @reason Reuse supplier object instead of creating new ones every time
44+
* @reason Keep a reusable biome cache helper instead of rebuilding intermediate state
3645
*/
3746
@Overwrite
38-
public void updateY(int stoneDepthAbove, int stoneDepthBelow, int waterHeight, int blockX, int blockY, int blockZ) {
47+
protected void updateY(int stoneDepthAbove, int stoneDepthBelow, int waterHeight, int blockY) {
3948
++this.lastUpdateY;
40-
var getter = this.biome;
49+
50+
var getter = this.modernfix$biomeCache;
4151
if(getter == null) {
42-
this.biome = getter = new PositionalBiomeGetter(this.biomeGetter, this.pos);
52+
this.modernfix$biomeCache = getter = new PositionalBiomeGetter(this.biomeGetter, this.pos);
4353
}
44-
((PositionalBiomeGetter)getter).update(blockX, blockY, blockZ);
54+
55+
getter.update(this.blockX, blockY, this.blockZ);
56+
this.biome = null;
4557
this.blockY = blockY;
4658
this.waterHeight = waterHeight;
4759
this.stoneDepthBelow = stoneDepthBelow;
4860
this.stoneDepthAbove = stoneDepthAbove;
4961
}
62+
63+
/**
64+
* @author coredex
65+
* @reason Reuse a single positional getter object for biome lookups
66+
*/
67+
@Overwrite
68+
protected Holder<Biome> getBiome() {
69+
var biome = this.biome;
70+
if(biome == null) {
71+
var getter = this.modernfix$biomeCache;
72+
if(getter == null) {
73+
this.modernfix$biomeCache = getter = new PositionalBiomeGetter(this.biomeGetter, this.pos);
74+
}
75+
76+
getter.update(this.blockX, this.blockY, this.blockZ);
77+
this.biome = biome = getter.get();
78+
}
79+
80+
return biome;
81+
}
5082
}

0 commit comments

Comments
 (0)