aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Byrne <draknyte1@hotmail.com>2018-03-18 20:27:42 +1000
committerJordan Byrne <draknyte1@hotmail.com>2018-03-18 20:27:42 +1000
commit92c98220c875e40badcc6c504b0c53c059aa5d54 (patch)
treef530887578a0099e11d2377791877b8836a43f1c
parentd545325fc2e750f6197fe11d7c1330d5c06ca614 (diff)
downloadGT5-Unofficial-92c98220c875e40badcc6c504b0c53c059aa5d54.tar.gz
GT5-Unofficial-92c98220c875e40badcc6c504b0c53c059aa5d54.tar.bz2
GT5-Unofficial-92c98220c875e40badcc6c504b0c53c059aa5d54.zip
+ Added TC Aspect support to all Materials.
+ Added 5 custom TC Aspects. $ Fixing Buggy name of Mini-Fusion Reactor.
-rw-r--r--src/Java/gtPlusPlus/core/material/Material.java4
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechMiniRaFusion.java2
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTieredChunkloaders.java2
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/HANDLER_Thaumcraft.java32
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/aspect/GTPP_AspectCompat.java148
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/aspect/GTPP_Aspects.java77
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/util/ThaumcraftUtils.java229
7 files changed, 490 insertions, 4 deletions
diff --git a/src/Java/gtPlusPlus/core/material/Material.java b/src/Java/gtPlusPlus/core/material/Material.java
index 93b03af96c..4fa17ec7aa 100644
--- a/src/Java/gtPlusPlus/core/material/Material.java
+++ b/src/Java/gtPlusPlus/core/material/Material.java
@@ -23,6 +23,7 @@ import gtPlusPlus.core.util.math.MathUtils;
import gtPlusPlus.core.util.minecraft.FluidUtils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.minecraft.MaterialUtils;
+import gtPlusPlus.xmod.thaumcraft.aspect.GTPP_Aspects;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
@@ -71,6 +72,8 @@ public class Material {
public long vDurability;
public int vToolQuality;
public int vHarvestLevel;
+
+ private GTPP_Aspects[] vAspects;
public static Map<Integer, Materials> invalidMaterials = new HashMap<Integer, Materials>();
@@ -180,6 +183,7 @@ public class Material {
}
+ this.vAspects = null;
this.vMass = this.getMass();
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechMiniRaFusion.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechMiniRaFusion.java
index 870af597ad..ac79c49aa7 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechMiniRaFusion.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechMiniRaFusion.java
@@ -15,7 +15,7 @@ public class GregtechMiniRaFusion {
//generateSlowFusionRecipes();
// Register the Simple Fusion Entity.
//GregtechItemList.Miniature_Fusion.set(new GregtechMetaTileEntity_CompactFusionReactor(993, "simplefusion.tier.00", "Ra, Sun God - Mk I", 6).getStackForm(1L));
- GregtechItemList.Miniature_Fusion.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(993, "basicmachine.simplefusion.tier.01", "Mímir", 8, "Universal Machine for Knowledge and Wisdom", Recipe_GT.Gregtech_Recipe_Map.sSlowFusion2Recipes, 2, 9, 64000, 0, 1, "Dehydrator.png", (String) GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "EXTRUDER", new Object[]{"CCE", "XMP", "CCE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'X', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.SENSOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.FIELD_GENERATOR}).getStackForm(1L));
+ GregtechItemList.Miniature_Fusion.set(new GT_MetaTileEntity_BasicMachine_GT_Recipe(993, "basicmachine.simplefusion.tier.01", "Mimir", 8, "Universal Machine for Knowledge and Wisdom", Recipe_GT.Gregtech_Recipe_Map.sSlowFusion2Recipes, 2, 9, 64000, 0, 1, "Dehydrator.png", (String) GregTech_API.sSoundList.get(Integer.valueOf(208)), false, false, 0, "EXTRUDER", new Object[]{"CCE", "XMP", "CCE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'X', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.SENSOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.FIELD_GENERATOR}).getStackForm(1L));
run2();
Logger.INFO("[Pocket Fusion] Generated "+mRecipeCount+" recipes for the Pocket Fusion Reactor.");
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTieredChunkloaders.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTieredChunkloaders.java
index b3fb4d36b1..84f0adc275 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTieredChunkloaders.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTieredChunkloaders.java
@@ -8,7 +8,7 @@ import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaT
public class GregtechTieredChunkloaders {
public static void run() {
if (LoadedMods.Gregtech) {
- Logger.INFO("Gregtech5u Content | Registering Portable Fluid Tanks.");
+ Logger.INFO("Gregtech5u Content | Registering Chunk Loaders.");
run1();
}
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/HANDLER_Thaumcraft.java b/src/Java/gtPlusPlus/xmod/thaumcraft/HANDLER_Thaumcraft.java
index 5dec772d03..c9133902e3 100644
--- a/src/Java/gtPlusPlus/xmod/thaumcraft/HANDLER_Thaumcraft.java
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/HANDLER_Thaumcraft.java
@@ -1,10 +1,31 @@
package gtPlusPlus.xmod.thaumcraft;
+import java.util.Arrays;
+import java.util.List;
+
+import net.minecraft.item.ItemStack;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.interfaces.internal.IThaumcraftCompat;
+import gregtech.api.util.GT_Utility;
+
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.lib.LoadedMods;
+import gtPlusPlus.xmod.thaumcraft.aspect.GTPP_Aspects.TC_AspectStack_Ex;
import gtPlusPlus.xmod.thaumcraft.common.block.TC_BlockHandler;
+import gtPlusPlus.xmod.thaumcraft.util.ThaumcraftUtils;
-public class HANDLER_Thaumcraft {
+public class HANDLER_Thaumcraft {
+ public static IThaumcraftCompat sThaumcraftCompat;
+ public static final AutoMap<Pair<ItemStack, TC_AspectStack_Ex[]>> sItemsToGetAspects = new AutoMap<Pair<ItemStack, TC_AspectStack_Ex[]>>();
+
+ static {
+ sThaumcraftCompat = (IThaumcraftCompat) GT_Utility.callConstructor("gtPlusPlus.xmod.thaumcraft.aspect.GTPP_AspectCompat", 0, null, GT_Values.D1, new Object[0]);
+ }
+
public static void preInit(){
if (LoadedMods.Thaumcraft){
TC_BlockHandler.run();
@@ -19,7 +40,14 @@ public class HANDLER_Thaumcraft {
public static void postInit(){
if (LoadedMods.Thaumcraft){
-
+ if (!sItemsToGetAspects.isEmpty()) {
+ for (Pair<ItemStack, TC_AspectStack_Ex[]> j : sItemsToGetAspects) {
+ if (j .getKey() != null && (j.getValue() != null && j.getValue().length > 0)) {
+ List<TC_AspectStack_Ex> list = Arrays.asList(j.getValue());
+ ThaumcraftUtils.registerThaumcraftAspectsToItem(j.getKey(), list, true);
+ }
+ }
+ }
}
}
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/aspect/GTPP_AspectCompat.java b/src/Java/gtPlusPlus/xmod/thaumcraft/aspect/GTPP_AspectCompat.java
new file mode 100644
index 0000000000..34fa657bd7
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/aspect/GTPP_AspectCompat.java
@@ -0,0 +1,148 @@
+package gtPlusPlus.xmod.thaumcraft.aspect;
+
+import gregtech.common.GT_ThaumcraftCompat;
+
+import gtPlusPlus.xmod.thaumcraft.aspect.GTPP_Aspects.TC_AspectStack_Ex;
+import gtPlusPlus.xmod.thaumcraft.util.ThaumcraftUtils;
+
+import gregtech.api.enums.TC_Aspects;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.interfaces.internal.IThaumcraftCompat;
+import gregtech.api.util.GT_LanguageManager;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+
+public class GTPP_AspectCompat implements IThaumcraftCompat {
+
+ public static volatile Method m = null;
+
+ public GTPP_AspectCompat() {
+ // Standard Aspects
+ GTPP_Aspects.AER.mAspect = Aspect.AIR;
+ GTPP_Aspects.ALIENIS.mAspect = Aspect.ELDRITCH;
+ GTPP_Aspects.AQUA.mAspect = Aspect.WATER;
+ GTPP_Aspects.ARBOR.mAspect = Aspect.TREE;
+ GTPP_Aspects.AURAM.mAspect = Aspect.AURA;
+ GTPP_Aspects.BESTIA.mAspect = Aspect.BEAST;
+ GTPP_Aspects.COGNITIO.mAspect = Aspect.MIND;
+ GTPP_Aspects.CORPUS.mAspect = Aspect.FLESH;
+ GTPP_Aspects.EXANIMIS.mAspect = Aspect.UNDEAD;
+ GTPP_Aspects.FABRICO.mAspect = Aspect.CRAFT;
+ GTPP_Aspects.FAMES.mAspect = Aspect.HUNGER;
+ GTPP_Aspects.GELUM.mAspect = Aspect.COLD;
+ GTPP_Aspects.GRANUM.mAspect = Aspect.PLANT;
+ GTPP_Aspects.HERBA.mAspect = Aspect.PLANT;
+ GTPP_Aspects.HUMANUS.mAspect = Aspect.MAN;
+ GTPP_Aspects.IGNIS.mAspect = Aspect.FIRE;
+ GTPP_Aspects.INSTRUMENTUM.mAspect = Aspect.TOOL;
+ GTPP_Aspects.ITER.mAspect = Aspect.TRAVEL;
+ GTPP_Aspects.LIMUS.mAspect = Aspect.SLIME;
+ GTPP_Aspects.LUCRUM.mAspect = Aspect.GREED;
+ GTPP_Aspects.LUX.mAspect = Aspect.LIGHT;
+ GTPP_Aspects.MACHINA.mAspect = Aspect.MECHANISM;
+ GTPP_Aspects.MESSIS.mAspect = Aspect.CROP;
+ GTPP_Aspects.METALLUM.mAspect = Aspect.METAL;
+ GTPP_Aspects.METO.mAspect = Aspect.HARVEST;
+ GTPP_Aspects.MORTUUS.mAspect = Aspect.DEATH;
+ GTPP_Aspects.MOTUS.mAspect = Aspect.MOTION;
+ GTPP_Aspects.ORDO.mAspect = Aspect.ORDER;
+ GTPP_Aspects.PANNUS.mAspect = Aspect.CLOTH;
+ GTPP_Aspects.PERDITIO.mAspect = Aspect.ENTROPY;
+ GTPP_Aspects.PERFODIO.mAspect = Aspect.MINE;
+ GTPP_Aspects.PERMUTATIO.mAspect = Aspect.EXCHANGE;
+ GTPP_Aspects.POTENTIA.mAspect = Aspect.ENERGY;
+ GTPP_Aspects.PRAECANTATIO.mAspect = Aspect.MAGIC;
+ GTPP_Aspects.SANO.mAspect = Aspect.HEAL;
+ GTPP_Aspects.SENSUS.mAspect = Aspect.SENSES;
+ GTPP_Aspects.SPIRITUS.mAspect = Aspect.SOUL;
+ GTPP_Aspects.TELUM.mAspect = Aspect.WEAPON;
+ GTPP_Aspects.TERRA.mAspect = Aspect.EARTH;
+ GTPP_Aspects.TEMPESTAS.mAspect = Aspect.WEATHER;
+ GTPP_Aspects.TENEBRAE.mAspect = Aspect.DARKNESS;
+ GTPP_Aspects.TUTAMEN.mAspect = Aspect.ARMOR;
+ GTPP_Aspects.VACUOS.mAspect = Aspect.VOID;
+ GTPP_Aspects.VENENUM.mAspect = Aspect.POISON;
+ GTPP_Aspects.VICTUS.mAspect = Aspect.LIFE;
+ GTPP_Aspects.VINCULUM.mAspect = Aspect.TRAP;
+ GTPP_Aspects.VITIUM.mAspect = Aspect.TAINT;
+ GTPP_Aspects.VITREUS.mAspect = Aspect.CRYSTAL;
+ GTPP_Aspects.VOLATUS.mAspect = Aspect.FLIGHT;
+ GTPP_Aspects.STRONTIO.mAspect = (Aspect) TC_Aspects.STRONTIO.mAspect;
+ GTPP_Aspects.NEBRISUM.mAspect = (Aspect) TC_Aspects.NEBRISUM.mAspect;
+ GTPP_Aspects.ELECTRUM.mAspect = (Aspect) TC_Aspects.ELECTRUM.mAspect;
+ GTPP_Aspects.MAGNETO.mAspect = (Aspect) TC_Aspects.MAGNETO.mAspect;
+ GTPP_Aspects.RADIO.mAspect = (Aspect) TC_Aspects.RADIO.mAspect;
+
+ // Custom Aspects
+ GTPP_Aspects.CUSTOM_1.mAspect = new Aspect("custom1", 15647411, new Aspect[]{Aspect.COLD, Aspect.FIRE},
+ new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.RADIO.name() + ".png"), 1);
+ GTPP_Aspects.CUSTOM_2.mAspect = new Aspect("custom2", 15658622, new Aspect[]{Aspect.MAGIC, Aspect.SLIME},
+ new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.RADIO.name() + ".png"), 1);
+ GTPP_Aspects.CUSTOM_3.mAspect = new Aspect("custom3", 12644078, new Aspect[]{Aspect.ENERGY, Aspect.ARMOR},
+ new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.RADIO.name() + ".png"), 1);
+ GTPP_Aspects.CUSTOM_4.mAspect = new Aspect("custom4", 12632256, new Aspect[]{Aspect.METAL, Aspect.POISON},
+ new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.RADIO.name() + ".png"), 1);
+ GTPP_Aspects.CUSTOM_5.mAspect = new Aspect("custom4", 12648384, new Aspect[]{Aspect.LIGHT, Aspect.SOUL},
+ new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.RADIO.name() + ".png"), 1);
+ GT_LanguageManager.addStringLocalization("tc.aspect.custom1", "Balance");
+ GT_LanguageManager.addStringLocalization("tc.aspect.custom2", "Lust");
+ GT_LanguageManager.addStringLocalization("tc.aspect.custom3", "Starbound");
+ GT_LanguageManager.addStringLocalization("tc.aspect.custom4", "Toxic");
+ GT_LanguageManager.addStringLocalization("tc.aspect.custom5", "Heaven");
+ }
+
+ public static synchronized final AspectList getAspectList_Ex(final List<TC_AspectStack_Ex> aAspects) {
+ AspectList o = null;
+ try {
+ if (m == null || (m != null && !m.isAccessible())) {
+ m = GT_ThaumcraftCompat.class.getDeclaredMethod("getAspectList", List.class);
+ m.setAccessible(true);
+ }
+ if (m != null) {
+ o = (AspectList) m.invoke(null, aAspects);
+ }
+ }
+ catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {}
+ return o;
+ }
+
+ @Override
+ public boolean registerPortholeBlacklistedBlock(Block p0) {
+ return ThaumcraftUtils.registerPortholeBlacklistedBlock(p0);
+ }
+
+ @Override
+ public boolean registerThaumcraftAspectsToItem(ItemStack p0, List<TC_AspectStack> p1, boolean p2) {
+ return ThaumcraftUtils.registerThaumcraftAspectsToItem(p0, ThaumcraftUtils.convertAspectStack(p1), p2);
+ }
+
+ @Override
+ public boolean registerThaumcraftAspectsToItem(ItemStack p0, List<TC_AspectStack> p1, String p2) {
+ return ThaumcraftUtils.registerThaumcraftAspectsToItem(p0, ThaumcraftUtils.convertAspectStack(p1), p2);
+ }
+
+ @Override
+ public Object addCrucibleRecipe(String p0, Object p1, ItemStack p2, List<TC_AspectStack> p3) {
+ return ThaumcraftUtils.addCrucibleRecipe(p0, p1, p2, ThaumcraftUtils.convertAspectStack(p3));
+ }
+
+ @Override
+ public Object addInfusionRecipe(String p0, ItemStack p1, ItemStack[] p2, ItemStack p3, int p4, List<TC_AspectStack> p5) {
+ return ThaumcraftUtils.addInfusionRecipe(p0, p1, p2, p3, p4, ThaumcraftUtils.convertAspectStack(p5));
+ }
+
+ @Override
+ public Object addResearch(String p0, String p1, String p2, String[] p3, String p4, ItemStack p5, int p6, int p7,
+ int p8, int p9, List<TC_AspectStack> p10, ItemStack[] p11, Object[] p12) {
+ return ThaumcraftUtils.addResearch(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, ThaumcraftUtils.convertAspectStack(p10), p11, p12);
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/aspect/GTPP_Aspects.java b/src/Java/gtPlusPlus/xmod/thaumcraft/aspect/GTPP_Aspects.java
new file mode 100644
index 0000000000..e1df0dabf5
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/aspect/GTPP_Aspects.java
@@ -0,0 +1,77 @@
+package gtPlusPlus.xmod.thaumcraft.aspect;
+
+import java.util.List;
+
+import thaumcraft.api.aspects.Aspect;
+
+public enum GTPP_Aspects {
+
+ //Standard TC and GT Aspects
+ AER(1), ALIENIS(20), AQUA(3), ARBOR(1), AURAM(16), BESTIA(6),
+ COGNITIO(2), CORPUS(2), ELECTRUM(24), EXANIMIS(32), FABRICO(2),
+ FAMES(2), GELUM(1), GRANUM(4), HERBA(2), HUMANUS(8), IGNIS(4),
+ INSTRUMENTUM(4), ITER(6), LIMUS(3), LUCRUM(32), LUX(4), MACHINA(16),
+ MAGNETO(24), MESSIS(3), METALLUM(8), METO(2), MORTUUS(16), MOTUS(4),
+ NEBRISUM(48), ORDO(8), PANNUS(6), PERDITIO(2), PERFODIO(4),
+ PERMUTATIO(12), POTENTIA(16), PRAECANTATIO(16), RADIO(48),
+ SANO(24), SENSUS(4), SPIRITUS(24), STRONTIO(64), TELUM(6),
+ TERRA(1), TEMPESTAS(64), TENEBRAE(24), TUTAMEN(12), VACUOS(6),
+ VENENUM(16), VICTUS(4), VINCULUM(16), VITIUM(48), VITREUS(3), VOLATUS(12),
+
+ //Custom Aspects
+ CUSTOM_3(24), CUSTOM_4(24), CUSTOM_2(48), CUSTOM_5(48), CUSTOM_1(64);
+
+ public Aspect mAspect;
+ public int mValue;
+
+ private GTPP_Aspects(final int aValue) {
+ this.mValue = aValue;
+ }
+
+ public static class TC_AspectStack_Ex {
+ public GTPP_Aspects mAspect;
+ public long mAmount;
+
+ public TC_AspectStack_Ex(final GTPP_Aspects aAspect, final long aAmount) {
+ this.mAspect = aAspect;
+ this.mAmount = aAmount;
+ }
+
+ public TC_AspectStack_Ex copy() {
+ return new TC_AspectStack_Ex(this.mAspect, this.mAmount);
+ }
+
+ public TC_AspectStack_Ex copy(final long aAmount) {
+ return new TC_AspectStack_Ex(this.mAspect, aAmount);
+ }
+
+ public List<TC_AspectStack_Ex> addToAspectList(final List<TC_AspectStack_Ex> aList) {
+ if (this.mAmount == 0L) {
+ return aList;
+ }
+ for (final TC_AspectStack_Ex tAspect : aList) {
+ if (tAspect.mAspect == this.mAspect) {
+ final TC_AspectStack_Ex tc_AspectStack = tAspect;
+ tc_AspectStack.mAmount += this.mAmount;
+ return aList;
+ }
+ }
+ aList.add(this.copy());
+ return aList;
+ }
+
+ public boolean removeFromAspectList(final List<TC_AspectStack_Ex> aList) {
+ for (final TC_AspectStack_Ex tAspect : aList) {
+ if (tAspect.mAspect == this.mAspect && tAspect.mAmount >= this.mAmount) {
+ final TC_AspectStack_Ex tc_AspectStack = tAspect;
+ tc_AspectStack.mAmount -= this.mAmount;
+ if (tAspect.mAmount == 0L) {
+ aList.remove(tAspect);
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/util/ThaumcraftUtils.java b/src/Java/gtPlusPlus/xmod/thaumcraft/util/ThaumcraftUtils.java
new file mode 100644
index 0000000000..baace5257c
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/util/ThaumcraftUtils.java
@@ -0,0 +1,229 @@
+package gtPlusPlus.xmod.thaumcraft.util;
+
+import static gtPlusPlus.xmod.thaumcraft.aspect.GTPP_AspectCompat.getAspectList_Ex;
+
+import java.util.*;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.crafting.IRecipe;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.enums.TC_Aspects.TC_AspectStack;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+
+import gtPlusPlus.api.objects.data.Pair;
+import gtPlusPlus.xmod.thaumcraft.HANDLER_Thaumcraft;
+import gtPlusPlus.xmod.thaumcraft.aspect.GTPP_Aspects;
+import gtPlusPlus.xmod.thaumcraft.aspect.GTPP_Aspects.TC_AspectStack_Ex;
+import thaumcraft.api.ThaumcraftApi;
+import thaumcraft.api.ThaumcraftApiHelper;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.api.crafting.*;
+import thaumcraft.api.research.*;
+
+public class ThaumcraftUtils {
+
+ public static boolean addAspectToItem(ItemStack item, Aspect aspect, int amount) {
+ return addAspectToItem(item, getEnumAspect(aspect.getName()), amount);
+ }
+
+ /*public static boolean addAspectToItem(ItemStack item, Aspect[] aspects, int amount) {
+ return addAspectToItem(item, getEnumAspect(aspect.getName()), amount);
+ }*/
+
+ public static boolean addAspectToItem(ItemStack item, GTPP_Aspects aspect, int amount) {
+ return addAspectToItem(item, new GTPP_Aspects[] {aspect}, new Integer[] {amount});
+
+ }
+
+ public static boolean addAspectToItem(ItemStack item, GTPP_Aspects[] aspect, Integer[] amounts) {
+ TC_AspectStack_Ex[] aspects = new TC_AspectStack_Ex[aspect.length];
+ for (int g=0;g<aspect.length;g++) {
+ if (amounts[g] != null && amounts[g] > 0) {
+ aspects[g] = new TC_AspectStack_Ex(aspect[g], amounts[g]);
+ }
+ }
+ Pair<ItemStack, TC_AspectStack_Ex[]> k = new Pair<ItemStack, TC_AspectStack_Ex[]>(item, aspects);
+ HANDLER_Thaumcraft.sItemsToGetAspects.put(k);
+ return true;
+ }
+
+
+ public static Aspect getAspect(String name) {
+ GTPP_Aspects r = getAspectEnum(name);
+ return (r == null ? null : r.mAspect);
+ }
+
+ public static GTPP_Aspects getEnumAspect(String name) {
+ GTPP_Aspects r = getAspectEnum(name);
+ return (r == null ? null : r);
+ }
+
+ private static GTPP_Aspects getAspectEnum(String name) {
+ GTPP_Aspects h = null;
+ for (GTPP_Aspects f : GTPP_Aspects.values()) {
+ if (f.mAspect.getName().toLowerCase().contains(name.toLowerCase())) {
+ h = f;
+ }
+ }
+ return h;
+ }
+
+ public static Object addResearch(String aResearch, String aName, String aText, String[] aParentResearches, String aCategory, ItemStack aIcon, int aComplexity, int aType, int aX, int aY, List<TC_AspectStack_Ex> aAspects, ItemStack[] aResearchTriggers, Object[] aPages) {
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.researches, aResearch, true)) {
+ return null;
+ }
+ ResearchCategoryList tCategory = ResearchCategories.getResearchList(aCategory);
+ if (tCategory == null) {
+ return null;
+ }
+ for (Iterator<ResearchItem> i$ = tCategory.research.values().iterator(); i$.hasNext(); ) {
+ ResearchItem tResearch = (ResearchItem) i$.next();
+ if ((tResearch.displayColumn == aX) && (tResearch.displayRow == aY)) {
+ aX += (aX > 0 ? 5 : -5);
+ aY += (aY > 0 ? 5 : -5);
+ }
+ }
+ ResearchItem rResearch = new ResearchItem(aResearch, aCategory, getAspectList_Ex(aAspects), aX, aY, aComplexity, aIcon);
+ ArrayList<ResearchPage> tPages = new ArrayList<ResearchPage>(aPages.length);
+ GT_LanguageManager.addStringLocalization("tc.research_name." + aResearch, aName);
+ GT_LanguageManager.addStringLocalization("tc.research_text." + aResearch, "[GT++] " + aText);
+ for (Object tPage : aPages) {
+ if ((tPage instanceof String)) {
+ tPages.add(new ResearchPage((String) tPage));
+ } else if ((tPage instanceof IRecipe)) {
+ tPages.add(new ResearchPage((IRecipe) tPage));
+ } else if ((tPage instanceof IArcaneRecipe)) {
+ tPages.add(new ResearchPage((IArcaneRecipe) tPage));
+ } else if ((tPage instanceof CrucibleRecipe)) {
+ tPages.add(new ResearchPage((CrucibleRecipe) tPage));
+ } else if ((tPage instanceof InfusionRecipe)) {
+ tPages.add(new ResearchPage((InfusionRecipe) tPage));
+ } else if ((tPage instanceof InfusionEnchantmentRecipe)) {
+ tPages.add(new ResearchPage((InfusionEnchantmentRecipe) tPage));
+ }
+ }
+ if ((aType & 0x40) != 0) {
+ rResearch.setAutoUnlock();
+ }
+ if ((aType & 0x1) != 0) {
+ rResearch.setSecondary();
+ }
+ if ((aType & 0x20) != 0) {
+ rResearch.setSpecial();
+ }
+ if ((aType & 0x8) != 0) {
+ rResearch.setVirtual();
+ }
+ if ((aType & 0x4) != 0) {
+ rResearch.setHidden();
+ }
+ if ((aType & 0x10) != 0) {
+ rResearch.setRound();
+ }
+ if ((aType & 0x2) != 0) {
+ rResearch.setStub();
+ }
+ if (aParentResearches != null) {
+ ArrayList<String> tParentResearches = new ArrayList<String>();
+ for (String tParent : aParentResearches) {
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.researches, aResearch, true)) {
+ tParentResearches.add(tParent);
+ }
+ }
+ if (tParentResearches.size() > 0) {
+ rResearch.setParents((String[]) tParentResearches.toArray(new String[tParentResearches.size()]));
+ rResearch.setConcealed();
+ }
+ }
+ if (aResearchTriggers != null) {
+ rResearch.setItemTriggers(aResearchTriggers);
+ rResearch.setHidden();
+ }
+ rResearch.setPages((ResearchPage[]) tPages.toArray(new ResearchPage[tPages.size()]));
+ return rResearch.registerResearchItem();
+}
+
+
+ public static Object addCrucibleRecipe(final String aResearch, final Object aInput, final ItemStack aOutput,
+ final List<TC_AspectStack_Ex> aAspects) {
+ if (GT_Utility.isStringInvalid((Object) aResearch) || aInput == null || aOutput == null || aAspects == null
+ || aAspects.isEmpty()) {
+ return null;
+ }
+ return ThaumcraftApi.addCrucibleRecipe(aResearch, GT_Utility.copy(new Object[]{aOutput}),
+ (aInput instanceof ItemStack || aInput instanceof ArrayList) ? aInput : aInput.toString(),
+ getAspectList_Ex(aAspects));
+ }
+
+ public static Object addInfusionRecipe(final String aResearch, final ItemStack aMainInput, final ItemStack[] aSideInputs,
+ final ItemStack aOutput, final int aInstability, final List<TC_AspectStack_Ex> aAspects) {
+ if (GT_Utility.isStringInvalid((Object) aResearch) || aMainInput == null || aSideInputs == null
+ || aOutput == null || aAspects == null || aAspects.isEmpty()) {
+ return null;
+ }
+ return ThaumcraftApi.addInfusionCraftingRecipe(aResearch, (Object) GT_Utility.copy(new Object[]{aOutput}),
+ aInstability, getAspectList_Ex(aAspects), aMainInput, aSideInputs);
+ }
+
+ public static boolean registerThaumcraftAspectsToItem(final ItemStack aExampleStack,
+ final List<TC_AspectStack_Ex> aAspects, final String aOreDict) {
+ if (aAspects.isEmpty()) {
+ return false;
+ }
+ ThaumcraftApi.registerObjectTag(aOreDict, getAspectList_Ex(aAspects));
+ return true;
+ }
+
+ public static boolean registerThaumcraftAspectsToItem(final ItemStack aStack,
+ final List<TC_AspectStack_Ex> aAspects, final boolean aAdditive) {
+ if (aAspects.isEmpty()) {
+ return false;
+ }
+ if (aAdditive) {
+ ThaumcraftApi.registerComplexObjectTag(aStack, getAspectList_Ex(aAspects));
+ return true;
+ }
+ final AspectList tAlreadyRegisteredAspects = ThaumcraftApiHelper.getObjectAspects(aStack);
+ if (tAlreadyRegisteredAspects == null || tAlreadyRegisteredAspects.size() <= 0) {
+ ThaumcraftApi.registerObjectTag(aStack, getAspectList_Ex(aAspects));
+ }
+ return true;
+ }
+
+ public static boolean registerPortholeBlacklistedBlock(final Block aBlock) {
+ ThaumcraftApi.portableHoleBlackList.add(aBlock);
+ return true;
+ }
+
+ public static TC_AspectStack_Ex convertAspectStack(TC_AspectStack gtType) {
+ TC_AspectStack_Ex g = null;
+ if (gtType == null) {
+ return null;
+ }
+ else {
+ String oldName = gtType.mAspect.name().toLowerCase();
+ long oldAmount = gtType.mAmount;
+ for (GTPP_Aspects r : GTPP_Aspects.values()) {
+ if (r.mAspect.getName().toLowerCase().contains(oldName)) {
+ g = new TC_AspectStack_Ex(r, oldAmount);
+ break;
+ }
+ }
+ }
+ return g;
+ }
+
+ public static List<TC_AspectStack_Ex> convertAspectStack(List<TC_AspectStack> p5) {
+ List<TC_AspectStack_Ex> list = new ArrayList<TC_AspectStack_Ex>();
+ for (TC_AspectStack h : p5) {
+ list.add(convertAspectStack(h));
+ }
+ return list;
+ }
+
+}