aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlkalus <Draknyte1@hotmail.com>2020-11-05 02:11:29 +0000
committerAlkalus <Draknyte1@hotmail.com>2020-11-05 02:11:29 +0000
commit0aa283261421d95ae2370d25ba8a2ac318368afc (patch)
tree10f6588536330f7bdf2ad4daf85f91802df30d7c /src
parent8ee7350f7e52b898126331aea6e673c70942e42a (diff)
downloadGT5-Unofficial-0aa283261421d95ae2370d25ba8a2ac318368afc.tar.gz
GT5-Unofficial-0aa283261421d95ae2370d25ba8a2ac318368afc.tar.bz2
GT5-Unofficial-0aa283261421d95ae2370d25ba8a2ac318368afc.zip
+ Added RTG power Hatch.
+ Added better handler for packager recipes. % Moved RTG fuel pellet recipe handling to it's own function. $ Fixed minor oversight in ItemStackData. $ Fixed TC Alchemical Furnace being a laggy PoS. $ Maybe fixed TC Aspect scanner on items with invalid unlocal names.
Diffstat (limited to 'src')
-rw-r--r--src/Java/gtPlusPlus/api/helpers/GregtechPlusPlus_API.java10
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java4
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java71
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java57
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java39
-rw-r--r--src/Java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java6
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/InventoryUtils.java26
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java15
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/ClassesToTransform.java4
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_TC.java272
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_EnergyHatchPatch.java317
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_AlchemicalFurnace.java513
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ThaumcraftCraftingManager.java60
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java9
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java6
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java5
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG.java282
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java10
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java47
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java7
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java64
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java127
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/objects/ThreadAspectScanner.java2
-rw-r--r--src/resources/assets/miscutils/textures/blocks/iconsets/OVERLAY_ENERGY_RTG_OFF.pngbin0 -> 353 bytes
-rw-r--r--src/resources/assets/miscutils/textures/blocks/iconsets/OVERLAY_ENERGY_RTG_ON.pngbin0 -> 377 bytes
25 files changed, 1753 insertions, 200 deletions
diff --git a/src/Java/gtPlusPlus/api/helpers/GregtechPlusPlus_API.java b/src/Java/gtPlusPlus/api/helpers/GregtechPlusPlus_API.java
index fb1258f6d2..6fe4209efe 100644
--- a/src/Java/gtPlusPlus/api/helpers/GregtechPlusPlus_API.java
+++ b/src/Java/gtPlusPlus/api/helpers/GregtechPlusPlus_API.java
@@ -6,6 +6,7 @@ import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.WeightedCollection;
import gtPlusPlus.api.objects.minecraft.multi.SpecialMultiBehaviour;
import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy_RTG;
import gtPlusPlus.xmod.gregtech.api.util.SpecialBehaviourTooltipHandler;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
@@ -36,6 +37,15 @@ public class GregtechPlusPlus_API {
return mSpecialBehaviourItemMap;
}
+ /**
+ * Allows RTG Fuel pellets from other mods to be used in the RTG hatch.
+ * @param aStack - The Pellet Stack, sanitsed after passing through.
+ * @param aFuelValue - The Fuel Value of the Pellet to be added to the energy storage.
+ * @return - Did register?
+ */
+ public static boolean registerPelletForRtgHatch(ItemStack aStack, long aFuelValue) {
+ return GT_MetaTileEntity_Hatch_Energy_RTG.registerPelletForHatch(aStack, aFuelValue);
+ }
}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java b/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java
index 4fb6b9d8a7..476926826b 100644
--- a/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java
@@ -27,7 +27,9 @@ public class ItemStackData {
}
public ItemStack getStack() {
- return ItemUtils.simpleMetaStack(mItem, mDamage, mStackSize);
+ ItemStack aTemp = ItemUtils.simpleMetaStack(mItem, mDamage, mStackSize);
+ aTemp.setTagCompound(mNBT);
+ return aTemp;
}
}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java
new file mode 100644
index 0000000000..947b0a97b4
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java
@@ -0,0 +1,71 @@
+package gtPlusPlus.api.objects.minecraft;
+
+import java.util.Iterator;
+import java.util.Stack;
+
+import net.minecraft.item.ItemStack;
+import thaumcraft.api.aspects.AspectList;
+
+public class ThaumcraftDataStack extends Stack<ThaumcraftItemStackData> {
+
+ private final int mStackSize;
+
+ public ThaumcraftDataStack() {
+ this(Integer.MAX_VALUE);
+ }
+
+ public ThaumcraftDataStack(int aMaxSize) {
+ mStackSize = aMaxSize;
+ }
+
+ public boolean containsItemStack(ItemStack aStack, boolean aAddItemStackIfMissingFromStack) {
+ return getItemStackIndex(aStack) != -1;
+ }
+
+ private int getItemStackIndex(ItemStack aStack) {
+ if (this.empty() || aStack == null) {
+ return -1;
+ }
+ Iterator<ThaumcraftItemStackData> iterator = this.iterator();
+ int aIndex = 0;
+ while(iterator.hasNext()){
+ ThaumcraftItemStackData value = iterator.next();
+ if (value.doesItemStackDataMatch(aStack)) {
+ //int index = this.search(value);
+ return aIndex;
+ }
+ aIndex++;
+ }
+ return -1;
+ }
+
+ public AspectList getAspectsForStack(ItemStack aStack) {
+ if (aStack != null) {
+ int aIndex = getItemStackIndex(aStack);
+ if (!this.empty()) {
+ if (aIndex != -1) {
+ ThaumcraftItemStackData aValue = this.elementAt(aIndex);
+ if (aValue != null) {
+ return aValue.getAspectList();
+ }
+ }
+ }
+ if (this.empty() || aIndex == -1) {
+ ThaumcraftItemStackData aTemp = new ThaumcraftItemStackData(aStack);
+ this.push(aTemp);
+ return aTemp.getAspectList();
+ }
+ }
+ return new AspectList();
+ }
+
+ @Override
+ public ThaumcraftItemStackData push(ThaumcraftItemStackData item) {
+ if (this.size() >= this.mStackSize) {
+ this.pop();
+ }
+ return super.push(item);
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java
new file mode 100644
index 0000000000..1e9ea49dbf
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java
@@ -0,0 +1,57 @@
+package gtPlusPlus.api.objects.minecraft;
+
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager;
+
+public class ThaumcraftItemStackData {
+
+ protected final Item mItem;
+ protected final int mDamage;
+ protected final int mStackSize;
+ protected final NBTTagCompound mNBT;
+ protected final String mUniqueDataTag;
+ private final AspectList mAspectList;
+
+ public ThaumcraftItemStackData (ItemStack aStack) {
+ mItem = aStack.getItem();
+ mDamage = aStack.getItemDamage();
+ mStackSize = aStack.stackSize;
+ mNBT = (aStack.getTagCompound() != null ? aStack.getTagCompound() : new NBTTagCompound());
+ mUniqueDataTag = ""+Item.getIdFromItem(mItem)+""+mDamage+""+mNBT.getId();
+ mAspectList = ThaumcraftCraftingManager.getObjectTags(aStack);
+ }
+
+ public String getUniqueDataIdentifier() {
+ return this.mUniqueDataTag;
+ }
+
+ public ItemStack getStack() {
+ ItemStack aTemp = ItemUtils.simpleMetaStack(mItem, mDamage, mStackSize);
+ aTemp.setTagCompound(mNBT);
+ return aTemp;
+ }
+
+ public AspectList getAspectList() {
+ return mAspectList;
+ }
+
+ public boolean doesItemStackDataMatch(ItemStack aStack) {
+ if (aStack == null) {
+ return false;
+ }
+ Item aItem = aStack.getItem();
+ int aMeta = aStack.getItemDamage();
+ if (aItem != null) {
+ if (aItem == mItem && aMeta == mDamage) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java
new file mode 100644
index 0000000000..1e16527065
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java
@@ -0,0 +1,39 @@
+package gtPlusPlus.api.objects.minecraft;
+
+import java.util.HashMap;
+
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class ThaumcraftSmeltingCache {
+
+ HashMap<String, Boolean> mInternalCache = new HashMap<String, Boolean>();
+
+ public void addItemToCache(ItemStack aStack, Boolean aSmelting) {
+ String aKey = getUniqueKey(aStack);
+ mInternalCache.put(aKey, aSmelting);
+ }
+
+ public int canSmelt(ItemStack aStack) {
+ String aKey = getUniqueKey(aStack);
+ Boolean aCanSmeltValue = mInternalCache.get(aKey);
+ if (aCanSmeltValue != null) {
+ if (aCanSmeltValue) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ return -1;
+ }
+
+ public static final String getUniqueKey(ItemStack aStack) {
+ Item aItem = aStack.getItem();
+ int aDamage = aStack.getItemDamage();
+ NBTTagCompound aNBT = (aStack.getTagCompound() != null ? aStack.getTagCompound() : new NBTTagCompound());
+ return ""+Item.getIdFromItem(aItem)+""+aDamage+""+aNBT.getId();
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java b/src/Java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java
index 633c710461..34142d0390 100644
--- a/src/Java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java
+++ b/src/Java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java
@@ -93,6 +93,7 @@ public class RECIPES_GREGTECH {
vacuumFreezerRecipes();
fluidheaterRecipes();
chemplantRecipes();
+ packagerRecipes();
/**
@@ -111,6 +112,11 @@ public class RECIPES_GREGTECH {
+ private static void packagerRecipes() {
+
+
+ }
+
private static void chemplantRecipes() {
//This is subsequently absorbed in water to form nitric acid and nitric oxide.
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/InventoryUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/InventoryUtils.java
index aaa81a0057..fe67c88d69 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/InventoryUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/InventoryUtils.java
@@ -2,6 +2,11 @@ package gtPlusPlus.core.util.minecraft;
import java.util.Random;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.util.GT_Utility;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy_RTG;
import net.minecraft.block.Block;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.inventory.IInventory;
@@ -58,5 +63,26 @@ public class InventoryUtils {
}
}
+
+ public static void sortInventoryItems(MetaTileEntity aTile) {
+ sortInventoryItems(aTile.getBaseMetaTileEntity());
+ }
+
+ public static void sortInventoryItems(IGregTechTileEntity aBaseMetaTileEntity) {
+ IInventory mInv = aBaseMetaTileEntity.getIInventory(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord());
+ AutoMap<ItemStack> aInvContents = new AutoMap<ItemStack>();
+ int aSize = mInv.getSizeInventory();
+ for (int slot=0; slot<aSize; slot++) {
+ aInvContents.put(mInv.getStackInSlot(slot));
+ }
+ ItemStack[] mInventory = aInvContents.toArray();
+ for (int i = 0; i < mInventory.length; i++) {
+ for (int j = i + 1; j < mInventory.length; j++) {
+ if (mInventory[j] != null && (mInventory[i] == null || GT_Utility.areStacksEqual(mInventory[i], mInventory[j]))) {
+ GT_Utility.moveStackFromSlotAToSlotB(aBaseMetaTileEntity, aBaseMetaTileEntity, j, i, (byte) 64, (byte) 1, (byte) 64, (byte) 1);
+ }
+ }
+ }
+ }
}
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
index 3f939e6b4e..09e7f51e06 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
@@ -451,7 +451,8 @@ public class ItemUtils {
final ItemStack smallDust = ItemUtils.getSimpleStack(output[1]);
final ItemStack tinyDust = ItemUtils.getSimpleStack(output[2]);
-
+ CORE.RA.addpackagerRecipe(ItemList.Schematic_Dust.get(1), smallDust, tinyDust, normalDust);
+
if (ItemUtils.checkForInvalidItems(tinyDust) && ItemUtils.checkForInvalidItems(normalDust)) {
if (RecipeUtils.addShapedRecipe(
tinyDust, tinyDust, tinyDust,
@@ -1136,8 +1137,8 @@ public class ItemUtils {
String aDisplay = null;
try {
aDisplay = (aStack.getUnlocalizedName()).trim();
-
- } catch (Throwable t) {
+ }
+ catch (Throwable t) {
aDisplay = aStack.getItem().getUnlocalizedName();
}
if (aDisplay == null || aDisplay.length() <= 0) {
@@ -1368,4 +1369,12 @@ public class ItemUtils {
return aOther;
}
+ public static boolean areItemsEqual(ItemStack aStack1, ItemStack aStack2) {
+ return areItemsEqual(aStack1, aStack2, true);
+ }
+
+ public static boolean areItemsEqual(ItemStack aStack1, ItemStack aStack2, boolean aIgnoreNBT) {
+ return GT_Utility.areStacksEqual(aStack1, aStack2, aIgnoreNBT);
+ }
+
}
diff --git a/src/Java/gtPlusPlus/preloader/asm/ClassesToTransform.java b/src/Java/gtPlusPlus/preloader/asm/ClassesToTransform.java
index a29cebfda1..ac8fd26415 100644
--- a/src/Java/gtPlusPlus/preloader/asm/ClassesToTransform.java
+++ b/src/Java/gtPlusPlus/preloader/asm/ClassesToTransform.java
@@ -39,6 +39,7 @@ public class ClassesToTransform {
public static final String GT_ITEM_MACHINES = "gregtech.common.blocks.GT_Item_Machines";
public static final String GT_METAGENERATED_TOOL = "gregtech.api.items.GT_MetaGenerated_Tool";
public static final String GT_BLOCK_MACHINES = "gregtech.common.blocks.GT_Block_Machines";
+ public static final String GT_MTE_HATCH_ENERGY = "gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy";
public static final String GT_MTE_HATCH_INPUTBUS = "gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus";
public static final String GT_MTE_HATCH_OUTPUTBUS = "gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus";
public static final String GT_METAPIPE_ITEM = "gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Item";
@@ -48,11 +49,12 @@ public class ClassesToTransform {
public static final String GTPP_MTE_HATCH_SUPER_INPUT_BUS = "gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SuperBus_Input";
public static final String GTPP_MTE_HATCH_SUPER_OUTPUT_BUS = "gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SuperBus_Output";
- public static final String NAME = "";
+ public static final String GTPP_MTE_HATCH_RTG = "gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy_RTG";
public static final String THAUMCRAFT_ITEM_WISP_ESSENCE = "thaumcraft.common.items.ItemWispEssence";
public static final String THAUMCRAFT_CRAFTING_MANAGER = "thaumcraft.common.lib.crafting.ThaumcraftCraftingManager";
+ public static final String THAUMCRAFT_TILE_ALCHEMY_FURNACE = "thaumcraft.common.tiles.TileAlchemyFurnace";
public static final String THAUMICTINKERER_TILE_REPAIRER = "thaumic.tinkerer.common.block.tile.TileRepairer";
public static final String IC2_ITEM_ARMOUR_HAZMAT = "ic2.core.item.armor.ItemArmorHazmat";
diff --git a/src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_TC.java b/src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_TC.java
index 4c4045d576..f1219241cf 100644
--- a/src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_TC.java
+++ b/src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_TC.java
@@ -6,85 +6,95 @@ import java.util.Arrays;
import java.util.List;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import net.minecraft.init.Items;
import net.minecraft.item.Item;
+import net.minecraft.item.ItemPotion;
import net.minecraft.item.ItemStack;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
import thaumcraft.api.ThaumcraftApi;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.AspectList;
+import thaumcraft.common.items.wands.ItemWandCasting;
import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager;
public class MethodHelper_TC {
-
+
private static Class mThaumcraftCraftingManager;
- public static AspectList generateTags(final Item item, final int meta, final ArrayList<List> history) {
- int tmeta = meta;
- if (item == null) {
- return null;
- }
- //Preloader_Logger.INFO("Generating aspect tags for "+item.getUnlocalizedName()+":"+meta);
- try {
- tmeta = ((new ItemStack(item, 1, meta).getItem().isDamageable() || !new ItemStack(item, 1, meta).getItem().getHasSubtypes()) ? 32767 : meta);
- }
- catch (Exception ex) {}
- //Preloader_Logger.INFO("Set Meta to "+tmeta);
- if (ThaumcraftApi.exists(item, tmeta)) {
- return ThaumcraftCraftingManager.getObjectTags(new ItemStack(item, 1, tmeta));
- }
- if (history.contains(Arrays.asList(item, tmeta))) {
- return null;
- }
- history.add(Arrays.asList(item, tmeta));
- if (history.size() < 100) {
- AspectList ret = generateTagsFromRecipes(item, (tmeta == 32767) ? 0 : meta, history);
- ret = capAspects(ret, 64);
- ThaumcraftApi.registerObjectTag(new ItemStack(item, 1, tmeta), ret);
- return ret;
- }
- return null;
- }
-
- private static AspectList capAspects(final AspectList sourcetags, final int amount) {
- if (sourcetags == null) {
- return sourcetags;
- }
- final AspectList out = new AspectList();
- for (final Aspect aspect : sourcetags.getAspects()) {
- out.merge(aspect, Math.min(amount, sourcetags.getAmount(aspect)));
- }
- return out;
- }
-
- private static AspectList generateTagsFromRecipes(final Item item, final int meta, final ArrayList<List> history) {
- AspectList ret = null;
- ret = generateTagsFromCrucibleRecipes(item, meta, history);
- if (ret != null) {
- return ret;
- }
- ret = generateTagsFromArcaneRecipes(item, meta, history);
- if (ret != null) {
- return ret;
- }
- ret = generateTagsFromInfusionRecipes(item, meta, history);
- if (ret != null) {
- return ret;
- }
- ret = generateTagsFromCraftingRecipes(item, meta, history);
- return ret;
- }
-
- private static boolean isClassSet() {
- if (mThaumcraftCraftingManager == null) {
- mThaumcraftCraftingManager = ReflectionUtils.getClass("thaumcraft.common.lib.crafting.ThaumcraftCraftingManager");
- }
- return true;
- }
-
- private static Method mGetTagsFromCraftingRecipes;
- private static Method mGetTagsFromInfusionRecipes;
- private static Method mGetTagsFromArcaneRecipes;
- private static Method mGetTagsFromCrucibleRecipes;
-
+ public static AspectList generateTags(Item item, int meta) {
+ AspectList temp = generateTags(item, meta, new ArrayList());
+ return temp;
+ }
+
+ public static AspectList generateTags(final Item item, final int meta, final ArrayList<List> history) {
+ int tmeta = meta;
+ if (item == null) {
+ return null;
+ }
+ //Preloader_Logger.INFO("Generating aspect tags for "+item.getUnlocalizedName()+":"+meta);
+ try {
+ tmeta = ((new ItemStack(item, 1, meta).getItem().isDamageable() || !new ItemStack(item, 1, meta).getItem().getHasSubtypes()) ? 32767 : meta);
+ }
+ catch (Exception ex) {}
+ //Preloader_Logger.INFO("Set Meta to "+tmeta);
+ if (ThaumcraftApi.exists(item, tmeta)) {
+ return ThaumcraftCraftingManager.getObjectTags(new ItemStack(item, 1, tmeta));
+ }
+ if (history.contains(Arrays.asList(item, tmeta))) {
+ return null;
+ }
+ history.add(Arrays.asList(item, tmeta));
+ if (history.size() < 100) {
+ AspectList ret = generateTagsFromRecipes(item, (tmeta == 32767) ? 0 : meta, history);
+ ret = capAspects(ret, 64);
+ ThaumcraftApi.registerObjectTag(new ItemStack(item, 1, tmeta), ret);
+ return ret;
+ }
+ return null;
+ }
+
+ private static AspectList capAspects(final AspectList sourcetags, final int amount) {
+ if (sourcetags == null) {
+ return sourcetags;
+ }
+ final AspectList out = new AspectList();
+ for (final Aspect aspect : sourcetags.getAspects()) {
+ out.merge(aspect, Math.min(amount, sourcetags.getAmount(aspect)));
+ }
+ return out;
+ }
+
+ private static AspectList generateTagsFromRecipes(final Item item, final int meta, final ArrayList<List> history) {
+ AspectList ret = null;
+ ret = generateTagsFromCrucibleRecipes(item, meta, history);
+ if (ret != null) {
+ return ret;
+ }
+ ret = generateTagsFromArcaneRecipes(item, meta, history);
+ if (ret != null) {
+ return ret;
+ }
+ ret = generateTagsFromInfusionRecipes(item, meta, history);
+ if (ret != null) {
+ return ret;
+ }
+ ret = generateTagsFromCraftingRecipes(item, meta, history);
+ return ret;
+ }
+
+ private static boolean isClassSet() {
+ if (mThaumcraftCraftingManager == null) {
+ mThaumcraftCraftingManager = ReflectionUtils.getClass("thaumcraft.common.lib.crafting.ThaumcraftCraftingManager");
+ }
+ return true;
+ }
+
+ private static Method mGetTagsFromCraftingRecipes;
+ private static Method mGetTagsFromInfusionRecipes;
+ private static Method mGetTagsFromArcaneRecipes;
+ private static Method mGetTagsFromCrucibleRecipes;
+
private static AspectList generateTagsFromCraftingRecipes(Item item, int meta, ArrayList<List> history) {
isClassSet();
if (mGetTagsFromCraftingRecipes == null) {
@@ -116,5 +126,127 @@ public class MethodHelper_TC {
}
return (AspectList) ReflectionUtils.invokeNonBool(null, mGetTagsFromCrucibleRecipes, new Object[] {item, meta, history});
}
-
+
+
+
+ /*
+ * Let's improve the TC lookup for aspects, cause the default implementation is shit.
+ */
+
+
+ public static AspectList getObjectTags(ItemStack itemstack) {
+ Item item;
+ int meta;
+ try {
+ item = itemstack.getItem();
+ meta = itemstack.getItemDamage();
+ } catch (Exception var8) {
+ return null;
+ }
+
+ AspectList tmp = (AspectList)ThaumcraftApi.objectTags.get(Arrays.asList(new Object[]{item, Integer.valueOf(meta)}));
+ if(tmp == null) {
+ for(List l : ThaumcraftApi.objectTags.keySet()) {
+ if((Item)l.get(0) == item && l.get(1) instanceof int[]) {
+ int[] range = (int[])((int[])l.get(1));
+ Arrays.sort(range);
+ if(Arrays.binarySearch(range, meta) >= 0) {
+ tmp = (AspectList)ThaumcraftApi.objectTags.get(Arrays.asList(new Object[]{item, range}));
+ return tmp;
+ }
+ }
+ }
+
+ tmp = (AspectList)ThaumcraftApi.objectTags.get(Arrays.asList(new Object[]{item, Integer.valueOf(32767)}));
+ if(tmp == null && tmp == null) {
+ if(meta == 32767 && tmp == null) {
+ int index = 0;
+
+ while(true) {
+ tmp = (AspectList)ThaumcraftApi.objectTags.get(Arrays.asList(new Object[]{item, Integer.valueOf(index)}));
+ ++index;
+ if(index >= 16 || tmp != null) {
+ break;
+ }
+ }
+ }
+
+ if(tmp == null) {
+ tmp = generateTags(item, meta);
+ }
+ }
+ }
+
+ if(itemstack.getItem() instanceof ItemWandCasting) {
+ ItemWandCasting wand = (ItemWandCasting)itemstack.getItem();
+ if(tmp == null) {
+ tmp = new AspectList();
+ }
+
+ tmp.merge(Aspect.MAGIC, (wand.getRod(itemstack).getCraftCost() + wand.getCap(itemstack).getCraftCost()) / 2);
+ tmp.merge(Aspect.TOOL, (wand.getRod(itemstack).getCraftCost() + wand.getCap(itemstack).getCraftCost()) / 3);
+ }
+
+ if(item != null && item == Items.potionitem) {
+ if(tmp == null) {
+ tmp = new AspectList();
+ }
+
+ tmp.merge(Aspect.WATER, 1);
+ ItemPotion ip = (ItemPotion)item;
+ List<PotionEffect> effects = ip.getEffects(itemstack.getItemDamage());
+ if(effects != null) {
+ if(ItemPotion.isSplash(itemstack.getItemDamage())) {
+ tmp.merge(Aspect.ENTROPY, 2);
+ }
+
+ for(PotionEffect var6 : effects) {
+ tmp.merge(Aspect.MAGIC, (var6.getAmplifier() + 1) * 2);
+ if(var6.getPotionID() == Potion.blindness.id) {
+ tmp.merge(Aspect.DARKNESS, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.confusion.id) {
+ tmp.merge(Aspect.ELDRITCH, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.damageBoost.id) {
+ tmp.merge(Aspect.WEAPON, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.digSlowdown.id) {
+ tmp.merge(Aspect.TRAP, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.digSpeed.id) {
+ tmp.merge(Aspect.TOOL, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.fireResistance.id) {
+ tmp.merge(Aspect.ARMOR, var6.getAmplifier() + 1);
+ tmp.merge(Aspect.FIRE, (var6.getAmplifier() + 1) * 2);
+ } else if(var6.getPotionID() == Potion.harm.id) {
+ tmp.merge(Aspect.DEATH, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.heal.id) {
+ tmp.merge(Aspect.HEAL, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.hunger.id) {
+ tmp.merge(Aspect.DEATH, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.invisibility.id) {
+ tmp.merge(Aspect.SENSES, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.jump.id) {
+ tmp.merge(Aspect.FLIGHT, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.moveSlowdown.id) {
+ tmp.merge(Aspect.TRAP, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.moveSpeed.id) {
+ tmp.merge(Aspect.MOTION, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.nightVision.id) {
+ tmp.merge(Aspect.SENSES, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.poison.id) {
+ tmp.merge(Aspect.POISON, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.regeneration.id) {
+ tmp.merge(Aspect.HEAL, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.resistance.id) {
+ tmp.merge(Aspect.ARMOR, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.waterBreathing.id) {
+ tmp.merge(Aspect.AIR, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.weakness.id) {
+ tmp.merge(Aspect.DEATH, (var6.getAmplifier() + 1) * 3);
+ }
+ }
+ }
+ }
+
+ return capAspects(tmp, 64);
+ }
+
}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_EnergyHatchPatch.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_EnergyHatchPatch.java
new file mode 100644
index 0000000000..83560eb6c3
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_EnergyHatchPatch.java
@@ -0,0 +1,317 @@
+package gtPlusPlus.preloader.asm.transformers;
+
+import static org.objectweb.asm.Opcodes.*;
+
+import org.apache.logging.log4j.Level;
+import org.objectweb.asm.*;
+
+import cpw.mods.fml.relauncher.FMLRelaunchLog;
+import gtPlusPlus.preloader.asm.ClassesToTransform;
+
+public class ClassTransformer_GT_EnergyHatchPatch {
+
+ private static final String aRtgInputFormatted = ClassesToTransform.GTPP_MTE_HATCH_RTG.replace(".", "/");
+ private static final String aEnergyFormatted = ClassesToTransform.GT_MTE_HATCH_ENERGY.replace(".", "/");
+
+ private final boolean isValid;
+ private final ClassReader reader;
+ private final ClassWriter writer;
+
+
+ public ClassTransformer_GT_EnergyHatchPatch(byte[] basicClass, String aClassName) {
+ ClassReader aTempReader = null;
+ ClassWriter aTempWriter = null;
+
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Attempting to add slots capabilities to GT Energy Hatches.");
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Patching "+aClassName+".");
+
+ aTempReader = new ClassReader(basicClass);
+ aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
+ aTempReader.accept(new localClassVisitor(aTempWriter, aClassName), 0);
+
+ if (aTempReader != null && aTempWriter != null) {
+ isValid = true;
+ }
+ else {
+ isValid = false;
+ }
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Valid patch? "+isValid+".");
+ reader = aTempReader;
+ writer = aTempWriter;
+
+
+ if (reader != null && writer != null) {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Attempting Method Injection.");
+ injectMethod(aClassName);
+ }
+
+ }
+
+ public boolean isValidTransformer() {
+ return isValid;
+ }
+
+ public ClassReader getReader() {
+ return reader;
+ }
+
+ public ClassWriter getWriter() {
+ return writer;
+ }
+
+
+ public boolean injectMethod(String aClassName) {
+
+ boolean didInject = false;
+ MethodVisitor mv;
+ ClassWriter cw = getWriter();
+ int aConID = 1;
+
+ //GT_MetaTileEntity_Hatch_Energy
+ //Constructor
+ if (aClassName.equals(ClassesToTransform.GT_MTE_HATCH_ENERGY)){
+
+
+ //Constructor 1
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "&