mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-04 00:45:57 +00:00
move biomeutil stuff into common
This commit is contained in:
parent
7c2908e5ca
commit
6ba4a48e29
@ -1,7 +1,8 @@
|
|||||||
package com.dfsek.terra.fabric.mixin.lifecycle;
|
package com.dfsek.terra.fabric.mixin.lifecycle;
|
||||||
|
|
||||||
import com.dfsek.terra.fabric.util.BiomeUtil;
|
|
||||||
import com.dfsek.terra.fabric.util.TagUtil;
|
import com.dfsek.terra.fabric.util.TagUtil;
|
||||||
|
import com.dfsek.terra.mod.util.MinecraftUtil;
|
||||||
|
|
||||||
import net.minecraft.server.DataPackContents;
|
import net.minecraft.server.DataPackContents;
|
||||||
import net.minecraft.util.registry.DynamicRegistryManager;
|
import net.minecraft.util.registry.DynamicRegistryManager;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
@ -23,6 +24,6 @@ public class DataPackContentsMixin {
|
|||||||
|
|
||||||
Registry<Biome> biomeRegistry = dynamicRegistryManager.get(Registry.BIOME_KEY);
|
Registry<Biome> biomeRegistry = dynamicRegistryManager.get(Registry.BIOME_KEY);
|
||||||
TagUtil.registerBiomeTags(biomeRegistry);
|
TagUtil.registerBiomeTags(biomeRegistry);
|
||||||
BiomeUtil.registerFlora(biomeRegistry);
|
MinecraftUtil.registerFlora(biomeRegistry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,7 @@ 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.FabricEntryPoint;
|
import com.dfsek.terra.fabric.FabricEntryPoint;
|
||||||
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
|
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
|
||||||
import com.dfsek.terra.mod.config.VanillaBiomeProperties;
|
|
||||||
|
|
||||||
import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder;
|
|
||||||
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
|
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
|
||||||
import com.dfsek.terra.mod.util.MinecraftUtil;
|
import com.dfsek.terra.mod.util.MinecraftUtil;
|
||||||
|
|
||||||
@ -14,10 +12,6 @@ import net.minecraft.util.Identifier;
|
|||||||
import net.minecraft.util.registry.BuiltinRegistries;
|
import net.minecraft.util.registry.BuiltinRegistries;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import net.minecraft.util.registry.RegistryKey;
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
import net.minecraft.world.biome.Biome.Builder;
|
|
||||||
import net.minecraft.world.biome.BiomeEffects;
|
|
||||||
import net.minecraft.world.biome.GenerationSettings;
|
|
||||||
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -27,25 +21,17 @@ import java.util.*;
|
|||||||
public final class BiomeUtil {
|
public final class BiomeUtil {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class);
|
private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class);
|
||||||
|
|
||||||
private static final Map<Identifier, List<Identifier>>
|
|
||||||
TERRA_BIOME_MAP = new HashMap<>();
|
|
||||||
|
|
||||||
private BiomeUtil() {
|
private BiomeUtil() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) {
|
|
||||||
return pack.getID()
|
|
||||||
.toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void registerBiomes() {
|
public static void registerBiomes() {
|
||||||
logger.info("Registering biomes...");
|
logger.info("Registering biomes...");
|
||||||
FabricEntryPoint.getPlatform().getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
|
FabricEntryPoint.getPlatform().getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
|
||||||
pack.getCheckedRegistry(Biome.class)
|
pack.getCheckedRegistry(Biome.class)
|
||||||
.forEach((id, biome) -> registerBiome(biome, pack, id));
|
.forEach((id, biome) -> registerBiome(biome, pack, id));
|
||||||
});
|
});
|
||||||
registerFlora(BuiltinRegistries.BIOME);
|
MinecraftUtil.registerFlora(BuiltinRegistries.BIOME);
|
||||||
logger.info("Terra biomes registered.");
|
logger.info("Terra biomes registered.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,9 +50,9 @@ public final class BiomeUtil {
|
|||||||
if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) {
|
if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) {
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla);
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla);
|
||||||
} else {
|
} else {
|
||||||
net.minecraft.world.biome.Biome minecraftBiome = createBiome(biome, registry.get(vanilla));
|
net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, registry.get(vanilla));
|
||||||
|
|
||||||
Identifier identifier = new Identifier("terra", createBiomeID(pack, id));
|
Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id));
|
||||||
|
|
||||||
if(registry.containsId(identifier)) {
|
if(registry.containsId(identifier)) {
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(MinecraftUtil.getEntry(registry, identifier)
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(MinecraftUtil.getEntry(registry, identifier)
|
||||||
@ -75,97 +61,12 @@ public final class BiomeUtil {
|
|||||||
.orElseThrow());
|
.orElseThrow());
|
||||||
} else {
|
} else {
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry,
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry,
|
||||||
registerKey(identifier).getValue(),
|
MinecraftUtil.registerKey(identifier).getValue(),
|
||||||
minecraftBiome).getKey().orElseThrow());
|
minecraftBiome).getKey().orElseThrow());
|
||||||
}
|
}
|
||||||
|
|
||||||
TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier);
|
MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerFlora(Registry<net.minecraft.world.biome.Biome> biomes) {
|
|
||||||
logger.info("Injecting flora into Terra biomes...");
|
|
||||||
TERRA_BIOME_MAP
|
|
||||||
.forEach((vb, terraBiomes) ->
|
|
||||||
biomes.getOrEmpty(vb)
|
|
||||||
.ifPresentOrElse(vanilla -> terraBiomes
|
|
||||||
.forEach(tb -> biomes.getOrEmpty(tb)
|
|
||||||
.ifPresentOrElse(
|
|
||||||
terra -> {
|
|
||||||
List<ConfiguredFeature<?, ?>> flowerFeatures = List.copyOf(vanilla.getGenerationSettings().getFlowerFeatures());
|
|
||||||
logger.debug("Injecting flora into biome {} : {}", tb, flowerFeatures);
|
|
||||||
((FloraFeatureHolder) terra.getGenerationSettings()).setFloraFeatures(flowerFeatures);
|
|
||||||
},
|
|
||||||
() -> logger.error(
|
|
||||||
"No such biome: {}",
|
|
||||||
tb))),
|
|
||||||
() -> logger.error("No vanilla biome: {}", vb)));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Map<Identifier, List<Identifier>> getTerraBiomeMap() {
|
|
||||||
return Map.copyOf(TERRA_BIOME_MAP);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static RegistryKey<net.minecraft.world.biome.Biome> registerKey(Identifier identifier) {
|
|
||||||
return RegistryKey.of(Registry.BIOME_KEY, identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static net.minecraft.world.biome.Biome createBiome(Biome biome, net.minecraft.world.biome.Biome vanilla) {
|
|
||||||
GenerationSettings.Builder generationSettings = new GenerationSettings.Builder();
|
|
||||||
|
|
||||||
BiomeEffects.Builder effects = new BiomeEffects.Builder();
|
|
||||||
|
|
||||||
net.minecraft.world.biome.Biome.Builder builder = new Builder();
|
|
||||||
|
|
||||||
if(biome.getContext().has(VanillaBiomeProperties.class)) {
|
|
||||||
VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class);
|
|
||||||
|
|
||||||
effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor()))
|
|
||||||
.waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor()))
|
|
||||||
.fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor()))
|
|
||||||
.skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor()))
|
|
||||||
.grassColorModifier(
|
|
||||||
Objects.requireNonNullElse(vanillaBiomeProperties.getModifier(), vanilla.getEffects().getGrassColorModifier()));
|
|
||||||
|
|
||||||
|
|
||||||
if(vanillaBiomeProperties.getGrassColor() == null) {
|
|
||||||
vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor);
|
|
||||||
} else {
|
|
||||||
effects.grassColor(vanillaBiomeProperties.getGrassColor());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(vanillaBiomeProperties.getFoliageColor() == null) {
|
|
||||||
vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor);
|
|
||||||
} else {
|
|
||||||
effects.foliageColor(vanillaBiomeProperties.getFoliageColor());
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.precipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.getPrecipitation()));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
effects.waterColor(vanilla.getWaterColor())
|
|
||||||
.waterFogColor(vanilla.getWaterFogColor())
|
|
||||||
.fogColor(vanilla.getFogColor())
|
|
||||||
.skyColor(vanilla.getSkyColor());
|
|
||||||
vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor);
|
|
||||||
vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor);
|
|
||||||
|
|
||||||
builder.precipitation(vanilla.getPrecipitation());
|
|
||||||
}
|
|
||||||
|
|
||||||
vanilla.getLoopSound().ifPresent(effects::loopSound);
|
|
||||||
vanilla.getAdditionsSound().ifPresent(effects::additionsSound);
|
|
||||||
vanilla.getMoodSound().ifPresent(effects::moodSound);
|
|
||||||
vanilla.getMusic().ifPresent(effects::music);
|
|
||||||
vanilla.getParticleConfig().ifPresent(effects::particleConfig);
|
|
||||||
|
|
||||||
return builder
|
|
||||||
.temperature(vanilla.getTemperature())
|
|
||||||
.downfall(vanilla.getDownfall())
|
|
||||||
.effects(effects.build())
|
|
||||||
.spawnSettings(vanilla.getSpawnSettings())
|
|
||||||
.generationSettings(generationSettings.build())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ public final class TagUtil {
|
|||||||
logger.info("Doing biome tag garbage....");
|
logger.info("Doing biome tag garbage....");
|
||||||
Map<TagKey<Biome>, List<RegistryEntry<Biome>>> collect = tagsToMutableMap(registry);
|
Map<TagKey<Biome>, List<RegistryEntry<Biome>>> collect = tagsToMutableMap(registry);
|
||||||
|
|
||||||
BiomeUtil
|
MinecraftUtil
|
||||||
.getTerraBiomeMap()
|
.getTerraBiomeMap()
|
||||||
.forEach((vb, terraBiomes) ->
|
.forEach((vb, terraBiomes) ->
|
||||||
MinecraftUtil
|
MinecraftUtil
|
||||||
|
@ -2,6 +2,8 @@ package com.dfsek.terra.forge.mixin.lifecycle;
|
|||||||
|
|
||||||
import com.dfsek.terra.forge.util.BiomeUtil;
|
import com.dfsek.terra.forge.util.BiomeUtil;
|
||||||
import com.dfsek.terra.forge.util.TagUtil;
|
import com.dfsek.terra.forge.util.TagUtil;
|
||||||
|
import com.dfsek.terra.mod.util.MinecraftUtil;
|
||||||
|
|
||||||
import net.minecraft.server.DataPackContents;
|
import net.minecraft.server.DataPackContents;
|
||||||
import net.minecraft.util.registry.DynamicRegistryManager;
|
import net.minecraft.util.registry.DynamicRegistryManager;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
@ -23,6 +25,6 @@ public class DataPackContentsMixin {
|
|||||||
|
|
||||||
Registry<Biome> biomeRegistry = dynamicRegistryManager.get(Registry.BIOME_KEY);
|
Registry<Biome> biomeRegistry = dynamicRegistryManager.get(Registry.BIOME_KEY);
|
||||||
TagUtil.registerBiomeTags(biomeRegistry);
|
TagUtil.registerBiomeTags(biomeRegistry);
|
||||||
BiomeUtil.registerFlora(biomeRegistry);
|
MinecraftUtil.registerFlora(biomeRegistry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,49 +1,31 @@
|
|||||||
package com.dfsek.terra.forge.util;
|
package com.dfsek.terra.forge.util;
|
||||||
|
|
||||||
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
|
|
||||||
|
|
||||||
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.util.registry.Registry;
|
|
||||||
import net.minecraft.util.registry.RegistryKey;
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
import net.minecraft.world.biome.Biome.Builder;
|
|
||||||
import net.minecraft.world.biome.BiomeEffects;
|
|
||||||
import net.minecraft.world.biome.GenerationSettings;
|
|
||||||
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
import net.minecraftforge.registries.RegisterEvent.RegisterHelper;
|
import net.minecraftforge.registries.RegisterEvent.RegisterHelper;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
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.forge.ForgeEntryPoint;
|
import com.dfsek.terra.forge.ForgeEntryPoint;
|
||||||
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
|
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
|
||||||
import com.dfsek.terra.mod.config.VanillaBiomeProperties;
|
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
|
||||||
import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder;
|
import com.dfsek.terra.mod.util.MinecraftUtil;
|
||||||
|
|
||||||
|
|
||||||
public final class BiomeUtil {
|
public final class BiomeUtil {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class);
|
private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class);
|
||||||
|
|
||||||
private static final Map<Identifier, List<Identifier>>
|
|
||||||
TERRA_BIOME_MAP = new HashMap<>();
|
|
||||||
|
|
||||||
private BiomeUtil() {
|
private BiomeUtil() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) {
|
|
||||||
return pack.getID()
|
|
||||||
.toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void registerBiomes(RegisterHelper<net.minecraft.world.biome.Biome> helper) {
|
public static void registerBiomes(RegisterHelper<net.minecraft.world.biome.Biome> helper) {
|
||||||
logger.info("Registering biomes...");
|
logger.info("Registering biomes...");
|
||||||
@ -51,7 +33,7 @@ public final class BiomeUtil {
|
|||||||
pack.getCheckedRegistry(Biome.class)
|
pack.getCheckedRegistry(Biome.class)
|
||||||
.forEach((id, biome) -> registerBiome(biome, pack, id, helper));
|
.forEach((id, biome) -> registerBiome(biome, pack, id, helper));
|
||||||
});
|
});
|
||||||
registerFlora(BuiltinRegistries.BIOME);
|
MinecraftUtil.registerFlora(BuiltinRegistries.BIOME);
|
||||||
logger.info("Terra biomes registered.");
|
logger.info("Terra biomes registered.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,104 +51,18 @@ public final class BiomeUtil {
|
|||||||
if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) {
|
if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) {
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla);
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla);
|
||||||
} else {
|
} else {
|
||||||
net.minecraft.world.biome.Biome minecraftBiome = createBiome(biome, ForgeRegistries.BIOMES.getDelegateOrThrow(vanilla).value());
|
net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, ForgeRegistries.BIOMES.getDelegateOrThrow(vanilla).value());
|
||||||
|
|
||||||
Identifier identifier = new Identifier("terra", createBiomeID(pack, id));
|
Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id));
|
||||||
|
|
||||||
if(ForgeRegistries.BIOMES.containsKey(identifier)) {
|
if(ForgeRegistries.BIOMES.containsKey(identifier)) {
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier).orElseThrow().getKey().orElseThrow());
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier).orElseThrow().getKey().orElseThrow());
|
||||||
} else {
|
} else {
|
||||||
helper.register(registerKey(identifier).getValue(), minecraftBiome);
|
helper.register(MinecraftUtil.registerKey(identifier).getValue(), minecraftBiome);
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier).orElseThrow().getKey().orElseThrow());
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier).orElseThrow().getKey().orElseThrow());
|
||||||
}
|
}
|
||||||
|
|
||||||
TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier);
|
MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerFlora(Registry<net.minecraft.world.biome.Biome> biomes) {
|
|
||||||
logger.info("Injecting flora into Terra biomes...");
|
|
||||||
TERRA_BIOME_MAP
|
|
||||||
.forEach((vb, terraBiomes) ->
|
|
||||||
biomes.getOrEmpty(vb)
|
|
||||||
.ifPresentOrElse(vanilla -> terraBiomes
|
|
||||||
.forEach(tb -> biomes.getOrEmpty(tb)
|
|
||||||
.ifPresentOrElse(
|
|
||||||
terra -> {
|
|
||||||
List<ConfiguredFeature<?, ?>> flowerFeatures = List.copyOf(vanilla.getGenerationSettings().getFlowerFeatures());
|
|
||||||
logger.debug("Injecting flora into biome {} : {}", tb, flowerFeatures);
|
|
||||||
((FloraFeatureHolder) terra.getGenerationSettings()).setFloraFeatures(flowerFeatures);
|
|
||||||
},
|
|
||||||
() -> logger.error(
|
|
||||||
"No such biome: {}",
|
|
||||||
tb))),
|
|
||||||
() -> logger.error("No vanilla biome: {}", vb)));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Map<Identifier, List<Identifier>> getTerraBiomeMap() {
|
|
||||||
return Map.copyOf(TERRA_BIOME_MAP);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static RegistryKey<net.minecraft.world.biome.Biome> registerKey(Identifier identifier) {
|
|
||||||
return RegistryKey.of(Registry.BIOME_KEY, identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static net.minecraft.world.biome.Biome createBiome(Biome biome, net.minecraft.world.biome.Biome vanilla) {
|
|
||||||
GenerationSettings.Builder generationSettings = new GenerationSettings.Builder();
|
|
||||||
|
|
||||||
BiomeEffects.Builder effects = new BiomeEffects.Builder();
|
|
||||||
|
|
||||||
net.minecraft.world.biome.Biome.Builder builder = new Builder();
|
|
||||||
|
|
||||||
if(biome.getContext().has(VanillaBiomeProperties.class)) {
|
|
||||||
VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class);
|
|
||||||
|
|
||||||
effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor()))
|
|
||||||
.waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor()))
|
|
||||||
.fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor()))
|
|
||||||
.skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor()))
|
|
||||||
.grassColorModifier(
|
|
||||||
Objects.requireNonNullElse(vanillaBiomeProperties.getModifier(), vanilla.getEffects().getGrassColorModifier()));
|
|
||||||
|
|
||||||
|
|
||||||
if(vanillaBiomeProperties.getGrassColor() == null) {
|
|
||||||
vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor);
|
|
||||||
} else {
|
|
||||||
effects.grassColor(vanillaBiomeProperties.getGrassColor());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(vanillaBiomeProperties.getFoliageColor() == null) {
|
|
||||||
vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor);
|
|
||||||
} else {
|
|
||||||
effects.foliageColor(vanillaBiomeProperties.getFoliageColor());
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.precipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.getPrecipitation()));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
effects.waterColor(vanilla.getWaterColor())
|
|
||||||
.waterFogColor(vanilla.getWaterFogColor())
|
|
||||||
.fogColor(vanilla.getFogColor())
|
|
||||||
.skyColor(vanilla.getSkyColor());
|
|
||||||
vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor);
|
|
||||||
vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor);
|
|
||||||
|
|
||||||
builder.precipitation(vanilla.getPrecipitation());
|
|
||||||
}
|
|
||||||
|
|
||||||
vanilla.getLoopSound().ifPresent(effects::loopSound);
|
|
||||||
vanilla.getAdditionsSound().ifPresent(effects::additionsSound);
|
|
||||||
vanilla.getMoodSound().ifPresent(effects::moodSound);
|
|
||||||
vanilla.getMusic().ifPresent(effects::music);
|
|
||||||
vanilla.getParticleConfig().ifPresent(effects::particleConfig);
|
|
||||||
|
|
||||||
return builder
|
|
||||||
.temperature(vanilla.getTemperature())
|
|
||||||
.downfall(vanilla.getDownfall())
|
|
||||||
.effects(effects.build())
|
|
||||||
.spawnSettings(vanilla.getSpawnSettings())
|
|
||||||
.generationSettings(generationSettings.build())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ public final class TagUtil {
|
|||||||
logger.info("Doing biome tag garbage....");
|
logger.info("Doing biome tag garbage....");
|
||||||
Map<TagKey<Biome>, List<RegistryEntry<Biome>>> collect = tagsToMutableMap(registry);
|
Map<TagKey<Biome>, List<RegistryEntry<Biome>>> collect = tagsToMutableMap(registry);
|
||||||
|
|
||||||
BiomeUtil
|
MinecraftUtil
|
||||||
.getTerraBiomeMap()
|
.getTerraBiomeMap()
|
||||||
.forEach((vb, terraBiomes) ->
|
.forEach((vb, terraBiomes) ->
|
||||||
MinecraftUtil
|
MinecraftUtil
|
||||||
|
@ -5,6 +5,10 @@ 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.mod.config.VanillaBiomeProperties;
|
||||||
|
import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder;
|
||||||
|
|
||||||
import net.minecraft.block.entity.LootableContainerBlockEntity;
|
import net.minecraft.block.entity.LootableContainerBlockEntity;
|
||||||
import net.minecraft.block.entity.MobSpawnerBlockEntity;
|
import net.minecraft.block.entity.MobSpawnerBlockEntity;
|
||||||
import net.minecraft.block.entity.SignBlockEntity;
|
import net.minecraft.block.entity.SignBlockEntity;
|
||||||
@ -12,12 +16,29 @@ import net.minecraft.util.Identifier;
|
|||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import net.minecraft.util.registry.RegistryEntry;
|
import net.minecraft.util.registry.RegistryEntry;
|
||||||
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
import net.minecraft.world.WorldAccess;
|
import net.minecraft.world.WorldAccess;
|
||||||
|
import net.minecraft.world.biome.Biome;
|
||||||
|
import net.minecraft.world.biome.Biome.Builder;
|
||||||
|
import net.minecraft.world.biome.BiomeEffects;
|
||||||
|
import net.minecraft.world.biome.GenerationSettings;
|
||||||
|
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
|
||||||
public final class MinecraftUtil {
|
public final class MinecraftUtil {
|
||||||
|
public static final Logger logger = LoggerFactory.getLogger(MinecraftUtil.class);
|
||||||
|
public static final Map<Identifier, List<Identifier>>
|
||||||
|
TERRA_BIOME_MAP = new HashMap<>();
|
||||||
|
|
||||||
private MinecraftUtil() {
|
private MinecraftUtil() {
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -39,4 +60,95 @@ public final class MinecraftUtil {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void registerFlora(Registry<net.minecraft.world.biome.Biome> biomes) {
|
||||||
|
logger.info("Injecting flora into Terra biomes...");
|
||||||
|
TERRA_BIOME_MAP
|
||||||
|
.forEach((vb, terraBiomes) ->
|
||||||
|
biomes.getOrEmpty(vb)
|
||||||
|
.ifPresentOrElse(vanilla -> terraBiomes
|
||||||
|
.forEach(tb -> biomes.getOrEmpty(tb)
|
||||||
|
.ifPresentOrElse(
|
||||||
|
terra -> {
|
||||||
|
List<ConfiguredFeature<?, ?>> flowerFeatures = List.copyOf(vanilla.getGenerationSettings().getFlowerFeatures());
|
||||||
|
logger.debug("Injecting flora into biome {} : {}", tb, flowerFeatures);
|
||||||
|
((FloraFeatureHolder) terra.getGenerationSettings()).setFloraFeatures(flowerFeatures);
|
||||||
|
},
|
||||||
|
() -> logger.error(
|
||||||
|
"No such biome: {}",
|
||||||
|
tb))),
|
||||||
|
() -> logger.error("No vanilla biome: {}", vb)));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<Identifier, List<Identifier>> getTerraBiomeMap() {
|
||||||
|
return Map.copyOf(TERRA_BIOME_MAP);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RegistryKey<Biome> registerKey(Identifier identifier) {
|
||||||
|
return RegistryKey.of(Registry.BIOME_KEY, identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) {
|
||||||
|
GenerationSettings.Builder generationSettings = new GenerationSettings.Builder();
|
||||||
|
|
||||||
|
BiomeEffects.Builder effects = new BiomeEffects.Builder();
|
||||||
|
|
||||||
|
Biome.Builder builder = new Builder();
|
||||||
|
|
||||||
|
if(biome.getContext().has(VanillaBiomeProperties.class)) {
|
||||||
|
VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class);
|
||||||
|
|
||||||
|
effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor()))
|
||||||
|
.waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor()))
|
||||||
|
.fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor()))
|
||||||
|
.skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor()))
|
||||||
|
.grassColorModifier(
|
||||||
|
Objects.requireNonNullElse(vanillaBiomeProperties.getModifier(), vanilla.getEffects().getGrassColorModifier()));
|
||||||
|
|
||||||
|
|
||||||
|
if(vanillaBiomeProperties.getGrassColor() == null) {
|
||||||
|
vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor);
|
||||||
|
} else {
|
||||||
|
effects.grassColor(vanillaBiomeProperties.getGrassColor());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(vanillaBiomeProperties.getFoliageColor() == null) {
|
||||||
|
vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor);
|
||||||
|
} else {
|
||||||
|
effects.foliageColor(vanillaBiomeProperties.getFoliageColor());
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.precipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.getPrecipitation()));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
effects.waterColor(vanilla.getWaterColor())
|
||||||
|
.waterFogColor(vanilla.getWaterFogColor())
|
||||||
|
.fogColor(vanilla.getFogColor())
|
||||||
|
.skyColor(vanilla.getSkyColor());
|
||||||
|
vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor);
|
||||||
|
vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor);
|
||||||
|
|
||||||
|
builder.precipitation(vanilla.getPrecipitation());
|
||||||
|
}
|
||||||
|
|
||||||
|
vanilla.getLoopSound().ifPresent(effects::loopSound);
|
||||||
|
vanilla.getAdditionsSound().ifPresent(effects::additionsSound);
|
||||||
|
vanilla.getMoodSound().ifPresent(effects::moodSound);
|
||||||
|
vanilla.getMusic().ifPresent(effects::music);
|
||||||
|
vanilla.getParticleConfig().ifPresent(effects::particleConfig);
|
||||||
|
|
||||||
|
return builder
|
||||||
|
.temperature(vanilla.getTemperature())
|
||||||
|
.downfall(vanilla.getDownfall())
|
||||||
|
.effects(effects.build())
|
||||||
|
.spawnSettings(vanilla.getSpawnSettings())
|
||||||
|
.generationSettings(generationSettings.build())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) {
|
||||||
|
return pack.getID()
|
||||||
|
.toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user