aboutsummaryrefslogtreecommitdiff
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
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.
-rw-r--r--build.properties2
-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
26 files changed, 1754 insertions, 201 deletions
diff --git a/build.properties b/build.properties
index 1ecc02e148..d1371791b8 100644
--- a/build.properties
+++ b/build.properties
@@ -1,6 +1,6 @@
minecraft.version=1.7.10
forge.version=10.13.4.1614-1.7.10
-ic2.version=2.2.790-experimental
+ic2.version=2.2.817-experimental
gt.version=5.09.31
gtpp.version=1.7.05
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, "<init>", "(ILjava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(26, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitVarInsn(ILOAD, 4);
+ mv.visitVarInsn(ILOAD, 5);
+ mv.visitVarInsn(ALOAD, 6);
+ mv.visitInsn(ICONST_0);
+ mv.visitTypeInsn(ANEWARRAY, "gregtech/api/interfaces/ITexture");
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch", "<init>", "(ILjava/lang/String;Ljava/lang/String;II[Ljava/lang/String;[Lgregtech/api/interfaces/ITexture;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(27, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "Lgregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy;", null, l0, l2, 0);
+ mv.visitLocalVariable("aID", "I", null, l0, l2, 1);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 2);
+ mv.visitLocalVariable("aNameRegional", "Ljava/lang/String;", null, l0, l2, 3);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 4);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 5);
+ mv.visitLocalVariable("aDesc", "[Ljava/lang/String;", null, l0, l2, 6);
+ mv.visitMaxs(8, 7);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+
+ //Constructor 2
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Ljava/lang/String;IILjava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(30, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitVarInsn(ALOAD, 5);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch", "<init>", "(Ljava/lang/String;IILjava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(31, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "Lgregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy;", null, l0, l2, 0);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 1);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 2);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 3);
+ mv.visitLocalVariable("aDescription", "Ljava/lang/String;", null, l0, l2, 4);
+ mv.visitLocalVariable("aTextures", "[[[Lgregtech/api/interfaces/ITexture;", null, l0, l2, 5);
+ mv.visitMaxs(6, 6);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+
+ //Third constructor with String[] for GT 5.09
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Ljava/lang/String;II[Ljava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(34, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitVarInsn(ALOAD, 5);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch", "<init>", "(Ljava/lang/String;II[Ljava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(35, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "Lgregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy;", null, l0, l2, 0);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 1);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 2);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 3);
+ mv.visitLocalVariable("aDescription", "[Ljava/lang/String;", null, l0, l2, 4);
+ mv.visitLocalVariable("aTextures", "[[[Lgregtech/api/interfaces/ITexture;", null, l0, l2, 5);
+ mv.visitMaxs(6, 6);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+ didInject = true;
+ }
+
+ //GT_MetaTileEntity_Hatch_Energy_RTG
+ //Constructor
+ if (aClassName.equals(ClassesToTransform.GTPP_MTE_HATCH_RTG)){
+
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(ILjava/lang/String;Ljava/lang/String;II)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(38, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitVarInsn(ILOAD, 4);
+ mv.visitVarInsn(ILOAD, 5);
+ mv.visitInsn(ICONST_2);
+ mv.visitTypeInsn(ANEWARRAY, "java/lang/String");
+ mv.visitInsn(DUP);
+ mv.visitInsn(ICONST_0);
+ mv.visitLdcInsn("Energy Injector for Multiblocks");
+ mv.visitInsn(AASTORE);
+ mv.visitInsn(DUP);
+ mv.visitInsn(ICONST_1);
+ mv.visitLdcInsn("Accepts RTG pellets for Fuel");
+ mv.visitInsn(AASTORE);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy", "<init>", "(ILjava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(39, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "LgtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG;", null, l0, l2, 0);
+ mv.visitLocalVariable("aID", "I", null, l0, l2, 1);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 2);
+ mv.visitLocalVariable("aNameRegional", "Ljava/lang/String;", null, l0, l2, 3);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 4);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 5);
+ mv.visitMaxs(10, 6);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Ljava/lang/String;IILjava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(42, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitVarInsn(ALOAD, 5);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy", "<init>", "(Ljava/lang/String;IILjava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(43, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "LgtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG;", null, l0, l2, 0);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 1);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 2);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 3);
+ mv.visitLocalVariable("aDescription", "Ljava/lang/String;", null, l0, l2, 4);
+ mv.visitLocalVariable("aTextures", "[[[Lgregtech/api/interfaces/ITexture;", null, l0, l2, 5);
+ mv.visitMaxs(6, 6);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Ljava/lang/String;II[Ljava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(46, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitVarInsn(ALOAD, 5);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy", "<init>", "(Ljava/lang/String;II[Ljava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(47, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "LgtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG;", null, l0, l2, 0);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 1);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 2);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 3);
+ mv.visitLocalVariable("aDescription", "[Ljava/lang/String;", null, l0, l2, 4);
+ mv.visitLocalVariable("aTextures", "[[[Lgregtech/api/interfaces/ITexture;", null, l0, l2, 5);
+ mv.visitMaxs(6, 6);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+
+
+ didInject = true;
+ }
+
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Method injection complete. Successful? "+didInject);
+ return didInject;
+
+ }
+
+ public final class localClassVisitor extends ClassVisitor {
+
+ private final String mClassName;
+
+ public localClassVisitor(ClassVisitor cv, String aClassName) {
+ super(ASM5, cv);
+ mClassName = aClassName;
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
+ MethodVisitor methodVisitor = null;
+ if ((mClassName.equals(ClassesToTransform.GTPP_MTE_HATCH_RTG)) && access == ACC_PUBLIC && name.equals("<init>") && (desc.equals("(Ljava/lang/String;ILjava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V") || desc.equals("(Ljava/lang/String;I[Ljava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V"))) {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Found Constructor, "+"'"+access+"', "+"'"+name+"', "+"'"+desc+"', "+"'"+signature+"'");
+ methodVisitor = null;
+ }
+ else {
+ methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
+ }
+ if (methodVisitor == null) {
+ if (mClassName.equals(ClassesToTransform.GT_MTE_HATCH_ENERGY)){
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Removed method from "+mClassName);
+ }
+ else {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Removed Constructor with descriptor '"+desc+"' from "+mClassName);
+ }
+ }
+ return methodVisitor;
+ }
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_AlchemicalFurnace.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_AlchemicalFurnace.java
new file mode 100644
index 0000000000..abdfb7d25a
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_AlchemicalFurnace.java
@@ -0,0 +1,513 @@
+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.Preloader_Logger;
+
+public class ClassTransformer_TC_AlchemicalFurnace {
+
+ private final boolean isValid;
+ private final ClassReader reader;
+ private final ClassWriter writer;
+
+ public ClassTransformer_TC_AlchemicalFurnace(byte[] basicClass) {
+
+ ClassReader aTempReader = null;
+ ClassWriter aTempWriter = null;
+
+ aTempReader = new ClassReader(basicClass);
+ aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
+ localClassVisitor aTempMethodRemover = new localClassVisitor(aTempWriter);
+ aTempReader.accept(aTempMethodRemover, 0);
+ boolean wasMethodObfuscated = aTempMethodRemover.getObfuscatedRemoval();
+
+ if (aTempReader != null && aTempWriter != null) {
+ isValid = true;
+ } else {
+ isValid = false;
+ }
+
+ if (isValid) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Attempting Field Injection.");
+ boolean fields = addField(aTempWriter);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Success? "+fields);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Attempting Method Injection.");
+ boolean methods = injectMethod(wasMethodObfuscated, aTempWriter);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Success? "+methods);
+ }
+
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Valid patch? " + isValid + ".");
+ reader = aTempReader;
+ writer = aTempWriter;
+ }
+
+ public boolean isValidTransformer() {
+ return isValid;
+ }
+
+ public ClassReader getReader() {
+ return reader;
+ }
+
+ public ClassWriter getWriter() {
+ return writer;
+ }
+
+ // Add a field to hold the smelting cache
+ public boolean addField(ClassWriter cv) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Field injection complete.");
+ FieldVisitor fv = cv.visitField(ACC_PRIVATE, "smeltingCache", "LgtPlusPlus/api/objects/minecraft/ThaumcraftDataStack;", null, null);
+ if (fv != null) {
+ fv.visitEnd();
+ return true;
+ }
+ return false;
+ }
+
+ public boolean injectMethod(boolean wasMethodObfuscated, ClassWriter cw) {
+ MethodVisitor mv;
+ boolean didInject = false;
+
+ // Get the right string to use for the environment we are in.
+ String aItemStack = "net/minecraft/item/ItemStack";
+ String aItemStack_Obf = "add";
+ String aCorrectString = wasMethodObfuscated ? aItemStack_Obf : aItemStack;
+
+ // thaumcraft/common/tiles/TileAlchemyFurnace
+ // Replace the original canSmelt with one that uses the optimized cache
+ {
+ mv = cw.visitMethod(ACC_PRIVATE, "canSmelt", "()Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(306, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(307, l2);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l1);
+ mv.visitLineNumber(309, l1);
+ mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "thaumcraft/common/tiles/TileAlchemyFurnace", "getAspectsFromInventoryItem", "()Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 1);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(310, l3);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKESTATIC, "thaumcraft/common/lib/crafting/ThaumcraftCraftingManager", "getBonusTags", "(L"+aCorrectString+";Lthaumcraft/api/aspects/AspectList;)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 1);
+ Label l4 = new Label();
+ mv.visitLabel(l4);
+ mv.visitLineNumber(311, l4);
+ mv.visitVarInsn(ALOAD, 1);
+ Label l5 = new Label();
+ mv.visitJumpInsn(IFNULL, l5);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "size", "()I", false);
+ mv.visitJumpInsn(IFEQ, l5);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitLineNumber(312, l6);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "visSize", "()I", false);
+ mv.visitVarInsn(ISTORE, 2);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLineNumber(313, l7);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "maxVis", "I");
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "vis", "I");
+ mv.visitInsn(ISUB);
+ Label l8 = new Label();
+ mv.visitJumpInsn(IF_ICMPLE, l8);
+ Label l9 = new Label();
+ mv.visitLabel(l9);
+ mv.visitLineNumber(314, l9);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l8);
+ mv.visitLineNumber(316, l8);
+ mv.visitFrame(Opcodes.F_APPEND,2, new Object[] {"thaumcraft/api/aspects/AspectList", Opcodes.INTEGER}, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitIntInsn(BIPUSH, 10);
+ mv.visitInsn(IMUL);
+ mv.visitInsn(I2F);
+ mv.visitInsn(FCONST_1);
+ mv.visitLdcInsn(new Float("0.125"));
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "bellows", "I");
+ mv.visitInsn(I2F);
+ mv.visitInsn(FMUL);
+ mv.visitInsn(FSUB);
+ mv.visitInsn(FMUL);
+ mv.visitInsn(F2I);
+ mv.visitFieldInsn(PUTFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "smeltTime", "I");
+ Label l10 = new Label();
+ mv.visitLabel(l10);
+ mv.visitLineNumber(317, l10);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l5);
+ mv.visitLineNumber(320, l5);
+ mv.visitFrame(Opcodes.F_CHOP,1, null, 0, null);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ Label l11 = new Label();
+ mv.visitLabel(l11);
+ mv.visitLocalVariable("this", "Lthaumcraft/common/tiles/TileAlchemyFurnace;", null, l0, l11, 0);
+ mv.visitLocalVariable("al", "Lthaumcraft/api/aspects/AspectList;", null, l3, l11, 1);
+ mv.visitLocalVariable("vs", "I", null, l7, l5, 2);
+ mv.visitMaxs(5, 3);
+ mv.visitEnd();
+ }
+
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "smeltItem", "()V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(330, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "thaumcraft/common/tiles/TileAlchemyFurnace", "canSmelt", "()Z", false);
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFEQ, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(331, l2);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "thaumcraft/common/tiles/TileAlchemyFurnace", "getAspectsFromInventoryItem", "()Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 1);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(332, l3);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKESTATIC, "thaumcraft/common/lib/crafting/ThaumcraftCraftingManager", "getBonusTags", "(L"+aCorrectString+";Lthaumcraft/api/aspects/AspectList;)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 1);
+ Label l4 = new Label();
+ mv.visitLabel(l4);
+ mv.visitLineNumber(334, l4);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "getAspects", "()[Lthaumcraft/api/aspects/Aspect;", false);
+ mv.visitInsn(DUP);
+ mv.visitVarInsn(ASTORE, 5);
+ mv.visitInsn(ARRAYLENGTH);
+ mv.visitVarInsn(ISTORE, 4);
+ mv.visitInsn(ICONST_0);
+ mv.visitVarInsn(ISTORE, 3);
+ Label l5 = new Label();
+ mv.visitJumpInsn(GOTO, l5);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitFrame(Opcodes.F_FULL, 6, new Object[] {"thaumcraft/common/tiles/TileAlchemyFurnace", "thaumcraft/api/aspects/AspectList", Opcodes.TOP, Opcodes.INTEGER, Opcodes.INTEGER, "[Lthaumcraft/api/aspects/Aspect;"}, 0, new Object[] {});
+ mv.visitVarInsn(ALOAD, 5);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitInsn(AALOAD);
+ mv.visitVarInsn(ASTORE, 2);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLineNumber(335, l7);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "aspects", "Lthaumcraft/api/aspects/AspectList;");
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "getAmount", "(Lthaumcraft/api/aspects/Aspect;)I", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "add", "(Lthaumcraft/api/aspects/Aspect;I)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitInsn(POP);
+ Label l8 = new Label();
+ mv.visitLabel(l8);
+ mv.visitLineNumber(334, l8);
+ mv.visitIincInsn(3, 1);
+ mv.visitLabel(l5);
+ mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ILOAD, 4);
+ mv.visitJumpInsn(IF_ICMPLT, l6);
+ Label l9 = new Label();
+ mv.visitLabel(l9);
+ mv.visitLineNumber(338, l9);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "aspects", "Lthaumcraft/api/aspects/AspectList;");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "visSize", "()I", false);
+ mv.visitFieldInsn(PUTFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "vis", "I");
+ Label l10 = new Label();
+ mv.visitLabel(l10);
+ mv.visitLineNumber(339, l10);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitInsn(DUP);
+ mv.visitFieldInsn(GETFIELD, ""+aCorrectString+"", "stackSize", "I");
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(ISUB);
+ mv.visitFieldInsn(PUTFIELD, ""+aCorrectString+"", "stackSize", "I");
+ Label l11 = new Label();
+ mv.visitLabel(l11);
+ mv.visitLineNumber(340, l11);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitFieldInsn(GETFIELD, ""+aCorrectString+"", "stackSize", "I");
+ mv.visitJumpInsn(IFGT, l1);
+ Label l12 = new Label();
+ mv.visitLabel(l12);
+ mv.visitLineNumber(341, l12);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(ACONST_NULL);
+ mv.visitInsn(AASTORE);
+ mv.visitLabel(l1);
+ mv.visitLineNumber(345, l1);
+ mv.visitFrame(Opcodes.F_FULL, 1, new Object[] {"thaumcraft/common/tiles/TileAlchemyFurnace"}, 0, new Object[] {});
+ mv.visitInsn(RETURN);
+ Label l13 = new Label();
+ mv.visitLabel(l13);
+ mv.visitLocalVariable("this", "Lthaumcraft/common/tiles/TileAlchemyFurnace;", null, l0, l13, 0);
+ mv.visitLocalVariable("al", "Lthaumcraft/api/aspects/AspectList;", null, l3, l1, 1);
+ mv.visitLocalVariable("a", "Lthaumcraft/api/aspects/Aspect;", null, l7, l8, 2);
+ mv.visitMaxs(4, 6);
+ mv.visitEnd();
+ }
+
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "isItemValidForSlot", "(IL"+aCorrectString+";)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(362, l0);
+ mv.visitVarInsn(ILOAD, 1);
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFNE, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(363, l2);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "thaumcraft/common/tiles/TileAlchemyFurnace", "getAspectsFromInventoryItem", "()Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(364, l3);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKESTATIC, "thaumcraft/common/lib/crafting/ThaumcraftCraftingManager", "getBonusTags", "(L"+aCorrectString+";Lthaumcraft/api/aspects/AspectList;)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l4 = new Label();
+ mv.visitLabel(l4);
+ mv.visitLineNumber(365, l4);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitJumpInsn(IFNULL, l1);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "size", "()I", false);
+ mv.visitJumpInsn(IFLE, l1);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(366, l5);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l1);
+ mv.visitLineNumber(370, l1);
+ mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_1);
+ Label l6 = new Label();
+ mv.visitJumpInsn(IF_ICMPNE, l6);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitMethodInsn(INVOKESTATIC, "thaumcraft/common/tiles/TileAlchemyFurnace", "isItemFuel", "(L"+aCorrectString+";)Z", false);
+ Label l7 = new Label();
+ mv.visitJumpInsn(GOTO, l7);
+ mv.visitLabel(l6);
+ mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+ mv.visitInsn(ICONST_0);
+ mv.visitLabel(l7);
+ mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {Opcodes.INTEGER});
+ mv.visitInsn(IRETURN);
+ Label l8 = new Label();
+ mv.visitLabel(l8);
+ mv.visitLocalVariable("this", "Lthaumcraft/common/tiles/TileAlchemyFurnace;", null, l0, l8, 0);
+ mv.visitLocalVariable("par1", "I", null, l0, l8, 1);
+ mv.visitLocalVariable("par2ItemStack", "L"+aCorrectString+";", null, l0, l8, 2);
+ mv.visitLocalVariable("al", "Lthaumcraft/api/aspects/AspectList;", null, l3, l1, 3);
+ mv.visitMaxs(2, 4);
+ mv.visitEnd();
+ }
+
+ {
+ mv = cw.visitMethod(ACC_PRIVATE, "getAspectsFromInventoryItem", "()Lthaumcraft/api/aspects/AspectList;", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(416, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "smeltingCache", "LgtPlusPlus/api/objects/minecraft/ThaumcraftDataStack;");
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(417, l2);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitTypeInsn(NEW, "gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack");
+ mv.visitInsn(DUP);
+ mv.visitIntInsn(BIPUSH, 20);
+ mv.visitMethodInsn(INVOKESPECIAL, "gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack", "<init>", "(I)V", false);
+ mv.visitFieldInsn(PUTFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "smeltingCache", "LgtPlusPlus/api/objects/minecraft/ThaumcraftDataStack;");
+ mv.visitLabel(l1);
+ mv.visitLineNumber(419, l1);
+ mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "smeltingCache", "LgtPlusPlus/api/objects/minecraft/ThaumcraftDataStack;");
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack", "getAspectsForStack", "(L"+aCorrectString+";)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 1);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(420, l3);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitInsn(ARETURN);
+ Label l4 = new Label();
+ mv.visitLabel(l4);
+ mv.visitLocalVariable("this", "Lthaumcraft/common/tiles/TileAlchemyFurnace;", null, l0, l4, 0);
+ mv.visitLocalVariable("al", "Lthaumcraft/api/aspects/AspectList;", null, l3, l4, 1);
+ mv.visitMaxs(4, 2);
+ mv.visitEnd();
+ }
+
+ didInject = true;
+
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Method injection complete.");
+ return didInject;
+ }
+
+ public final class localClassVisitor extends ClassVisitor {
+
+ boolean obfuscated = false;
+
+ public localClassVisitor(ClassVisitor cv) {
+ super(ASM5, cv);
+ }
+
+ public boolean getObfuscatedRemoval() {
+ return obfuscated;
+ }
+
+ @Override
+ public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
+ //Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found Field "+name+" | "+desc);
+ return cv.visitField(access, name, desc, signature, value);
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
+ MethodVisitor methodVisitor;
+ String aDesc1_1 = "()Z";
+ String aDesc1_2 = "()V";
+ String aDesc1_3 = "(ILnet/minecraft/item/ItemStack;)Z";
+ String aDesc2_3 = "(ILadd;)Z";
+ if (name.equals("canSmelt")) {
+ if (desc.equals(aDesc1_1)) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found canSmelt to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ obfuscated = false;
+ methodVisitor = null;
+ }
+ else {
+ Preloader_Logger.INFO("Found canSmelt: "+desc+" | "+signature);
+ if (desc.toLowerCase().contains("item")) {
+ obfuscated = false;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ }
+ else {
+ obfuscated = true;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is obfuscated.");
+ }
+ methodVisitor = null;
+ }
+ }
+ else if (name.equals("smeltItem")) {
+ if (desc.equals(aDesc1_2)) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found smeltItem to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ obfuscated = false;
+ methodVisitor = null;
+ }
+ else {
+ Preloader_Logger.INFO("Found smeltItem: "+desc+" | "+signature);
+ if (desc.toLowerCase().contains("item")) {
+ obfuscated = false;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ }
+ else {
+ obfuscated = true;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is obfuscated.");
+ }
+ methodVisitor = null;
+ }
+ }
+ else if (name.equals("isItemValidForSlot")) {
+ if (desc.equals(aDesc1_3)) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found isItemValidForSlot to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ obfuscated = false;
+ methodVisitor = null;
+ }
+ else if (desc.equals(aDesc2_3)) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found isItemValidForSlot to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is obfuscated.");
+ obfuscated = true;
+ methodVisitor = null;
+ }
+ else {
+ Preloader_Logger.INFO("Found isItemValidForSlot: "+desc+" | "+signature);
+ if (desc.toLowerCase().contains("item")) {
+ obfuscated = false;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ }
+ else {
+ obfuscated = true;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is obfuscated.");
+ }
+ methodVisitor = null;
+ }
+ }
+ else {
+ methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
+ }
+
+ if (methodVisitor == null) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found method " + name + ", removing.");
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Descriptor: "+desc+" | "+signature);
+ }
+ return methodVisitor;
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ThaumcraftCraftingManager.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ThaumcraftCraftingManager.java
index da472717b7..424b316c02 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ThaumcraftCraftingManager.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ThaumcraftCraftingManager.java
@@ -14,7 +14,7 @@ public class ClassTransformer_TC_ThaumcraftCraftingManager {
private final ClassWriter writer;
public ClassTransformer_TC_ThaumcraftCraftingManager(byte[] basicClass) {
-
+
ClassReader aTempReader = null;
ClassWriter aTempWriter = null;
@@ -29,7 +29,7 @@ public class ClassTransformer_TC_ThaumcraftCraftingManager {
} else {
isValid = false;
}
-
+
Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Valid patch? " + isValid + ".");
reader = aTempReader;
writer = aTempWriter;
@@ -37,6 +37,7 @@ public class ClassTransformer_TC_ThaumcraftCraftingManager {
if (reader != null && writer != null) {
Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Attempting Method Injection.");
injectMethod("generateTags", wasMethodObfuscated);
+ injectMethod("getObjectTags", wasMethodObfuscated);
}
}
@@ -58,7 +59,9 @@ public class ClassTransformer_TC_ThaumcraftCraftingManager {
boolean didInject = false;
ClassWriter cw = getWriter();
String aitemClassName = wasMethodObfuscated ? "adb" : "net/minecraft/item/Item";
- String aClassName = "thaumcraft.common.lib.crafting.ThaumcraftCraftingManager";
+ String aitemStackClassName = wasMethodObfuscated ? "add" : "net/minecraft/item/ItemStack";
+ String aClassName = "thaumcraft.common.lib.crafting.ThaumcraftCraftingManager";
+
if (aMethodName.equals("generateTags")) {
Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Injecting " + aMethodName + ", static replacement call to "+aClassName+".");
mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "generateTags", "(L"+aitemClassName+";ILjava/util/ArrayList;)Lthaumcraft/api/aspects/AspectList;", "(L"+aitemClassName+";ILjava/util/ArrayList<Ljava/util/List;>;)Lthaumcraft/api/aspects/AspectList;", null);
@@ -80,7 +83,24 @@ public class ClassTransformer_TC_ThaumcraftCraftingManager {
mv.visitEnd();
didInject = true;
}
-
+
+ if (aMethodName.equals("getObjectTags")) {
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "getObjectTags", "(L"+aitemStackClassName+";)Lthaumcraft/api/aspects/AspectList;", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(222, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/preloader/asm/helpers/MethodHelper_TC", "getObjectTags", "(L"+aitemStackClassName+";)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitInsn(ARETURN);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLocalVariable("itemstack", "L"+aitemStackClassName+";", null, l0, l1, 0);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+ didInject = true;
+ }
+
Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Method injection complete.");
return didInject;
}
@@ -88,7 +108,7 @@ public class ClassTransformer_TC_ThaumcraftCraftingManager {
public final class localClassVisitor extends ClassVisitor {
boolean obfuscated = false;
-
+
public localClassVisitor(ClassVisitor cv) {
super(ASM5, cv);
}
@@ -102,9 +122,9 @@ public class ClassTransformer_TC_ThaumcraftCraftingManager {
MethodVisitor methodVisitor;
String aDeObfName = "net/minecraft/item/Item";
String aObfName = "adb";
- String aDesc1 = "(L+aDeObfName+;ILjava/util/ArrayList;)Lthaumcraft/api/aspects/AspectList;";
+ String aDesc1 = "(L"+aDeObfName+";ILjava/util/ArrayList;)Lthaumcraft/api/aspects/AspectList;";
String aDesc2 = "(L"+aObfName+";ILjava/util/ArrayList;)Lthaumcraft/api/aspects/AspectList;";
-
+
if (name.equals("generateTags") && signature != null) {
if (desc.equals(aDesc1)) {
Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Found generateTags to remove: "+desc+" | "+signature);
@@ -131,6 +151,32 @@ public class ClassTransformer_TC_ThaumcraftCraftingManager {
methodVisitor = null;
}
}
+ else if (name.equals("getObjectTags")) {
+ if (desc.equals(aDesc1)) {
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Found getObjectTags to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is not obfuscated.");
+ obfuscated = false;
+ methodVisitor = null;
+ }
+ else if (desc.equals(aDesc2)) {
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Found getObjectTags to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is obfuscated.");
+ obfuscated = true;
+ methodVisitor = null;
+ }
+ else {
+ Preloader_Logger.INFO("Found getObjectTags: "+desc+" | "+signature);
+ if (desc.toLowerCase().contains("item")) {
+ obfuscated = false;
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is not obfuscated.");
+ }
+ else {
+ obfuscated = true;
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is obfuscated.");
+ }
+ methodVisitor = null;
+ }
+ }
else {
methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
index 998ee03555..6e0f94a54b 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
@@ -190,6 +190,11 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
Preloader_Logger.INFO("Gregtech Bus Patch", "Transforming "+transformedName);
return new ClassTransformer_GT_BusPatch(basicClass, transformedName).getWriter().toByteArray();
}
+ //Inject Custom constructors for RTG Hatches
+ if (transformedName.equals(GT_MTE_HATCH_ENERGY) || transformedName.equals(GTPP_MTE_HATCH_RTG)) {
+ Preloader_Logger.INFO("Gregtech RTG Patch", "Transforming "+transformedName);
+ return new ClassTransformer_GT_EnergyHatchPatch(basicClass, transformedName).getWriter().toByteArray();
+ }
//Try patch achievements
if (transformedName.equals(GT_ACHIEVEMENTS)) {
Preloader_Logger.INFO("Gregtech Achievements Patch", "Transforming "+transformedName);
@@ -281,6 +286,10 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
Preloader_Logger.INFO("Thaumcraft CraftingManager Patch", "Transforming "+transformedName);
return new ClassTransformer_TC_ThaumcraftCraftingManager(basicClass).getWriter().toByteArray();
}
+ if (transformedName.equals(THAUMCRAFT_TILE_ALCHEMY_FURNACE)) {
+ Preloader_Logger.INFO("Thaumcraft Alchemy Furnace Patch", "Transforming "+transformedName);
+ return new ClassTransformer_TC_AlchemicalFurnace(basicClass).getWriter().toByteArray();
+ }
//Fix Thaumic Tinkerer Shit
if (transformedName.equals(THAUMICTINKERER_TILE_REPAIRER) && AsmConfig.enableThaumicTinkererRepairFix) {
//Preloader_Logger.INFO("Thaumic Tinkerer RepairItem Patch", "Transforming "+transformedName);
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java b/src/Java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
index 53bb8d8410..9e62d05df2 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
@@ -453,7 +453,11 @@ public enum GregtechItemList implements GregtechItemContainer {
//Elemental Duplicator Data Orb Bus
Hatch_Input_Elemental_Duplicator,
-
+
+ //RTG Hatch
+ Hatch_RTG_LV,
+ Hatch_RTG_MV,
+ Hatch_RTG_HV,
//Battery hatches for PSS
Hatch_Input_Battery_MV,
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java b/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
index bf36b56015..229bc234e9 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
@@ -293,6 +293,9 @@ public interface IGregtech_RecipeAdder {
public boolean addFlotationRecipe(Materials aMat, ItemStack aXanthate, FluidStack[] aInputFluids, FluidStack[] aOutputFluids, int aTime, int aEU);
public boolean addFlotationRecipe(Material aMat, ItemStack aXanthate, FluidStack[] aInputFluids, FluidStack[] aOutputFluids, int aTime, int aEU);
-
+ public boolean addpackagerRecipe(ItemStack aRecipeType, ItemStack aInput1, ItemStack aInput2, ItemStack aOutputStack1);
+
+ public boolean addFuelForRTG(ItemStack aFuelPellet, int aFuelDays, int aVoltage);
+
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG.java b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG.java
new file mode 100644
index 0000000000..7b52b9449f
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG.java
@@ -0,0 +1,282 @@
+package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+
+import java.lang.reflect.Constructor;
+import java.util.HashMap;
+
+import gregtech.api.gui.GT_Container_3by3;
+import gregtech.api.gui.GT_GUIContainer_3by3;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.util.minecraft.InventoryUtils;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_Hatch_Energy_RTG extends GT_MetaTileEntity_Hatch_Energy {
+
+ public GT_MetaTileEntity_Hatch_Energy_RTG(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier);
+ }
+
+ public GT_MetaTileEntity_Hatch_Energy_RTG(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_Hatch_Energy_RTG(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return super.getDescription();
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, TexturesGtBlock.getTextureFromIcon(TexturesGtBlock.Overlay_Hatch_RTG_On, new short[] {220, 220, 220, 0})};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, TexturesGtBlock.getTextureFromIcon(TexturesGtBlock.Overlay_Hatch_RTG_Off, new short[] {220, 220, 220, 0})};
+ }
+
+ @Override
+ public boolean isSimpleMachine() {
+ return true;
+ }
+
+ @Override
+ public boolean isFacingValid(byte aFacing) {
+ return true;
+ }
+
+ @Override
+ public boolean isAccessAllowed(EntityPlayer aPlayer) {
+ return true;
+ }
+
+ @Override
+ public boolean isEnetInput() {
+ return false;
+ }
+
+ @Override
+ public boolean isInputFacing(byte aSide) {
+ return aSide == getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ @Override
+ public boolean isValidSlot(int aIndex) {
+ return true;
+ }
+
+ @Override
+ public long getMinimumStoredEU() {
+ return 0;
+ }
+
+ @Override
+ public long maxEUInput() {
+ return V[mTier];
+ }
+
+ @Override
+ public long maxEUStore() {
+ return Long.MAX_VALUE / (Short.MAX_VALUE * Byte.MAX_VALUE) ;
+ }
+
+ @Override
+ public long maxAmperesIn() {
+ return 0;
+ }
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ Constructor aCon = ReflectionUtils.getConstructor(this.getClass(), new Class[] {String.class, int.class, int.class, String[].class, ITexture[][][].class});
+ Object aInst = ReflectionUtils.createNewInstanceFromConstructor(aCon, new Object[] {mName, mTier, 9, mDescriptionArray, mTextures});
+ if (GT_MetaTileEntity_Hatch_Energy_RTG.class.isInstance(aInst)) {
+ return (MetaTileEntity) aInst;
+ }
+ Logger.INFO("Created bad sized RTG hatch.");
+ return new GT_MetaTileEntity_Hatch_Energy_RTG(mName, mTier, mDescriptionArray, mTextures);
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return true;
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_3by3(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_3by3(aPlayerInventory, aBaseMetaTileEntity, "RTG Power Unit");
+ }
+
+ private static class Dat {
+
+ protected final String mUniqueDataTag;
+ private final ItemStack mStack;
+ private final NBTTagCompound mNBT;
+
+ public Dat(ItemStack aStack) {
+ mStack = aStack;
+ mNBT = (aStack.getTagCompound() != null ? aStack.getTagCompound() : new NBTTagCompound());
+ mUniqueDataTag = ""+Item.getIdFromItem(aStack.getItem())+""+aStack.getItemDamage()+""+1+""+mNBT.getId();
+ }
+
+ public int getKey() {
+ return Item.getIdFromItem(mStack.getItem())+mStack.getItemDamage();
+ }
+
+ }
+
+ private static final HashMap<String, ItemStack> mFuelInstanceMap = new HashMap<String, ItemStack>();
+ private static final HashMap<String, Long> mFuelValueMap = new HashMap<String, Long>();
+ private static final HashMap<String, Integer> mFuelTypeMap = new HashMap<String, Integer>();
+ private static final HashMap<Integer, String> mFuelTypeMapReverse = new HashMap<Integer, String>();
+
+ public static boolean registerPelletForHatch(ItemStack aStack, long aFuelValue) {
+ if (!ItemUtils.checkForInvalidItems(aStack)) {
+ return false;
+ }
+ ItemStack aTemp = aStack.copy();
+ aTemp.stackSize = 1;
+ Dat aDat = new Dat(aTemp);
+ String aKey = aDat.mUniqueDataTag;
+ mFuelInstanceMap.put(aKey, aTemp);
+ mFuelValueMap.put(aKey, aFuelValue);
+ mFuelTypeMap.put(aKey, aDat.getKey());
+ mFuelTypeMapReverse.put(aDat.getKey(), aKey);
+ Logger.INFO("RTG Hatch: Registered Fuel Pellet: "+ItemUtils.getItemName(aTemp)+", Fuel Value: "+aFuelValue+", Key: "+aKey+", Key2: "+aDat.getKey());
+ return true;
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) {
+ if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) {
+ InventoryUtils.sortInventoryItems(this);
+ }
+ if (aTimer % 100 == 0 && aBaseMetaTileEntity.isServerSide()) {
+ if (hasPellet(this)) {
+ Logger.INFO("Has Pellet");
+ tryConsumePellet(this);
+ }
+ }
+ }
+
+ private static void tryConsumePellet(GT_MetaTileEntity_Hatch_Energy_RTG aTile) {
+ ItemStack aPellet = getPelletToConsume(aTile);
+ if (aPellet != null) {
+ Logger.INFO("Found Pellet");
+ long aFuel = getFuelValueOfPellet(aPellet);
+ if (aFuel > 0) {
+ Logger.INFO("Has Fuel Value: "+aFuel);
+ if (hasSpaceForEnergy(aTile, aFuel)) {
+ Logger.INFO("Can buffer");
+ aPellet.stackSize = 0;
+ Logger.INFO("Stack set to 0");
+ aPellet = null;
+ Logger.INFO("null stack");
+ addEnergyToInternalStorage(aTile, aFuel);
+ Logger.INFO("Consumed");
+ }
+ }
+ }
+ aTile.updateSlots();
+ Logger.INFO("updating slots");
+ }
+
+ private static void addEnergyToInternalStorage(GT_MetaTileEntity_Hatch_Energy_RTG aTile, long aFuel) {
+ aTile.getBaseMetaTileEntity().increaseStoredEnergyUnits(aFuel, true);
+ }
+
+ public static boolean hasSpaceForEnergy(GT_MetaTileEntity_Hatch_Energy_RTG aTile, long aAmount) {
+ long aMax = aTile.maxEUStore();
+ long aCurrent = aTile.getEUVar();
+ if ((aMax - aCurrent) >= aAmount) {
+ return true;
+ }
+ return false;
+ }
+
+ public void updateSlots() {
+ for (int i = 0; i < mInventory.length; i++) {
+ if (mInventory[i] != null && mInventory[i].stackSize <= 0) {
+ mInventory[i] = null;
+ }
+ }
+ InventoryUtils.sortInventoryItems(this);
+ }
+
+ public static boolean hasPellet(GT_MetaTileEntity_Hatch_Energy_RTG aTile) {
+ for (ItemStack o : aTile.mInventory) {
+ if (o != null ) {
+ for (ItemStack i : mFuelInstanceMap.values()) {
+ if (ItemUtils.areItemsEqual(o, i)) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public static String getPelletType(ItemStack o) {
+ if (o == null) {
+ return "error";
+ }
+ Dat aDat = new Dat(o);
+ return mFuelTypeMapReverse.get(aDat.getKey());
+ }
+
+ public static long getFuelValueOfPellet(ItemStack aPellet) {
+ String aType = getPelletType(aPellet);
+ if (mFuelValueMap.containsKey(aType)) {
+ return mFuelValueMap.get(aType);
+ }
+ return 0;
+ }
+
+ public static ItemStack getPelletToConsume(GT_MetaTileEntity_Hatch_Energy_RTG aTile) {
+ for (ItemStack o : aTile.mInventory) {
+ if (o != null ) {
+ for (ItemStack i : mFuelInstanceMap.values()) {
+ if (ItemUtils.areItemsEqual(o, i)) {
+ return o;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java b/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java
index 07fd2fe82b..8b181a05f4 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java
@@ -99,6 +99,10 @@ public class TexturesGtBlock {
}
}
+ public static GT_RenderedTexture getTextureFromIcon(CustomIcon aIcon, short[] aRGB) {
+ return new GT_RenderedTexture(aIcon, aRGB);
+ }
+
/*
* Add Some Custom Textures below.
* I am not sure whether or not I need to declare them as such, but better to be safe than sorry.
@@ -397,7 +401,11 @@ public class TexturesGtBlock {
// Catalyst Bus
private static final CustomIcon Internal_Overlay_Bus_Catalyst = new CustomIcon("iconsets/OVERLAY_CATALYSTS");
public static final CustomIcon Overlay_Bus_Catalyst = Internal_Overlay_Bus_Catalyst;
-
+ // RTG Hatch
+ private static final CustomIcon Internal_Overlay_Hatch_RTG_Off = new CustomIcon("iconsets/OVERLAY_ENERGY_RTG_OFF");
+ public static final CustomIcon Overlay_Hatch_RTG_Off = Internal_Overlay_Hatch_RTG_Off;
+ private static final CustomIcon Internal_Overlay_Hatch_RTG_On = new CustomIcon("iconsets/OVERLAY_ENERGY_RTG_ON");
+ public static final CustomIcon Overlay_Hatch_RTG_On = Internal_Overlay_Hatch_RTG_On;
//Dimensional
private static final CustomIcon Internal_Overlay_Machine_Dimensional_Blue = new CustomIcon("TileEntities/adv_machine_dimensional_cover_blue");
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java b/src/Java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java
index de16a247b0..ce8b6eaf62 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java
@@ -201,46 +201,13 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 {
GregtechItemList.Pellet_RTG_SR90.set(this.addItem(42, StringUtils.superscript("90")+"Sr Pellet", "", new Object[]{getTcAspectStack(TC_Aspects.RADIO, 4L), getTcAspectStack(TC_Aspects.POTENTIA, 2L), getTcAspectStack(TC_Aspects.METALLUM, 2L)}));
GregtechItemList.Pellet_RTG_PO210.set(this.addItem(43, StringUtils.superscript("210")+"Po Pellet", "", new Object[]{getTcAspectStack(TC_Aspects.RADIO, 4L), getTcAspectStack(TC_Aspects.POTENTIA, 2L), getTcAspectStack(TC_Aspects.METALLUM, 2L)}));
GregtechItemList.Pellet_RTG_AM241.set(this.addItem(44, StringUtils.superscript("241")+"Am Pellet", "", new Object[]{getTcAspectStack(TC_Aspects.RADIO, 4L), getTcAspectStack(TC_Aspects.POTENTIA, 2L), getTcAspectStack(TC_Aspects.METALLUM, 2L)}));
- GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.addRecipe(
- true,
- new ItemStack[]{GregtechItemList.Pellet_RTG_PU238.get(1)},
- new ItemStack[]{},
- null,
- null,
- null,
- 0,
- 64,
- MathUtils.roundToClosestInt(87.7f));
- GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.addRecipe(
- true,
- new ItemStack[]{GregtechItemList.Pellet_RTG_SR90.get(1)},
- new ItemStack[]{},
- null,
- null,
- null,
- 0,
- 32,
- MathUtils.roundToClosestInt(28.8f));
- GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.addRecipe(
- true,
- new ItemStack[]{GregtechItemList.Pellet_RTG_PO210.get(1)},
- new ItemStack[]{},
- null,
- null,
- null,
- 0,
- 512,
- MathUtils.roundToClosestInt(1f));
- GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.addRecipe(
- true,
- new ItemStack[]{GregtechItemList.Pellet_RTG_AM241.get(1)},
- new ItemStack[]{},
- null,
- null,
- null,
- 0,
- 16,
- MathUtils.roundToClosestInt(432/2));
+
+ CORE.RA.addFuelForRTG(GregtechItemList.Pellet_RTG_PU238.get(1), MathUtils.roundToClosestInt(87.7f), 64);
+ CORE.RA.addFuelForRTG(GregtechItemList.Pellet_RTG_SR90.get(1), MathUtils.roundToClosestInt(28.8f), 32);
+ CORE.RA.addFuelForRTG(GregtechItemList.Pellet_RTG_PO210.get(1), 1, 512);
+ CORE.RA.addFuelForRTG(GregtechItemList.Pellet_RTG_AM241.get(1), MathUtils.roundToClosestInt(432/2), 16);
+ CORE.RA.addFuelForRTG(GT_ModHandler.getIC2Item("RTGPellets", 1), MathUtils.roundToClosestInt(2.6f), 8);
+
//Computer Cube
GregtechItemList.Gregtech_Computer_Cube.set(this.addItem(tLastID = 55, "Gregtech Computer Cube", "Reusable", new Object[]{getTcAspectStack(TC_Aspects.ELECTRUM, 8L), getTcAspectStack(TC_Aspects.METALLUM, 8L), getTcAspectStack(TC_Aspects.POTENTIA, 8L)}));
this.setElectricStats(32000 + tLastID, GT_Values.V[6]* 10 * 60 * 20, GT_Values.V[5], 5L, -3L, true);
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java
index eca02d290e..10286411a7 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java
@@ -2,9 +2,6 @@ package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.misc;
import java.util.ArrayList;
-import net.minecraft.block.Block;
-import net.minecraft.item.ItemStack;
-
import gregtech.api.enums.*;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@@ -15,13 +12,13 @@ import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-
import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.api.objects.minecraft.ItemStackData;
import gtPlusPlus.core.block.ModBlocks;
-import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase;
import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java b/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java
index f372baff30..1f41bf84e3 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java
@@ -26,8 +26,10 @@ import gtPlusPlus.core.util.minecraft.MaterialUtils;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.IGregtech_RecipeAdder;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy_RTG;
import gtPlusPlus.xmod.gregtech.common.StaticFields59;
import gtPlusPlus.xmod.gregtech.common.helpers.FlotationRecipeHandler;
+import gtPlusPlus.xmod.gregtech.common.tileentities.generators.GregtechMetaTileEntity_RTG;
import gtPlusPlus.xmod.gregtech.recipes.machines.RECIPEHANDLER_MatterFabricator;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
@@ -96,7 +98,7 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
e.getStackTrace();
}
try {
-
+
GTPP_Recipe aSpecialRecipe = new GTPP_Recipe(
true,
new ItemStack[] { aInput1, aInput2 },
@@ -113,8 +115,8 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
int aSize2 = aSize;
GTPP_Recipe.GTPP_Recipe_Map.sCokeOvenRecipes.add(aSpecialRecipe);
aSize = GTPP_Recipe.GTPP_Recipe_Map.sCokeOvenRecipes.mRecipeList.size();
-
-
+
+
// RECIPEHANDLER_CokeOven.debug4(aInput1, aInput2, aFluidInput,
// aFluidOutput, aOutput, aDuration, aEUt);
/*if (aFluidInput == null && aInput2 != null) {
@@ -398,7 +400,7 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
if (aFluidOutput != null) {
Logger.WARNING("Recipe will output: " + aFluidOutput.getFluid().getName());
}
-
+
GTPP_Recipe aSpecialRecipe = new GTPP_Recipe(
true,
aInput,
@@ -421,7 +423,7 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
GTPP_Recipe.GTPP_Recipe_Map.sChemicalDehydratorRecipes.addRecipe(true, aInput, aOutputItems, null,
aChances, new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, aEUt,
0);
-
+
}
else {
Logger.WARNING("Dehydrator recipe has two input items.");
@@ -513,7 +515,7 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
/*GTPP_Recipe.GTPP_Recipe_Map.sAlloyBlastSmelterRecipes.addRecipe(true, aInput, aOutputStack, null,
aChance, new FluidStack[] { aInputFluid }, new FluidStack[] { aOutput }, aDuration, aEUt,
aSpecialValue);*/
-
+
return aSize > aSize2;
}
@@ -569,7 +571,7 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
int aSize2 = aSize;
GTPP_Recipe.GTPP_Recipe_Map.sFissionFuelProcessing.add(aSpecialRecipe);
aSize = GTPP_Recipe.GTPP_Recipe_Map.sFissionFuelProcessing.mRecipeList.size();
-
+
if (aSize > aSize2) {
Logger.INFO("Added Nuclear Fuel Recipe.");
return true;
@@ -607,7 +609,7 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
int aSize2 = aSize;
GTPP_Recipe.GTPP_Recipe_Map.sCyclotronRecipes.add(aSpecialRecipe);
aSize = GTPP_Recipe.GTPP_Recipe_Map.sCyclotronRecipes.mRecipeList.size();
-
+
if (aSize > aSize2) {
Logger.INFO("Added Cyclotron Recipe.");
return true;
@@ -648,12 +650,12 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
int aSize2 = aSize;
GTPP_Recipe.GTPP_Recipe_Map.sAdvancedMixerRecipes.add(aSpecialRecipe);
aSize = GTPP_Recipe.GTPP_Recipe_Map.sAdvancedMixerRecipes.mRecipeList.size();
-
+
/*GTPP_Recipe.GTPP_Recipe_Map.sAdvancedMixerRecipes.addRecipe(true,
new ItemStack[] { aInput1, aInput2, aInput3, aInput4 },
new ItemStack[] { aOutput1, aOutput2, aOutput3, aOutput4 }, null, null,
new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, aEUt, 0);*/
-
+
return aSize > aSize2;
}
@@ -715,7 +717,7 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
aEUtick,
aSpecial);
GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.addRecipe(aRecipe);
-
+
//GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes.addRecipe(true, aInputs, aOutputs, null, aChances, aFluidInputs, aFluidOutputs, aDuration, aEUtick, aSpecial);
return true;
}
@@ -1660,6 +1662,46 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
return aSize > aSize2;
}
+ @Override
+ public boolean addpackagerRecipe(ItemStack aRecipeType, ItemStack aSmallDust, ItemStack aTinyDust, ItemStack aOutputStack1) {
+ AutoMap<Boolean> aResults = new AutoMap<Boolean>();
+ //Dust 1
+ aResults.put(GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(4L, new Object[]{aSmallDust}), aRecipeType, aOutputStack1, 100, 4));
+ //Dust 2
+ aResults.put(GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(9L, new Object[]{aTinyDust}), aRecipeType, aOutputStack1, 100, 4));
+ for (boolean b : aResults) {
+ if (!b) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean addFuelForRTG(ItemStack aFuelPellet, int aFuelDays, int aVoltage) {
+ int aSize1 = GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.mRecipeList.size();
+ GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.addRecipe(
+ true,
+ new ItemStack[]{aFuelPellet},
+ new ItemStack[]{},
+ null,
+ null,
+ null,
+ 0,
+ aVoltage,
+ aFuelDays);
+ int aSize2 = GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.mRecipeList.size();
+
+ if (aSize2 > aSize1) {
+ long eu = GregtechMetaTileEntity_RTG.getTotalEUGenerated(GregtechMetaTileEntity_RTG.convertDaysToTicks(aFuelDays), aVoltage);
+ GT_MetaTileEntity_Hatch_Energy_RTG.registerPelletForHatch(aFuelPellet, eu);
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java
index 677a47639c..c748da5d3c 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java
@@ -7,14 +7,9 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.util.minecraft.FluidUtils;
import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_AirIntake;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_ControlCore;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler_Adv;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Naquadah;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_TurbineProvider;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SuperBus_Input;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SuperBus_Output;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.*;
import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GT_MetaTileEntity_Hatch_CustomFluidBase;
public class GregtechCustomHatches {
@@ -27,6 +22,7 @@ public class GregtechCustomHatches {
run2();
}
run3();
+ run4();
}
}
@@ -70,10 +66,10 @@ public class GregtechCustomHatches {
// Multiblock Control Core Bus
GregtechItemList.Hatch_Control_Core.set((new GT_MetaTileEntity_Hatch_ControlCore(30020, "hatch.control.adv", "Control Core Module", 1)).getStackForm(1L));
-
+
// Multiblock Air Intake Hatch
GregtechItemList.Hatch_Air_Intake.set(new GT_MetaTileEntity_Hatch_AirIntake(861, "hatch.air.intake.tier.00", "Air Intake Hatch", 5).getStackForm(1L));
-
+
// Steam Hatch
GregtechItemList.Hatch_Input_Steam
.set(new GT_MetaTileEntity_Hatch_CustomFluidBase(FluidUtils.getSteam(1).getFluid(), // Fluid
@@ -86,10 +82,10 @@ public class GregtechCustomHatches {
"hatch.steam.input.tier.00", // unlocal name
"Steam Hatch" // Local name
).getStackForm(1L));
-
-
-
-
+
+
+
+
}
@@ -125,86 +121,86 @@ public class GregtechCustomHatches {
private static void run3() {
-
-
+
+
/*
* Super Input Busses
*/
-
+
int aStartID = 30021;
Class aGT_MetaTileEntity_SuperBus_Input = GT_MetaTileEntity_SuperBus_Input.class;
Class aGT_MetaTileEntity_SuperBus_Output = GT_MetaTileEntity_SuperBus_Output.class;
-
+
GregtechItemList.Hatch_SuperBus_Input_ULV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.00", "Super Bus (I) (ULV)", 0))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.00", "Super Bus (I) (ULV)", 0))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_LV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.01", "Super Bus (I) (LV)", 1))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.01", "Super Bus (I) (LV)", 1))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_MV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.02", "Super Bus (I) (MV)", 2))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.02", "Super Bus (I) (MV)", 2))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_HV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.03", "Super Bus (I) (HV)", 3))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.03", "Super Bus (I) (HV)", 3))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_EV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.04", "Super Bus (I) (EV)", 4))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.04", "Super Bus (I) (EV)", 4))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_IV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.05", "Super Bus (I) (IV)", 5))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.05", "Super Bus (I) (IV)", 5))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_LuV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.06", "Super Bus (I) (LuV)", 6))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.06", "Super Bus (I) (LuV)", 6))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_ZPM
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.07", "Super Bus (I) (ZPM)", 7))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.07", "Super Bus (I) (ZPM)", 7))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_UV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.08", "Super Bus (I) (UV)", 8))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.08", "Super Bus (I) (UV)", 8))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_MAX
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.09", "Super Bus (I) (MAX)", 9))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.09", "Super Bus (I) (MAX)", 9))
+ .getStackForm(1L));
/*
* Super Output Busses
*/
GregtechItemList.Hatch_SuperBus_Output_ULV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.00", "Super Bus (O) (ULV)", 0))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.00", "Super Bus (O) (ULV)", 0))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_LV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.01", "Super Bus (O) (LV)", 1))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.01", "Super Bus (O) (LV)", 1))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_MV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.02", "Super Bus (O) (MV)", 2))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.02", "Super Bus (O) (MV)", 2))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_HV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.03", "Super Bus (O) (HV)", 3))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.03", "Super Bus (O) (HV)", 3))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_EV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.04", "Super Bus (O) (EV)", 4))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.04", "Super Bus (O) (EV)", 4))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_IV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.05", "Super Bus (O) (IV)", 5))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.05", "Super Bus (O) (IV)", 5))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_LuV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.06", "Super Bus (O) (LuV)", 6))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.06", "Super Bus (O) (LuV)", 6))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_ZPM
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.07", "Super Bus (O) (ZPM)", 7))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.07", "Super Bus (O) (ZPM)", 7))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_UV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.08", "Super Bus (O) (UV)", 8))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.08", "Super Bus (O) (UV)", 8))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_MAX
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.09", "Super Bus (O) (MAX)", 9))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.09", "Super Bus (O) (MAX)", 9))
+ .getStackForm(1L));
}
-
+
private static Object generateBus(Class aClass, int aID, String aUnlocalName, String aLocalName, int aTier) {
Class<?> aBusEntity = aClass;
Constructor<?> constructor;
@@ -238,4 +234,19 @@ public class GregtechCustomHatches {
return null;
}
+
+ private static void run4() {
+ int aID = 31060;
+ //41, "hatch.energy.tier.01", "LV Energy Hatch", 1
+ Constructor aRTG = ReflectionUtils.getConstructor(GT_MetaTileEntity_Hatch_Energy_RTG.class, new Class[] {int.class, String.class, String.class, int.class, int.class});
+ Object aHatch1 = ReflectionUtils.createNewInstanceFromConstructor(aRTG, new Object[] {aID++, "hatch.energy.rtg.tier.01", "RTG Power Unit [LV]", 1, 9});
+ Object aHatch2 = ReflectionUtils.createNewInstanceFromConstructor(aRTG, new Object[] {aID++, "hatch.energy.rtg.tier.02", "RTG Power Unit [MV]", 2, 9});
+ Object aHatch3 = ReflectionUtils.createNewInstanceFromConstructor(aRTG, new Object[] {aID++, "hatch.energy.rtg.tier.03", "RTG Power Unit [HV]", 3, 9});
+
+ GregtechItemList.Hatch_RTG_LV.set(((IMetaTileEntity) aHatch1).getStackForm(1L));
+ GregtechItemList.Hatch_RTG_MV.set(((IMetaTileEntity) aHatch2).getStackForm(1L));
+ GregtechItemList.Hatch_RTG_HV.set(((IMetaTileEntity) aHatch3).getStackForm(1L));
+
+ }
+
}
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ThreadAspectScanner.java b/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ThreadAspectScanner.java
index 491633b381..fdcf7b8498 100644
--- a/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ThreadAspectScanner.java
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ThreadAspectScanner.java
@@ -36,7 +36,7 @@ public class ThreadAspectScanner extends Thread {
}
String nameKey;
try {
- nameKey = aStack.getUnlocalizedName();
+ nameKey = ItemUtils.getUnlocalizedItemName(aStack);
} catch (NullPointerException n) {
try {
nameKey = Utils.sanitizeString(aStack.getDisplayName().toLowerCase());
diff --git a/src/resources/assets/miscutils/textures/blocks/iconsets/OVERLAY_ENERGY_RTG_OFF.png b/src/resources/assets/miscutils/textures/blocks/iconsets/OVERLAY_ENERGY_RTG_OFF.png
new file mode 100644
index 0000000000..8b5f405322
--- /dev/null
+++ b/src/resources/assets/miscutils/textures/blocks/iconsets/OVERLAY_ENERGY_RTG_OFF.png
Binary files differ
diff --git a/src/resources/assets/miscutils/textures/blocks/iconsets/OVERLAY_ENERGY_RTG_ON.png b/src/resources/assets/miscutils/textures/blocks/iconsets/OVERLAY_ENERGY_RTG_ON.png
new file mode 100644
index 0000000000..2424eef68f
--- /dev/null
+++ b/src/resources/assets/miscutils/textures/blocks/iconsets/OVERLAY_ENERGY_RTG_ON.png
Binary files differ