add more vanilla biome properties

This commit is contained in:
dfsek
2022-01-07 13:09:01 -07:00
parent f0a71b3ad0
commit 7883a39375
4 changed files with 79 additions and 83 deletions
@@ -19,26 +19,18 @@ package com.dfsek.terra.fabric;
import ca.solostudios.strata.Versions; import ca.solostudios.strata.Versions;
import ca.solostudios.strata.version.Version; import ca.solostudios.strata.version.Version;
import com.dfsek.tectonic.api.exception.ConfigException;
import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent; import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent;
import com.dfsek.terra.api.registry.key.RegistryKey;
import com.dfsek.terra.fabric.config.BiomeColors; import com.dfsek.terra.fabric.config.VanillaBiomeProperties;
import net.minecraft.util.registry.Registry;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
import com.dfsek.terra.api.util.generic.pair.Pair.Mutable;
import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions; import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions;
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
@@ -89,7 +81,7 @@ public final class FabricAddon implements BaseAddon {
.register(this, ConfigurationLoadEvent.class) .register(this, ConfigurationLoadEvent.class)
.then(event -> { .then(event -> {
if(event.is(Biome.class)) { if(event.is(Biome.class)) {
event.getLoadedObject(Biome.class).getContext().put(event.load(new BiomeColors())); event.getLoadedObject(Biome.class).getContext().put(event.load(new VanillaBiomeProperties()));
} }
}) })
.global(); .global();
@@ -30,6 +30,9 @@ import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.TranslatableText; import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.BuiltinRegistries;
import net.minecraft.world.biome.Biome.Category;
import net.minecraft.world.biome.Biome.Precipitation;
import net.minecraft.world.biome.BiomeEffects.GrassColorModifier;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -163,7 +166,10 @@ public class PlatformImpl extends AbstractPlatform {
if(identifier == null) if(identifier == null)
throw new LoadException("Invalid identifier: " + o, depthTracker); throw new LoadException("Invalid identifier: " + o, depthTracker);
return identifier; return identifier;
}); })
.registerLoader(Precipitation.class, (type, o, loader, depthTracker) -> Precipitation.byName((String) o))
.registerLoader(Category.class, (type, o, loader, depthTracker) -> Category.byName((String) o))
.registerLoader(GrassColorModifier.class, (type, o, loader, depthTracker) -> GrassColorModifier.byName((String) o));
} }
@@ -6,8 +6,12 @@ import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.terra.api.properties.Properties; import com.dfsek.terra.api.properties.Properties;
import net.minecraft.world.biome.Biome.Category;
import net.minecraft.world.biome.Biome.Precipitation;
import net.minecraft.world.biome.BiomeEffects.GrassColorModifier;
public class BiomeColors implements ConfigTemplate, Properties {
public class VanillaBiomeProperties implements ConfigTemplate, Properties {
@Value("colors.grass") @Value("colors.grass")
@Default @Default
private Integer grassColor = null; private Integer grassColor = null;
@@ -32,6 +36,18 @@ public class BiomeColors implements ConfigTemplate, Properties {
@Default @Default
private Integer skyColor = null; private Integer skyColor = null;
@Value("colors.modifier")
@Default
private GrassColorModifier modifier = GrassColorModifier.NONE;
@Value("climate.precipitation")
@Default
private Precipitation precipitation = null;
@Value("climate.category")
@Default
private Category category = null;
public Integer getFogColor() { public Integer getFogColor() {
return fogColor; return fogColor;
} }
@@ -55,4 +71,16 @@ public class BiomeColors implements ConfigTemplate, Properties {
public Integer getSkyColor() { public Integer getSkyColor() {
return skyColor; return skyColor;
} }
public Category getCategory() {
return category;
}
public Precipitation getPrecipitation() {
return precipitation;
}
public GrassColorModifier getModifier() {
return modifier;
}
} }
@@ -17,42 +17,30 @@
package com.dfsek.terra.fabric.util; package com.dfsek.terra.fabric.util;
import com.dfsek.terra.fabric.config.BiomeColors;
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
import com.mojang.serialization.Lifecycle;
import net.minecraft.block.entity.LootableContainerBlockEntity;
import net.minecraft.block.entity.MobSpawnerBlockEntity;
import net.minecraft.block.entity.SignBlockEntity;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.registry.DynamicRegistryManager;
import net.minecraft.util.registry.MutableRegistry;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryKey;
import net.minecraft.world.WorldAccess;
import net.minecraft.world.biome.BiomeEffects;
import net.minecraft.world.biome.GenerationSettings;
import net.minecraft.world.gen.GenerationStep;
import net.minecraft.world.gen.carver.ConfiguredCarver;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.OptionalInt;
import java.util.function.Supplier;
import com.dfsek.terra.api.block.entity.BlockEntity; import com.dfsek.terra.api.block.entity.BlockEntity;
import com.dfsek.terra.api.block.entity.Container; import com.dfsek.terra.api.block.entity.Container;
import com.dfsek.terra.api.block.entity.MobSpawner; import com.dfsek.terra.api.block.entity.MobSpawner;
import com.dfsek.terra.api.block.entity.Sign; import com.dfsek.terra.api.block.entity.Sign;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
import com.dfsek.terra.fabric.config.VanillaBiomeProperties;
import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor; import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor;
import net.minecraft.block.entity.LootableContainerBlockEntity;
import net.minecraft.block.entity.MobSpawnerBlockEntity;
import net.minecraft.block.entity.SignBlockEntity;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.registry.DynamicRegistryManager;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryKey;
import net.minecraft.world.WorldAccess;
import net.minecraft.world.biome.BiomeEffects;
import net.minecraft.world.biome.GenerationSettings;
import java.util.*;
public final class FabricUtil { public final class FabricUtil {
@@ -98,46 +86,28 @@ public final class FabricUtil {
GenerationSettings.Builder generationSettings = new GenerationSettings.Builder(); GenerationSettings.Builder generationSettings = new GenerationSettings.Builder();
BiomeEffectsAccessor accessor = (BiomeEffectsAccessor) vanilla.getEffects(); BiomeEffectsAccessor accessor = (BiomeEffectsAccessor) vanilla.getEffects();
BiomeEffects.Builder effects = new BiomeEffects.Builder() BiomeEffects.Builder effects = new BiomeEffects.Builder();
.grassColorModifier(accessor.getGrassColorModifier());
if(biome.getContext().has(BiomeColors.class)) { VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class);
BiomeColors biomeColors = biome.getContext().get(BiomeColors.class);
if(biomeColors.getWaterColor() == null) { if(biome.getContext().has(VanillaBiomeProperties.class)) {
effects.waterColor(vanilla.getWaterColor()); effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor()))
} else { .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor()))
effects.waterColor(biomeColors.getWaterColor()); .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor()))
} .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor()))
.grassColorModifier(Objects.requireNonNullElse(vanillaBiomeProperties.getModifier(), accessor.getGrassColorModifier()));
if(biomeColors.getWaterFogColor() == null) {
effects.waterFogColor(vanilla.getWaterFogColor());
} else {
effects.waterFogColor(biomeColors.getWaterFogColor());
}
if(biomeColors.getFogColor() == null) { if(vanillaBiomeProperties.getGrassColor() == null) {
effects.fogColor(vanilla.getFogColor());
} else {
effects.fogColor(biomeColors.getFogColor());
}
if(biomeColors.getSkyColor() == null) {
effects.skyColor(vanilla.getSkyColor());
} else {
effects.skyColor(biomeColors.getSkyColor());
}
if(biomeColors.getGrassColor() == null) {
accessor.getGrassColor().ifPresent(effects::grassColor); accessor.getGrassColor().ifPresent(effects::grassColor);
} else { } else {
effects.grassColor(biomeColors.getGrassColor()); effects.grassColor(vanillaBiomeProperties.getGrassColor());
} }
if(biomeColors.getFoliageColor() == null) { if(vanillaBiomeProperties.getFoliageColor() == null) {
accessor.getFoliageColor().ifPresent(effects::foliageColor); accessor.getFoliageColor().ifPresent(effects::foliageColor);
} else { } else {
effects.foliageColor(biomeColors.getFoliageColor()); effects.foliageColor(vanillaBiomeProperties.getFoliageColor());
} }
} else { } else {
@@ -150,8 +120,8 @@ public final class FabricUtil {
} }
return new net.minecraft.world.biome.Biome.Builder() return new net.minecraft.world.biome.Biome.Builder()
.precipitation(vanilla.getPrecipitation()) .precipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.getPrecipitation()))
.category(vanilla.getCategory()) .category(Objects.requireNonNullElse(vanillaBiomeProperties.getCategory(), vanilla.getCategory()))
.temperature(vanilla.getTemperature()) .temperature(vanilla.getTemperature())
.downfall(vanilla.getDownfall()) .downfall(vanilla.getDownfall())
.effects(effects.build()) .effects(effects.build())