Added simple class for custom noise in SurfaceRules

This commit is contained in:
Frank 2021-12-08 19:49:55 +01:00
parent 28a2ce53fd
commit 46af6f07e2
5 changed files with 90 additions and 2 deletions

View file

@ -0,0 +1,39 @@
package ru.bclib.api.biomes;
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.LazyXZCondition;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
public abstract class SurfaceNoiseCondition implements SurfaceRules.ConditionSource{
@Override
public Codec<? extends ConditionSource> codec() {
return SurfaceRules.ConditionSource.CODEC;
}
@Override
public final Condition apply(Context context2) {
final SurfaceNoiseCondition self = this;
class Generator extends LazyXZCondition {
Generator() {
super(context2);
}
@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);
}

View file

@ -2,16 +2,24 @@ package ru.bclib.api.biomes;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.levelgen.NoiseChunk;
import net.minecraft.world.level.levelgen.SurfaceRules; import net.minecraft.world.level.levelgen.SurfaceRules;
import net.minecraft.world.level.levelgen.SurfaceRules.Condition;
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource; import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
import net.minecraft.world.level.levelgen.SurfaceSystem;
import net.minecraft.world.level.levelgen.WorldGenerationContext;
import net.minecraft.world.level.levelgen.placement.CaveSurface; import net.minecraft.world.level.levelgen.placement.CaveSurface;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
public class SurfaceRuleBuilder { public class SurfaceRuleBuilder {

View file

@ -0,0 +1,38 @@
package ru.bclib.mixin.common;
import java.util.function.Supplier;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.levelgen.NoiseChunk;
import net.minecraft.world.level.levelgen.SurfaceRules;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(SurfaceRules.Context.class)
public interface SurfaceRulesContextAccessor {
@Accessor("blockX")
int getBlockX();
@Accessor("blockY")
int getBlockY();
@Accessor("blockZ")
int getBlockZ();
@Accessor("surfaceDepth")
int getSurfaceDepth();
@Accessor("biome")
Supplier<Biome> getBiome();
@Accessor("biomeKey")
Supplier<ResourceKey<Biome>> getBiomeKey();
@Accessor("chunk")
ChunkAccess getChunk();
@Accessor("noiseChunk")
NoiseChunk getNoiseChunk();
}

View file

@ -3,4 +3,6 @@ accessWidener v1 named
# Classes # Classes
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$LazyXZCondition
accessible class net/minecraft/world/level/levelgen/SurfaceRules$LazyCondition

View file

@ -38,7 +38,8 @@
"AnvilBlockMixin", "AnvilBlockMixin",
"AnvilMenuMixin", "AnvilMenuMixin",
"TagLoaderMixin", "TagLoaderMixin",
"MainMixin" "MainMixin",
"SurfaceRulesContextAccessor"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1