From 7c2982aa0a2bfed411dc08f8abb5db0edf8fc8b9 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 20 Jun 2022 23:33:14 -0700 Subject: [PATCH] use registerhelper to register biomes --- .../dfsek/terra/forge/ForgeEntryPoint.java | 2 +- .../com/dfsek/terra/forge/PlatformImpl.java | 2 +- .../com/dfsek/terra/forge/util/BiomeUtil.java | 25 ++++++++----------- .../dfsek/terra/forge/util/LifecycleUtil.java | 4 +-- .../terra/forge/util/ProtoPlatformBiome.java | 6 +++++ 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java index 2e963734f..2c7da3437 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java @@ -68,7 +68,7 @@ public class ForgeEntryPoint { @SubscribeEvent(priority = EventPriority.LOWEST) public void registerBiomes(RegisterEvent event) { event.register(Keys.BLOCKS, helper -> sanityCheck.progress(RegistryStep.BLOCK, () -> logger.debug("Block registration detected."))); - event.register(Keys.BIOMES, helper -> sanityCheck.progress(RegistryStep.BIOME, LifecycleUtil::initialize)); + event.register(Keys.BIOMES, helper -> sanityCheck.progress(RegistryStep.BIOME, () -> LifecycleUtil.initialize(helper))); event.register(Registry.WORLD_PRESET_KEY, helper -> sanityCheck.progress(RegistryStep.WORLD_TYPE, () -> LifecycleUtil.registerWorldTypes(helper))); diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/PlatformImpl.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/PlatformImpl.java index 3e15ce880..0e5c4119e 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/PlatformImpl.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/PlatformImpl.java @@ -83,7 +83,7 @@ public class PlatformImpl extends AbstractPlatform { LOGGER.warn("Failed to execute reload", throwable); return null; }).join(); - BiomeUtil.registerBiomes(); + //BiomeUtil.registerBiomes(); server.getWorlds().forEach(world -> { if(world.getChunkManager().getChunkGenerator() instanceof FabricChunkGeneratorWrapper chunkGeneratorWrapper) { getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> { diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java index 9e4c1e257..5612372b4 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java @@ -16,6 +16,8 @@ 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.RegisterEvent.RegisterHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,11 +39,11 @@ public final class BiomeUtil { .toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT); } - public static void registerBiomes() { + public static void registerBiomes(RegisterHelper helper) { logger.info("Registering biomes..."); ForgeEntryPoint.getPlatform().getConfigRegistry().forEach(pack -> { // Register all Terra biomes. pack.getCheckedRegistry(Biome.class) - .forEach((id, biome) -> registerBiome(biome, pack, id)); + .forEach((id, biome) -> registerBiome(biome, pack, id, helper)); }); registerFlora(BuiltinRegistries.BIOME); logger.info("Terra biomes registered."); @@ -54,27 +56,22 @@ public final class BiomeUtil { * @param pack The ConfigPack this biome belongs to. */ private static void registerBiome(Biome biome, ConfigPack pack, - com.dfsek.terra.api.registry.key.RegistryKey id) { - Registry registry = BuiltinRegistries.BIOME; - RegistryKey vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry); + com.dfsek.terra.api.registry.key.RegistryKey id, RegisterHelper helper) { + RegistryKey vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(ForgeRegistries.BIOMES); if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla); } else { - net.minecraft.world.biome.Biome minecraftBiome = createBiome(biome, registry.get(vanilla)); + net.minecraft.world.biome.Biome minecraftBiome = createBiome(biome, ForgeRegistries.BIOMES.getDelegateOrThrow(vanilla).value()); Identifier identifier = new Identifier("terra", createBiomeID(pack, id)); - if(registry.containsId(identifier)) { - ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(registry, identifier) - .orElseThrow() - .getKey() - .orElseThrow()); + if(ForgeRegistries.BIOMES.containsKey(identifier)) { + ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier).orElseThrow().getKey().orElseThrow()); } else { - ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry, - registerKey(identifier).getValue(), - minecraftBiome).getKey().orElseThrow()); + helper.register(registerKey(identifier).getValue(), minecraftBiome); + ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier).orElseThrow().getKey().orElseThrow()); } TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier); diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/LifecycleUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/LifecycleUtil.java index 7ff4b1a1b..209d95057 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/LifecycleUtil.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/LifecycleUtil.java @@ -35,10 +35,10 @@ public class LifecycleUtil { private static final Logger LOGGER = LoggerFactory.getLogger(LifecycleUtil.class); private static final List PRESETS = new ArrayList<>(); - public static void initialize() { + public static void initialize(RegisterHelper helper) { ForgeEntryPoint.getPlatform().getEventManager().callEvent( new PlatformInitializationEvent()); - BiomeUtil.registerBiomes(); + BiomeUtil.registerBiomes(helper); } public static void registerWorldTypes(RegisterHelper helper) { diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ProtoPlatformBiome.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ProtoPlatformBiome.java index b67932f0b..49fbbb211 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ProtoPlatformBiome.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ProtoPlatformBiome.java @@ -26,6 +26,8 @@ import java.util.Objects; import com.dfsek.terra.api.world.biome.PlatformBiome; +import net.minecraftforge.registries.IForgeRegistry; + public class ProtoPlatformBiome implements PlatformBiome { private final Identifier identifier; @@ -40,6 +42,10 @@ public class ProtoPlatformBiome implements PlatformBiome { return FabricUtil.getEntry(registry, identifier).orElseThrow().getKey().orElseThrow(); } + public RegistryKey get(IForgeRegistry registry) { + return registry.getHolder(identifier).orElseThrow().getKey().orElseThrow(); + } + @Override public Object getHandle() { return identifier;