New Switch Int-State for SurfaceRules

This commit is contained in:
Frank 2021-12-13 18:14:23 +01:00
parent 835f4895b3
commit 4c41bb1764
10 changed files with 67 additions and 5 deletions

View file

@ -30,6 +30,7 @@ import net.minecraft.world.level.levelgen.SurfaceRules;
import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver;
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
import net.minecraft.world.level.levelgen.placement.PlacedFeature; import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import ru.bclib.api.surface.SurfaceRuleBuilder;
import ru.bclib.entity.BCLEntityWrapper; import ru.bclib.entity.BCLEntityWrapper;
import ru.bclib.util.ColorUtil; import ru.bclib.util.ColorUtil;
import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.biomes.BCLBiome;

View file

@ -1,4 +1,4 @@
package ru.bclib.api.biomes; package ru.bclib.api.surface;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
@ -8,6 +8,7 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.SurfaceRules; import net.minecraft.world.level.levelgen.SurfaceRules;
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource; import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
import net.minecraft.world.level.levelgen.placement.CaveSurface; import net.minecraft.world.level.levelgen.placement.CaveSurface;
import ru.bclib.api.biomes.BiomeAPI;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package ru.bclib.api.biomes; package ru.bclib.api.surface;
import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.Mob;
import net.minecraft.world.level.levelgen.SurfaceRules; import net.minecraft.world.level.levelgen.SurfaceRules;

View file

@ -0,0 +1,12 @@
package ru.bclib.api.surface.rules;
import ru.bclib.interfaces.NumericProvider;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
import ru.bclib.util.MHelper;
public record RandomIntProvider(int range) implements NumericProvider {
@Override
public int getNumber(SurfaceRulesContextAccessor context) {
return MHelper.RANDOM.nextInt(range);
}
}

View file

@ -1,4 +1,4 @@
package ru.bclib.api.biomes; package ru.bclib.api.surface.rules;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import net.minecraft.world.level.levelgen.SurfaceRules; import net.minecraft.world.level.levelgen.SurfaceRules;
@ -8,7 +8,6 @@ import net.minecraft.world.level.levelgen.SurfaceRules.Context;
import net.minecraft.world.level.levelgen.SurfaceRules.LazyXZCondition; import net.minecraft.world.level.levelgen.SurfaceRules.LazyXZCondition;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
public abstract class SurfaceNoiseCondition implements SurfaceRules.ConditionSource{ public abstract class SurfaceNoiseCondition implements SurfaceRules.ConditionSource{
@Override @Override
public Codec<? extends ConditionSource> codec() { public Codec<? extends ConditionSource> codec() {

View file

@ -0,0 +1,35 @@
package ru.bclib.api.surface.rules;
import com.mojang.serialization.Codec;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.SurfaceRules.Context;
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
import net.minecraft.world.level.levelgen.SurfaceRules.SurfaceRule;
import org.jetbrains.annotations.Nullable;
import ru.bclib.interfaces.NumericProvider;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
import java.util.List;
public record SwitchRuleSource(NumericProvider selector, List<RuleSource> collection) implements RuleSource {
@Override
public Codec<? extends RuleSource> codec() {
return RuleSource.CODEC;
}
@Override
public SurfaceRule apply(Context context) {
return new SurfaceRule() {
@Nullable
@Override
public BlockState tryApply(int x, int y, int z) {
final SurfaceRulesContextAccessor ctx = SurfaceRulesContextAccessor.class.cast(context);
int nr = Math.max(0, selector.getNumber(ctx)) % collection.size();
return collection.get(nr).apply(context).tryApply(x, y, z);
}
};
}
}

View file

@ -0,0 +1,7 @@
package ru.bclib.interfaces;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
public interface NumericProvider {
int getNumber(SurfaceRulesContextAccessor context);
}

View file

@ -35,4 +35,10 @@ public interface SurfaceRulesContextAccessor {
@Accessor("noiseChunk") @Accessor("noiseChunk")
NoiseChunk getNoiseChunk(); NoiseChunk getNoiseChunk();
@Accessor("stoneDepthAbove")
int getStoneDepthAbove();
@Accessor("stoneDepthBelow")
int getStoneDepthBelow();
} }

View file

@ -1,6 +1,6 @@
package ru.bclib.world.surface; package ru.bclib.world.surface;
import ru.bclib.api.biomes.SurfaceNoiseCondition; import ru.bclib.api.surface.rules.SurfaceNoiseCondition;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
import ru.bclib.noise.OpenSimplexNoise; import ru.bclib.noise.OpenSimplexNoise;
import ru.bclib.util.MHelper; import ru.bclib.util.MHelper;

View file

@ -4,6 +4,7 @@ accessWidener v1 named
accessible class net/minecraft/client/Minecraft$ExperimentalDialogType accessible class net/minecraft/client/Minecraft$ExperimentalDialogType
accessible class net/minecraft/world/level/levelgen/SurfaceRules$Context accessible class net/minecraft/world/level/levelgen/SurfaceRules$Context
accessible class net/minecraft/world/level/levelgen/SurfaceRules$Condition accessible class net/minecraft/world/level/levelgen/SurfaceRules$Condition
accessible class net/minecraft/world/level/levelgen/SurfaceRules$SurfaceRule
accessible class net/minecraft/world/level/levelgen/SurfaceRules$LazyXZCondition accessible class net/minecraft/world/level/levelgen/SurfaceRules$LazyXZCondition
accessible class net/minecraft/world/level/levelgen/SurfaceRules$LazyCondition accessible class net/minecraft/world/level/levelgen/SurfaceRules$LazyCondition
accessible class net/minecraft/world/level/levelgen/SurfaceRules$SequenceRuleSource accessible class net/minecraft/world/level/levelgen/SurfaceRules$SequenceRuleSource