diff --git a/platforms/mixin-lifecycle/build.gradle.kts b/platforms/mixin-lifecycle/build.gradle.kts
index 35461fc0a..35a1a7a42 100644
--- a/platforms/mixin-lifecycle/build.gradle.kts
+++ b/platforms/mixin-lifecycle/build.gradle.kts
@@ -36,6 +36,6 @@ tasks {
}
architectury {
- common("fabric")
+ common("fabric", "neoforge")
minecraft = Versions.Mod.minecraft
}
\ No newline at end of file
diff --git a/platforms/neoforge/build.gradle.kts b/platforms/neoforge/build.gradle.kts
index a0317d891..ab816adcc 100644
--- a/platforms/neoforge/build.gradle.kts
+++ b/platforms/neoforge/build.gradle.kts
@@ -17,6 +17,9 @@ dependencies {
implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false }
"developmentNeoForge"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false }
shaded(project(path = ":platforms:mixin-common", configuration = "transformProductionNeoForge")) { isTransitive = false }
+ implementation(project(path = ":platforms:mixin-lifecycle", configuration = "namedElements")) { isTransitive = false }
+ "developmentNeoForge"(project(path = ":platforms:mixin-lifecycle", configuration = "namedElements")) { isTransitive = false }
+ shaded(project(path = ":platforms:mixin-lifecycle", configuration = "transformProductionNeoForge")) { isTransitive = false }
minecraft("com.mojang", "minecraft", Versions.Mod.minecraft)
mappings(
diff --git a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/AwfulForgeHacks.java b/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/AwfulForgeHacks.java
deleted file mode 100644
index 0035acc26..000000000
--- a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/AwfulForgeHacks.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package com.dfsek.terra.neoforge;
-
-import net.minecraftforge.fml.loading.FMLLoader;
-import org.burningwave.core.classes.Classes;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.file.FileVisitOption;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.jar.JarFile;
-import java.util.stream.Stream;
-
-import com.dfsek.terra.AbstractPlatform;
-import com.dfsek.terra.api.addon.bootstrap.BootstrapAddonClassLoader;
-
-
-/**
- * Forge is really wacky and screws with class resolution in the addon loader. Loading every single Terra class *manually* on startup
- * fixes it. If you know of a better way to fix this, PLEASE let us know.
- */
-public final class AwfulForgeHacks {
- private static final Logger LOGGER = LoggerFactory.getLogger(AwfulForgeHacks.class);
-
- /**
- * Forge tampers with code source to make the *normal* way of getting the current JAR file useless, so this awful hack is
- * needed.
- *
- *
- * Class.class.getProtectionDomain()
- * .getCodeSource()
- * .getLocation()
- * .toURI()
- * .getPath()
- *
- */
- public static JarFile getTerraJar() throws IOException {
- LOGGER.info("Scanning for Terra JAR...");
- return Files.walk(Path.of(System.getProperty("user.dir"), "mods"), 1, FileVisitOption.FOLLOW_LINKS)
- .filter(it -> it.getFileName().toString().endsWith(".jar"))
- .peek(path -> LOGGER.info("Found mod: {}", path))
- .map(Path::toFile)
- .flatMap(path -> {
- try {
- return Stream.of(new JarFile(path));
- } catch(IOException e) {
- LOGGER.error("Malformed mod JAR: {}: {}", path, e);
- return Stream.of();
- }
- })
- .filter(jar -> jar
- .stream()
- .anyMatch(entry -> entry
- .getName()
- .equals(ForgeEntryPoint.class.getName().replace('.', '/') + ".class")))
- .findFirst()
- .orElseThrow(() -> new IllegalStateException("Could not find Terra JAR"));
- }
-
- public static void loadAllTerraClasses() {
- if(FMLLoader.isProduction()) {
- try(JarFile jar = getTerraJar()) {
- jar.stream()
- .forEach(jarEntry -> {
- if(jarEntry.getName().startsWith("com/dfsek/terra/neoforge/mixin")
- || jarEntry.getName().startsWith("com/dfsek/terra/mod/mixin")) {
- return;
- }
- if(jarEntry.getName().endsWith(".class")) {
- String name = jarEntry.getName().replace('/', '.');
- name = name.substring(0, name.length() - 6);
- try {
- Class.forName(name);
- } catch(ClassNotFoundException | NoClassDefFoundError e) {
- LOGGER.warn("Failed to load class {}: {}", name, e);
- }
- }
- });
- } catch(IOException e) {
- throw new IllegalStateException("Could not load all Terra classes", e);
- }
- } else {
- // Forgive me for what I'm about to do...
- LOGGER.warn(
- "I felt a great disturbance in the JVM, as if millions of class not found exceptions suddenly cried out in terror and" +
- " were suddenly silenced.");
- ArrayList pathsToLoad = new ArrayList<>();
-
- Path terraRoot = Path.of(System.getProperty("user.dir")).getParent().getParent().getParent();
- Path commonRoot = terraRoot.resolve("common");
- Path implementationRoot = commonRoot.resolve("implementation");
-
- pathsToLoad.add(commonRoot.resolve("api"));
- pathsToLoad.add(implementationRoot.resolve("base"));
- pathsToLoad.add(implementationRoot.resolve("bootstrap-addon-loader"));
- for(Path path : pathsToLoad) {
- try {
- Path target = path.resolve("build").resolve("classes").resolve("java").resolve("main");
-
- BootstrapAddonClassLoader cl = new BootstrapAddonClassLoader(new URL[]{ path.toUri().toURL() });
-
- Classes.Loaders omegaCL = Classes.Loaders.create();
- Files.walk(target, Integer.MAX_VALUE, FileVisitOption.FOLLOW_LINKS)
- .filter(it -> it.getFileName().toString().endsWith(".class"))
- .map(Path::toFile)
- .forEach(it -> {
- String name = it.getAbsolutePath().replace(target + "/", "").replace('\\', '.').replace('/', '.');
- name = name.substring(0, name.length() - 6);
- LOGGER.info("Loading class {}", name);
- try {
- Class.forName(name);
- } catch(ClassNotFoundException e) {
- try {
- String pathToJar = cl.loadClass(name)
- .getProtectionDomain()
- .getCodeSource()
- .getLocation()
- .toURI()
- .getPath();
-
- cl.addURL(new URL("jar:file:" + pathToJar + "!/"));
- Class newClassLoad = Class.forName(name, true, cl);
- omegaCL.loadOrDefine(newClassLoad, AbstractPlatform.class.getClassLoader());
- } catch(ClassNotFoundException | URISyntaxException | IOException ex) {
- throw new RuntimeException(ex);
- }
-
- }
- });
- } catch(IOException e) {
- throw new IllegalStateException("Could not load all Terra classes", e);
- }
- }
- }
- }
-
- public enum RegistryStep {
- BLOCK,
- BIOME,
- WORLD_TYPE,
- DONE
- }
-
-
- public static class RegistrySanityCheck {
- private final AtomicReference step = new AtomicReference<>(RegistryStep.BLOCK);
-
- public void progress(RegistryStep expected, Runnable action) {
- step.getAndUpdate(s -> {
- if(s != expected) {
- LOGGER.error("Registry sanity check failed, expected to find {}, found {}", expected, step);
- }
- action.run();
- RegistryStep[] registrySteps = RegistryStep.values();
- if(s.ordinal() < registrySteps.length - 1) {
- return registrySteps[s.ordinal() + 1];
- }
- return s;
- });
- }
- }
-}
diff --git a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/ForgeAddon.java b/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/ForgeAddon.java
deleted file mode 100644
index 5fe48f082..000000000
--- a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/ForgeAddon.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.dfsek.terra.neoforge;
-
-import com.dfsek.terra.mod.MinecraftAddon;
-import com.dfsek.terra.mod.ModPlatform;
-
-
-public class ForgeAddon extends MinecraftAddon {
-
- public ForgeAddon(ModPlatform modPlatform) {
- super(modPlatform);
- }
-
- @Override
- public String getID() {
- return "terra-forge";
- }
-}
\ No newline at end of file
diff --git a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/ForgeEntryPoint.java b/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/ForgeEntryPoint.java
deleted file mode 100644
index 8a2ac9049..000000000
--- a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/ForgeEntryPoint.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * This file is part of Terra.
- *
- * Terra is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Terra is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Terra. If not, see .
- */
-
-package com.dfsek.terra.neoforge;
-
-import net.minecraft.registry.RegistryKeys;
-import net.minecraft.util.Identifier;
-import net.minecraft.world.biome.Biome;
-import net.minecraftforge.eventbus.api.EventPriority;
-import net.minecraftforge.eventbus.api.IEventBus;
-import net.minecraftforge.eventbus.api.SubscribeEvent;
-import net.minecraftforge.fml.common.Mod;
-import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
-import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
-import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
-import net.minecraftforge.registries.ForgeRegistries.Keys;
-import net.minecraftforge.registries.RegisterEvent;
-import net.minecraftforge.registries.RegisterEvent.RegisterHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
-import com.dfsek.terra.neoforge.AwfulForgeHacks.RegistrySanityCheck;
-import com.dfsek.terra.neoforge.AwfulForgeHacks.RegistryStep;
-import com.dfsek.terra.neoforge.util.BiomeUtil;
-import com.dfsek.terra.mod.data.Codecs;
-
-
-@Mod("terra")
-@EventBusSubscriber(bus = Bus.MOD)
-public class ForgeEntryPoint {
- public static final String MODID = "terra";
- private static final Logger logger = LoggerFactory.getLogger(ForgeEntryPoint.class);
- private static final ForgePlatform TERRA_PLUGIN;
- static {
- AwfulForgeHacks.loadAllTerraClasses();
- TERRA_PLUGIN = new ForgePlatform();
- }
- private final RegistrySanityCheck sanityCheck = new RegistrySanityCheck();
-
- public ForgeEntryPoint() {
- IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
- modEventBus.register(this);
- }
-
- public static ForgePlatform getPlatform() {
- return TERRA_PLUGIN;
- }
-
- public static void initialize(RegisterHelper helper) {
- getPlatform().getEventManager().callEvent(
- new PlatformInitializationEvent());
- BiomeUtil.registerBiomes(helper);
- }
-
- @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, () -> initialize(helper)));
- event.register(RegistryKeys.WORLD_PRESET,
- helper -> sanityCheck.progress(RegistryStep.WORLD_TYPE, () -> TERRA_PLUGIN.registerWorldTypes(helper::register)));
-
-
- event.register(RegistryKeys.CHUNK_GENERATOR,
- helper -> helper.register(Identifier.of("terra:terra"), Codecs.MINECRAFT_CHUNK_GENERATOR_WRAPPER));
- event.register(RegistryKeys.BIOME_SOURCE, helper -> helper.register(Identifier.of("terra:terra"), Codecs.TERRA_BIOME_SOURCE));
- }
-}
diff --git a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/ForgePlatform.java b/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/ForgePlatform.java
deleted file mode 100644
index 63e68746d..000000000
--- a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/ForgePlatform.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * This file is part of Terra.
- *
- * Terra is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Terra is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Terra. If not, see .
- */
-
-package com.dfsek.terra.neoforge;
-
-import ca.solostudios.strata.Versions;
-import ca.solostudios.strata.parser.tokenizer.ParseException;
-import ca.solostudios.strata.version.Version;
-import net.minecraft.MinecraftVersion;
-import net.minecraft.enchantment.Enchantment;
-import net.minecraft.registry.Registry;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.world.biome.Biome;
-import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList;
-import net.minecraft.world.dimension.DimensionType;
-import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
-import net.minecraftforge.fml.loading.FMLLoader;
-import net.minecraftforge.server.ServerLifecycleHooks;
-import org.jetbrains.annotations.NotNull;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.dfsek.terra.addon.EphemeralAddon;
-import com.dfsek.terra.api.addon.BaseAddon;
-import com.dfsek.terra.api.util.generic.Lazy;
-import com.dfsek.terra.mod.CommonPlatform;
-import com.dfsek.terra.mod.ModPlatform;
-import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper;
-
-
-public class ForgePlatform extends ModPlatform {
- private static final Logger LOGGER = LoggerFactory.getLogger(ForgePlatform.class);
- private final Lazy dataFolder = Lazy.lazy(() -> new File("./config/Terra"));
-
- public ForgePlatform() {
- CommonPlatform.initialize(this);
- load();
- }
-
- @Override
- public MinecraftServer getServer() {
- return ServerLifecycleHooks.getCurrentServer();
- }
-
- @Override
- public boolean reload() {
- getTerraConfig().load(this);
- getRawConfigRegistry().clear();
- boolean succeed = getRawConfigRegistry().loadAll(this);
-
- MinecraftServer server = getServer();
-
- if(server != null) {
- server.reloadResources(server.getDataPackManager().getEnabledIds()).exceptionally(throwable -> {
- LOGGER.warn("Failed to execute reload", throwable);
- return null;
- }).join();
- //BiomeUtil.registerBiomes();
- server.getWorlds().forEach(world -> {
- if(world.getChunkManager().getChunkGenerator() instanceof MinecraftChunkGeneratorWrapper chunkGeneratorWrapper) {
- getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> {
- chunkGeneratorWrapper.setPack(pack);
- LOGGER.info("Replaced pack in chunk generator for world {}", world);
- });
- }
- });
- }
- return succeed;
- }
-
- @Override
- protected Iterable platformAddon() {
- List addons = new ArrayList<>();
-
- super.platformAddon().forEach(addons::add);
-
- String mcVersion = MinecraftVersion.CURRENT.getName();
- try {
- addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion), "minecraft"));
- } catch(ParseException e) {
- try {
- addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion + ".0"), "minecraft"));
- } catch(ParseException ex) {
- LOGGER.warn("Failed to parse Minecraft version", e);
- }
- }
-
- FMLLoader.getLoadingModList().getMods().forEach(mod -> {
- String id = mod.getModId();
- if(id.equals("terra") || id.equals("minecraft") || id.equals("java")) return;
- Version version = Versions.getVersion(mod.getVersion().getMajorVersion(), mod.getVersion().getMinorVersion(),
- mod.getVersion().getIncrementalVersion());
- addons.add(new EphemeralAddon(version, "forge:" + id));
- });
-
- return addons;
- }
-
- @Override
- public @NotNull String platformName() {
- return "Forge";
- }
-
- @Override
- public @NotNull File getDataFolder() {
- return dataFolder.value();
- }
-
- @Override
- public BaseAddon getPlatformAddon() {
- return new ForgeAddon(this);
- }
-
- @Override
- public Registry dimensionTypeRegistry() {
- return null;
- }
-
- @Override
- public Registry biomeRegistry() {
- return null;
- }
-
- @Override
- public Registry chunkGeneratorSettingsRegistry() {
- return null;
- }
-
- @Override
- public Registry multiNoiseBiomeSourceParameterListRegistry() {
- return null;
- }
-
- @Override
- public Registry enchantmentRegistry() {
- return null;
- }
-}
diff --git a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/mixin/lifecycle/NoiseConfigMixin.java b/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/mixin/lifecycle/NoiseConfigMixin.java
deleted file mode 100644
index 8c39ff01d..000000000
--- a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/mixin/lifecycle/NoiseConfigMixin.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.dfsek.terra.neoforge.mixin.lifecycle;
-
-import net.minecraft.registry.RegistryEntryLookup;
-import net.minecraft.util.math.noise.DoublePerlinNoiseSampler.NoiseParameters;
-import net.minecraft.world.biome.source.util.MultiNoiseUtil.MultiNoiseSampler;
-import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
-import net.minecraft.world.gen.noise.NoiseConfig;
-import org.spongepowered.asm.mixin.Final;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-import com.dfsek.terra.mod.util.SeedHack;
-
-
-/**
- * Hack to map noise sampler to seeds
- */
-@Mixin(NoiseConfig.class)
-public class NoiseConfigMixin {
- @Shadow
- @Final
- private MultiNoiseSampler multiNoiseSampler;
-
- @Inject(method = "(Lnet/minecraft/world/gen/chunk/ChunkGeneratorSettings;Lnet/minecraft/registry/RegistryEntryLookup;J)V",
- at = @At("TAIL"))
- private void mapMultiNoise(ChunkGeneratorSettings chunkGeneratorSettings, RegistryEntryLookup noiseParametersLookup,
- long seed,
- CallbackInfo ci) {
- SeedHack.register(multiNoiseSampler, seed);
- }
-}
diff --git a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/mixin/lifecycle/package-info.java b/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/mixin/lifecycle/package-info.java
deleted file mode 100644
index cf790e8ad..000000000
--- a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/mixin/lifecycle/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * This file is part of Terra.
- *
- * Terra is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Terra is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Terra. If not, see .
- */
-
-/**
- * Mixins that inject behavior into the client/server lifecycle.
- */
-
-package com.dfsek.terra.neoforge.mixin.lifecycle;
\ No newline at end of file
diff --git a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/util/BiomeUtil.java b/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/util/BiomeUtil.java
deleted file mode 100644
index 53d0d5b51..000000000
--- a/platforms/neoforge/src/main/java/com/dfsek/terra/neoforge/util/BiomeUtil.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.dfsek.terra.neoforge.util;
-
-import net.minecraft.registry.RegistryKey;
-import net.minecraft.registry.RegistryKeys;
-import net.minecraft.registry.entry.RegistryEntry;
-import net.minecraft.util.Identifier;
-import net.minecraft.village.VillagerType;
-import net.minecraftforge.registries.ForgeRegistries;
-import net.minecraftforge.registries.RegisterEvent.RegisterHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.Objects;
-
-import com.dfsek.terra.api.config.ConfigPack;
-import com.dfsek.terra.api.world.biome.Biome;
-import com.dfsek.terra.neoforge.ForgeEntryPoint;
-import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
-import com.dfsek.terra.mod.config.ProtoPlatformBiome;
-import com.dfsek.terra.mod.config.VanillaBiomeProperties;
-import com.dfsek.terra.mod.mixin.access.VillagerTypeAccessor;
-import com.dfsek.terra.mod.util.MinecraftUtil;
-
-
-public final class BiomeUtil {
- private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class);
-
-
- private BiomeUtil() {
-
- }
-
-
- 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, helper));
- });
- logger.info("Terra biomes registered.");
- }
-
- /**
- * Clones a Vanilla biome and injects Terra data to create a Terra-vanilla biome delegate.
- *
- * @param biome The Terra BiomeBuilder.
- * @param pack The ConfigPack this biome belongs to.
- */
- private static void registerBiome(Biome biome, ConfigPack pack,
- com.dfsek.terra.api.registry.key.RegistryKey id,
- RegisterHelper helper) {
- RegistryEntry
- vanilla = ForgeRegistries.BIOMES.getHolder(((ProtoPlatformBiome) biome.getPlatformBiome()).getHandle()).orElseThrow();
-
-
- if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) {
- ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla);
- } else {
- VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class);
-
- net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome,
- ForgeRegistries.BIOMES.getDelegateOrThrow(
- vanilla.getKey().orElseThrow())
- .value(),
- vanillaBiomeProperties);
-
- Identifier identifier = Identifier.of("terra", MinecraftUtil.createBiomeID(pack, id));
-
- if(ForgeRegistries.BIOMES.containsKey(identifier)) {
- ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier)
- .orElseThrow());
- } else {
- helper.register(MinecraftUtil.registerKey(identifier).getValue(), minecraftBiome);
- ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier)
- .orElseThrow());
- }
-
- Map, VillagerType> villagerMap = VillagerTypeAccessor.getBiomeTypeToIdMap();
-
- villagerMap.put(RegistryKey.of(RegistryKeys.BIOME, identifier),
- Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(),
- villagerMap.getOrDefault(vanilla.getKey().orElseThrow(), VillagerType.PLAINS)));
-
- MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getKey().orElseThrow().getValue(), i -> new ArrayList<>()).add(
- identifier);
- }
- }
-}