aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java')
-rw-r--r--src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java173
1 files changed, 173 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..73f4a462b0
--- /dev/null
+++ b/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java
@@ -0,0 +1,173 @@
+package bloodasp.galacticgreg.dynconfig;
+
+import gregtech.api.GregTech_API;
+
+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;
+
+/**
+ * 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<String, AsteroidConfig>();
+
+ 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)
+ {
+ if (!_mDynamicAsteroidMap.containsKey(pDimDef.getDimIdentifier()))
+ return null;
+ else
+ return _mDynamicAsteroidMap.get(pDimDef.getDimIdentifier());
+ }
+
+ 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;
+ }
+}