New Switch Int-State for SurfaceRules
This commit is contained in:
parent
835f4895b3
commit
4c41bb1764
10 changed files with 67 additions and 5 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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() {
|
|
@ -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);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
7
src/main/java/ru/bclib/interfaces/NumericProvider.java
Normal file
7
src/main/java/ru/bclib/interfaces/NumericProvider.java
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
package ru.bclib.interfaces;
|
||||||
|
|
||||||
|
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
|
||||||
|
|
||||||
|
public interface NumericProvider {
|
||||||
|
int getNumber(SurfaceRulesContextAccessor context);
|
||||||
|
}
|
|
@ -35,4 +35,10 @@ public interface SurfaceRulesContextAccessor {
|
||||||
|
|
||||||
@Accessor("noiseChunk")
|
@Accessor("noiseChunk")
|
||||||
NoiseChunk getNoiseChunk();
|
NoiseChunk getNoiseChunk();
|
||||||
|
|
||||||
|
@Accessor("stoneDepthAbove")
|
||||||
|
int getStoneDepthAbove();
|
||||||
|
|
||||||
|
@Accessor("stoneDepthBelow")
|
||||||
|
int getStoneDepthBelow();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue