From 8070d37ef03d829e8351378f5eb05f5b5795c2ef Mon Sep 17 00:00:00 2001 From: Raven Szewczyk Date: Fri, 16 Sep 2022 19:33:10 +0100 Subject: [PATCH] Add thaumcraft compat to prevent trees&aura node generation when requested --- dependencies.gradle | 2 + .../personalspace/PersonalSpaceMod.java | 59 +++++++++++++++---- 2 files changed, 50 insertions(+), 11 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 1f0e61a..c8dd9f4 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -6,4 +6,6 @@ dependencies { compile("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-104-GTNH:dev") { transitive = false } compile("com.github.GTNewHorizons:NotEnoughItems:2.3.1-GTNH:dev") compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.16p-GTNH:dev") {transitive = false} + compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') {transitive = false} + compileOnly('com.github.GTNewHorizons:Baubles:1.0.1.14:dev') {transitive = false} } diff --git a/src/main/java/xyz/kubasz/personalspace/PersonalSpaceMod.java b/src/main/java/xyz/kubasz/personalspace/PersonalSpaceMod.java index 1f22731..ec075cd 100644 --- a/src/main/java/xyz/kubasz/personalspace/PersonalSpaceMod.java +++ b/src/main/java/xyz/kubasz/personalspace/PersonalSpaceMod.java @@ -30,6 +30,8 @@ import gnu.trove.map.hash.TIntObjectHashMap; import java.io.File; import java.io.IOException; +import java.lang.reflect.Field; +import java.util.HashMap; import java.util.List; import java.util.Objects; import net.minecraft.nbt.NBTTagCompound; @@ -53,7 +55,7 @@ version = Tags.VERSION, name = Tags.MODNAME, acceptedMinecraftVersions = "[1.7.10]", - dependencies = "after:utilityworlds;after:appliedenergistics2-core;after:GalaxySpace") + dependencies = "after:utilityworlds;after:appliedenergistics2-core;after:GalaxySpace;after:Thaumcraft") public class PersonalSpaceMod { public static final String DIM_METADATA_FILE = "personalspace_metadata.cfg"; @@ -220,6 +222,9 @@ public void worldSave(WorldEvent.Save event) { private static final int NATURA_DIM_WORLDGEN_CLOUD_BIT = 2; private static final int NATURA_DIM_WORLDGEN_TREE_BIT = 4; + private static final String THAUMCRAFT_MODID = "Thaumcraft"; + private static Field thaumcraftDimensionBlacklist = null; + private static int naturaConfigForDim(DimensionConfig config) { int gen = 0; if (config.isGeneratingVegetation()) { @@ -232,24 +237,46 @@ private static int naturaConfigForDim(DimensionConfig config) { return gen; } + private static HashMap getThaumcraftDimensionBlacklist() { + if (Loader.isModLoaded(THAUMCRAFT_MODID)) { + try { + if (thaumcraftDimensionBlacklist == null) { + Class klass = Class.forName("thaumcraft.common.lib.world.ThaumcraftWorldGenerator"); + thaumcraftDimensionBlacklist = klass.getField("dimensionBlacklist"); + } + return (HashMap) thaumcraftDimensionBlacklist.get(null); + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + return null; + } + private void bulkDimSettingsUpdate() { TIntArrayList dimIds = new TIntArrayList(); TIntArrayList dimNaturaGens = new TIntArrayList(); + HashMap tcBlacklist = getThaumcraftDimensionBlacklist(); CommonProxy.getDimensionConfigObjects(false).forEachEntry((dimId, config) -> { if (config == null) { return true; } dimIds.add(dimId); dimNaturaGens.add(naturaConfigForDim(config)); + if (tcBlacklist != null) { + if (config.isGeneratingTrees()) { + tcBlacklist.remove(dimId); + } else { + tcBlacklist.put(dimId, 0); + } + } return true; }); - if (dimIds.isEmpty()) { - return; + if (Loader.isModLoaded(NATURA_MODID) && !dimIds.isEmpty()) { + NBTTagCompound naturaImc = new NBTTagCompound(); + naturaImc.setIntArray(NATURA_IMC_DIMS, dimIds.toArray()); + naturaImc.setIntArray(NATURA_IMC_SETS, dimNaturaGens.toArray()); + FMLInterModComms.sendRuntimeMessage(this, NATURA_MODID, NATURA_IMC, naturaImc); } - NBTTagCompound naturaImc = new NBTTagCompound(); - naturaImc.setIntArray(NATURA_IMC_DIMS, dimIds.toArray()); - naturaImc.setIntArray(NATURA_IMC_SETS, dimNaturaGens.toArray()); - FMLInterModComms.sendRuntimeMessage(this, NATURA_MODID, NATURA_IMC, naturaImc); } public void onDimSettingsChangeServer(int dimId) { @@ -257,10 +284,20 @@ public void onDimSettingsChangeServer(int dimId) { if (config == null) { return; } - NBTTagCompound naturaImc = new NBTTagCompound(); - naturaImc.setIntArray(NATURA_IMC_DIMS, new int[] {dimId}); - naturaImc.setIntArray(NATURA_IMC_SETS, new int[] {naturaConfigForDim(config)}); - FMLInterModComms.sendRuntimeMessage(this, NATURA_MODID, NATURA_IMC, naturaImc); + HashMap tcBlacklist = getThaumcraftDimensionBlacklist(); + if (tcBlacklist != null) { + if (config.isGeneratingTrees()) { + tcBlacklist.remove(dimId); + } else { + tcBlacklist.put(dimId, 0); + } + } + if (Loader.isModLoaded(NATURA_MODID)) { + NBTTagCompound naturaImc = new NBTTagCompound(); + naturaImc.setIntArray(NATURA_IMC_DIMS, new int[] {dimId}); + naturaImc.setIntArray(NATURA_IMC_SETS, new int[] {naturaConfigForDim(config)}); + FMLInterModComms.sendRuntimeMessage(this, NATURA_MODID, NATURA_IMC, naturaImc); + } } private static boolean thermosLogged = false;