[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;
|
||||
|
||||
@Mixin(NoiseGeneratorSettings.class)
|
||||
public class NoiseGeneratorSettingsMixin implements SurfaceRuleProvider {
|
||||
public abstract class NoiseGeneratorSettingsMixin implements SurfaceRuleProvider {
|
||||
@Mutable
|
||||
@Final
|
||||
@Shadow
|
||||
private SurfaceRules.RuleSource surfaceRule;
|
||||
|
||||
public void bclib_overwrite(SurfaceRules.RuleSource surfaceRule) {
|
||||
if (surfaceRule == this.surfaceRule) return;
|
||||
public void bclib_overwriteSurfaceRules(SurfaceRules.RuleSource surfaceRule) {
|
||||
if (surfaceRule == null || surfaceRule == this.surfaceRule) return;
|
||||
if (this.bcl_containsOverride) {
|
||||
WorldsTogether.LOGGER.warning("Overwriting an overwritten set of Surface Rules.");
|
||||
}
|
||||
|
@ -27,6 +27,10 @@ public class NoiseGeneratorSettingsMixin implements SurfaceRuleProvider {
|
|||
this.surfaceRule = surfaceRule;
|
||||
}
|
||||
|
||||
public SurfaceRules.RuleSource bclib_getOriginalSurfaceRules() {
|
||||
return this.surfaceRule;
|
||||
}
|
||||
|
||||
private boolean bcl_containsOverride = false;
|
||||
|
||||
}
|
||||
|
|
|
@ -3,5 +3,6 @@ package org.betterx.worlds.together.surfaceRules;
|
|||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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(
|
||||
SurfaceRules.RuleSource org,
|
||||
BiomeSource source,
|
||||
List<SurfaceRules.RuleSource> additionalRules
|
||||
) {
|
||||
if (additionalRules == null || additionalRules.isEmpty()) return org;
|
||||
if (additionalRules == null || additionalRules.isEmpty()) return null;
|
||||
final int count = additionalRules.size();
|
||||
if (org instanceof SurfaceRules.SequenceRuleSource sequenceRule) {
|
||||
List<SurfaceRules.RuleSource> existingSequence = sequenceRule.sequence();
|
||||
|
@ -73,7 +62,7 @@ public class SurfaceRuleUtil {
|
|||
.stream()
|
||||
.filter(r -> existingSequence.indexOf(r) < 0)
|
||||
.collect(Collectors.toList());
|
||||
if (additionalRules.size() == 0) return org;
|
||||
if (additionalRules.size() == 0) return null;
|
||||
additionalRules.addAll(existingSequence);
|
||||
} else {
|
||||
if (!additionalRules.contains(org))
|
||||
|
@ -88,8 +77,12 @@ public class SurfaceRuleUtil {
|
|||
|
||||
public static void injectSurfaceRules(NoiseGeneratorSettings noiseSettings, BiomeSource loadedBiomeSource) {
|
||||
if (((Object) noiseSettings) instanceof SurfaceRuleProvider srp) {
|
||||
SurfaceRules.RuleSource originalRules = noiseSettings.surfaceRule();
|
||||
srp.bclib_overwrite(mergeSurfaceRulesFromBiomes(originalRules, loadedBiomeSource));
|
||||
SurfaceRules.RuleSource originalRules = srp.bclib_getOriginalSurfaceRules();
|
||||
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