mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 10:30:42 +00:00
register biomes to builtin registries
This commit is contained in:
@@ -83,7 +83,7 @@ public class PlatformImpl extends AbstractPlatform {
|
||||
LOGGER.warn("Failed to execute reload", throwable);
|
||||
return null;
|
||||
}).join();
|
||||
FabricUtil.registerBiomes(server.getRegistryManager().get(Registry.BIOME_KEY));
|
||||
FabricUtil.registerBiomes();
|
||||
server.getWorlds().forEach(world -> {
|
||||
if(world.getChunkManager().getChunkGenerator() instanceof FabricChunkGeneratorWrapper chunkGeneratorWrapper) {
|
||||
getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> {
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
|
||||
package com.dfsek.terra.fabric.generation;
|
||||
|
||||
import com.dfsek.terra.fabric.util.FabricUtil;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.util.registry.RegistryEntry;
|
||||
@@ -45,6 +47,9 @@ public class TerraBiomeSource extends BiomeSource {
|
||||
.getBiomes()
|
||||
.spliterator(), false)
|
||||
.map(b -> ((ProtoPlatformBiome) b.getPlatformBiome()).getDelegate()));
|
||||
biomes.streamEntries().forEach(biomeReference -> {
|
||||
System.out.println(biomeReference.getKey().orElseThrow());
|
||||
});
|
||||
/*
|
||||
A little (unfortunately, required) jank to watch out for:
|
||||
|
||||
@@ -72,7 +77,24 @@ public class TerraBiomeSource extends BiomeSource {
|
||||
|
||||
@Override
|
||||
public RegistryEntry<net.minecraft.world.biome.Biome> getBiome(int biomeX, int biomeY, int biomeZ, MultiNoiseSampler noiseSampler) {
|
||||
return ((ProtoPlatformBiome) pack.getBiomeProvider().getBiome(biomeX << 2, biomeZ << 2, seed).getPlatformBiome()).getDelegate();
|
||||
/*return biomeRegistry
|
||||
.getEntry(((ProtoPlatformBiome) pack
|
||||
.getBiomeProvider()
|
||||
.getBiome(biomeX << 2, biomeZ << 2, seed)
|
||||
.getPlatformBiome())
|
||||
.getDelegate()
|
||||
.getKey()
|
||||
.orElseThrow())
|
||||
.orElseThrow();
|
||||
|
||||
*/
|
||||
return biomeRegistry.entryOf(((ProtoPlatformBiome) pack
|
||||
.getBiomeProvider()
|
||||
.getBiome(biomeX << 2, biomeZ << 2, seed)
|
||||
.getPlatformBiome())
|
||||
.getDelegate()
|
||||
.getKey()
|
||||
.orElseThrow());
|
||||
}
|
||||
|
||||
public BiomeProvider getProvider() {
|
||||
|
||||
@@ -43,23 +43,6 @@ import com.dfsek.terra.fabric.mixin.access.GeneratorTypeAccessor;
|
||||
|
||||
@Mixin(MinecraftClient.class)
|
||||
public class MinecraftClientMixin {
|
||||
@Shadow
|
||||
@Final
|
||||
private static Logger LOGGER;
|
||||
|
||||
@Redirect(method = "method_40187(Lnet/minecraft/util/registry/DynamicRegistryManager;Lnet/minecraft/world/gen/GeneratorOptions;" +
|
||||
"Lnet/minecraft/world/level/LevelInfo;Lnet/minecraft/resource/ResourceManager;" +
|
||||
"Lnet/minecraft/resource/DataPackSettings;)Lcom/mojang/datafixers/util/Pair;",
|
||||
at = @At(value = "INVOKE",
|
||||
target = "net/minecraft/util/registry/DynamicRegistryManager.createAndLoad ()" +
|
||||
"Lnet/minecraft/util/registry/DynamicRegistryManager$Mutable;"))
|
||||
private static Mutable injectBiomes() {
|
||||
Mutable mutable = DynamicRegistryManager.createAndLoad();
|
||||
LOGGER.info("Injecting Terra biomes...");
|
||||
FabricUtil.registerBiomes(mutable.get(Registry.BIOME_KEY));
|
||||
return mutable;
|
||||
}
|
||||
|
||||
@Inject(method = "<init>", at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/util/WindowProvider;createWindow" +
|
||||
"(Lnet/minecraft/client/WindowSettings;Ljava/lang/String;Ljava/lang/String;)" +
|
||||
@@ -74,5 +57,6 @@ public class MinecraftClientMixin {
|
||||
((GeneratorTypeAccessor) generatorType).setDisplayName(new LiteralText("Terra:" + pack.getID()));
|
||||
GeneratorTypeAccessor.getValues().add(1, generatorType);
|
||||
});
|
||||
FabricUtil.registerBiomes();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,10 +38,6 @@ import com.dfsek.terra.fabric.FabricEntryPoint;
|
||||
|
||||
@Mixin(Main.class)
|
||||
public class ServerMainMixin {
|
||||
@Shadow
|
||||
@Final
|
||||
private static Logger LOGGER;
|
||||
|
||||
@Inject(method = "main([Ljava/lang/String;)V",
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/resource/ResourcePackManager;<init>(Lnet/minecraft/resource/ResourceType;[Lnet/minecraft/resource/ResourcePackProvider;)V") // after registry manager creation
|
||||
@@ -50,19 +46,6 @@ public class ServerMainMixin {
|
||||
FabricEntryPoint.getPlatform().getEventManager().callEvent(
|
||||
new PlatformInitializationEvent()); // Load during MinecraftServer construction, after other mods have registered blocks
|
||||
// and stuff
|
||||
}
|
||||
|
||||
@Redirect(method = "method_40373(Lnet/minecraft/world/level/storage/LevelStorage$Session;Ljoptsimple/OptionSet;" +
|
||||
"Ljoptsimple/OptionSpec;Lnet/minecraft/server/dedicated/ServerPropertiesLoader;Ljoptsimple/OptionSpec;" +
|
||||
"Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/resource/DataPackSettings;)" +
|
||||
"Lcom/mojang/datafixers/util/Pair;",
|
||||
at = @At(value = "INVOKE",
|
||||
target = "net/minecraft/util/registry/DynamicRegistryManager.createAndLoad ()" +
|
||||
"Lnet/minecraft/util/registry/DynamicRegistryManager$Mutable;"))
|
||||
private static Mutable injectBiomes() {
|
||||
Mutable mutable = DynamicRegistryManager.createAndLoad();
|
||||
LOGGER.info("Injecting Terra biomes...");
|
||||
FabricUtil.registerBiomes(mutable.get(Registry.BIOME_KEY));
|
||||
return mutable;
|
||||
FabricUtil.registerBiomes();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import net.minecraft.block.entity.SignBlockEntity;
|
||||
import net.minecraft.tag.TagKey;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.registry.BuiltinRegistries;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.util.registry.RegistryEntry;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
@@ -40,6 +41,7 @@ import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import com.dfsek.terra.api.block.entity.BlockEntity;
|
||||
import com.dfsek.terra.api.block.entity.Container;
|
||||
@@ -60,13 +62,12 @@ public final class FabricUtil {
|
||||
.toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT);
|
||||
}
|
||||
|
||||
public static void registerBiomes(Registry<net.minecraft.world.biome.Biome> biomeRegistry) {
|
||||
public static void registerBiomes() {
|
||||
logger.info("Registering biomes...");
|
||||
FabricEntryPoint.getPlatform().getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
|
||||
pack.getCheckedRegistry(Biome.class)
|
||||
.forEach((id, biome) -> registerBiome(biome, pack, biomeRegistry, id));
|
||||
.forEach((id, biome) -> registerBiome(biome, pack, id));
|
||||
});
|
||||
logger.info("Biomes registered.");
|
||||
}
|
||||
|
||||
private static final Map<Identifier, List<Identifier>>
|
||||
@@ -78,8 +79,9 @@ public final class FabricUtil {
|
||||
* @param biome The Terra BiomeBuilder.
|
||||
* @param pack The ConfigPack this biome belongs to.
|
||||
*/
|
||||
public static void registerBiome(Biome biome, ConfigPack pack, Registry<net.minecraft.world.biome.Biome> registry,
|
||||
public static void registerBiome(Biome biome, ConfigPack pack,
|
||||
com.dfsek.terra.api.registry.key.RegistryKey id) {
|
||||
Registry<net.minecraft.world.biome.Biome> registry = BuiltinRegistries.BIOME;
|
||||
RegistryEntry<net.minecraft.world.biome.Biome> vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry);
|
||||
|
||||
|
||||
@@ -93,8 +95,7 @@ public final class FabricUtil {
|
||||
if(registry.containsId(identifier)) {
|
||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(registry, identifier).orElseThrow());
|
||||
} else {
|
||||
Registry.register(registry, identifier, minecraftBiome);
|
||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(registry, identifier).orElseThrow());
|
||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry, identifier, minecraftBiome));
|
||||
}
|
||||
|
||||
TERRA_BIOME_MAP.computeIfAbsent(vanilla.getKey().orElseThrow().getValue(), i -> new ArrayList<>()).add(identifier);
|
||||
|
||||
Reference in New Issue
Block a user