[Fix] Default world gen did not use our Surface Rules when Terrablender is present (#103)
This commit is contained in:
parent
7aadf42741
commit
c59e482108
3 changed files with 17 additions and 19 deletions
|
@ -12,14 +12,14 @@ import org.spongepowered.asm.mixin.Mutable;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
|
||||||
@Mixin(NoiseGeneratorSettings.class)
|
@Mixin(NoiseGeneratorSettings.class)
|
||||||
public class NoiseGeneratorSettingsMixin implements SurfaceRuleProvider {
|
public abstract class NoiseGeneratorSettingsMixin implements SurfaceRuleProvider {
|
||||||
@Mutable
|
@Mutable
|
||||||
@Final
|
@Final
|
||||||
@Shadow
|
@Shadow
|
||||||
private SurfaceRules.RuleSource surfaceRule;
|
private SurfaceRules.RuleSource surfaceRule;
|
||||||
|
|
||||||
public void bclib_overwrite(SurfaceRules.RuleSource surfaceRule) {
|
public void bclib_overwriteSurfaceRules(SurfaceRules.RuleSource surfaceRule) {
|
||||||
if (surfaceRule == this.surfaceRule) return;
|
if (surfaceRule == null || surfaceRule == this.surfaceRule) return;
|
||||||
if (this.bcl_containsOverride) {
|
if (this.bcl_containsOverride) {
|
||||||
WorldsTogether.LOGGER.warning("Overwriting an overwritten set of Surface Rules.");
|
WorldsTogether.LOGGER.warning("Overwriting an overwritten set of Surface Rules.");
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,10 @@ public class NoiseGeneratorSettingsMixin implements SurfaceRuleProvider {
|
||||||
this.surfaceRule = surfaceRule;
|
this.surfaceRule = surfaceRule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SurfaceRules.RuleSource bclib_getOriginalSurfaceRules() {
|
||||||
|
return this.surfaceRule;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean bcl_containsOverride = false;
|
private boolean bcl_containsOverride = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,5 +3,6 @@ package org.betterx.worlds.together.surfaceRules;
|
||||||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||||
|
|
||||||
public interface SurfaceRuleProvider {
|
public interface SurfaceRuleProvider {
|
||||||
void bclib_overwrite(SurfaceRules.RuleSource surfaceRule);
|
void bclib_overwriteSurfaceRules(SurfaceRules.RuleSource surfaceRule);
|
||||||
|
SurfaceRules.RuleSource bclib_getOriginalSurfaceRules();
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,23 +49,12 @@ public class SurfaceRuleUtil {
|
||||||
.collect(Collectors.toCollection(LinkedList::new));
|
.collect(Collectors.toCollection(LinkedList::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SurfaceRules.RuleSource mergeSurfaceRulesFromBiomes(
|
|
||||||
SurfaceRules.RuleSource org,
|
|
||||||
BiomeSource source
|
|
||||||
) {
|
|
||||||
return mergeSurfaceRules(
|
|
||||||
org,
|
|
||||||
source,
|
|
||||||
getRulesForBiomes(source.possibleBiomes().stream().map(h -> h.value()).toList())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static SurfaceRules.RuleSource mergeSurfaceRules(
|
private static SurfaceRules.RuleSource mergeSurfaceRules(
|
||||||
SurfaceRules.RuleSource org,
|
SurfaceRules.RuleSource org,
|
||||||
BiomeSource source,
|
BiomeSource source,
|
||||||
List<SurfaceRules.RuleSource> additionalRules
|
List<SurfaceRules.RuleSource> additionalRules
|
||||||
) {
|
) {
|
||||||
if (additionalRules == null || additionalRules.isEmpty()) return org;
|
if (additionalRules == null || additionalRules.isEmpty()) return null;
|
||||||
final int count = additionalRules.size();
|
final int count = additionalRules.size();
|
||||||
if (org instanceof SurfaceRules.SequenceRuleSource sequenceRule) {
|
if (org instanceof SurfaceRules.SequenceRuleSource sequenceRule) {
|
||||||
List<SurfaceRules.RuleSource> existingSequence = sequenceRule.sequence();
|
List<SurfaceRules.RuleSource> existingSequence = sequenceRule.sequence();
|
||||||
|
@ -73,7 +62,7 @@ public class SurfaceRuleUtil {
|
||||||
.stream()
|
.stream()
|
||||||
.filter(r -> existingSequence.indexOf(r) < 0)
|
.filter(r -> existingSequence.indexOf(r) < 0)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
if (additionalRules.size() == 0) return org;
|
if (additionalRules.size() == 0) return null;
|
||||||
additionalRules.addAll(existingSequence);
|
additionalRules.addAll(existingSequence);
|
||||||
} else {
|
} else {
|
||||||
if (!additionalRules.contains(org))
|
if (!additionalRules.contains(org))
|
||||||
|
@ -88,8 +77,12 @@ public class SurfaceRuleUtil {
|
||||||
|
|
||||||
public static void injectSurfaceRules(NoiseGeneratorSettings noiseSettings, BiomeSource loadedBiomeSource) {
|
public static void injectSurfaceRules(NoiseGeneratorSettings noiseSettings, BiomeSource loadedBiomeSource) {
|
||||||
if (((Object) noiseSettings) instanceof SurfaceRuleProvider srp) {
|
if (((Object) noiseSettings) instanceof SurfaceRuleProvider srp) {
|
||||||
SurfaceRules.RuleSource originalRules = noiseSettings.surfaceRule();
|
SurfaceRules.RuleSource originalRules = srp.bclib_getOriginalSurfaceRules();
|
||||||
srp.bclib_overwrite(mergeSurfaceRulesFromBiomes(originalRules, loadedBiomeSource));
|
srp.bclib_overwriteSurfaceRules(mergeSurfaceRules(
|
||||||
|
originalRules,
|
||||||
|
loadedBiomeSource,
|
||||||
|
getRulesForBiomes(loadedBiomeSource.possibleBiomes().stream().map(h -> h.value()).toList())
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue