Skip to content

Commit 98ecb7b

Browse files
committed
Fixed overworld cave generation with custom bottom Y and world height values
1 parent 4b9e16e commit 98ecb7b

5 files changed

Lines changed: 114 additions & 0 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package net.modificationstation.stationapi.impl.world;
2+
3+
import net.minecraft.world.World;
4+
5+
public interface CaveGenBaseImpl {
6+
void stationapi_setWorld(World world);
7+
8+
World stationapi_getWorld();
9+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package net.modificationstation.stationapi.mixin.flattening;
2+
3+
import net.minecraft.class_105;
4+
import net.minecraft.world.World;
5+
import net.modificationstation.stationapi.impl.world.CaveGenBaseImpl;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.Unique;
8+
9+
@Mixin(class_105.class)
10+
class CaveGenBaseMixin implements CaveGenBaseImpl {
11+
@Unique
12+
private World stationapi_world;
13+
14+
@Override
15+
@Unique
16+
public void stationapi_setWorld(World world) {
17+
stationapi_world = world;
18+
}
19+
20+
@Override
21+
@Unique
22+
public World stationapi_getWorld() {
23+
return stationapi_world;
24+
}
25+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package net.modificationstation.stationapi.mixin.flattening;
2+
3+
import net.minecraft.class_415;
4+
import net.modificationstation.stationapi.api.util.math.MathHelper;
5+
import net.modificationstation.stationapi.impl.world.CaveGenBaseImpl;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Constant;
9+
import org.spongepowered.asm.mixin.injection.ModifyConstant;
10+
import org.spongepowered.asm.mixin.injection.ModifyVariable;
11+
12+
@Mixin(class_415.class)
13+
abstract class CaveGenMixin implements CaveGenBaseImpl {
14+
@ModifyConstant(
15+
method = "method_1400",
16+
constant = {
17+
@Constant(intValue = 1, ordinal = 8),
18+
@Constant(intValue = 1, ordinal = 9)
19+
}
20+
)
21+
private int stationapi_changeBottomYP1Cap(int constant) {
22+
return Math.max(stationapi_getWorld().getBottomY() + 1, constant);
23+
}
24+
25+
@ModifyConstant(
26+
method = "method_1400",
27+
constant = @Constant(intValue = 120)
28+
)
29+
private int stationapi_changeTopYM8Cap(int constant) {
30+
return Math.min(stationapi_getWorld().getTopY() - 8, constant);
31+
}
32+
33+
@ModifyConstant(
34+
method = "method_1400",
35+
constant = {
36+
@Constant(intValue = 128, ordinal = 0),
37+
@Constant(intValue = 128, ordinal = 2)
38+
}
39+
)
40+
private int stationapi_changeHeight(int constant) {
41+
return MathHelper.smallestEncompassingPowerOfTwo(stationapi_getWorld().getHeight());
42+
}
43+
44+
@ModifyVariable(
45+
method = "method_1400",
46+
at = @At(value = "STORE", ordinal = 0),
47+
index = 43
48+
)
49+
private int stationapi_adjustForCustomDepth1(int value) {
50+
return value - stationapi_getWorld().getBottomY();
51+
}
52+
53+
@ModifyVariable(
54+
method = "method_1400",
55+
at = @At(value = "STORE", ordinal = 0),
56+
index = 46
57+
)
58+
private int stationapi_adjustForCustomDepth2(int value) {
59+
return value - stationapi_getWorld().getBottomY();
60+
}
61+
}

station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/OverworldChunkGeneratorMixin.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package net.modificationstation.stationapi.mixin.flattening;
22

3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
35
import com.llamalad7.mixinextras.sugar.Share;
46
import com.llamalad7.mixinextras.sugar.ref.LocalIntRef;
7+
import net.minecraft.class_415;
58
import net.minecraft.class_538;
69
import net.minecraft.world.World;
710
import net.minecraft.world.biome.Biome;
811
import net.minecraft.world.chunk.Chunk;
912
import net.modificationstation.stationapi.api.util.math.MathHelper;
13+
import net.modificationstation.stationapi.impl.world.CaveGenBaseImpl;
1014
import net.modificationstation.stationapi.impl.world.chunk.FlattenedChunk;
1115
import org.spongepowered.asm.mixin.Mixin;
1216
import org.spongepowered.asm.mixin.Shadow;
@@ -22,6 +26,19 @@ class OverworldChunkGeneratorMixin {
2226
@Shadow private World field_2260;
2327
@Shadow private double[] field_2261;
2428
@Unique private double[] densityCache;
29+
30+
@WrapOperation(
31+
method = "<init>",
32+
at = @At(
33+
value = "NEW",
34+
target = "()Lnet/minecraft/class_415;"
35+
)
36+
)
37+
private class_415 stationapi_setWorldForCaveGen(Operation<class_415> original, World world, long l) {
38+
final class_415 caveGen = original.call();
39+
((CaveGenBaseImpl) caveGen).stationapi_setWorld(world);
40+
return caveGen;
41+
}
2542

2643
@ModifyConstant(
2744
method = "method_1803",

station-flattening-v0/src/main/resources/station-flattening-v0.mixins.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
"BlockItemMixin",
88
"BlockMixin",
99
"BlockWithEntityMixin",
10+
"CaveGenBaseMixin",
11+
"CaveGenMixin",
1012
"ChunkAccessor",
1113
"ChunkCacheMixin",
1214
"ChunkMixin",

0 commit comments

Comments
 (0)