aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtneioreplugin/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gtneioreplugin/util')
-rw-r--r--src/main/java/gtneioreplugin/util/CSVMaker.java119
-rw-r--r--src/main/java/gtneioreplugin/util/DimensionHelper.java351
-rw-r--r--src/main/java/gtneioreplugin/util/GT5OreLayerHelper.java123
-rw-r--r--src/main/java/gtneioreplugin/util/GT5OreSmallHelper.java197
-rw-r--r--src/main/java/gtneioreplugin/util/GT5UndergroundFluidHelper.java147
-rw-r--r--src/main/java/gtneioreplugin/util/OreVeinLayer.java18
-rw-r--r--src/main/java/gtneioreplugin/util/Oremix.java120
-rw-r--r--src/main/java/gtneioreplugin/util/SmallOre.java82
-rw-r--r--src/main/java/gtneioreplugin/util/StringPaddingHack.java131
9 files changed, 1288 insertions, 0 deletions
diff --git a/src/main/java/gtneioreplugin/util/CSVMaker.java b/src/main/java/gtneioreplugin/util/CSVMaker.java
new file mode 100644
index 0000000000..814b684aac
--- /dev/null
+++ b/src/main/java/gtneioreplugin/util/CSVMaker.java
@@ -0,0 +1,119 @@
+package gtneioreplugin.util;
+
+import java.io.BufferedWriter;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import gtneioreplugin.Config;
+import gtneioreplugin.GTNEIOrePlugin;
+import gtneioreplugin.plugin.gregtech5.PluginGT5VeinStat;
+import gtneioreplugin.util.GT5OreLayerHelper.OreLayerWrapper;
+
+// todo: yeet any opencsv usage.
+public class CSVMaker implements Runnable {
+
+ public void runSmallOres() {
+ try {
+ Iterator<Map.Entry<String, GT5OreSmallHelper.OreSmallWrapper>> it = GT5OreSmallHelper.mapOreSmallWrapper
+ .entrySet()
+ .iterator();
+ List<SmallOre> SmallOreVeins = new ArrayList<>();
+ while (it.hasNext()) {
+ SmallOre oremix = new SmallOre();
+
+ Map.Entry<String, GT5OreSmallHelper.OreSmallWrapper> pair = it.next();
+ GT5OreSmallHelper.OreSmallWrapper oreLayer = pair.getValue();
+
+ Map<String, Boolean> Dims = GT5OreSmallHelper.bufferedDims.get(oreLayer);
+
+ oremix.setOreName(oreLayer.oreGenName);
+ oremix.setOreMeta(oreLayer.oreMeta);
+ oremix.setHeight(oreLayer.worldGenHeightRange);
+ oremix.setAmount(oreLayer.amountPerChunk);
+ oremix.setDims(Dims);
+
+ SmallOreVeins.add(oremix);
+
+ it.remove(); // avoids a ConcurrentModificationException
+ }
+
+ BufferedWriter one = Files.newBufferedWriter(
+ GTNEIOrePlugin.instanceDir.toPath()
+ .resolve(Config.CSVnameSmall));
+ Collections.sort(SmallOreVeins);
+
+ // header first
+ one.write(SmallOre.getCsvHeader());
+ one.newLine();
+ for (SmallOre ore : SmallOreVeins) {
+ one.write(ore.getCsvEntry());
+ one.newLine();
+ }
+ one.flush();
+ one.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void run() {
+ runVeins();
+ runSmallOres();
+ }
+
+ public void runVeins() {
+ try {
+ Iterator<Map.Entry<String, OreLayerWrapper>> it = GT5OreLayerHelper.mapOreLayerWrapper.entrySet()
+ .iterator();
+ List<Oremix> OreVeins = new ArrayList<>();
+ while (it.hasNext()) {
+ Oremix oremix = new Oremix();
+
+ Map.Entry<String, OreLayerWrapper> pair = it.next();
+ Map<String, Boolean> Dims = GT5OreLayerHelper.bufferedDims.get(pair.getValue());
+ OreLayerWrapper oreLayer = pair.getValue();
+ oremix.setOreMixName(oreLayer.veinName);
+ oremix.setPrimary(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[0]));
+ oremix.setSecondary(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[1]));
+ oremix.setInbetween(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[2]));
+ oremix.setSporadic(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[3]));
+ oremix.setSize(oreLayer.size);
+ oremix.setHeight(oreLayer.worldGenHeightRange);
+ oremix.setDensity(oreLayer.density);
+ oremix.setWeight(oreLayer.randomWeight);
+ oremix.setOreMixIDs(
+ Integer.toString(oreLayer.Meta[0]) + "|"
+ + Integer.toString(oreLayer.Meta[1])
+ + "|"
+ + Integer.toString(oreLayer.Meta[2])
+ + "|"
+ + Integer.toString(oreLayer.Meta[3]));
+ oremix.setDims(Dims);
+ OreVeins.add(oremix);
+
+ it.remove(); // avoids a ConcurrentModificationException
+ }
+ BufferedWriter one = Files.newBufferedWriter(
+ GTNEIOrePlugin.instanceDir.toPath()
+ .resolve(Config.CSVName));
+ Collections.sort(OreVeins);
+
+ // header first
+ one.write(Oremix.getCsvHeader());
+ one.newLine();
+ for (Oremix ore : OreVeins) {
+ one.write(ore.getCsvEntry());
+ one.newLine();
+ }
+ one.flush();
+ one.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/gtneioreplugin/util/DimensionHelper.java b/src/main/java/gtneioreplugin/util/DimensionHelper.java
new file mode 100644
index 0000000000..d7725844ef
--- /dev/null
+++ b/src/main/java/gtneioreplugin/util/DimensionHelper.java
@@ -0,0 +1,351 @@
+package gtneioreplugin.util;
+
+import static galacticgreg.api.enums.DimensionDef.DimNames.ANUBIS;
+import static galacticgreg.api.enums.DimensionDef.DimNames.ASTEROIDS;
+import static galacticgreg.api.enums.DimensionDef.DimNames.BARNARDC;
+import static galacticgreg.api.enums.DimensionDef.DimNames.BARNARDE;
+import static galacticgreg.api.enums.DimensionDef.DimNames.BARNARDF;
+import static galacticgreg.api.enums.DimensionDef.DimNames.CALLISTO;
+import static galacticgreg.api.enums.DimensionDef.DimNames.CENTAURIA;
+import static galacticgreg.api.enums.DimensionDef.DimNames.CERES;
+import static galacticgreg.api.enums.DimensionDef.DimNames.DEEPDARK;
+import static galacticgreg.api.enums.DimensionDef.DimNames.DEIMOS;
+import static galacticgreg.api.enums.DimensionDef.DimNames.ENCELADUS;
+import static galacticgreg.api.enums.DimensionDef.DimNames.ENDASTEROIDS;
+import static galacticgreg.api.enums.DimensionDef.DimNames.EUROPA;
+import static galacticgreg.api.enums.DimensionDef.DimNames.GANYMEDE;
+import static galacticgreg.api.enums.DimensionDef.DimNames.HAUMEA;
+import static galacticgreg.api.enums.DimensionDef.DimNames.HORUS;
+import static galacticgreg.api.enums.DimensionDef.DimNames.IO;
+import static galacticgreg.api.enums.DimensionDef.DimNames.KUIPERBELT;
+import static galacticgreg.api.enums.DimensionDef.DimNames.MAAHES;
+import static galacticgreg.api.enums.DimensionDef.DimNames.MAKEMAKE;
+import static galacticgreg.api.enums.DimensionDef.DimNames.MARS;
+import static galacticgreg.api.enums.DimensionDef.DimNames.MEHENBELT;
+import static galacticgreg.api.enums.DimensionDef.DimNames.MERCURY;
+import static galacticgreg.api.enums.DimensionDef.DimNames.MIRANDA;
+import static galacticgreg.api.enums.DimensionDef.DimNames.MOON;
+import static galacticgreg.api.enums.DimensionDef.DimNames.NEPER;
+import static galacticgreg.api.enums.DimensionDef.DimNames.OBERON;
+import static galacticgreg.api.enums.DimensionDef.DimNames.PHOBOS;
+import static galacticgreg.api.enums.DimensionDef.DimNames.PLUTO;
+import static galacticgreg.api.enums.DimensionDef.DimNames.PROTEUS;
+import static galacticgreg.api.enums.DimensionDef.DimNames.ROSS128B;
+import static galacticgreg.api.enums.DimensionDef.DimNames.ROSS128BA;
+import static galacticgreg.api.enums.DimensionDef.DimNames.SETH;
+import static galacticgreg.api.enums.DimensionDef.DimNames.TCETIE;
+import static galacticgreg.api.enums.DimensionDef.DimNames.TITAN;
+import static galacticgreg.api.enums.DimensionDef.DimNames.TRITON;
+import static galacticgreg.api.enums.DimensionDef.DimNames.VEGAB;
+import static galacticgreg.api.enums.DimensionDef.DimNames.VENUS;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.util.StatCollector;
+
+import gregtech.common.OreMixBuilder;
+import gtneioreplugin.Config;
+
+public class DimensionHelper {
+
+ public static final String[] DimName = {
+ // Non GC dimensions in progression order instead of alphabetical
+ "Overworld", "Nether", "Twilight", "TheEnd", "EndAsteroid",
+ // T1
+ "GalacticraftCore_Moon",
+ // T2
+ "GalaxySpace_Deimos", "GalacticraftMars_Mars", "GalaxySpace_Phobos",
+ // T3
+ "GalacticraftMars_Asteroids", "GalaxySpace_Callisto", "GalaxySpace_Ceres", "GalaxySpace_Europa",
+ "GalaxySpace_Ganymede", "Ross128b",
+ // T4
+ "GalaxySpace_Io", "GalaxySpace_Mercury", "GalaxySpace_Venus",
+ // T5
+ "GalaxySpace_Enceladus", "GalaxySpace_Miranda", "GalaxySpace_Oberon", "GalaxySpace_Titan", "Ross128ba",
+ // T6
+ "GalaxySpace_Proteus", "GalaxySpace_Triton",
+ // T7
+ "GalaxySpace_Haumea", "GalaxySpace_Kuiperbelt", "GalaxySpace_MakeMake", "GalaxySpace_Pluto",
+ // T8
+ "GalaxySpace_BarnardC", "GalaxySpace_BarnardE", "GalaxySpace_BarnardF", "GalaxySpace_CentauriA",
+ "GalaxySpace_TcetiE", "GalaxySpace_VegaB",
+ // T9
+ "GalacticraftAmunRa_Anubis", "GalacticraftAmunRa_Horus", "GalacticraftAmunRa_Maahes",
+ "GalacticraftAmunRa_MehenBelt", "GalacticraftAmunRa_Neper", "GalacticraftAmunRa_Seth",
+ // T10
+ "Underdark", };
+
+ public static final String[] DimNameTrimmed = Arrays.stream(DimName)
+ .map(
+ n -> n.replaceAll("GalacticraftCore_", "")
+ .replaceAll("GalacticraftMars_", "")
+ .replaceAll("GalaxySpace_", "")
+ .replaceAll("GalacticraftAmunRa_", ""))
+ .toArray(String[]::new);
+
+ public static final String[] DimNameDisplayed = { // first 2 letters if one word else 1 letter of every word, except
+ // capital letter in
+ // name, then 1rst + capital Moon = Mo, BarnardC = BC, EndAsteroid = EA
+ // Non GC dimensions in progression order instead of alphabetical
+ "Ow", // Overworld
+ "Ne", // Nether
+ "TF", // Twilight
+ "ED", // TheEnd because En = Encalus
+ "EA", // EndAsteroid
+ // T1
+ "Mo", // GalacticraftCore_Moon
+ // T2
+ "De", // GalaxySpace_Deimos
+ "Ma", // GalacticraftMars_Mars
+ "Ph", // GalaxySpace_Phobos
+ // T3
+ "As", // GalacticraftMars_Asteroids
+ "Ca", // GalaxySpace_Callisto
+ "Ce", // GalaxySpace_Ceres
+ "Eu", // GalaxySpace_Europa
+ "Ga", // GalaxySpace_Ganymede
+ "Rb", // Ross128b
+ // T4
+ "Io", // GalaxySpace_Io
+ "Me", // GalaxySpace_Mercury
+ "Ve", // GalaxySpace_Venus
+ // T5
+ "En", // GalaxySpace_Enceladus
+ "Mi", // GalaxySpace_Miranda
+ "Ob", // GalaxySpace_Oberon
+ "Ti", // GalaxySpace_Titan
+ "Ra", // Ross128ba
+ // T6
+ "Pr", // GalaxySpace_Proteus
+ "Tr", // GalaxySpace_Triton
+ // T7
+ "Ha", // GalaxySpace_Haumea
+ "KB", // GalaxySpace_Kuiperbelt
+ "MM", // GalaxySpace_MakeMake
+ "Pl", // GalaxySpace_Pluto
+ // T8
+ "BC", // GalaxySpace_BarnardC
+ "BE", // GalaxySpace_BarnardE
+ "BF", // GalaxySpace_BarnardF
+ "CB", // GalaxySpace_CentauriA is actually α Centauri Bb
+ "TE", // GalaxySpace_TcetiE
+ "VB", // GalaxySpace_VegaB
+ // T9
+ "An", // GalacticraftAmunRa_Anubis
+ "Ho", // GalacticraftAmunRa_Horus
+ "Mh", // GalacticraftAmunRa_Maahes
+ "MB", // GalacticraftAmunRa_MehenBelt
+ "Np", // GalacticraftAmunRa_Neper
+ "Se", // GalacticraftAmunRa_Seth
+ // T10
+ "DD", // Underdark
+ };
+
+ private static final HashMap<String, List<String>> tooltipBuffer = new HashMap<>();
+
+ private static List<String> computeString(String line) {
+ String[] dims = parseDimNames(line);
+ for (int j = 0; j < dims.length; j++) {
+ String s = dims[j];
+ for (int i = 0; i < DimNameDisplayed.length; i++) {
+ if (s.equals(DimNameDisplayed[i])) {
+ String k = DimNameTrimmed[i];
+ s = StatCollector.translateToLocal("gtnop.world." + k);
+ s = switch (k) {
+ case "Moon" -> "T1: " + s;
+ case "Deimos", "Mars", "Phobos" -> "T2: " + s;
+ case "Asteroids", "Callisto", "Ceres", "Europa", "Ganymede", "Ross128b" -> "T3: " + s;
+ case "Io", "Mercury", "Venus" -> "T4: " + s;
+ case "Enceladus", "Miranda", "Oberon", "Titan", "Ross128ba" -> "T5: " + s;
+ case "Proteus", "Triton" -> "T6: " + s;
+ case "Haumea", "Kuiperbelt", "MakeMake", "Pluto" -> "T7: " + s;
+ case "BarnardC", "BarnardE", "BarnardF", "CentauriA", "TcetiE", "VegaB" -> "T8: " + s;
+ case "Anubis", "Horus", "Maahes", "MehenBelt", "Neper", "Seth" -> "T9: " + s;
+ case "Underdark" -> "T10: " + s;
+ default -> s;
+ };
+
+ dims[j] = s;
+ }
+ }
+ }
+
+ if (dims.length > Config.maxTooltipLines) {
+ dims = StringPaddingHack.stringsToSpacedColumns(
+ dims,
+ dims.length / Config.maxTooltipLines + (dims.length % Config.maxTooltipLines == 0 ? 0 : 1),
+ 2);
+ }
+
+ return Arrays.asList(dims);
+ }
+
+ public static String[] parseDimNames(String line) {
+ String[] dims = line.split(",");
+ for (int j = 0; j < dims.length; j++) {
+ String s = dims[j];
+ s = s.replaceAll(",", "");
+ s = s.trim();
+ dims[j] = s;
+ }
+ return dims;
+ }
+
+ public static Map<String, Boolean> getDims(GT5OreLayerHelper.OreLayerWrapper oreLayer) {
+ Map<String, Boolean> enabledDims = new HashMap<>();
+ Map<String, Boolean> origNames = oreLayer.allowedDimWithOrigNames;
+
+ for (String dimName : origNames.keySet()) {
+ String abbr = getDimAbbreviatedName(dimName);
+ if (!origNames.getOrDefault(dimName, false)) {
+ continue;
+ }
+ enabledDims.put(abbr, true);
+ }
+ return enabledDims;
+ }
+
+ public static Map<String, Boolean> getDims(GT5OreSmallHelper.OreSmallWrapper ore) {
+ Map<String, Boolean> enabledDims = new HashMap<>();
+ Map<String, Boolean> origNames = ore.allowedDimWithOrigNames;
+
+ for (String dimName : origNames.keySet()) {
+ String abbr = getDimAbbreviatedName(dimName);
+ if (!origNames.getOrDefault(dimName, false)) {
+ continue;
+ }
+ enabledDims.put(abbr, true);
+ }
+ return enabledDims;
+ }
+
+ public static String getDimAbbreviatedName(String dimName) {
+ String abbreviatedName;
+ switch (dimName) {
+ case (OreMixBuilder.OW) -> abbreviatedName = "Ow"; // Overworld
+ case OreMixBuilder.NETHER -> abbreviatedName = "Ne"; // Nether
+ case OreMixBuilder.TWILIGHT_FOREST -> abbreviatedName = "TF"; // Twilight
+ case OreMixBuilder.THE_END -> abbreviatedName = "ED"; // TheEnd because En = Encalus
+ case ENDASTEROIDS -> abbreviatedName = "EA"; // EndAsteroid
+ // T1
+ case MOON -> abbreviatedName = "Mo"; // GalacticraftCore_Moon
+ // T2
+ case DEIMOS -> abbreviatedName = "De"; // GalaxySpace_Deimos
+ case MARS -> abbreviatedName = "Ma"; // GalacticraftMars_Mars
+ case PHOBOS -> abbreviatedName = "Ph"; // GalaxySpace_Phobos
+ // T3
+ case ASTEROIDS -> abbreviatedName = "As"; // GalacticraftMars_Asteroids
+ case CALLISTO -> abbreviatedName = "Ca"; // GalaxySpace_Callisto
+ case CERES -> abbreviatedName = "Ce"; // GalaxySpace_Ceres
+ case EUROPA -> abbreviatedName = "Eu"; // GalaxySpace_Europa
+ case GANYMEDE -> abbreviatedName = "Ga"; // GalaxySpace_Ganymede
+ case ROSS128B -> abbreviatedName = "Rb"; // Ross128b
+ // T4
+ case IO -> abbreviatedName = "Io"; // GalaxySpace_Io
+ case MERCURY -> abbreviatedName = "Me"; // GalaxySpace_Mercury
+ case VENUS -> abbreviatedName = "Ve"; // GalaxySpace_Venus
+ // T5
+ case ENCELADUS -> abbreviatedName = "En"; // GalaxySpace_Enceladus
+ case MIRANDA -> abbreviatedName = "Mi"; // GalaxySpace_Miranda
+ case OBERON -> abbreviatedName = "Ob"; // GalaxySpace_Oberon
+ case TITAN -> abbreviatedName = "Ti"; // GalaxySpace_Titan
+ case ROSS128BA -> abbreviatedName = "Ra"; // Ross128ba
+ // T6
+ case PROTEUS -> abbreviatedName = "Pr"; // GalaxySpace_Proteus
+ case TRITON -> abbreviatedName = "Tr"; // GalaxySpace_Triton
+ // T7
+ case HAUMEA -> abbreviatedName = "Ha"; // GalaxySpace_Haumea
+ case KUIPERBELT -> abbreviatedName = "KB"; // GalaxySpace_Kuiperbelt
+ case MAKEMAKE -> abbreviatedName = "MM"; // GalaxySpace_MakeMake
+ case PLUTO -> abbreviatedName = "Pl"; // GalaxySpace_Pluto
+ // T8
+ case BARNARDC -> abbreviatedName = "BC"; // GalaxySpace_BarnardC
+ case BARNARDE -> abbreviatedName = "BE"; // GalaxySpace_BarnardE
+ case BARNARDF -> abbreviatedName = "BF"; // GalaxySpace_BarnardF
+ case CENTAURIA -> abbreviatedName = "CB"; // GalaxySpace_CentauriA is actually α Centauri Bb
+ case TCETIE -> abbreviatedName = "TE"; // GalaxySpace_TcetiE
+ case VEGAB -> abbreviatedName = "VB"; // GalaxySpace_VegaB
+ // T9
+ case ANUBIS -> abbreviatedName = "An"; // GalacticraftAmunRa_Anubis
+ case HORUS -> abbreviatedName = "Ho"; // GalacticraftAmunRa_Horus
+ case MAAHES -> abbreviatedName = "Mh"; // GalacticraftAmunRa_Maahes
+ case MEHENBELT -> abbreviatedName = "MB"; // GalacticraftAmunRa_MehenBelt
+ case NEPER -> abbreviatedName = "Np"; // GalacticraftAmunRa_Neper
+ case SETH -> abbreviatedName = "Se"; // GalacticraftAmunRa_Seth
+ // T10
+ case DEEPDARK -> abbreviatedName = "DD"; // Underdark
+ default -> {
+ throw new IllegalStateException("String: " + dimName + " has no abbredged name!");
+ }
+ }
+ return abbreviatedName;
+ }
+
+ public static String getFullName(String dimName) {
+
+ return switch (dimName) {
+ case "Ow" -> (OreMixBuilder.OW); // Overworld
+ case "Ne" -> OreMixBuilder.NETHER; // Nether
+ case "TF" -> OreMixBuilder.TWILIGHT_FOREST; // Twilight
+ case "ED" -> OreMixBuilder.THE_END; // TheEnd because En = Encalus
+ case "EA" -> ENDASTEROIDS; // EndAsteroid
+ // T1
+ case "Mo" -> MOON; // GalacticraftCore_Moon
+ // T2
+ case "De" -> DEIMOS; // GalaxySpace_Deimos
+ case "Ma" -> MARS; // GalacticraftMars_Mars
+ case "Ph" -> PHOBOS; // GalaxySpace_Phobos
+ // T3
+ case "As" -> ASTEROIDS; // GalacticraftMars_Asteroids
+ case "Ca" -> CALLISTO; // GalaxySpace_Callisto
+ case "Ce" -> CERES; // GalaxySpace_Ceres
+ case "Eu" -> EUROPA; // GalaxySpace_Europa
+ case "Ga" -> GANYMEDE; // GalaxySpace_Ganymede
+ case "Rb" -> ROSS128B; // Ross128b
+ // T4
+ case "Io" -> IO; // GalaxySpace_Io
+ case "Me" -> MERCURY; // GalaxySpace_Mercury
+ case "Ve" -> VENUS; // GalaxySpace_Venus
+ // T5
+ case "En" -> ENCELADUS; // GalaxySpace_Enceladus
+ case "Mi" -> MIRANDA; // GalaxySpace_Miranda
+ case "Ob" -> OBERON; // GalaxySpace_Oberon
+ case "Ti" -> TITAN; // GalaxySpace_Titan
+ case "Ra" -> ROSS128BA; // Ross128ba
+ // T6
+ case "Pr" -> PROTEUS; // GalaxySpace_Proteus
+ case "Tr" -> TRITON; // GalaxySpace_Triton
+ // T7
+ case "Ha" -> HAUMEA; // GalaxySpace_Haumea
+ case "KB" -> KUIPERBELT; // GalaxySpace_Kuiperbelt
+ case "MM" -> MAKEMAKE; // GalaxySpace_MakeMake
+ case "Pl" -> PLUTO; // GalaxySpace_Pluto
+ // T8
+ case "BC" -> BARNARDC; // GalaxySpace_BarnardC
+ case "BE" -> BARNARDE; // GalaxySpace_BarnardE
+ case "BF" -> BARNARDF; // GalaxySpace_BarnardF
+ case "CB" -> CENTAURIA; // GalaxySpace_CentauriA is actually α Centauri Bb
+ case "TE" -> TCETIE; // GalaxySpace_TcetiE
+ case "VB" -> VEGAB; // GalaxySpace_VegaB
+ // T9
+ case "An" -> ANUBIS; // GalacticraftAmunRa_Anubis
+ case "Ho" -> HORUS; // GalacticraftAmunRa_Horus
+ case "Mh" -> MAAHES; // GalacticraftAmunRa_Maahes
+ case "MB" -> MEHENBELT; // GalacticraftAmunRa_MehenBelt
+ case "Np" -> NEPER; // GalacticraftAmunRa_Neper
+ case "Se" -> SETH; // GalacticraftAmunRa_Seth
+ // T10
+ case "DD" -> DEEPDARK; // Underdark
+ default -> {
+ throw new IllegalStateException("String: " + dimName + " has no abbredged name!");
+ }
+ };
+ }
+
+ public static List<String> convertCondensedStringToToolTip(String line) {
+ return tooltipBuffer.computeIfAbsent(line, (String tmp) -> computeString(line));
+ }
+}
diff --git a/src/main/java/gtneioreplugin/util/GT5OreLayerHelper.java b/src/main/java/gtneioreplugin/util/GT5OreLayerHelper.java
new file mode 100644
index 0000000000..ac4d6c4aca
--- /dev/null
+++ b/src/main/java/gtneioreplugin/util/GT5OreLayerHelper.java
@@ -0,0 +1,123 @@
+package gtneioreplugin.util;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.item.ItemStack;
+
+import gregtech.api.GregTechAPI;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreMixes;
+import gregtech.common.OreMixBuilder;
+
+public class GT5OreLayerHelper {
+
+ public static class NormalOreDimensionWrapper {
+
+ public final ArrayList<OreLayerWrapper> internalDimOreList = new ArrayList<>();
+ public final HashMap<OreLayerWrapper, Double> oreVeinToProbabilityInDimension = new HashMap<>();
+
+ // Calculate all weights of ore veins once dimension is initialised.
+ private 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 final Integer[] weightPerWorld = new Integer[DIMENSION_COUNT];
+ public static final Integer[] DimIDs = new Integer[DIMENSION_COUNT];
+ public static final HashMap<String, OreLayerWrapper> mapOreLayerWrapper = new HashMap<>();
+ public static final HashMap<OreLayerWrapper, Map<String, Boolean>> bufferedDims = new HashMap<>();
+ public static final HashMap<String, NormalOreDimensionWrapper> dimToOreWrapper = new HashMap<>();
+
+ public static void init() {
+ Arrays.fill(weightPerWorld, 0);
+ Arrays.fill(DimIDs, 0);
+ for (OreMixes mix : OreMixes.values())
+ mapOreLayerWrapper.put(mix.oreMixBuilder.oreMixName, new OreLayerWrapper(mix.oreMixBuilder));
+ for (OreLayerWrapper layer : mapOreLayerWrapper.values()) {
+ bufferedDims.put(layer, DimensionHelper.getDims(layer));
+ }
+
+ // --- Handling of dimToOreWrapper ---
+
+ // Get dims as "Ow,Ne,Ma" etc.
+ bufferedDims.forEach((veinInfo, dims) -> {
+
+ for (String dim : dims.keySet()) {
+ NormalOreDimensionWrapper dimensionOres = dimToOreWrapper
+ .getOrDefault(dim, new NormalOreDimensionWrapper());
+ dimensionOres.internalDimOreList.add(veinInfo);
+ dimToOreWrapper.put(dim, dimensionOres);
+ }
+
+ // Calculate probabilities for each dim.
+ for (String dim : dimToOreWrapper.keySet()) {
+ dimToOreWrapper.get(dim)
+ .calculateWeights();
+ }
+ });
+ // --- End of handling for dimToOreWrapper ---
+ }
+
+ public static class OreLayerWrapper {
+
+ public final String veinName, worldGenHeightRange;
+ public final short[] Meta = new short[4];
+ public final short randomWeight, size, density;
+ public final Map<String, Boolean> allowedDimWithOrigNames;
+
+ public final Materials mPrimaryVeinMaterial;
+ public final Materials mSecondaryMaterial;
+ public final Materials mBetweenMaterial;
+ public final Materials mSporadicMaterial;
+
+ public OreLayerWrapper(OreMixBuilder mix) {
+ this.veinName = mix.oreMixName;
+ this.Meta[0] = (short) mix.primary.mMetaItemSubID;
+ this.Meta[1] = (short) mix.secondary.mMetaItemSubID;
+ this.Meta[2] = (short) mix.between.mMetaItemSubID;
+ this.Meta[3] = (short) mix.sporadic.mMetaItemSubID;
+
+ this.mPrimaryVeinMaterial = mix.primary;
+ this.mSecondaryMaterial = mix.secondary;
+ this.mBetweenMaterial = mix.between;
+ this.mSporadicMaterial = mix.sporadic;
+
+ this.size = (short) mix.size;
+ this.density = (short) mix.density;
+ this.worldGenHeightRange = mix.minY + "-" + mix.maxY;
+ this.randomWeight = (short) mix.weight;
+
+ this.allowedDimWithOrigNames = mix.dimsEnabled;
+ }
+
+ 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(GregTechAPI.sBlockOres1, 1, Meta[veinLayer] + materialIndex * 1000);
+ }
+
+ public boolean containsOre(short materialIndex) {
+ return Meta[OreVeinLayer.VEIN_PRIMARY] == materialIndex
+ || Meta[OreVeinLayer.VEIN_SECONDARY] == materialIndex
+ || Meta[OreVeinLayer.VEIN_BETWEEN] == materialIndex
+ || Meta[OreVeinLayer.VEIN_SPORADIC] == materialIndex;
+ }
+ }
+}
diff --git a/src/main/java/gtneioreplugin/util/GT5OreSmallHelper.java b/src/main/java/gtneioreplugin/util/GT5OreSmallHelper.java
new file mode 100644
index 0000000000..92b4312e25
--- /dev/null
+++ b/src/main/java/gtneioreplugin/util/GT5OreSmallHelper.java
@@ -0,0 +1,197 @@
+package gtneioreplugin.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.item.ItemStack;
+
+import gregtech.api.GregTechAPI;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SmallOres;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.world.GTWorldgen;
+import gregtech.common.SmallOreBuilder;
+import gregtech.common.WorldgenGTOreSmallPieces;
+
+public class GT5OreSmallHelper {
+
+ private static final int SMALL_ORE_BASE_META = 16000;
+ public static boolean restrictBiomeSupport = false;
+ public static final List<ItemStack> oreSmallList = new ArrayList<>();
+ public static final HashMap<String, OreSmallWrapper> mapOreSmallWrapper = new HashMap<>();
+ public static final HashMap<String, Short> mapOreDropUnlocalizedNameToOreMeta = new HashMap<>();
+ public static final HashMap<Short, List<ItemStack>> mapOreMetaToOreDrops = new HashMap<>();
+ public static final HashMap<OreSmallWrapper, Map<String, Boolean>> bufferedDims = new HashMap<>();
+ public static final HashMap<String, SmallOreDimensionWrapper> dimToSmallOreWrapper = new HashMap<>();
+
+ public static class SmallOreDimensionWrapper {
+
+ public final ArrayList<OreSmallWrapper> internalDimOreList = new ArrayList<>();
+ public final HashMap<OreSmallWrapper, Double> oreVeinToProbabilityInDimension = new HashMap<>();
+
+ // Calculate all weights of ore veins once dimension is initialised.
+ private void calculateWeights() {
+ int totalWeight = 0;
+ for (OreSmallWrapper oreVein : internalDimOreList) {
+ totalWeight += oreVein.amountPerChunk;
+ }
+ for (OreSmallWrapper oreVein : internalDimOreList) {
+ oreVeinToProbabilityInDimension
+ .put(oreVein, ((double) oreVein.amountPerChunk) / ((double) totalWeight));
+ }
+ }
+ }
+
+ public static void init() {
+ checkExtraSupport();
+ ItemStack stack;
+ Materials material;
+ short meta;
+ Map<String, SmallOreBuilder> smallOreDefMap = new HashMap<>();
+
+ for (SmallOres ore : SmallOres.values()) {
+ smallOreDefMap.put(ore.smallOreBuilder.smallOreName, ore.smallOreBuilder);
+ }
+
+ for (GTWorldgen worldGen : GregTechAPI.sWorldgenList) {
+ if (!worldGen.mWorldGenName.startsWith("ore.small.") || !(worldGen instanceof WorldgenGTOreSmallPieces)) {
+ continue;
+ }
+
+ WorldgenGTOreSmallPieces worldGenSmallPieces = (WorldgenGTOreSmallPieces) worldGen;
+ meta = worldGenSmallPieces.mMeta;
+ if (meta < 0) break;
+ material = GregTechAPI.sGeneratedMaterials[meta];
+ mapOreSmallWrapper.put(
+ worldGen.mWorldGenName,
+ new OreSmallWrapper(smallOreDefMap.get(worldGenSmallPieces.mWorldGenName)));
+ if (mapOreMetaToOreDrops.containsKey(meta)) {
+ continue;
+ }
+
+ List<ItemStack> stackList = new ArrayList<>();
+ stack = GTOreDictUnificator
+ .get(OrePrefixes.gemExquisite, material, GTOreDictUnificator.get(OrePrefixes.gem, material, 1L), 1L);
+ if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) {
+ mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta);
+ stackList.add(stack);
+ }
+ stack = GTOreDictUnificator
+ .get(OrePrefixes.gemFlawless, material, GTOreDictUnificator.get(OrePrefixes.gem, material, 1L), 1L);
+ if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) {
+ mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta);
+ stackList.add(stack);
+ }
+ stack = GTOreDictUnificator.get(OrePrefixes.gem, material, 1L);
+ if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) {
+ mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta);
+ stackList.add(stack);
+ }
+ stack = GTOreDictUnificator
+ .get(OrePrefixes.gemFlawed, material, GTOreDictUnificator.get(OrePrefixes.crushed, material, 1L), 1L);
+ if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) {
+ mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta);
+ stackList.add(stack);
+ }
+ stack = GTOreDictUnificator.get(OrePrefixes.crushed, material, 1L);
+ if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) {
+ mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta);
+ stackList.add(stack);
+ }
+ stack = GTOreDictUnificator.get(
+ OrePrefixes.gemChipped,
+ material,
+ GTOreDictUnificator.get(OrePrefixes.dustImpure, material, 1L),
+ 1L);
+ if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) {
+ mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta);
+ stackList.add(stack);
+ }
+ stack = GTOreDictUnificator.get(OrePrefixes.dustImpure, material, 1L);
+ if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) {
+ mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta);
+ stackList.add(stack);
+ }
+ oreSmallList.add(new ItemStack(GregTechAPI.sBlockOres1, 1, meta + SMALL_ORE_BASE_META));
+ mapOreMetaToOreDrops.put(meta, stackList);
+
+ }
+ for (OreSmallWrapper oreSmallWrapper : mapOreSmallWrapper.values()) {
+ bufferedDims.put(oreSmallWrapper, DimensionHelper.getDims(oreSmallWrapper));
+ }
+
+ // --- Handling of dimToOreWrapper ---
+
+ // Get dims as "Ow,Ne,Ma" etc.
+ bufferedDims.forEach((veinInfo, dims) -> {
+ for (String dim : dims.keySet()) {
+ SmallOreDimensionWrapper dimensionSmallOres = dimToSmallOreWrapper
+ .getOrDefault(dim, new SmallOreDimensionWrapper());
+ dimensionSmallOres.internalDimOreList.add(veinInfo);
+ dimToSmallOreWrapper.put(dim, dimensionSmallOres);
+ }
+
+ // Calculate probabilities for each dim.
+ for (String dim : dimToSmallOreWrapper.keySet()) {
+ dimToSmallOreWrapper.get(dim)
+ .calculateWeights();
+ }
+ });
+ // --- End of handling for dimToOreWrapper ---
+ }
+
+ private static void checkExtraSupport() {
+ Class<?> clazzGTOreSmall = null;
+ try {
+ clazzGTOreSmall = Class.forName("gregtech.common" + ".GT_Worldgen_GT_Ore_SmallPieces");
+ } catch (ClassNotFoundException ignored) {}
+ if (clazzGTOreSmall != null) {
+ try {
+ clazzGTOreSmall.getField("mRestrictBiome");
+ restrictBiomeSupport = true;
+ } catch (Exception ignored) {}
+ }
+ }
+
+ public static Materials[] getDroppedDusts() {
+ return new Materials[] { Materials.Stone, Materials.Netherrack, Materials.Endstone, Materials.GraniteBlack,
+ Materials.GraniteRed, Materials.Marble, Materials.Basalt, Materials.Stone };
+ }
+
+ public static class OreSmallWrapper {
+
+ public final String oreGenName;
+ public final short oreMeta;
+ public final String worldGenHeightRange;
+ public final short amountPerChunk;
+
+ public final Map<String, Boolean> allowedDimWithOrigNames;
+
+ @SuppressWarnings("unused")
+ public Materials getOreMaterial() {
+ return oreMaterial;
+ }
+
+ private final Materials oreMaterial;
+
+ public OreSmallWrapper(SmallOreBuilder ore) {
+ this.oreGenName = ore.smallOreName;
+ this.oreMeta = (short) ore.ore.mMetaItemSubID;
+ this.worldGenHeightRange = ore.minY + "-" + ore.maxY;
+ this.amountPerChunk = (short) ore.amount;
+ this.oreMaterial = ore.ore;
+
+ this.allowedDimWithOrigNames = ore.dimsEnabled;
+ }
+
+ public List<ItemStack> getMaterialDrops(int maximumIndex) {
+ List<ItemStack> stackList = new ArrayList<>();
+ for (int i = 0; i < maximumIndex; i++)
+ stackList.add(new ItemStack(GregTechAPI.sBlockOres1, 1, oreMeta + SMALL_ORE_BASE_META + i * 1000));
+ return stackList;
+ }
+ }
+}
diff --git a/src/main/java/gtneioreplugin/util/GT5UndergroundFluidHelper.java b/src/main/java/gtneioreplugin/util/GT5UndergroundFluidHelper.java
new file mode 100644
index 0000000000..a7b072ccc9
--- /dev/null
+++ b/src/main/java/gtneioreplugin/util/GT5UndergroundFluidHelper.java