Mor work on Codecs for Surface Rules (paulevsGitch/BetterNether#503)

This commit is contained in:
Frank 2022-01-20 18:10:15 +01:00
parent 44517e0749
commit b53ed9842d
6 changed files with 42 additions and 5 deletions

View file

@ -11,7 +11,7 @@ loader_version= 0.12.12
fabric_version = 0.44.0+1.18
# Mod Properties
mod_version = 1.2.5
mod_version = 1.3.0
maven_group = ru.bclib
archives_base_name = bclib

View file

@ -1,5 +1,6 @@
package ru.bclib.api.surface.rules;
import net.minecraft.core.Registry;
import net.minecraft.world.level.levelgen.SurfaceRules;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;

View file

@ -1,12 +1,15 @@
package ru.bclib.api.surface.rules;
import com.mojang.serialization.Codec;
import net.minecraft.core.Registry;
import net.minecraft.world.level.levelgen.SurfaceRules;
import ru.bclib.interfaces.NumericProvider;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
import ru.bclib.util.MHelper;
public record RandomIntProvider(int range) implements NumericProvider {
public static final Codec<RandomIntProvider> CODEC = Codec.INT.fieldOf("nethrangeer_noise").xmap(RandomIntProvider::new, obj -> obj.range).codec();
public static final Codec<RandomIntProvider> CODEC = Codec.INT.fieldOf("range").xmap(RandomIntProvider::new, obj -> obj.range).codec();
@Override
public int getNumber(SurfaceRulesContextAccessor context) {
return MHelper.RANDOM.nextInt(range);
@ -16,4 +19,8 @@ public record RandomIntProvider(int range) implements NumericProvider {
public Codec<? extends NumericProvider> pcodec() {
return CODEC;
}
static {
Registry.register(NumericProvider.NUMERIC_PROVIDER , "biome", RandomIntProvider.CODEC);
}
}

View file

@ -1,20 +1,35 @@
package ru.bclib.api.surface.rules;
import com.mojang.datafixers.kinds.Applicative;
import com.mojang.datafixers.kinds.K1;
import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.SurfaceRules;
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 net.minecraft.world.level.levelgen.VerticalAnchor;
import org.jetbrains.annotations.Nullable;
import ru.bclib.interfaces.NumericProvider;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
import java.util.List;
import java.util.function.Function;
//
public record SwitchRuleSource(NumericProvider selector, List<RuleSource> collection) implements RuleSource {
public static final Codec<SwitchRuleSource> CODEC = RecordCodecBuilder.create(instance -> instance.group(
NumericProvider.CODEC.fieldOf("selector").forGetter(SwitchRuleSource::selector),
RuleSource.CODEC.listOf().fieldOf("collection").forGetter(SwitchRuleSource::collection)
).apply(instance, SwitchRuleSource::new));
@Override
public Codec<? extends RuleSource> codec() {
return RuleSource.CODEC;
return SwitchRuleSource.CODEC;
}
@Override
@ -30,6 +45,9 @@ public record SwitchRuleSource(NumericProvider selector, List<RuleSource> collec
return collection.get(nr).apply(context).tryApply(x, y, z);
}
};
}
static {
Registry.register(Registry.RULE, "bclib_switch_rule", SwitchRuleSource.CODEC);
}
}

View file

@ -1,13 +1,19 @@
package ru.bclib.interfaces;
import com.mojang.serialization.Codec;
import com.mojang.serialization.Lifecycle;
import net.minecraft.core.MappedRegistry;
import net.minecraft.core.Registry;
import net.minecraft.world.level.levelgen.SurfaceRules;
import net.minecraft.resources.ResourceKey;
import ru.bclib.BCLib;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
import java.util.function.Function;
public interface NumericProvider {
ResourceKey<Registry<Codec<? extends NumericProvider>>> NUMERIC_PROVIDER_REGISTRY = ResourceKey.createRegistryKey(BCLib.makeID("worldgen/numeric_provider"));
Registry<Codec<? extends NumericProvider>> NUMERIC_PROVIDER = new MappedRegistry<>(NUMERIC_PROVIDER_REGISTRY, Lifecycle.experimental());
Codec<NumericProvider> CODEC = NUMERIC_PROVIDER.byNameCodec().dispatch(NumericProvider::pcodec, Function.identity());
int getNumber(SurfaceRulesContextAccessor context);
Codec<? extends NumericProvider> pcodec();

View file

@ -1,6 +1,7 @@
package ru.bclib.world.surface;
import com.mojang.serialization.Codec;
import net.minecraft.core.Registry;
import net.minecraft.world.level.levelgen.SurfaceRules;
import ru.bclib.api.surface.rules.SurfaceNoiseCondition;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
@ -38,4 +39,8 @@ public class DoubleBlockSurfaceNoiseCondition extends SurfaceNoiseCondition {
lastValue=value;
return value > threshold;
}
static {
Registry.register(Registry.CONDITION , "betternether_doubleblock_surface", DoubleBlockSurfaceNoiseCondition.CODEC);
}
}