diff options
author | Raven Szewczyk <git@eigenraven.me> | 2024-05-24 19:50:35 +0100 |
---|---|---|
committer | Raven Szewczyk <git@eigenraven.me> | 2024-05-24 19:50:35 +0100 |
commit | 6d1b2216464d4dad449ac6fcfec476832224a55e (patch) | |
tree | 526a0c15f7056313c80e6c0386e025e9b3f61781 /src/main/java/bloodasp/galacticgreg/dynconfig | |
parent | b5d35f40afa606ed1b07061dad82e0521a59c186 (diff) | |
download | GT5-Unofficial-6d1b2216464d4dad449ac6fcfec476832224a55e.tar.gz GT5-Unofficial-6d1b2216464d4dad449ac6fcfec476832224a55e.tar.bz2 GT5-Unofficial-6d1b2216464d4dad449ac6fcfec476832224a55e.zip |
Merge addon sources
Diffstat (limited to 'src/main/java/bloodasp/galacticgreg/dynconfig')
-rw-r--r-- | src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java | 168 | ||||
-rw-r--r-- | src/main/java/bloodasp/galacticgreg/dynconfig/DynamicOreMixWorldConfig.java | 93 |
2 files changed, 261 insertions, 0 deletions
diff --git a/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java b/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java new file mode 100644 index 0000000000..5c419c7c13 --- /dev/null +++ b/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java @@ -0,0 +1,168 @@ +package bloodasp.galacticgreg.dynconfig; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraftforge.common.ChestGenHooks; + +import bloodasp.galacticgreg.GalacticGreg; +import bloodasp.galacticgreg.api.Enums.DimensionType; +import bloodasp.galacticgreg.api.ModContainer; +import bloodasp.galacticgreg.api.ModDimensionDef; +import bloodasp.galacticgreg.registry.GalacticGregRegistry; +import gregtech.api.GregTech_API; + +/** + * This dynamic config is different to the OreMix one. This is used/bound to the ModDimensionDef, and the + * OreMixWorldConfig is bound to the veins. Don't get confused! + * + */ +public class DynamicDimensionConfig { + + public static class AsteroidConfig { + + public int MinSize; + public int MaxSize; + public int Probability; + public int OreChance; + public int OrePrimaryOffset; + public int SpecialBlockChance; + public int SmallOreChance; + public boolean ObeyHeightLimits; + public int OreGenMaxY; + public int FloatingAsteroidMinY; + public boolean HiddenOres; + public int LootChestChance; + public int LootChestTable; + public int NumLootItems; + public boolean RandomizeNumLootItems; + } + + private static Map<String, AsteroidConfig> _mDynamicAsteroidMap = new HashMap<>(); + + private static String getConfigKeyName(ModContainer pMC, ModDimensionDef pMDD) { + return String.format("galacticgreg.asteroids.%s.%s", pMC.getModName(), pMDD.getDimensionName()); + } + + private static String getConfigKeyName(ModContainer pMC, ModDimensionDef pMDD, String pSubCat) { + return String.format("%s.%s", getConfigKeyName(pMC, pMDD), pSubCat); + } + + public static AsteroidConfig getAsteroidConfig(ModDimensionDef pDimDef) { + return _mDynamicAsteroidMap.getOrDefault(pDimDef.getDimIdentifier(), null); + } + + public static boolean InitDynamicConfig() { + try { + for (ModContainer mc : GalacticGregRegistry.getModContainers()) { + if (!mc.getEnabled()) continue; + + for (ModDimensionDef mdd : mc.getDimensionList()) { + DimensionType dt = mdd.getDimensionType(); + if (dt == DimensionType.Asteroid || dt == DimensionType.AsteroidAndPlanet) { + String tDimIdentifier = mdd.getDimIdentifier(); + if (_mDynamicAsteroidMap.containsKey(tDimIdentifier)) GalacticGreg.Logger.warn( + "Found 2 Dimensions with the same Identifier! This should never happen, and you should report this to me. Identifier in question: %s", + tDimIdentifier); + else { + AsteroidConfig aConf = new AsteroidConfig(); + aConf.MinSize = GregTech_API.sWorldgenFile.get(getConfigKeyName(mc, mdd), "SizeMin", 5); + aConf.MaxSize = GregTech_API.sWorldgenFile.get(getConfigKeyName(mc, mdd), "SizeMax", 15); + aConf.Probability = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd), "Probability", 200); + aConf.SpecialBlockChance = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd), "SpecialBlockChance", 5); + + aConf.OreChance = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "orespawn"), "BaseOreChance", 5); + aConf.OrePrimaryOffset = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "orespawn"), "PrimaryToRareOreOffset", 5); + aConf.SmallOreChance = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "orespawn"), "SmallOreChance", 10); + aConf.ObeyHeightLimits = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "orespawn"), "ObeyHeightLimits", false); + aConf.HiddenOres = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "orespawn"), "OresOnlyInsideAsteroids", false); + + if (GalacticGreg.GalacticConfig.LootChestsEnabled) { + aConf.LootChestChance = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "loot"), "LootChestChance", 1); + aConf.LootChestTable = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "loot"), "LootChestTable", 3); + aConf.NumLootItems = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "loot"), "LootChestItemCount", 10); + aConf.RandomizeNumLootItems = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "loot"), "RandomizeLootItemCount", true); + } else { + aConf.LootChestChance = 0; + aConf.LootChestTable = 1; + aConf.NumLootItems = 0; + aConf.RandomizeNumLootItems = false; + } + + if (dt == DimensionType.AsteroidAndPlanet) { + int tDefaultMaxY = mdd.getPreConfiguratedGroundOreMaxY(); + int tDefaultMinY = mdd.getPreConfiguratedFloatingAsteroidMinY(); + aConf.OreGenMaxY = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "floating"), "OreGenMaxY", tDefaultMaxY); + aConf.FloatingAsteroidMinY = GregTech_API.sWorldgenFile + .get(getConfigKeyName(mc, mdd, "floating"), "FloatingAsteroidMinY", tDefaultMinY); + } + + if (aConf.MaxSize > 50) GalacticGreg.Logger.warn( + "Asteroid-MaxSize for dimID [%s] is larger than 50. This might cause memory-problems, as the maximum asteroid size will be larger than 50*50*50 blocks", + tDimIdentifier); + _mDynamicAsteroidMap.put(tDimIdentifier, aConf); + } + } + } + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * Convert numbers to actual loot-table entries + * + * @param pACfg + * @return + */ + public static String getLootChestTable(AsteroidConfig pACfg) { + String tLootTable = ChestGenHooks.MINESHAFT_CORRIDOR; + + switch (pACfg.LootChestTable) { + case 2: + tLootTable = ChestGenHooks.PYRAMID_DESERT_CHEST; + break; + case 3: + tLootTable = ChestGenHooks.PYRAMID_JUNGLE_CHEST; + break; + case 4: + tLootTable = ChestGenHooks.PYRAMID_JUNGLE_DISPENSER; + break; + case 5: + tLootTable = ChestGenHooks.STRONGHOLD_CORRIDOR; + break; + case 6: + tLootTable = ChestGenHooks.STRONGHOLD_LIBRARY; + break; + case 7: + tLootTable = ChestGenHooks.STRONGHOLD_CROSSING; + break; + case 8: + tLootTable = ChestGenHooks.VILLAGE_BLACKSMITH; + break; + case 9: + tLootTable = ChestGenHooks.BONUS_CHEST; + break; + case 10: + tLootTable = ChestGenHooks.DUNGEON_CHEST; + break; + } + + return tLootTable; + } +} diff --git a/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicOreMixWorldConfig.java b/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicOreMixWorldConfig.java new file mode 100644 index 0000000000..862bfd4e4e --- /dev/null +++ b/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicOreMixWorldConfig.java @@ -0,0 +1,93 @@ +package bloodasp.galacticgreg.dynconfig; + +import java.util.HashMap; +import java.util.Map; + +import bloodasp.galacticgreg.GalacticGreg; +import bloodasp.galacticgreg.api.ModContainer; +import bloodasp.galacticgreg.api.ModDimensionDef; +import bloodasp.galacticgreg.registry.GalacticGregRegistry; +import gregtech.api.GregTech_API; + +/** + * This is the dynamic config class for every ore-vein that will generate config values according to the dimension and + * mod name + */ +public class DynamicOreMixWorldConfig { + + private String _mWorldGenName; + + public Map<String, Boolean> get_mDynWorldConfigMap() { + return new HashMap<>(_mDynWorldConfigMap != null ? _mDynWorldConfigMap : new HashMap<>()); + } + + private Map<String, Boolean> _mDynWorldConfigMap; + private final String _mConfigName; + + private String getConfigKeyName(ModContainer pMC, ModDimensionDef pMDD) { + return getConfigKeyName(pMC, pMDD, ""); + } + + private String getConfigKeyName(ModContainer pMC, ModDimensionDef pMDD, String pAdditionalName) { + String tRet = String.format("%s_%s", pMC.getModName(), pMDD.getDimensionName()); + if (pAdditionalName.length() > 1) tRet = String.format("%s_%s", tRet, pAdditionalName); + + return tRet; + } + + /** + * Init a new dynamic config for a given world-generator + * + * @param pWorldGenName + */ + public DynamicOreMixWorldConfig(String pWorldGenName) { + _mWorldGenName = pWorldGenName; + _mDynWorldConfigMap = new HashMap<>(); + _mConfigName = String.format("worldgen.%s", _mWorldGenName); + } + + public DynamicOreMixWorldConfig(String pWorldGenName, boolean bw) { + _mWorldGenName = pWorldGenName; + _mDynWorldConfigMap = new HashMap<>(); + _mConfigName = String.format("worldgen.gagregbartworks.%s", _mWorldGenName); + } + + /** + * Check if this OreGen is enabled for a given Dimension, represented by pMDD + * + * @param pMDD The dimension in question + * @return true or false if *this* oregen is enabled in the worldgen config + */ + public boolean isEnabledInDim(ModDimensionDef pMDD) { + String tDimIdentifier = pMDD.getDimIdentifier(); + return _mDynWorldConfigMap.getOrDefault(tDimIdentifier, false); + } + + /** + * Initializes the dynamic oregen config. This must be called *AFTER* InitModContainers() has done its work + * + * @return true or false if the config init was successfull + */ + public boolean InitDynamicConfig() { + try { + for (ModContainer mc : GalacticGregRegistry.getModContainers()) { + if (!mc.getEnabled()) continue; + + for (ModDimensionDef mdd : mc.getDimensionList()) { + String tDimIdentifier = mdd.getDimIdentifier(); + if (_mDynWorldConfigMap.containsKey(tDimIdentifier)) GalacticGreg.Logger.error( + "Found 2 Dimensions with the same Identifier: %s Dimension will not generate Ores", + tDimIdentifier); + else { + boolean tFlag = GregTech_API.sWorldgenFile.get(_mConfigName, getConfigKeyName(mc, mdd), false); + _mDynWorldConfigMap.put(tDimIdentifier, tFlag); + } + } + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } +} |