1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
package pers.gwyog.gtneioreplugin.util;
import static pers.gwyog.gtneioreplugin.util.OreVeinLayer.*;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Materials;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.common.GT_Worldgen_GT_Ore_Layer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import net.minecraft.item.ItemStack;
public class GT5OreLayerHelper {
class oreDimensionWrapper {
ArrayList<OreLayerWrapper> internalDimOreList = new ArrayList<>();
HashMap<OreLayerWrapper, Double> oreVeinToProbabilityInDimension = new HashMap<OreLayerWrapper, Double>();
// Calculate all weights of ore veins once dimension is initialised.
void calculateWeights() {
int totalWeight = 0;
for (OreLayerWrapper oreVein : internalDimOreList) {
totalWeight += oreVein.randomWeight;
}
for (OreLayerWrapper oreVein : internalDimOreList) {
oreVeinToProbabilityInDimension.put(oreVein, ((double) oreVein.randomWeight) / ((double) totalWeight));
}
}
}
private static final int DIMENSION_COUNT = 33;
public static Integer[] weightPerWorld = new Integer[DIMENSION_COUNT];
public static Integer[] DimIDs = new Integer[DIMENSION_COUNT];
public static HashMap<String, OreLayerWrapper> mapOreLayerWrapper = new HashMap<>();
public static HashMap<OreLayerWrapper, String> bufferedDims = new HashMap<>();
public static HashMap<String, oreDimensionWrapper> dimToOreWrapper = new HashMap<>();
public GT5OreLayerHelper() {
Arrays.fill(weightPerWorld, 0);
Arrays.fill(DimIDs, 0);
for (GT_Worldgen_GT_Ore_Layer tWorldGen : GT_Worldgen_GT_Ore_Layer.sList)
mapOreLayerWrapper.put(tWorldGen.mWorldGenName, new OreLayerWrapper(tWorldGen));
for (OreLayerWrapper layer : mapOreLayerWrapper.values()) {
bufferedDims.put(layer, getDims(layer));
}
// ------------------------------
// Get dims as "Ow,Ne,Ma" etc.
for (OreLayerWrapper oreLayer : bufferedDims.keySet()) {
String dims = bufferedDims.get(oreLayer);
if (dims.equals("Not available in any Galactic Dim!")) {
continue;
}
for (String dim : dims.split(",")) {
if (dim.length() != 0) {
oreDimensionWrapper dimensionOres = dimToOreWrapper.getOrDefault(dim, new oreDimensionWrapper());
dimensionOres.internalDimOreList.add(oreLayer);
dimToOreWrapper.put(dim, dimensionOres);
}
}
// Calculate probabilities for each dim.
for (String dim : dimToOreWrapper.keySet()) {
dimToOreWrapper.get(dim).calculateWeights();
}
for (String dim : dimToOreWrapper.keySet()) {
double a = dimToOreWrapper.get(dim).oreVeinToProbabilityInDimension.values()
.stream()
.mapToDouble(Double::valueOf)
.sum();
System.out.println("TEST312IMJD + " + a);
}
}
// ------------------------------
}
public static String getDims(OreLayerWrapper oreLayer) {
return GT5CFGHelper.GT5CFG(
oreLayer.veinName.replace("ore.mix.custom" + ".", "").replace("ore.mix.", ""));
}
public static class OreLayerWrapper {
public String veinName, worldGenHeightRange;
public short[] Meta = new short[4];
public short randomWeight, size, density;
public List<Integer> Weight = new ArrayList<>();
public Materials mPrimaryVeinMaterial;
public Materials mSecondaryMaterial;
public Materials mBetweenMaterial;
public Materials mSporadicMaterial;
public OreLayerWrapper(GT_Worldgen_GT_Ore_Layer worldGen) {
this.veinName = worldGen.mWorldGenName;
this.Meta[0] = worldGen.mPrimaryMeta;
this.Meta[1] = worldGen.mSecondaryMeta;
this.Meta[2] = worldGen.mBetweenMeta;
this.Meta[3] = worldGen.mSporadicMeta;
// Black magic, don't ask me how it works, I have no idea.
try {
this.mPrimaryVeinMaterial = GT_OreDictUnificator.getAssociation(new ItemStack(GregTech_API.sBlockOres1, 1, worldGen.mPrimaryMeta)).mMaterial.mMaterial;
this.mSecondaryMaterial = GT_OreDictUnificator.getAssociation(new ItemStack(GregTech_API.sBlockOres1, 1, worldGen.mSecondaryMeta)).mMaterial.mMaterial;
this.mBetweenMaterial = GT_OreDictUnificator.getAssociation(new ItemStack(GregTech_API.sBlockOres1, 1, worldGen.mBetweenMeta)).mMaterial.mMaterial;
this.mSporadicMaterial = GT_OreDictUnificator.getAssociation(new ItemStack(GregTech_API.sBlockOres1, 1, worldGen.mSporadicMeta)).mMaterial.mMaterial;
} catch(Exception ignored) {
}
this.size = worldGen.mSize;
this.density = worldGen.mDensity;
this.worldGenHeightRange = worldGen.mMinY + "-" + worldGen.mMaxY;
this.randomWeight = worldGen.mWeight;
}
public List<ItemStack> getVeinLayerOre(int maximumMaterialIndex, int veinLayer) {
List<ItemStack> stackList = new ArrayList<>();
for (int i = 0; i < maximumMaterialIndex; i++) {
stackList.add(getLayerOre(veinLayer, i));
}
return stackList;
}
public ItemStack getLayerOre(int veinLayer, int materialIndex) {
return new ItemStack(GregTech_API.sBlockOres1, 1, Meta[veinLayer] + materialIndex * 1000);
}
public boolean containsOre(short materialIndex) {
return Meta[VEIN_PRIMARY] == materialIndex
|| Meta[VEIN_SECONDARY] == materialIndex
|| Meta[VEIN_BETWEEN] == materialIndex
|| Meta[VEIN_SPORADIC] == materialIndex;
}
}
}
|