mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-10-26 05:50:08 +00:00
basic compatibility stuff on Forge
This commit is contained in:
1 parent
1e429e1bb3
commit
edcb818842
2 files changed
+104
-12
No files matched your search
@@ -1,19 +1,26 @@
|
|||||||
package com.dfsek.terra.forge;
|
package com.dfsek.terra.forge;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.util.generic.pair.Pair;
|
||||||
import com.dfsek.terra.config.builder.BiomeBuilder;
|
import com.dfsek.terra.config.builder.BiomeBuilder;
|
||||||
import com.dfsek.terra.config.pack.ConfigPack;
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
import com.dfsek.terra.config.templates.BiomeTemplate;
|
||||||
import net.minecraft.block.Blocks;
|
import com.dfsek.terra.forge.config.PostLoadCompatibilityOptions;
|
||||||
|
import com.dfsek.terra.forge.config.PreLoadCompatibilityOptions;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.util.registry.WorldGenRegistries;
|
||||||
import net.minecraft.world.biome.Biome;
|
import net.minecraft.world.biome.Biome;
|
||||||
import net.minecraft.world.biome.BiomeAmbience;
|
import net.minecraft.world.biome.BiomeAmbience;
|
||||||
import net.minecraft.world.biome.BiomeGenerationSettings;
|
import net.minecraft.world.biome.BiomeGenerationSettings;
|
||||||
import net.minecraft.world.gen.GenerationStage;
|
import net.minecraft.world.gen.GenerationStage;
|
||||||
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder;
|
import net.minecraft.world.gen.carver.ConfiguredCarver;
|
||||||
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilderConfig;
|
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
||||||
|
import net.minecraft.world.gen.feature.StructureFeature;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public final class ForgeUtil {
|
public final class ForgeUtil {
|
||||||
public static String createBiomeID(ConfigPack pack, String biomeID) {
|
public static String createBiomeID(ConfigPack pack, String biomeID) {
|
||||||
@@ -21,16 +28,52 @@ public final class ForgeUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("ConstantConditions")
|
@SuppressWarnings("ConstantConditions")
|
||||||
public static Biome createBiome(BiomeBuilder biome) {
|
public static Biome createBiome(BiomeBuilder biome, ConfigPack pack, TerraForgePlugin.ForgeAddon forgeAddon) {
|
||||||
BiomeTemplate template = biome.getTemplate();
|
BiomeTemplate template = biome.getTemplate();
|
||||||
Map<String, Integer> colors = template.getColors();
|
Map<String, Integer> colors = template.getColors();
|
||||||
|
|
||||||
Biome vanilla = (Biome) ((Object) new ArrayList<>(biome.getVanillaBiomes().getContents()).get(0));
|
Biome vanilla = (Biome) (new ArrayList<>(biome.getVanillaBiomes().getContents()).get(0)).getHandle();
|
||||||
|
|
||||||
BiomeGenerationSettings.Builder generationSettings = new BiomeGenerationSettings.Builder();
|
BiomeGenerationSettings.Builder generationSettings = new BiomeGenerationSettings.Builder();
|
||||||
generationSettings.surfaceBuilder(SurfaceBuilder.DEFAULT.configured(new SurfaceBuilderConfig(Blocks.GRASS_BLOCK.defaultBlockState(), Blocks.DIRT.defaultBlockState(), Blocks.GRAVEL.defaultBlockState()))); // It needs a surfacebuilder, even though we dont use it.
|
|
||||||
|
generationSettings.surfaceBuilder(vanilla.getGenerationSettings().getSurfaceBuilder()); // It needs a surfacebuilder, even though we dont use it.
|
||||||
|
|
||||||
generationSettings.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, TerraForgePlugin.POPULATOR_CONFIGURED_FEATURE);
|
generationSettings.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, TerraForgePlugin.POPULATOR_CONFIGURED_FEATURE);
|
||||||
|
|
||||||
|
if(pack.getTemplate().vanillaCaves()) {
|
||||||
|
for(GenerationStage.Carving carver : GenerationStage.Carving.values()) {
|
||||||
|
for(Supplier<ConfiguredCarver<?>> configuredCarverSupplier : vanilla.getGenerationSettings().getCarvers(carver)) {
|
||||||
|
generationSettings.addCarver(carver, configuredCarverSupplier.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Pair<PreLoadCompatibilityOptions, PostLoadCompatibilityOptions> pair = forgeAddon.getTemplates().get(pack);
|
||||||
|
PreLoadCompatibilityOptions compatibilityOptions = pair.getLeft();
|
||||||
|
PostLoadCompatibilityOptions postLoadCompatibilityOptions = pair.getRight();
|
||||||
|
|
||||||
|
TerraForgePlugin.getInstance().getDebugLogger().info("Injecting Vanilla structures and features into Terra biome " + biome.getTemplate().getID());
|
||||||
|
|
||||||
|
for(Supplier<StructureFeature<?, ?>> structureFeature : vanilla.getGenerationSettings().structures()) {
|
||||||
|
ResourceLocation key = WorldGenRegistries.CONFIGURED_STRUCTURE_FEATURE.getKey(structureFeature.get());
|
||||||
|
if(!compatibilityOptions.getExcludedBiomeStructures().contains(key) && !postLoadCompatibilityOptions.getExcludedPerBiomeStructures().getOrDefault(biome, Collections.emptySet()).contains(key)) {
|
||||||
|
generationSettings.addStructureStart(structureFeature.get());
|
||||||
|
TerraForgePlugin.getInstance().getDebugLogger().info("Injected structure " + key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(compatibilityOptions.doBiomeInjection()) {
|
||||||
|
for(int step = 0; step < vanilla.getGenerationSettings().features().size(); step++) {
|
||||||
|
for(Supplier<ConfiguredFeature<?, ?>> featureSupplier : vanilla.getGenerationSettings().features().get(step)) {
|
||||||
|
ResourceLocation key = WorldGenRegistries.CONFIGURED_FEATURE.getKey(featureSupplier.get());
|
||||||
|
if(!compatibilityOptions.getExcludedBiomeFeatures().contains(key) && !postLoadCompatibilityOptions.getExcludedPerBiomeFeatures().getOrDefault(biome, Collections.emptySet()).contains(key)) {
|
||||||
|
generationSettings.addFeature(step, featureSupplier);
|
||||||
|
TerraForgePlugin.getInstance().getDebugLogger().info("Injected feature " + key + " at stage " + step);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BiomeAmbience vanillaEffects = vanilla.getSpecialEffects();
|
BiomeAmbience vanillaEffects = vanilla.getSpecialEffects();
|
||||||
BiomeAmbience.Builder effects = new BiomeAmbience.Builder()
|
BiomeAmbience.Builder effects = new BiomeAmbience.Builder()
|
||||||
.waterColor(colors.getOrDefault("water", vanillaEffects.getWaterColor()))
|
.waterColor(colors.getOrDefault("water", vanillaEffects.getWaterColor()))
|
||||||
@@ -44,7 +87,7 @@ public final class ForgeUtil {
|
|||||||
} else {
|
} else {
|
||||||
vanillaEffects.getGrassColorOverride().ifPresent(effects::grassColorOverride);
|
vanillaEffects.getGrassColorOverride().ifPresent(effects::grassColorOverride);
|
||||||
}
|
}
|
||||||
vanillaEffects.getFoliageColorOverride().ifPresent(effects::foliageColorOverride);
|
|
||||||
if(colors.containsKey("foliage")) {
|
if(colors.containsKey("foliage")) {
|
||||||
effects.foliageColorOverride(colors.get("foliage"));
|
effects.foliageColorOverride(colors.get("foliage"));
|
||||||
} else {
|
} else {
|
||||||
@@ -61,6 +104,7 @@ public final class ForgeUtil {
|
|||||||
.specialEffects(effects.build())
|
.specialEffects(effects.build())
|
||||||
.mobSpawnSettings(vanilla.getMobSettings())
|
.mobSpawnSettings(vanilla.getMobSettings())
|
||||||
.generationSettings(generationSettings.build())
|
.generationSettings(generationSettings.build())
|
||||||
.build().setRegistryName("terra", createBiomeID(template.getPack(), template.getID()));
|
.build()
|
||||||
|
.setRegistryName("terra", createBiomeID(template.getPack(), template.getID()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.dfsek.terra.forge;
|
package com.dfsek.terra.forge;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.exception.ConfigException;
|
||||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
import com.dfsek.tectonic.loading.TypeRegistry;
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.addons.TerraAddon;
|
import com.dfsek.terra.api.addons.TerraAddon;
|
||||||
@@ -14,6 +15,7 @@ import com.dfsek.terra.api.event.EventManager;
|
|||||||
import com.dfsek.terra.api.event.TerraEventManager;
|
import com.dfsek.terra.api.event.TerraEventManager;
|
||||||
import com.dfsek.terra.api.event.annotations.Global;
|
import com.dfsek.terra.api.event.annotations.Global;
|
||||||
import com.dfsek.terra.api.event.annotations.Priority;
|
import com.dfsek.terra.api.event.annotations.Priority;
|
||||||
|
import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent;
|
||||||
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
import com.dfsek.terra.api.platform.block.BlockData;
|
||||||
import com.dfsek.terra.api.platform.handle.ItemHandle;
|
import com.dfsek.terra.api.platform.handle.ItemHandle;
|
||||||
@@ -25,6 +27,7 @@ import com.dfsek.terra.api.registry.LockedRegistry;
|
|||||||
import com.dfsek.terra.api.transform.Transformer;
|
import com.dfsek.terra.api.transform.Transformer;
|
||||||
import com.dfsek.terra.api.transform.Validator;
|
import com.dfsek.terra.api.transform.Validator;
|
||||||
import com.dfsek.terra.api.util.JarUtil;
|
import com.dfsek.terra.api.util.JarUtil;
|
||||||
|
import com.dfsek.terra.api.util.generic.pair.Pair;
|
||||||
import com.dfsek.terra.api.util.logging.DebugLogger;
|
import com.dfsek.terra.api.util.logging.DebugLogger;
|
||||||
import com.dfsek.terra.commands.CommandUtil;
|
import com.dfsek.terra.commands.CommandUtil;
|
||||||
import com.dfsek.terra.config.GenericLoaders;
|
import com.dfsek.terra.config.GenericLoaders;
|
||||||
@@ -32,6 +35,8 @@ import com.dfsek.terra.config.PluginConfig;
|
|||||||
import com.dfsek.terra.config.lang.LangUtil;
|
import com.dfsek.terra.config.lang.LangUtil;
|
||||||
import com.dfsek.terra.config.lang.Language;
|
import com.dfsek.terra.config.lang.Language;
|
||||||
import com.dfsek.terra.config.pack.ConfigPack;
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
|
import com.dfsek.terra.forge.config.PostLoadCompatibilityOptions;
|
||||||
|
import com.dfsek.terra.forge.config.PreLoadCompatibilityOptions;
|
||||||
import com.dfsek.terra.forge.generation.ForgeChunkGeneratorWrapper;
|
import com.dfsek.terra.forge.generation.ForgeChunkGeneratorWrapper;
|
||||||
import com.dfsek.terra.forge.generation.PopulatorFeature;
|
import com.dfsek.terra.forge.generation.PopulatorFeature;
|
||||||
import com.dfsek.terra.forge.generation.TerraBiomeSource;
|
import com.dfsek.terra.forge.generation.TerraBiomeSource;
|
||||||
@@ -45,6 +50,7 @@ import com.dfsek.terra.registry.master.ConfigRegistry;
|
|||||||
import com.dfsek.terra.world.TerraWorld;
|
import com.dfsek.terra.world.TerraWorld;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
|
import net.minecraft.util.registry.WorldGenRegistries;
|
||||||
import net.minecraft.world.biome.Biome;
|
import net.minecraft.world.biome.Biome;
|
||||||
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
||||||
import net.minecraft.world.gen.feature.Features;
|
import net.minecraft.world.gen.feature.Features;
|
||||||
@@ -54,7 +60,6 @@ import net.minecraft.world.gen.placement.DecoratedPlacement;
|
|||||||
import net.minecraft.world.gen.placement.NoPlacementConfig;
|
import net.minecraft.world.gen.placement.NoPlacementConfig;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
import net.minecraftforge.registries.ForgeRegistry;
|
import net.minecraftforge.registries.ForgeRegistry;
|
||||||
@@ -111,7 +116,10 @@ public class TerraForgePlugin implements TerraPlugin {
|
|||||||
private final WorldHandle worldHandle = new ForgeWorldHandle();
|
private final WorldHandle worldHandle = new ForgeWorldHandle();
|
||||||
private final ConfigRegistry registry = new ConfigRegistry();
|
private final ConfigRegistry registry = new ConfigRegistry();
|
||||||
private final CheckedRegistry<ConfigPack> checkedRegistry = new CheckedRegistry<>(registry);
|
private final CheckedRegistry<ConfigPack> checkedRegistry = new CheckedRegistry<>(registry);
|
||||||
private final AddonRegistry addonRegistry = new AddonRegistry(new ForgeAddon(this), this);
|
|
||||||
|
private final ForgeAddon addon = new ForgeAddon(this);
|
||||||
|
|
||||||
|
private final AddonRegistry addonRegistry = new AddonRegistry(addon, this);
|
||||||
private final LockedRegistry<TerraAddon> addonLockedRegistry = new LockedRegistry<>(addonRegistry);
|
private final LockedRegistry<TerraAddon> addonLockedRegistry = new LockedRegistry<>(addonRegistry);
|
||||||
private final PluginConfig config = new PluginConfig();
|
private final PluginConfig config = new PluginConfig();
|
||||||
private final Transformer<String, Biome> biomeFixer = new Transformer.Builder<String, Biome>()
|
private final Transformer<String, Biome> biomeFixer = new Transformer.Builder<String, Biome>()
|
||||||
@@ -125,6 +133,7 @@ public class TerraForgePlugin implements TerraPlugin {
|
|||||||
this.dataFolder = Paths.get("config", "Terra").toFile();
|
this.dataFolder = Paths.get("config", "Terra").toFile();
|
||||||
saveDefaultConfig();
|
saveDefaultConfig();
|
||||||
config.load(this);
|
config.load(this);
|
||||||
|
debugLogger.setDebug(config.isDebug());
|
||||||
LangUtil.load(config.getLanguage(), this);
|
LangUtil.load(config.getLanguage(), this);
|
||||||
try {
|
try {
|
||||||
CommandUtil.registerAll(manager);
|
CommandUtil.registerAll(manager);
|
||||||
@@ -157,7 +166,7 @@ public class TerraForgePlugin implements TerraPlugin {
|
|||||||
logger.info("Loaded packs.");
|
logger.info("Loaded packs.");
|
||||||
|
|
||||||
((ForgeRegistry<Biome>) ForgeRegistries.BIOMES).unfreeze(); // Evil
|
((ForgeRegistry<Biome>) ForgeRegistries.BIOMES).unfreeze(); // Evil
|
||||||
getConfigRegistry().forEach(pack -> pack.getBiomeRegistry().forEach((id, biome) -> ForgeRegistries.BIOMES.register(ForgeUtil.createBiome(biome)))); // Register all Terra biomes.
|
getConfigRegistry().forEach(pack -> pack.getBiomeRegistry().forEach((id, biome) -> ForgeRegistries.BIOMES.register(ForgeUtil.createBiome(biome, pack, addon)))); // Register all Terra biomes.
|
||||||
((ForgeRegistry<Biome>) ForgeRegistries.BIOMES).freeze();
|
((ForgeRegistry<Biome>) ForgeRegistries.BIOMES).freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,7 +313,9 @@ public class TerraForgePlugin implements TerraPlugin {
|
|||||||
@Addon("Terra-Forge")
|
@Addon("Terra-Forge")
|
||||||
@Author("Terra")
|
@Author("Terra")
|
||||||
@Version("1.0.0")
|
@Version("1.0.0")
|
||||||
private static final class ForgeAddon extends TerraAddon implements EventListener {
|
public static final class ForgeAddon extends TerraAddon implements EventListener {
|
||||||
|
|
||||||
|
private final Map<ConfigPack, Pair<PreLoadCompatibilityOptions, PostLoadCompatibilityOptions>> templates = new HashMap<>();
|
||||||
|
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
|
|
||||||
@@ -340,6 +351,39 @@ public class TerraForgePlugin implements TerraPlugin {
|
|||||||
injectTree(treeRegistry, "MEGA_SPRUCE", Features.MEGA_SPRUCE);
|
injectTree(treeRegistry, "MEGA_SPRUCE", Features.MEGA_SPRUCE);
|
||||||
injectTree(treeRegistry, "CRIMSON_FUNGUS", Features.CRIMSON_FUNGI);
|
injectTree(treeRegistry, "CRIMSON_FUNGUS", Features.CRIMSON_FUNGI);
|
||||||
injectTree(treeRegistry, "WARPED_FUNGUS", Features.WARPED_FUNGI);
|
injectTree(treeRegistry, "WARPED_FUNGUS", Features.WARPED_FUNGI);
|
||||||
|
PreLoadCompatibilityOptions template = new PreLoadCompatibilityOptions();
|
||||||
|
try {
|
||||||
|
event.loadTemplate(template);
|
||||||
|
} catch(ConfigException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(template.doRegistryInjection()) {
|
||||||
|
WorldGenRegistries.CONFIGURED_FEATURE.entrySet().forEach(entry -> {
|
||||||
|
if(!template.getExcludedRegistryFeatures().contains(entry.getKey().getRegistryName())) {
|
||||||
|
try {
|
||||||
|
event.getPack().getTreeRegistry().add(entry.getKey().getRegistryName().toString(), (Tree) entry.getValue());
|
||||||
|
main.getDebugLogger().info("Injected ConfiguredFeature " + entry.getKey().getRegistryName() + " as Tree: " + entry.getValue());
|
||||||
|
} catch(DuplicateEntryException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
templates.put(event.getPack(), Pair.of(template, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Priority(Priority.HIGHEST)
|
||||||
|
@Global
|
||||||
|
public void createInjectionOptions(ConfigPackPostLoadEvent event) {
|
||||||
|
PostLoadCompatibilityOptions template = new PostLoadCompatibilityOptions();
|
||||||
|
|
||||||
|
try {
|
||||||
|
event.loadTemplate(template);
|
||||||
|
} catch(ConfigException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
templates.get(event.getPack()).setRight(template);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -349,5 +393,9 @@ public class TerraForgePlugin implements TerraPlugin {
|
|||||||
} catch(DuplicateEntryException ignore) {
|
} catch(DuplicateEntryException ignore) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<ConfigPack, Pair<PreLoadCompatibilityOptions, PostLoadCompatibilityOptions>> getTemplates() {
|
||||||
|
return templates;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user