diff options
4 files changed, 40 insertions, 24 deletions
diff --git a/src/main/java/detrav/DetravScannerMod.java b/src/main/java/detrav/DetravScannerMod.java index c65bc49a34..17e859216b 100644 --- a/src/main/java/detrav/DetravScannerMod.java +++ b/src/main/java/detrav/DetravScannerMod.java @@ -15,7 +15,6 @@ import detrav.items.processing.ProcessingDetravToolProspector; import detrav.net.DetravNetwork; import detrav.proxies.CommonProxy; import detrav.utils.DetravCreativeTab; -import detrav.utils.GTppHelper; import gregtech.GT_Version; import gregtech.api.GregTechAPI; @@ -64,6 +63,5 @@ public class DetravScannerMod { @EventHandler public void onPostLoad(FMLPostInitializationEvent aEvent) { proxy.onPostLoad(); - GTppHelper.generate_OreIDs(); } } diff --git a/src/main/java/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java b/src/main/java/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java index 04b1c47cf6..fb3e483399 100644 --- a/src/main/java/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java +++ b/src/main/java/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java @@ -104,7 +104,7 @@ public class BehaviourDetravToolElectricProspector extends BehaviourDetravToolPr c.xPosition * 16 + x, y, c.zPosition * 16 + z, - GTppHelper.getGTppMeta(tBlock)); + GTppHelper.getMetaFromBlock(tBlock)); } else if (BartWorksHelper.isOre(tBlock)) { if (data != 1 && BartWorksHelper.isSmallOre(tBlock)) continue; packet.addBlock( diff --git a/src/main/java/detrav/net/ProspectingPacket.java b/src/main/java/detrav/net/ProspectingPacket.java index 901a57d932..1b861273e5 100644 --- a/src/main/java/detrav/net/ProspectingPacket.java +++ b/src/main/java/detrav/net/ProspectingPacket.java @@ -74,9 +74,9 @@ public class ProspectingPacket extends DetravPacket { rgba = werkstoff.getRGBA(); } } else { - gtPlusPlus.core.material.Material pMaterial = GTppHelper.decodeoresGTpp.get((short) (meta - 7000)); - rgba = pMaterial.getRGBA(); - name = pMaterial.getLocalizedName() + " Ore"; + gtPlusPlus.core.material.Material mat = GTppHelper.getMatFromMeta(meta); + rgba = mat.getRGBA(); + name = mat.getLocalizedName() + " Ore"; } } else if (packet.ptype == 2) { // Fluid diff --git a/src/main/java/detrav/utils/GTppHelper.java b/src/main/java/detrav/utils/GTppHelper.java index 985ca3386b..483e8cfd5e 100644 --- a/src/main/java/detrav/utils/GTppHelper.java +++ b/src/main/java/detrav/utils/GTppHelper.java @@ -1,9 +1,11 @@ package detrav.utils; +import java.lang.reflect.Field; import java.util.HashMap; import net.minecraft.block.Block; +import gregtech.GTMod; import gtPlusPlus.core.block.base.BlockBaseOre; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.material.MaterialMisc; @@ -12,23 +14,27 @@ import gtPlusPlus.core.material.MaterialsElements; import gtPlusPlus.core.material.MaterialsOres; import gtPlusPlus.core.material.nuclear.MaterialsFluorides; -/** - * Created by bartimaeusnek on 19.04.2018. - */ public class GTppHelper { - public static final HashMap<Short, Material> decodeoresGTpp = new HashMap<>(); - public static final HashMap<Material, Short> encodeoresGTpp = new HashMap<>(); + private static boolean initialized; + private static final HashMap<Short, Material> decodeoresGTpp = new HashMap<>(); + private static final HashMap<Material, Short> encodeoresGTpp = new HashMap<>(); - public static void generate_OreIDs() { + private static void generate_OreIDs() { short n = 0; - for (; n < MaterialsOres.class.getFields().length; ++n) { + final Field[] fields = MaterialsOres.class.getFields(); + for (; n < fields.length; ++n) { try { - Short i = (short) (n + 1); - Material m = ((Material) MaterialsOres.class.getFields()[n].get(MaterialsOres.class.getFields()[n])); - decodeoresGTpp.put(i, m); - encodeoresGTpp.put(m, i); - } catch (Exception ignored) {} + final Object o = fields[n].get(null); + if (o instanceof Material m) { + Short i = (short) (n + 1); + decodeoresGTpp.put(i, m); + encodeoresGTpp.put(m, i); + } + } catch (Exception e) { + GTMod.GT_FML_LOGGER + .error("Exception caught when trying to generate GT++ ore ids for detrav ore scanner", e); + } } // Manually add ores from other places than the ore class // Fluorite @@ -52,16 +58,28 @@ public class GTppHelper { encodeoresGTpp.put(MaterialsElements.STANDALONE.GRANITE, (short) (n + 1)); } - public static boolean isGTppBlock(Block tBlock) { - return tBlock instanceof BlockBaseOre; + public static short getMetaFromBlock(Block block) { + if (!initialized) { + generate_OreIDs(); + initialized = true; + } + return (short) (GTppHelper.encodeoresGTpp.get(((BlockBaseOre) block).getMaterialEx()) + 7000); + } + + public static Material getMatFromMeta(int meta) { + if (!initialized) { + generate_OreIDs(); + initialized = true; + } + return GTppHelper.decodeoresGTpp.get((short) (meta - 7000)); } - public static short getGTppMeta(Block tBlock) { - return (short) (GTppHelper.encodeoresGTpp.get(((BlockBaseOre) tBlock).getMaterialEx()) + 7000); + public static boolean isGTppBlock(Block block) { + return block instanceof BlockBaseOre; } - public static String getGTppVeinName(Block tBlock) { - return tBlock.getLocalizedName(); + public static String getGTppVeinName(Block block) { + return block.getLocalizedName(); } } |