Added simple class for custom noise in SurfaceRules
This commit is contained in:
parent
28a2ce53fd
commit
46af6f07e2
5 changed files with 90 additions and 2 deletions
39
src/main/java/ru/bclib/api/biomes/SurfaceNoiseCondition.java
Normal file
39
src/main/java/ru/bclib/api/biomes/SurfaceNoiseCondition.java
Normal 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);
|
||||||
|
}
|
|
@ -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 {
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
|
@ -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
|
|
@ -38,7 +38,8 @@
|
||||||
"AnvilBlockMixin",
|
"AnvilBlockMixin",
|
||||||
"AnvilMenuMixin",
|
"AnvilMenuMixin",
|
||||||
"TagLoaderMixin",
|
"TagLoaderMixin",
|
||||||
"MainMixin"
|
"MainMixin",
|
||||||
|
"SurfaceRulesContextAccessor"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue