Skip to content

Commit 57240b8

Browse files
committed
Fixed grass surface generation with custom bottom Y
1 parent 84783dc commit 57240b8

2 files changed

Lines changed: 39 additions & 8 deletions

File tree

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

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.modificationstation.stationapi.mixin.flattening;
22

3+
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
34
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
45
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
56
import com.llamalad7.mixinextras.sugar.Share;
@@ -21,7 +22,7 @@
2122
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
2223
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
2324

24-
@Mixin(class_538.class)
25+
@Mixin(value = class_538.class, priority = 4000)
2526
class OverworldChunkGeneratorMixin {
2627
@Shadow private World field_2260;
2728
@Shadow private double[] field_2261;
@@ -167,7 +168,26 @@ private int stationapi_changeFillStep(int original, @Share("height") LocalIntRef
167168

168169
@Inject(method = "method_1797", at = @At("HEAD"))
169170
private void stationapi_initLocals(int j, int bs, byte[] args, Biome[] par4, CallbackInfo ci, @Share("vertical2") LocalIntRef vertical2) {
170-
vertical2.set(1 << MathHelper.ceilLog2(field_2260.getHeight()));
171+
vertical2.set(MathHelper.smallestEncompassingPowerOfTwo(field_2260.getHeight()));
172+
}
173+
174+
@ModifyExpressionValue(
175+
method = "method_1797",
176+
at = @At(
177+
value = "CONSTANT",
178+
args = "intValue=127"
179+
)
180+
)
181+
private int stationapi_changeTopYM1(int constant) {
182+
return field_2260.getTopY() - 1;
183+
}
184+
185+
@ModifyConstant(
186+
method = "method_1797",
187+
constant = @Constant(expandZeroConditions = Constant.Condition.LESS_THAN_ZERO)
188+
)
189+
private int stationapi_changeBottomY(int constant) {
190+
return field_2260.getBottomY();
171191
}
172192

173193
@ModifyConstant(
@@ -177,6 +197,15 @@ private void stationapi_initLocals(int j, int bs, byte[] args, Biome[] par4, Cal
177197
private int stationapi_changeFillStep2(int original, @Share("vertical2") LocalIntRef vertical2) {
178198
return vertical2.get();
179199
}
200+
201+
@ModifyVariable(
202+
method = "method_1797",
203+
at = @At("STORE"),
204+
index = 18
205+
)
206+
private int stationapi_adjustForDepth(int value) {
207+
return value - field_2260.getBottomY();
208+
}
180209

181210
@ModifyConstant(
182211
method = "method_1798",

station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/mixin/worldgen/OverworldWorldSourceMixin.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.modificationstation.stationapi.mixin.worldgen;
22

3+
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
34
import com.llamalad7.mixinextras.sugar.Local;
45
import net.minecraft.block.SandBlock;
56
import net.minecraft.class_51;
@@ -12,12 +13,10 @@
1213
import org.spongepowered.asm.mixin.Shadow;
1314
import org.spongepowered.asm.mixin.injection.At;
1415
import org.spongepowered.asm.mixin.injection.At.Shift;
15-
import org.spongepowered.asm.mixin.injection.Constant;
1616
import org.spongepowered.asm.mixin.injection.Inject;
17-
import org.spongepowered.asm.mixin.injection.ModifyConstant;
1817
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1918

20-
@Mixin(class_538.class)
19+
@Mixin(value = class_538.class, priority = 2000)
2120
class OverworldWorldSourceMixin {
2221
@Shadow
2322
private World field_2260;
@@ -44,12 +43,15 @@ private void stationapi_cancelFeatureGeneration(class_51 source, int cx, int cz,
4443
}
4544
}
4645

47-
@ModifyConstant(
46+
@ModifyExpressionValue(
4847
method = "method_1797",
49-
constant = @Constant(intValue = 127)
48+
at = @At(
49+
value = "CONSTANT",
50+
args = "intValue=127"
51+
)
5052
)
5153
private int stationapi_cancelSurfaceMaking(int constant, @Local Biome biome) {
52-
return biome.noSurfaceRules() ? field_2260.getTopY() - 1 : -1;
54+
return biome.noSurfaceRules() ? constant : Integer.MIN_VALUE;
5355
}
5456

5557
@Inject(

0 commit comments

Comments
 (0)