register biomes to builtin registries

This commit is contained in:
dfsek
2022-05-24 23:35:28 -07:00
parent 0c3d4f4f4e
commit 2ddf620fb8
5 changed files with 33 additions and 43 deletions

View File

@@ -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 -> {

View File

@@ -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() {

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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);