Mor work on Codecs for Surface Rules (paulevsGitch/BetterNether#503)
This commit is contained in:
parent
44517e0749
commit
b53ed9842d
6 changed files with 42 additions and 5 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue