Some changes to surface processing
This commit is contained in:
parent
4c41bb1764
commit
7f5e27397c
3 changed files with 67 additions and 3 deletions
|
@ -27,6 +27,7 @@ import net.minecraft.world.level.levelgen.GenerationStep;
|
|||
import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
|
||||
import net.minecraft.world.level.levelgen.Noises;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules.SequenceRuleSource;
|
||||
import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
|
||||
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
|
||||
|
@ -568,11 +569,24 @@ public class BCLBiomeBuilder {
|
|||
|
||||
/**
|
||||
* Adds surface rule to this biome.
|
||||
* @param surfaceRule {link SurfaceRules.RuleSource} surface rule.
|
||||
* @param newSurfaceRule {link SurfaceRules.RuleSource} surface rule.
|
||||
* @return same {@link BCLBiomeBuilder} instance.
|
||||
*/
|
||||
public BCLBiomeBuilder surface(SurfaceRules.RuleSource surfaceRule) {
|
||||
this.surfaceRule = surfaceRule;
|
||||
public BCLBiomeBuilder surface(SurfaceRules.RuleSource newSurfaceRule) {
|
||||
if (this.surfaceRule==null) {
|
||||
this.surfaceRule = newSurfaceRule;
|
||||
} else {
|
||||
this.surfaceRule = SurfaceRules.sequence(this.surfaceRule, newSurfaceRule);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* clear all surface rules
|
||||
* @return same {@link BCLBiomeBuilder} instance.
|
||||
*/
|
||||
public BCLBiomeBuilder clearSurface() {
|
||||
this.surfaceRule = null;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
package ru.bclib.api.surface.rules;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules.Condition;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules.ConditionSource;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules.Context;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules.LazyCondition;
|
||||
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
|
||||
|
||||
public abstract class VolumeNoiseCondition implements SurfaceRules.ConditionSource{
|
||||
@Override
|
||||
public Codec<? extends ConditionSource> codec() {
|
||||
return SurfaceRules.ConditionSource.CODEC;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Condition apply(Context context2) {
|
||||
final VolumeNoiseCondition self = this;
|
||||
|
||||
class Generator extends LazyCondition {
|
||||
Generator() {
|
||||
super(context2);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected long getContextLastUpdate() {
|
||||
final SurfaceRulesContextAccessor ctx = SurfaceRulesContextAccessor.class.cast(this.context);
|
||||
return ctx.getLastUpdateY() + ctx.getLastUpdateXZ();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean compute() {
|
||||
final SurfaceRulesContextAccessor context = SurfaceRulesContextAccessor.class.cast(this.context);
|
||||
if (context==null) return false;
|
||||
return self.test(context);
|
||||
}
|
||||
}
|
||||
|
||||
return new Generator();
|
||||
}
|
||||
|
||||
public abstract boolean test(SurfaceRulesContextAccessor context);
|
||||
}
|
|
@ -41,4 +41,10 @@ public interface SurfaceRulesContextAccessor {
|
|||
|
||||
@Accessor("stoneDepthBelow")
|
||||
int getStoneDepthBelow();
|
||||
|
||||
@Accessor("lastUpdateY")
|
||||
long getLastUpdateY();
|
||||
|
||||
@Accessor("lastUpdateXZ")
|
||||
long getLastUpdateXZ();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue