aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/objects
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/objects')
-rw-r--r--src/main/java/gregtech/api/objects/GT_UO_Dimension.java52
-rw-r--r--src/main/java/gregtech/api/objects/GT_UO_DimensionList.java83
-rw-r--r--src/main/java/gregtech/api/objects/GT_UO_Fluid.java63
3 files changed, 198 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/objects/GT_UO_Dimension.java b/src/main/java/gregtech/api/objects/GT_UO_Dimension.java
new file mode 100644
index 0000000000..ffad72868c
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_UO_Dimension.java
@@ -0,0 +1,52 @@
+package gregtech.api.objects;
+
+import java.util.ArrayList;
+import java.util.Random;
+import java.util.Set;
+
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+
+import gregtech.api.enums.GT_Values;
+import net.minecraftforge.common.config.ConfigCategory;
+import net.minecraftforge.common.config.Configuration;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_UO_Dimension {
+
+ private BiMap<String, GT_UO_Fluid> fFluids;
+ private int maxChance;
+ public String Dimension = "null";
+
+ public GT_UO_Dimension(ConfigCategory aConfigCategory) {
+ fFluids = HashBiMap.create();
+ if (aConfigCategory.containsKey("Dimension"))
+ {
+ aConfigCategory.get("Dimension").comment = "Dimension ID or Class Name";
+ Dimension = aConfigCategory.get("Dimension").getString();
+ }
+ maxChance = 0;
+ //System.out.println("GT UO "+aConfigCategory.getName()+" Dimension:"+Dimension);
+ for (int i = 0 ; i < aConfigCategory.getChildren().size(); i++) {
+ GT_UO_Fluid fluid = new GT_UO_Fluid((ConfigCategory)aConfigCategory.getChildren().toArray()[i]);
+ fFluids.put(fluid.Registry, fluid);
+ maxChance += fluid.Chance;
+ }
+ }
+
+ public GT_UO_Fluid getRandomFluid (Random aRandom) {
+ int random = aRandom.nextInt(3);
+ random = aRandom.nextInt(1000);
+ int step = 0;
+ for (BiMap.Entry<String, GT_UO_Fluid> fl : fFluids.entrySet()) {
+ int chance = fl.getValue().Chance*1000/maxChance;
+ if (random<=chance) return fl.getValue();
+ //System.out.println("GT UO "+fl.getValue().Registry+" Chance:"+chance+" Random:"+random);
+ random-=chance;
+ }
+
+ return null;
+
+ }
+
+}
diff --git a/src/main/java/gregtech/api/objects/GT_UO_DimensionList.java b/src/main/java/gregtech/api/objects/GT_UO_DimensionList.java
new file mode 100644
index 0000000000..89340132be
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_UO_DimensionList.java
@@ -0,0 +1,83 @@
+package gregtech.api.objects;
+
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+
+import gregtech.GT_Mod;
+import gregtech.api.enums.GT_Values;
+import net.minecraftforge.common.DimensionManager;
+import net.minecraftforge.common.config.ConfigCategory;
+import net.minecraftforge.common.config.Configuration;
+
+public class GT_UO_DimensionList {
+
+ private Configuration fConfig;
+ private String fCategory;
+ private BiMap<String, GT_UO_Dimension> fDimensionList;
+
+ public int[] BlackList;
+
+ public GT_UO_DimensionList() {
+ fDimensionList = HashBiMap.create();
+ }
+
+ public GT_UO_Dimension GetDimension(int aDimension) {
+ if (fDimensionList.containsKey(Integer.toString(aDimension)))
+ return fDimensionList.get(Integer.toString(aDimension));
+ for (BiMap.Entry <String, GT_UO_Dimension> dl : fDimensionList.entrySet())
+ if (DimensionManager.getProvider(aDimension).getClass().getName().contains(dl.getValue().Dimension))
+ return dl.getValue();
+ return fDimensionList.get("Default");
+ }
+
+ public boolean CheckBlackList(int aDimensionId){
+ try {
+ if (java.util.Arrays.binarySearch(BlackList, aDimensionId) >= 0) return true;
+ else return false;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ public void SetConfigValues(String aDimensionName, String aDimension, String aName, String aRegistry, int aMinAmount, int aMaxAmount, int aChance, int aDecreasePerOperationAmount) {
+ String Category = fCategory+"."+aDimensionName;
+ fConfig.get(Category, "Dimension", aDimension).getString();
+ Category+="."+aName;
+ fConfig.get(Category, "Registry", aRegistry).getString();
+ fConfig.get(Category, "MinAmount", aMinAmount).getInt(aMinAmount);
+ fConfig.get(Category, "MaxAmount", aMaxAmount).getInt(aMaxAmount);
+ fConfig.get(Category, "Chance", aChance).getInt(aChance);
+ fConfig.get(Category, "DecreasePerOperationAmount", aDecreasePerOperationAmount).getInt(aDecreasePerOperationAmount);
+ }
+
+ public void SetDafultValues() {
+ SetConfigValues("Overworld", "0", "gas_natural_gas", "gas_natural_gas", 0, 625, 20, 5);
+ SetConfigValues("Overworld", "0", "liquid_light_oil", "liquid_light_oil", 0, 625, 20, 5);
+ SetConfigValues("Overworld", "0", "liquid_medium_oil", "liquid_medium_oil", 0, 625, 20, 5);
+ SetConfigValues("Overworld", "0", "liquid_heavy_oil", "liquid_heavy_oil", 0, 625, 20, 5);
+ SetConfigValues("Overworld", "0", "oil", "oil", 0, 625, 20, 5);
+ SetConfigValues("Moon", "Moon", "helium-3", "helium-3", 0, 375, 100, 5);
+ }
+
+ public void getConfig(Configuration aConfig, String aCategory) {
+ fCategory=aCategory;
+ fConfig = aConfig;
+ if (!fConfig.hasCategory(fCategory))
+ SetDafultValues();
+
+ fConfig.setCategoryComment(fCategory, "Config Undeground Fluids (Delete this Category for regenerate)");
+ fConfig.setCategoryComment(fCategory+".Default", "Set Default Generating (Use this Category for Default settings)");
+ fConfig.setCategoryComment(fCategory+".Overworld", "Set Overworld Generating");
+ fConfig.setCategoryComment(fCategory+".Moon", "Set Moon Generating");
+
+ int[] BlackList = {-1,1};
+ BlackList = aConfig.get(fCategory, "DimBlackList", BlackList, "Dimension IDs Black List").getIntList();
+ java.util.Arrays.sort(BlackList);
+
+ for (int i = 0 ; i < fConfig.getCategory(fCategory).getChildren().size(); i++) {
+ GT_UO_Dimension Dimension = new GT_UO_Dimension((ConfigCategory)fConfig.getCategory(fCategory).getChildren().toArray()[i]);
+ fDimensionList.put(Dimension.Dimension, Dimension);
+ }
+ }
+
+}
diff --git a/src/main/java/gregtech/api/objects/GT_UO_Fluid.java b/src/main/java/gregtech/api/objects/GT_UO_Fluid.java
new file mode 100644
index 0000000000..c2d9b70bd2
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_UO_Fluid.java
@@ -0,0 +1,63 @@
+package gregtech.api.objects;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Random;
+
+import gregtech.api.enums.GT_Values;
+import net.minecraftforge.common.config.ConfigCategory;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+
+public class GT_UO_Fluid {
+ public String Registry = "null";
+ public int MaxAmount = 0;
+ public int MinAmount = 0;
+ public int Chance = 0;
+ public int DecreasePerOperationAmount = 5;
+
+ public GT_UO_Fluid(ConfigCategory aConfigCategory) {
+ if (aConfigCategory.containsKey("Registry"))
+ {
+ aConfigCategory.get("Registry").comment = "Fluid registry";
+ Registry = aConfigCategory.get("Registry").getString();
+ }
+ if (aConfigCategory.containsKey("MaxAmount"))
+ {
+ aConfigCategory.get("MaxAmount").comment = "Max amount generation (per operation Amount)";
+ MaxAmount = aConfigCategory.get("MaxAmount").getInt(0);
+ }
+ if (aConfigCategory.containsKey("MinAmount"))
+ {
+ aConfigCategory.get("MinAmount").comment = "Max amount generation (per operation Amount)";
+ MinAmount = aConfigCategory.get("MinAmount").getInt(0);
+ }
+ if (aConfigCategory.containsKey("Chance"))
+ {
+ aConfigCategory.get("Chance").comment = "Chance generating";
+ Chance = aConfigCategory.get("Chance").getInt(0);
+ }
+ if (aConfigCategory.containsKey("DecreasePerOperationAmount"))
+ {
+ aConfigCategory.get("DecreasePerOperationAmount").comment = "Decrease per operation Amount (X/5000L per operation)";
+ DecreasePerOperationAmount = aConfigCategory.get("DecreasePerOperationAmount").getInt(5);
+ }
+ //System.out.println("GT UO "+aConfigCategory.getName()+" Fluid:"+Registry+" Max:"+MaxAmount+" Min:"+MinAmount+" Chance:"+Chance);
+ }
+
+ public Fluid getFluid(){
+ try {
+ return FluidRegistry.getFluid(this.Registry);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public int getRandomAmount(Random aRandom){
+ int r1 = (int)Math.round(Math.pow((MaxAmount-MinAmount)*500000.d, 0.2));
+ int r2 = (int)Math.floor(Math.pow(MinAmount*500000.d, 0.2));
+ double amount = aRandom.nextInt(r1)+r2+aRandom.nextDouble();
+ return (int) (Math.pow(amount, 5) / 100);
+ }
+
+} \ No newline at end of file