diff --git a/common/src/main/java/dev/worldgen/lithostitched/worldgen/modifier/AddSurfaceRuleModifier.java b/common/src/main/java/dev/worldgen/lithostitched/worldgen/modifier/AddSurfaceRuleModifier.java index 709d95d..56d525b 100644 --- a/common/src/main/java/dev/worldgen/lithostitched/worldgen/modifier/AddSurfaceRuleModifier.java +++ b/common/src/main/java/dev/worldgen/lithostitched/worldgen/modifier/AddSurfaceRuleModifier.java @@ -1,5 +1,6 @@ package dev.worldgen.lithostitched.worldgen.modifier; +import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.registries.Registries; @@ -15,10 +16,11 @@ * * @author Apollo */ -public record AddSurfaceRuleModifier(List> levels, SurfaceRules.RuleSource surfaceRule) implements Modifier { +public record AddSurfaceRuleModifier(List> levels, SurfaceRules.RuleSource surfaceRule, int priority) implements Modifier { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( ResourceKey.codec(Registries.LEVEL_STEM).listOf().fieldOf("levels").forGetter(AddSurfaceRuleModifier::levels), - SurfaceRules.RuleSource.CODEC.fieldOf("surface_rule").forGetter(AddSurfaceRuleModifier::surfaceRule) + SurfaceRules.RuleSource.CODEC.fieldOf("surface_rule").forGetter(AddSurfaceRuleModifier::surfaceRule), + Codec.INT.fieldOf("priority").orElse(0).forGetter(AddSurfaceRuleModifier::priority) ).apply(instance, AddSurfaceRuleModifier::new)); @Override diff --git a/common/src/main/java/dev/worldgen/lithostitched/worldgen/surface/SurfaceRuleManager.java b/common/src/main/java/dev/worldgen/lithostitched/worldgen/surface/SurfaceRuleManager.java index 6b504b3..9adfdce 100644 --- a/common/src/main/java/dev/worldgen/lithostitched/worldgen/surface/SurfaceRuleManager.java +++ b/common/src/main/java/dev/worldgen/lithostitched/worldgen/surface/SurfaceRuleManager.java @@ -17,10 +17,7 @@ import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.SurfaceRules; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -78,6 +75,8 @@ public static void applySurfaceRules(MinecraftServer server) { private static SurfaceRules.RuleSource buildModdedSurfaceRules(ArrayList> moddedSourceList, SurfaceRules.RuleSource originalSource) { // TODO: Implement caching List newRuleSourceList = new ArrayList<>(); + Comparator> comp = Comparator.comparingInt(pair -> pair.getSecond().priority()); + moddedSourceList.sort(comp.reversed()); moddedSourceList.forEach((pair) -> newRuleSourceList.add(pair.getSecond().surfaceRule())); newRuleSourceList.add(originalSource);