mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-17 22:31:52 +00:00
use only delegate biomes in biome source
This commit is contained in:
+6
-8
@@ -23,8 +23,7 @@ import net.minecraft.util.registry.RegistryEntry;
|
|||||||
import net.minecraft.world.biome.source.BiomeSource;
|
import net.minecraft.world.biome.source.BiomeSource;
|
||||||
import net.minecraft.world.biome.source.util.MultiNoiseUtil.MultiNoiseSampler;
|
import net.minecraft.world.biome.source.util.MultiNoiseUtil.MultiNoiseSampler;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.stream.StreamSupport;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import com.dfsek.terra.api.config.ConfigPack;
|
import com.dfsek.terra.api.config.ConfigPack;
|
||||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
@@ -33,17 +32,16 @@ import com.dfsek.terra.fabric.util.ProtoPlatformBiome;
|
|||||||
|
|
||||||
|
|
||||||
public class TerraBiomeSource extends BiomeSource {
|
public class TerraBiomeSource extends BiomeSource {
|
||||||
|
|
||||||
private final Registry<net.minecraft.world.biome.Biome> biomeRegistry;
|
private final Registry<net.minecraft.world.biome.Biome> biomeRegistry;
|
||||||
private final long seed;
|
private final long seed;
|
||||||
private ConfigPack pack;
|
private ConfigPack pack;
|
||||||
|
|
||||||
public TerraBiomeSource(Registry<net.minecraft.world.biome.Biome> biomes, long seed, ConfigPack pack) {
|
public TerraBiomeSource(Registry<net.minecraft.world.biome.Biome> biomes, long seed, ConfigPack pack) {
|
||||||
super(biomes.streamEntries()
|
super(StreamSupport
|
||||||
.filter(biome -> Objects.requireNonNull(biomes.getId(biome.value()))
|
.stream(pack.getBiomeProvider()
|
||||||
.getNamespace()
|
.getBiomes()
|
||||||
.equals("terra")) // Filter out non-Terra biomes.
|
.spliterator(), false)
|
||||||
.collect(Collectors.toList()));
|
.map(b -> ((ProtoPlatformBiome) b.getPlatformBiome()).get(biomes)));
|
||||||
this.biomeRegistry = biomes;
|
this.biomeRegistry = biomes;
|
||||||
this.seed = seed;
|
this.seed = seed;
|
||||||
this.pack = pack;
|
this.pack = pack;
|
||||||
|
|||||||
@@ -20,19 +20,25 @@ package com.dfsek.terra.fabric.util;
|
|||||||
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;
|
||||||
|
import net.minecraft.tag.TagKey;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.registry.DynamicRegistryManager;
|
import net.minecraft.util.registry.DynamicRegistryManager;
|
||||||
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.RegistryEntryList.Named;
|
||||||
import net.minecraft.world.WorldAccess;
|
import net.minecraft.world.WorldAccess;
|
||||||
import net.minecraft.world.biome.Biome.Builder;
|
import net.minecraft.world.biome.Biome.Builder;
|
||||||
import net.minecraft.world.biome.BiomeEffects;
|
import net.minecraft.world.biome.BiomeEffects;
|
||||||
import net.minecraft.world.biome.GenerationSettings;
|
import net.minecraft.world.biome.GenerationSettings;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
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;
|
||||||
@@ -51,6 +57,10 @@ public final class FabricUtil {
|
|||||||
.toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT);
|
.toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final Map<RegistryEntry<net.minecraft.world.biome.Biome>, RegistryEntry<net.minecraft.world.biome.Biome>>
|
||||||
|
TERRA_BIOME_MAP = new HashMap<>();
|
||||||
|
private static final Map<Biome, RegistryEntry<net.minecraft.world.biome.Biome>> BIOME_MAP = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clones a Vanilla biome and injects Terra data to create a Terra-vanilla biome delegate.
|
* Clones a Vanilla biome and injects Terra data to create a Terra-vanilla biome delegate.
|
||||||
*
|
*
|
||||||
@@ -59,8 +69,8 @@ public final class FabricUtil {
|
|||||||
*/
|
*/
|
||||||
public static void registerBiome(Biome biome, ConfigPack pack, DynamicRegistryManager registryManager,
|
public static void registerBiome(Biome biome, ConfigPack pack, DynamicRegistryManager registryManager,
|
||||||
com.dfsek.terra.api.registry.key.RegistryKey id) {
|
com.dfsek.terra.api.registry.key.RegistryKey id) {
|
||||||
Registry<net.minecraft.world.biome.Biome> biomeRegistry = registryManager.get(Registry.BIOME_KEY);
|
Registry<net.minecraft.world.biome.Biome> registry = registryManager.get(Registry.BIOME_KEY);
|
||||||
RegistryEntry<net.minecraft.world.biome.Biome> vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(biomeRegistry);
|
RegistryEntry<net.minecraft.world.biome.Biome> vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry);
|
||||||
|
|
||||||
|
|
||||||
if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) {
|
if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) {
|
||||||
@@ -70,15 +80,48 @@ public final class FabricUtil {
|
|||||||
|
|
||||||
Identifier identifier = new Identifier("terra", FabricUtil.createBiomeID(pack, id));
|
Identifier identifier = new Identifier("terra", FabricUtil.createBiomeID(pack, id));
|
||||||
|
|
||||||
if(biomeRegistry.containsId(identifier)) {
|
if(registry.containsId(identifier)) {
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(biomeRegistry, identifier).orElseThrow());
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(registry, identifier).orElseThrow());
|
||||||
} else {
|
} else {
|
||||||
Registry.register(biomeRegistry, identifier, minecraftBiome);
|
Registry.register(registry, identifier, minecraftBiome);
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(biomeRegistry, identifier).orElseThrow());
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(registry, identifier).orElseThrow());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RegistryEntry<net.minecraft.world.biome.Biome> entry = getEntry(registry, identifier).orElseThrow();
|
||||||
|
TERRA_BIOME_MAP.put(vanilla, entry);
|
||||||
|
BIOME_MAP.put(biome, entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static RegistryEntry<net.minecraft.world.biome.Biome> getMinecraftBiome(Biome biome) {
|
||||||
|
return BIOME_MAP.get(biome);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Stream<RegistryEntry<net.minecraft.world.biome.Biome>> getMatchingBiome(Named<net.minecraft.world.biome.Biome> named) {
|
||||||
|
return TERRA_BIOME_MAP.keySet()
|
||||||
|
.stream()
|
||||||
|
.filter(named::contains)
|
||||||
|
.map(TERRA_BIOME_MAP::get);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerTags(Registry<net.minecraft.world.biome.Biome> registry) {
|
||||||
|
Map<TagKey<net.minecraft.world.biome.Biome>, List<RegistryEntry<net.minecraft.world.biome.Biome>>> collect = registry
|
||||||
|
.streamTagsAndEntries()
|
||||||
|
.peek(System.out::println)
|
||||||
|
.collect(HashMap::new,
|
||||||
|
(map, pair) ->
|
||||||
|
map.put(pair.getFirst(),
|
||||||
|
Stream.concat(pair.getSecond().stream(), getMatchingBiome(pair.getSecond())).toList()),
|
||||||
|
HashMap::putAll);
|
||||||
|
registry.clearTags();
|
||||||
|
registry.populateTags(collect);
|
||||||
|
|
||||||
|
System.out.println(registry.streamEntries()
|
||||||
|
.map(e -> e.registryKey().getValue() + ": " +
|
||||||
|
e.streamTags().reduce("", (s, t) -> s + ", " + t, String::concat))
|
||||||
|
.reduce("", (s, s2) -> s + "\n" + s2));
|
||||||
|
}
|
||||||
|
|
||||||
public static net.minecraft.world.biome.Biome createBiome(Biome biome, net.minecraft.world.biome.Biome vanilla) {
|
public static net.minecraft.world.biome.Biome createBiome(Biome biome, net.minecraft.world.biome.Biome vanilla) {
|
||||||
GenerationSettings.Builder generationSettings = new GenerationSettings.Builder();
|
GenerationSettings.Builder generationSettings = new GenerationSettings.Builder();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user