Search in sources :

Example 1 with IItemContainer

use of gregapi.code.IItemContainer in project gregtech6 by GregTech6.

the class CR method shaped.

private static boolean shaped(ItemStack aResult, Enchantment[] aEnchantmentsAdded, int[] aEnchantmentLevelsAdded, boolean aMirrored, boolean aBuffered, boolean aKeepNBT, boolean aDismantleable, boolean aRemovable, boolean aReversible, boolean aRemoveAllOthersWithSameOutput, boolean aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, boolean aRemoveAllOtherShapedsWithSameOutput, boolean aRemoveAllOtherNativeRecipes, boolean aCheckForCollisions, boolean aOnlyAddIfThereIsAnyRecipeOutputtingThis, boolean aOnlyAddIfResultIsNotNull, boolean aDeleteOnlyIfNoDyeInvolved, boolean aNotAutoCraftable, Object[] aRecipe) {
    if (aOnlyAddIfResultIsNotNull && ST.invalid(aResult))
        return F;
    if (aRecipe == null || aRecipe.length <= 0)
        return F;
    boolean tThereWasARecipe = F;
    aResult = ST.validMeta(OM.get(aResult));
    for (byte i = 0; i < aRecipe.length; i++) if (aRecipe[i] != null) {
        if (aRecipe[i] instanceof IItemContainer) {
            aRecipe[i] = ((IItemContainer) aRecipe[i]).get(1);
            if (aRecipe[i] == null)
                return F;
        } else if (aRecipe[i] instanceof Enum) {
            aRecipe[i] = ((Enum<?>) aRecipe[i]).name();
        } else if (aRecipe[i] instanceof Item) {
            aRecipe[i] = ST.make((Item) aRecipe[i], 1, W);
        } else if (aRecipe[i] instanceof Block) {
            aRecipe[i] = ST.make((Block) aRecipe[i], 1, W);
        } else if (!(aRecipe[i] instanceof ItemStack || aRecipe[i] instanceof OreDictItemData || aRecipe[i] instanceof String || aRecipe[i] instanceof Character)) {
            aRecipe[i] = aRecipe[i].toString();
        }
    }
    try {
        String shape = "";
        int idx = 0;
        if (aRecipe[idx] instanceof Boolean)
            throw new IllegalArgumentException();
        ArrayList<Object> tRecipeList = new ArrayList<>(Arrays.asList(aRecipe));
        while (aRecipe[idx] instanceof String) {
            String s = (String) aRecipe[idx++];
            shape += s;
            while (s.length() < 3) s += " ";
            if (s.length() > 3)
                throw new IllegalArgumentException();
            for (char c : s.toCharArray()) {
                switch(c) {
                    case 'a':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.axe);
                        break;
                    case 'b':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.blade);
                        break;
                    case 'c':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.crowbar);
                        break;
                    case 'd':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.screwdriver);
                        break;
                    case 'e':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.drill);
                        break;
                    case 'f':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.file);
                        break;
                    case 'g':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.handdrill);
                        break;
                    case 'h':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.hammer);
                        break;
                    case 'i':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.solderingiron);
                        break;
                    case 'j':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.solderingmetal);
                        break;
                    case 'k':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.knife);
                        break;
                    case 'l':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.magnifyingglass);
                        break;
                    case 'n':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.monkeywrench);
                        break;
                    case 'o':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.bendingcylindersmall);
                        break;
                    case 'p':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.drawplate);
                        break;
                    case 'q':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.scissors);
                        break;
                    case 'r':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.softhammer);
                        break;
                    case 's':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.saw);
                        break;
                    case 'v':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.sawaxe);
                        break;
                    case 'w':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.wrench);
                        break;
                    case 'x':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.wirecutter);
                        break;
                    case 'y':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.chisel);
                        break;
                    case 'z':
                        tRecipeList.add(c);
                        tRecipeList.add(OreDictToolNames.bendingcylinder);
                        break;
                }
            }
        }
        aRecipe = tRecipeList.toArray();
        HashMap<Character, ItemStack> tItemStackMap = new HashMap<>();
        HashMap<Character, OreDictItemData> tItemDataMap = new HashMap<>();
        tItemStackMap.put(' ', null);
        boolean tRemoveRecipe = T;
        for (; idx < aRecipe.length; idx += 2) {
            if (aRecipe[idx] == null || aRecipe[idx + 1] == null) {
                ERR.println("WARNING: Missing Item for shaped Recipe: " + (aResult == null ? "null" : aResult.getDisplayName()));
                for (Object tContent : aRecipe) ERR.println(tContent);
                return F;
            }
            Character tChar = (Character) aRecipe[idx];
            Object tInput = aRecipe[idx + 1];
            if (tInput instanceof ItemStack) {
                tItemStackMap.put(tChar, ST.copy_((ItemStack) tInput));
                tItemDataMap.put(tChar, OM.data_((ItemStack) tInput));
            } else {
                String tInputString = tInput.toString();
                if (tInput instanceof OreDictItemData) {
                    tItemDataMap.put(tChar, (OreDictItemData) tInput);
                    if (UT.Code.stringInvalid(tInputString)) {
                        throw new IllegalArgumentException();
                    }
                } else if (UT.Code.stringValid(tInputString)) {
                    tItemDataMap.put(tChar, OreDictManager.INSTANCE.getAutomaticItemData(tInputString));
                } else {
                    throw new IllegalArgumentException();
                }
                ItemStack tStack = OreDictManager.INSTANCE.getFirstOre(tInputString, 1);
                if (tStack == null)
                    tRemoveRecipe = F;
                else
                    tItemStackMap.put(tChar, tStack);
                aRecipe[idx + 1] = tInputString;
            }
        }
        if (aReversible && aResult != null) {
            OreDictItemData[] tData = new OreDictItemData[9];
            int x = -1;
            for (char chr : shape.toCharArray()) tData[++x] = tItemDataMap.get(chr);
            if (UT.Code.containsSomething(tData))
                OM.data(aResult, new OreDictItemData(tData));
        }
        if (aCheckForCollisions && tRemoveRecipe) {
            ItemStack[] tRecipe = new ItemStack[9];
            int x = -1;
            for (char chr : shape.toCharArray()) {
                tRecipe[++x] = tItemStackMap.get(chr);
                if (tRecipe[x] != null && ST.meta_(tRecipe[x]) == W)
                    ST.meta_(tRecipe[x], 0);
            }
            tThereWasARecipe = remove(tRecipe) != null || tThereWasARecipe;
        }
    } catch (Throwable e) {
        e.printStackTrace(ERR);
    }
    if (aResult == null || aResult.stackSize <= 0)
        return F;
    if (aRemoveAllOthersWithSameOutput || aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT || aRemoveAllOtherShapedsWithSameOutput || aRemoveAllOtherNativeRecipes)
        tThereWasARecipe = remout(aResult, !aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, aRemoveAllOtherShapedsWithSameOutput, aRemoveAllOtherNativeRecipes, aDeleteOnlyIfNoDyeInvolved) || tThereWasARecipe;
    if (aOnlyAddIfThereIsAnyRecipeOutputtingThis && !tThereWasARecipe) {
        List<IRecipe> tList = list();
        for (int i = 0; i < tList.size(); i++) {
            IRecipe tRecipe = tList.get(i);
            if (CLASSES_SPECIAL.contains(tRecipe.getClass().getName()))
                continue;
            if (ST.equal(OM.get(tRecipe.getRecipeOutput()), aResult, T)) {
                tThereWasARecipe = T;
                break;
            }
        }
    }
    aResult = ST.update_(aResult);
    if (tThereWasARecipe || !aOnlyAddIfThereIsAnyRecipeOutputtingThis) {
        if (BUFFERING && aBuffered)
            BUFFER.add(new AdvancedCraftingShaped(ST.copy_(aResult), aDismantleable, aRemovable, aKeepNBT, !aNotAutoCraftable, aEnchantmentsAdded, aEnchantmentLevelsAdded, aRecipe).setMirrored(aMirrored));
        else
            GameRegistry.addRecipe(new AdvancedCraftingShaped(ST.copy_(aResult), aDismantleable, aRemovable, aKeepNBT, !aNotAutoCraftable, aEnchantmentsAdded, aEnchantmentLevelsAdded, aRecipe).setMirrored(aMirrored));
    }
    return T;
}
Also used : HashMap(java.util.HashMap) OreDictItemData(gregapi.oredict.OreDictItemData) ArrayList(java.util.ArrayList) Item(net.minecraft.item.Item) IRecipe(net.minecraft.item.crafting.IRecipe) IItemContainer(gregapi.code.IItemContainer) AdvancedCraftingShaped(gregapi.recipes.AdvancedCraftingShaped) Block(net.minecraft.block.Block) ItemStack(net.minecraft.item.ItemStack)

Example 2 with IItemContainer

use of gregapi.code.IItemContainer in project gregtech6 by GregTech6.

the class MultiItemRandom method addItem.

/**
 * This adds a Custom Item.
 * @param aID The Id of the assigned Item [0 - 32766]
 * @param aEnglish The Default Localised Name of the created Item
 * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip
 * @param aFoodBehavior The Food Value of this Item. Can be null aswell. Just a convenience thing.
 * @param aRandomData The OreDict Names you want to give the Item. Also used for TC Aspects and some other things.
 * @return An ItemStack containing the newly created Item.
 */
@SuppressWarnings("unchecked")
public final ItemStack addItem(int aID, String aEnglish, String aToolTip, Object... aRandomData) {
    if (aToolTip == null)
        aToolTip = "";
    if (mAllowedToAddItems && aID >= 0 && aID < 32767 && aID != W) {
        mLastID = (short) aID;
        ItemStack aStack = ST.make(this, 1, aID);
        if (UT.Code.stringValid(aEnglish)) {
            mEnabledItems.set(aID);
            mVisibleItems.set(aID);
            LH.add(getUnlocalizedName(aStack) + ".name", aEnglish);
            LH.add(getUnlocalizedName(aStack) + ".tooltip", aToolTip);
        }
        List<TC_AspectStack> tAspects = new ArrayListNoNulls<>();
        // Important Stuff to do first
        for (Object tRandomData : aRandomData) if (tRandomData instanceof TagData) {
            if (tRandomData == TD.Creative.HIDDEN) {
                mVisibleItems.set(aID, F);
                continue;
            }
            if (tRandomData == TD.Properties.AUTO_BLACKLIST) {
                OM.blacklist_(aStack);
                continue;
            }
        }
        // now check for the rest
        for (Object tRandomData : aRandomData) if (tRandomData != null) {
            boolean tUseOreDict = T;
            if (tRandomData instanceof ItemStackSet) {
                ((ItemStackSet<?>) tRandomData).add(aStack);
                continue;
            }
            if (tRandomData instanceof TagData) {
                continue;
            }
            if (tRandomData instanceof Number) {
                setBurnValue(aID, ((Number) tRandomData).intValue());
                continue;
            }
            if (tRandomData instanceof IFoodStat) {
                setFoodBehavior(aID, (IFoodStat) tRandomData);
                if (IL.IC2_Food_Can_Empty.exists() && IL.IC2_Food_Can_Filled.exists() && getContainerItem(aStack) == null) {
                    int tFoodValue = ((IFoodStat) tRandomData).getFoodLevel(this, aStack, null);
                    if (tFoodValue > 0)
                        RM.Canner.addRecipe2(T, 16, tFoodValue * 16, aStack, IL.IC2_Food_Can_Empty.get(tFoodValue), ((IFoodStat) tRandomData).isRotten(this, aStack, null) ? IL.IC2_Food_Can_Spoiled.get(tFoodValue, IL.IC2_Food_Can_Filled.get(tFoodValue)) : IL.IC2_Food_Can_Filled.get(tFoodValue));
                }
                tUseOreDict = F;
            }
            if (tRandomData instanceof ICover) {
                CoverRegistry.put(aStack, (ICover) tRandomData);
                tUseOreDict = F;
            }
            if (tRandomData instanceof IBehavior) {
                addItemBehavior(aID, (IBehavior<MultiItem>) tRandomData);
                tUseOreDict = F;
            }
            if (tRandomData instanceof IItemEnergy) {
                setElectricStats(aID, (IItemEnergy) tRandomData);
                tUseOreDict = F;
            }
            if (tRandomData instanceof IItemContainer) {
                ((IItemContainer) tRandomData).set(aStack);
                tUseOreDict = F;
            }
            if (tRandomData instanceof TC_AspectStack) {
                ((TC_AspectStack) tRandomData).addToAspectList(tAspects);
                continue;
            }
            if (tRandomData instanceof OreDictItemData) {
                if (((OreDictItemData) tRandomData).hasValidPrefixMaterialData()) {
                    OM.reg(aStack, tRandomData);
                    ItemStack tStack = ((OreDictItemData) tRandomData).getStack(1);
                    // Priority over autogenerated PrefixItems, but not over the hardcoded Compatibility Targets.
                    if (ST.invalid(tStack) || tStack.getItem() instanceof PrefixItem) {
                        OreDictManager.INSTANCE.setTarget_(((OreDictItemData) tRandomData).mPrefix, ((OreDictItemData) tRandomData).mMaterial.mMaterial, aStack);
                        continue;
                    }
                }
                OreDictManager.INSTANCE.addItemData_(aStack, (OreDictItemData) tRandomData);
                continue;
            }
            if (tRandomData instanceof FluidStack) {
                tRandomData = new FluidContainerData((FluidStack) tRandomData, ST.copy_(aStack), getContainerItem(aStack), T);
                // if (((FluidContainerData)tRandomData).emptyContainer != null)
                // RM.Canner.addRecipe1(T, 16, Math.max(((FluidContainerData)tRandomData).fluid.amount / 64, 16), ((FluidContainerData)tRandomData).emptyContainer, ((FluidContainerData)tRandomData).fluid, NF, ((FluidContainerData)tRandomData).filledContainer);
                // RM.Canner.addRecipe1(T, 16, Math.max(((FluidContainerData)tRandomData).fluid.amount / 64, 16), ((FluidContainerData)tRandomData).filledContainer, NF, ((FluidContainerData)tRandomData).fluid, ST.container(((FluidContainerData)tRandomData).filledContainer, F));
                FL.reg((FluidContainerData) tRandomData, T, F);
                continue;
            }
            if (tRandomData instanceof FluidContainerData) {
                // if (((FluidContainerData)tRandomData).emptyContainer != null)
                // RM.Canner.addRecipe1(T, 16, Math.max(((FluidContainerData)tRandomData).fluid.amount / 64, 16), ((FluidContainerData)tRandomData).emptyContainer, ((FluidContainerData)tRandomData).fluid, NF, ((FluidContainerData)tRandomData).filledContainer);
                // RM.Canner.addRecipe1(T, 16, Math.max(((FluidContainerData)tRandomData).fluid.amount / 64, 16), ((FluidContainerData)tRandomData).filledContainer, NF, ((FluidContainerData)tRandomData).fluid, ST.container(((FluidContainerData)tRandomData).filledContainer, F));
                FL.reg((FluidContainerData) tRandomData, T, F);
                continue;
            }
            if (tRandomData instanceof Runnable) {
                GAPI.mAfterPostInit.add((Runnable) tRandomData);
                tUseOreDict = F;
            }
            if (tUseOreDict) {
                OM.reg(tRandomData, aStack);
                continue;
            }
        }
        if (COMPAT_TC != null)
            COMPAT_TC.registerThaumcraftAspectsToItem(aStack, tAspects, F);
        return ST.update(ST.make(this, 1, aID));
    }
    return null;
}
Also used : IItemEnergy(gregapi.item.IItemEnergy) OreDictItemData(gregapi.oredict.OreDictItemData) FluidStack(net.minecraftforge.fluids.FluidStack) IFoodStat(gregapi.item.multiitem.food.IFoodStat) ItemStackSet(gregapi.code.ItemStackSet) IItemContainer(gregapi.code.IItemContainer) PrefixItem(gregapi.item.prefixitem.PrefixItem) FluidContainerData(net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData) ArrayListNoNulls(gregapi.code.ArrayListNoNulls) TC_AspectStack(gregapi.data.TC.TC_AspectStack) IBehavior(gregapi.item.multiitem.behaviors.IBehavior) ICover(gregapi.cover.ICover) TagData(gregapi.code.TagData) ItemStack(net.minecraft.item.ItemStack)

Example 3 with IItemContainer

use of gregapi.code.IItemContainer in project gregtech6 by GregTech6.

the class GT6_Main method onModPostInit2.

@Override
public void onModPostInit2(FMLPostInitializationEvent aEvent) {
    ItemStack tLignite = ST.make(MD.UB, "ligniteCoal", 1, 0);
    if (ST.valid(tLignite))
        CR.remove(tLignite, tLignite, tLignite, tLignite, tLignite, tLignite, tLignite, tLignite, tLignite);
    Block tBlock = ST.block(MD.FR, "beehives", NB);
    if (tBlock != NB) {
        tBlock.setHarvestLevel("scoop", 0);
        GT_Tool_Scoop.sBeeHiveMaterial = tBlock.getMaterial();
    }
    for (IItemContainer tBee : new IItemContainer[] { IL.FR_Bee_Drone, IL.FR_Bee_Princess, IL.FR_Bee_Queen }) if (tBee.exists()) {
        for (String tFluid : FluidsGT.HONEY) if (FL.exists(tFluid))
            RM.Bumblelyzer.addFakeRecipe(F, ST.array(tBee.wild(1)), ST.array(tBee.getWithName(1, "Scanned Bee")), null, null, FL.array(FL.make(tFluid, 50)), null, 64, 16, 0);
        RM.Bumblelyzer.addFakeRecipe(F, ST.array(tBee.wild(1)), ST.array(tBee.getWithName(1, "Scanned Bee")), null, null, FL.array(FL.Honeydew.make(50)), null, 64, 16, 0);
    }
    for (IItemContainer tPlant : new IItemContainer[] { IL.FR_Tree_Sapling, IL.IC2_Crop_Seeds }) if (tPlant.exists()) {
        RM.Plantalyzer.addFakeRecipe(F, ST.array(tPlant.wild(1)), ST.array(tPlant.getWithName(1, "Scanned Plant")), null, null, null, null, 64, 16, 0);
    }
    for (ItemStack tStack : OreDictManager.getOres("bookWritten", F)) RM.ScannerVisuals.addFakeRecipe(F, ST.array(tStack, IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing scanned Book"), tStack), null, null, ZL_FS, ZL_FS, 512, 16, 0);
    RM.ScannerVisuals.addFakeRecipe(F, ST.array(IL.Paper_Printed_Pages.get(1), IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing scanned Book"), IL.Paper_Printed_Pages.get(1)), null, null, ZL_FS, ZL_FS, 512, 16, 0);
    RM.ScannerVisuals.addFakeRecipe(F, ST.array(IL.Paper_Printed_Pages_Many.get(1), IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing large scanned Book"), IL.Paper_Printed_Pages_Many.get(1)), null, null, ZL_FS, ZL_FS, 512, 16, 0);
    for (ItemStack tStack : OreDictManager.getOres("gt:canvas", F)) RM.ScannerVisuals.addFakeRecipe(F, ST.array(tStack, IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing scanned Block"), tStack), null, null, ZL_FS, ZL_FS, 64, 16, 0);
    RM.ScannerVisuals.addFakeRecipe(F, ST.array(ST.make(Blocks.crafting_table, 1, 0, "ANY BLOCK"), IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing scanned Block"), ST.make(Blocks.crafting_table, 1, 0, "ANY BLOCK")), null, null, ZL_FS, ZL_FS, 512, 16, 0);
    RM.ScannerVisuals.addFakeRecipe(F, ST.array(ST.make(Items.filled_map, 1, W), IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing scanned Map"), ST.make(Items.filled_map, 1, W)), null, null, ZL_FS, ZL_FS, 64, 16, 0);
    RM.ScannerVisuals.addFakeRecipe(F, ST.array(IL.Paper_Blueprint_Used.get(1), IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing scanned Blueprint"), IL.Paper_Blueprint_Used.get(1)), null, null, ZL_FS, ZL_FS, 64, 16, 0);
    if (IL.GC_Schematic_1.exists())
        RM.ScannerVisuals.addFakeRecipe(F, ST.array(IL.GC_Schematic_1.wild(1), IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing scanned Schematics"), IL.GC_Schematic_1.wild(1)), null, null, ZL_FS, ZL_FS, 1024, 16, 0);
    if (IL.GC_Schematic_2.exists())
        RM.ScannerVisuals.addFakeRecipe(F, ST.array(IL.GC_Schematic_2.wild(1), IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing scanned Schematics"), IL.GC_Schematic_2.wild(1)), null, null, ZL_FS, ZL_FS, 1024, 16, 0);
    if (IL.GC_Schematic_3.exists())
        RM.ScannerVisuals.addFakeRecipe(F, ST.array(IL.GC_Schematic_3.wild(1), IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing scanned Schematics"), IL.GC_Schematic_3.wild(1)), null, null, ZL_FS, ZL_FS, 1024, 16, 0);
    if (IL.IE_Blueprint_Projectiles_Common.exists())
        RM.ScannerVisuals.addFakeRecipe(F, ST.array(IL.IE_Blueprint_Projectiles_Common.wild(1), IL.USB_Stick_1.get(1)), ST.array(IL.USB_Stick_1.getWithName(1, "Containing scanned Engineer's Blueprint"), IL.IE_Blueprint_Projectiles_Common.wild(1)), null, null, ZL_FS, ZL_FS, 1024, 16, 0);
    RM.Printer.addRecipe1(T, 16, 256, ST.make(Items.book, 1, W), DYE_FLUIDS_CHEMICAL[DYE_INDEX_Black], NF, ST.book("Manual_Printer", ST.make(Items.written_book, 1, 0)));
    for (ItemStack tStack : OreDictManager.getOres("gt:canvas", F)) RM.Printer.addFakeRecipe(F, ST.array(tStack, IL.USB_Stick_1.getWithName(0, "Containing scanned Block")), ST.array(tStack), null, null, FL.array(FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Yellow], 1, 9, T), FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Magenta], 1, 9, T), FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Cyan], 1, 9, T), FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Black], 1, 9, T)), ZL_FS, 64, 16, 0);
    // RM.Printer.addFakeRecipe(F, ST.array(IL.Paper_Punch_Card_Empty.get(1)   , IL.USB_Stick_1.getWithName(0, "Containing scanned Punchcard"           )), ST.array(IL.Paper_Punch_Card_Encoded.get(1)        ), null, null, FL.array(                                                                                                                                                                       FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Black], 1, 9, T)), ZL_FS,   32, 16, 0);
    RM.Printer.addFakeRecipe(F, ST.array(IL.Paper_Blueprint_Empty.get(1), IL.USB_Stick_1.getWithName(0, "Containing scanned Blueprint")), ST.array(IL.Paper_Blueprint_Used.get(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_White], 1, 9, T)), ZL_FS, 32, 16, 0);
    RM.Printer.addFakeRecipe(F, ST.array(ST.make(Items.paper, 1, W), IL.USB_Stick_1.getWithName(0, "Containing scanned Blueprint")), ST.array(IL.Paper_Blueprint_Used.get(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Blue], 1, 1, T)), ZL_FS, 128, 16, 0);
    RM.Printer.addFakeRecipe(F, ST.array(ST.make(Items.paper, 3, W), IL.USB_Stick_1.getWithName(0, "Containing scanned Book")), ST.array(IL.Paper_Printed_Pages.get(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Black], 1, 2, T)), ZL_FS, 512, 16, 0);
    RM.Printer.addFakeRecipe(F, ST.array(ST.make(Items.paper, 6, W), IL.USB_Stick_1.getWithName(0, "Containing large scanned Book")), ST.array(IL.Paper_Printed_Pages_Many.get(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Black], 1, 1, T)), ZL_FS, 1024, 16, 0);
    RM.Printer.addFakeRecipe(F, ST.array(ST.make(Items.map, 1, W), IL.USB_Stick_1.getWithName(0, "Containing scanned Map")), ST.array(ST.make(Items.filled_map, 1, 0)), null, null, FL.array(FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Yellow], 1, 9, T), FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Magenta], 1, 9, T), FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Cyan], 1, 9, T), FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Black], 1, 9, T)), ZL_FS, 64, 16, 0);
    if (IL.GC_Schematic_1.exists())
        RM.Printer.addFakeRecipe(F, ST.array(ST.make(Items.paper, 8, W), IL.USB_Stick_1.getWithName(0, "Containing scanned Schematics")), ST.array(IL.GC_Schematic_1.wild(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Black], 4, 1, T)), ZL_FS, 2048, 16, 0);
    if (IL.GC_Schematic_2.exists())
        RM.Printer.addFakeRecipe(F, ST.array(ST.make(Items.paper, 8, W), IL.USB_Stick_1.getWithName(0, "Containing scanned Schematics")), ST.array(IL.GC_Schematic_2.wild(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Black], 4, 1, T)), ZL_FS, 2048, 16, 0);
    if (IL.GC_Schematic_3.exists())
        RM.Printer.addFakeRecipe(F, ST.array(ST.make(Items.paper, 8, W), IL.USB_Stick_1.getWithName(0, "Containing scanned Schematics")), ST.array(IL.GC_Schematic_3.wild(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Black], 4, 1, T)), ZL_FS, 2048, 16, 0);
    if (IL.IE_Blueprint_Projectiles_Common.exists())
        RM.Printer.addFakeRecipe(F, ST.array(ST.make(Items.paper, 3, W), IL.USB_Stick_1.getWithName(0, "Containing scanned Engineer's Blueprint")), ST.array(IL.IE_Blueprint_Projectiles_Common.wild(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_CHEMICAL[DYE_INDEX_Blue], 3, 1, T)), ZL_FS, 2048, 16, 0);
    if (IL.IE_Treated_Stairs.exists())
        RM.Bath.addFakeRecipe(F, ST.array(ST.make(Blocks.oak_stairs, 1, W)), ST.array(IL.IE_Treated_Stairs.get(1)), null, null, FL.array(FL.Oil_Creosote.make(75)), ZL_FS, 102, 0, 0);
    RM.Bath.addFakeRecipe(F, ST.array(ST.make(Blocks.wooden_slab, 1, W)), ST.array(IL.IE_Treated_Slab.get(1, IL.Treated_Planks_Slab.get(1))), null, null, FL.array(FL.Oil_Creosote.make(50)), ZL_FS, 72, 0, 0);
    RM.Bath.addFakeRecipe(F, ST.array(IL.Plank_Slab.get(1)), ST.array(IL.IE_Treated_Slab.get(1, IL.Treated_Planks_Slab.get(1))), null, null, FL.array(FL.Oil_Creosote.make(50)), ZL_FS, 72, 0, 0);
    if (IL.ERE_White_Planks.exists())
        RM.Bath.addFakeRecipe(F, ST.array(IL.Plank.get(1)), ST.array(IL.ERE_White_Planks.get(1)), null, null, FL.array(DYE_FLUIDS_WATER[DYE_INDEX_White]), ZL_FS, 144, 0, 0);
    if (IL.ERE_White_Slab.exists())
        RM.Bath.addFakeRecipe(F, ST.array(IL.Plank_Slab.get(1)), ST.array(IL.ERE_White_Slab.get(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_WATER[DYE_INDEX_White], 1, 2, T)), ZL_FS, 72, 0, 0);
    if (IL.ERE_White_Planks.exists())
        RM.Bath.addFakeRecipe(F, ST.array(ST.make(Blocks.planks, 1, W)), ST.array(IL.ERE_White_Planks.get(1)), null, null, FL.array(DYE_FLUIDS_WATER[DYE_INDEX_White]), ZL_FS, 144, 0, 0);
    if (IL.ERE_White_Stairs.exists())
        RM.Bath.addFakeRecipe(F, ST.array(ST.make(Blocks.oak_stairs, 1, W)), ST.array(IL.ERE_White_Stairs.get(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_WATER[DYE_INDEX_White], 3, 4, T)), ZL_FS, 102, 0, 0);
    if (IL.ERE_White_Slab.exists())
        RM.Bath.addFakeRecipe(F, ST.array(ST.make(Blocks.wooden_slab, 1, W)), ST.array(IL.ERE_White_Slab.get(1)), null, null, FL.array(FL.mul(DYE_FLUIDS_WATER[DYE_INDEX_White], 1, 2, T)), ZL_FS, 72, 0, 0);
    if (IL.LOOTBAGS_Bag_0.exists())
        RM.Unboxinator.addFakeRecipe(F, ST.array(IL.LOOTBAGS_Bag_0.get(1)), ST.array(IL.LOOTBAGS_Bag_0.getWithName(1, "Random Drops depending on Config")), null, ZL_LONG, ZL_FS, ZL_FS, 16, 16, 0);
    if (IL.LOOTBAGS_Bag_1.exists())
        RM.Unboxinator.addFakeRecipe(F, ST.array(IL.LOOTBAGS_Bag_1.get(1)), ST.array(IL.LOOTBAGS_Bag_1.getWithName(1, "Random Drops depending on Config")), null, ZL_LONG, ZL_FS, ZL_FS, 16, 16, 0);
    if (IL.LOOTBAGS_Bag_2.exists())
        RM.Unboxinator.addFakeRecipe(F, ST.array(IL.LOOTBAGS_Bag_2.get(1)), ST.array(IL.LOOTBAGS_Bag_2.getWithName(1, "Random Drops depending on Config")), null, ZL_LONG, ZL_FS, ZL_FS, 16, 16, 0);
    if (IL.LOOTBAGS_Bag_3.exists())
        RM.Unboxinator.addFakeRecipe(F, ST.array(IL.LOOTBAGS_Bag_3.get(1)), ST.array(IL.LOOTBAGS_Bag_3.getWithName(1, "Random Drops depending on Config")), null, ZL_LONG, ZL_FS, ZL_FS, 16, 16, 0);
    if (IL.LOOTBAGS_Bag_4.exists())
        RM.Unboxinator.addFakeRecipe(F, ST.array(IL.LOOTBAGS_Bag_4.get(1)), ST.array(IL.LOOTBAGS_Bag_4.getWithName(1, "Random Drops depending on Config")), null, ZL_LONG, ZL_FS, ZL_FS, 16, 16, 0);
    RM.BedrockOreList.addFakeRecipe(F, ST.array(ST.make(Blocks.bedrock, 1, W)), ST.array(ST.make(Blocks.cobblestone, 1, 0, "Various Cobblestone Types"), OP.dust.mat(MT.Bedrock, 1)), null, new long[] { 9990, 10 }, FL.array(FL.lube(100)), null, 0, 0, 0);
    if (IL.BTL_Bedrock.exists())
        RM.BedrockOreList.addFakeRecipe(F, ST.array(IL.BTL_Bedrock.get(1)), ST.array(ST.make(Blocks.cobblestone, 1, 0, "Various Cobblestone Types"), OP.dust.mat(MT.Bedrock, 1)), null, new long[] { 9990, 10 }, FL.array(FL.lube(100)), null, 0, 0, 0);
    RM.ByProductList.mRecipeMachineList.add(ST.make(Items.cauldron, 1, 0));
    RM.ByProductList.mRecipeMachineList.add(ST.make(Blocks.cauldron, 1, 0));
    MultiTileEntityRegistry aRegistry = MultiTileEntityRegistry.getRegistry("gt.multitileentity");
    RM.Other.addFakeRecipe(F, ST.array(ST.make(OP.dust.mat(MT.OREMATS.Cinnabar, 3), "Throw three Units of Cinnabar into Crucible"), IL.Ceramic_Crucible.getWithName(1, "Wait until it melts into Mercury"), IL.Bottle_Empty.getWithName(1, "Rightclick the Crucible with an Empty Bottle"), IL.TC_Shimmerleaf.getWithName(1, "Or just throw a Shimmerleaf into it"), ST.make(aRegistry.getItem(1199), "Heat up the Crucible using a Burning Box"), NI), ST.array(IL.Bottle_Mercury.get(1), ST.make(OP.ingot.mat(MT.Hg, 1), "Pouring this into Molds only works with additional Cooling!"), ST.make(OP.nugget.mat(MT.Hg, 1), "Pouring this into Molds only works with additional Cooling!")), null, ZL_LONG, FL.array(MT.Hg.liquid(1, T)), FL.array(MT.Hg.liquid(1, T)), 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(IL.Ceramic_Mold.getWithName(1, "Don't forget to shape the Mold to pour it"), IL.Ceramic_Crucible.getWithName(1, "Wait until it all turns into Steel"), ST.make(aRegistry.getItem(1302), "Point a running Engine into the Crucible to blow Air"), ST.make(OP.ingot.mat(MT.Fe, 1), "Throw some Iron into Crucible. Do not forget to leave space for Air!"), ST.make(aRegistry.getItem(1199), "Heat up the Crucible using a Burning Box"), ST.make(OP.ingot.mat(MT.WroughtIron, 1), "Or throw Wrought Iron into the Crucible, either works")), ST.array(OP.dust.mat(MT.Steel, 1), OP.ingot.mat(MT.Steel, 1), OP.plate.mat(MT.Steel, 1), OP.scrapGt.mat(MT.Steel, 1), OP.stick.mat(MT.Steel, 1), OP.gearGt.mat(MT.Steel, 1)), null, ZL_LONG, ZL_FS, ZL_FS, 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(ST.make(OP.ingot.mat(MT.Zn, 1), "Dump some Zinc into the Crucible"), IL.Ceramic_Faucet.getWithName(1, "Pour Zinc using a Faucet attached to the Crucible"), IL.Ceramic_Crucible.getWithName(1, "Wait until the Zinc is molten"), ST.make(OP.plate.mat(MT.Steel, 1), "Put your Steel Object into the Bathing Pot"), ST.make(aRegistry.getItem(32707), "Place the Bathing Pot (Table) below the Faucet"), ST.make(aRegistry.getItem(1199), "Heat up the Crucible using a Burning Box")), ST.array(OP.plate.mat(MT.SteelGalvanized, 1), OP.plateCurved.mat(MT.SteelGalvanized, 1), OP.stick.mat(MT.SteelGalvanized, 1), OP.casingSmall.mat(MT.SteelGalvanized, 1), OP.gearGt.mat(MT.SteelGalvanized, 1), OP.screw.mat(MT.SteelGalvanized, 1)), null, ZL_LONG, FL.array(MT.Zn.liquid(1, T)), FL.array(MT.Zn.liquid(1, T)), 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(ST.make(BlocksGT.Saplings_AB, 1, 0, "Find a Rubber Tree in a Taiga Biome or similar"), ST.make(BlocksGT.Leaves_AB, 1, 0, "Make sure its natural Leaves stay intact!"), ST.make(BlocksGT.LogA, 1, 0, "Look for a possible Resin Hole at the Tree"), NI, NI, IL.Bag_Sap_Resin.getWithName(1, "Place Resin Bag at the Hole")), ST.array(IL.Resin.get(1), IL.IC2_Resin.get(1)), null, ZL_LONG, ZL_FS, FL.array(FL.Resin_Rubber.make(250)), 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(ST.make(BlocksGT.Saplings_AB, 1, 1, "Find a Maple Tree in a Forest"), ST.make(BlocksGT.Leaves_AB, 1, 1, "Make sure its natural Leaves stay intact!"), ST.make(BlocksGT.LogA, 1, 1, "Choose one of the Log Segments at the Base of the Tree"), ST.make(ToolsGT.sMetaTool, 1, ToolsGT.HAND_DRILL, "Drill only one Hole into the Tree"), ST.make(ToolsGT.sMetaTool, 1, ToolsGT.DRILL_LV, "Drill only one Hole into the Tree"), IL.Bag_Sap_Resin.getWithName(1, "Place Sap Bag at the drilled Hole")), ZL_IS, null, ZL_LONG, ZL_FS, FL.array(FL.Sap_Maple.make(250)), 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(ST.make(BlocksGT.Saplings_AB, 1, 2, "Find a Willow Tree in the Swamp"), ST.make(BlocksGT.Leaves_AB, 1, 2, "Harvest its Leaves for Sticks"), ST.make(BlocksGT.LogA, 1, 2, "Use its Logs in a Coke Oven for double the Charcoal"), NI, NI, NI), ST.array(OP.stick.mat(MT.WOODS.Willow, 1), OP.gem.mat(MT.Charcoal, 2), OP.ingot.mat(MT.Charcoal, 2)), null, ZL_LONG, ZL_FS, ZL_FS, 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(ST.make(BlocksGT.Saplings_AB, 1, 3, "Find a Blue Mahoe Tree in the Jungle"), ST.make(BlocksGT.Leaves_AB, 1, 3, "Harvest its Leaves for Sticks"), ST.make(BlocksGT.LogA, 1, 3, "Nothing special about its Logs"), NI, NI, NI), ST.array(OP.stick.mat(MT.WOODS.BlueMahoe, 1)), null, ZL_LONG, ZL_FS, ZL_FS, 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(ST.make(BlocksGT.Saplings_AB, 1, 4, "Find a Hazel Tree in the Plains"), ST.make(BlocksGT.Leaves_AB, 1, 4, "Harvest its Leaves for Hazelnuts and Sticks"), ST.make(BlocksGT.LogB, 1, 0, "Nothing special about its Logs"), NI, NI, NI), ST.array(IL.Food_Hazelnut.get(1), OP.stick.mat(MT.WOODS.Hazel, 1)), null, ZL_LONG, ZL_FS, ZL_FS, 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(ST.make(BlocksGT.Saplings_AB, 1, 5, "Find a Cinnamon Tree in the Jungle"), ST.make(BlocksGT.Leaves_AB, 1, 5, "Nothing special about its Leaves"), ST.make(BlocksGT.LogB, 1, 1, "The Bark does not regrow! Plant a new Tree for more"), ST.make(ToolsGT.sMetaTool, 1, ToolsGT.KNIFE, "Remove its edible Bark"), ST.make(ToolsGT.sMetaTool, 1, ToolsGT.AXE, "Remove its edible Bark"), ST.make(ToolsGT.sMetaTool, 1, ToolsGT.SAW, "Remove its edible Bark")), ST.array(OM.dust(MT.Cinnamon), IL.Food_Cinnamon.get(1), IL.HaC_Cinnamon.get(1)), null, ZL_LONG, ZL_FS, ZL_FS, 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(ST.make(BlocksGT.Saplings_AB, 1, 6, "Find a Coconut Tree near the Ocean"), ST.make(BlocksGT.Leaves_AB, 1, 6, "Harvest its Leaves for Coconuts"), ST.make(BlocksGT.LogB, 1, 2, "Nothing special about its Logs"), NI, NI, NI), ST.array(IL.Food_Coconut.get(1)), null, ZL_LONG, ZL_FS, ZL_FS, 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(ST.make(BlocksGT.Saplings_AB, 1, 7, "Find a super rare Rainbow Tree"), ST.make(BlocksGT.Leaves_AB, 1, 7, "Make sure its natural Leaves stay intact!"), ST.make(BlocksGT.LogB, 1, 3, "Choose one of the Log Segments at the Base of the Tree"), ST.make(ToolsGT.sMetaTool, 1, ToolsGT.HAND_DRILL, "Drill only one Hole into the Tree"), ST.make(ToolsGT.sMetaTool, 1, ToolsGT.DRILL_LV, "Drill only one Hole into the Tree"), IL.Bag_Sap_Resin.getWithName(1, "Place Sap Bag at the drilled Hole")), ZL_IS, null, ZL_LONG, ZL_FS, FL.array(FL.Sap_Rainbow.make(250)), 0, 0, 0);
    RM.Other.addFakeRecipe(F, ST.array(ST.make(BlocksGT.Saplings_CD, 1, 0, "Find a Blue Spruce Tree in the Mountains"), ST.make(BlocksGT.Leaves_CD, 1, 0, "Nothing special about its Leaves"), ST.make(BlocksGT.LogC, 1, 0, "Nothing special about its Logs"), NI, NI, NI), ZL_IS, null, ZL_LONG, ZL_FS, ZL_FS, 0, 0, 0);
    if (CODE_CLIENT) {
        for (OreDictMaterial aMaterial : OreDictMaterial.ALLOYS) {
            for (IOreDictConfigurationComponent tAlloy : aMaterial.mAlloyCreationRecipes) {
                boolean temp = T, tAddSpecial = F;
                ArrayListNoNulls<ItemStack> tDusts = new ArrayListNoNulls<>(), tIngots = new ArrayListNoNulls<>(), tSpecial = new ArrayListNoNulls<>();
                ArrayListNoNulls<Long> tMeltingPoints = new ArrayListNoNulls<>();
                for (OreDictMaterialStack tMaterial : tAlloy.getUndividedComponents()) {
                    boolean tAddedSpecial = F;
                    if (tMaterial.mMaterial.mHidden) {
                        temp = F;
                        break;
                    }
                    if (tMaterial.mMaterial == MT.Air) {
                        tDusts.add(FL.Air.display(UT.Code.units(tMaterial.mAmount, U, 1000, T)));
                        tIngots.add(FL.Air.display(UT.Code.units(tMaterial.mAmount, U, 1000, T)));
                        continue;
                    }
                    if (tMaterial.mMaterial == MT.OREMATS.Magnetite) {
                        tAddedSpecial = tSpecial.add(ST.make(BlocksGT.Sands, UT.Code.divup(tMaterial.mAmount, U * 9), 0, "You probably want to craft it into Dust"));
                    } else if (tMaterial.mMaterial == MT.OREMATS.BasalticMineralSand) {
                        tAddedSpecial = tSpecial.add(ST.make(BlocksGT.Sands, UT.Code.divup(tMaterial.mAmount, U * 9), 1, "You probably want to craft it into Dust"));
                    } else if (tMaterial.mMaterial == MT.OREMATS.GraniticMineralSand) {
                        tAddedSpecial = tSpecial.add(ST.make(BlocksGT.Sands, UT.Code.divup(tMaterial.mAmount, U * 9), 2, "You probably want to craft it into Dust"));
                    } else if (tMaterial.mMaterial == MT.C) {
                        tAddedSpecial = tSpecial.add(OM.dustOrIngot(MT.Coal, tMaterial.mAmount * 2));
                    }
                    if (tMaterial.mMaterial == MT.CaCO3) {
                        tAddedSpecial = tSpecial.add(OM.dustOrIngot(MT.STONES.Limestone, tMaterial.mAmount * 2));
                    }
                    tMeltingPoints.add(tMaterial.mMaterial.mMeltingPoint);
                    ItemStack tDust = OM.dustOrIngot(tMaterial.mMaterial, tMaterial.mAmount);
                    if (!tDusts.add(tDust)) {
                        temp = F;
                        break;
                    }
                    tIngots.add(OM.ingotOrDust(tMaterial.mMaterial, tMaterial.mAmount));
                    if (tAddedSpecial)
                        tAddSpecial = T;
                    else
                        tSpecial.add(tDust);
                }
                Collections.sort(tMeltingPoints);
                if (temp) {
                    RM.CrucibleAlloying.addFakeRecipe(F, tDusts.toArray(ZL_IS), ST.array(OM.ingotOrDust(aMaterial, tAlloy.getCommonDivider() * U)), null, null, null, null, 0, 0, tMeltingPoints.size() > 1 ? Math.max(tMeltingPoints.get(tMeltingPoints.size() - 2), aMaterial.mMeltingPoint) : aMaterial.mMeltingPoint);
                    RM.CrucibleAlloying.addFakeRecipe(F, tIngots.toArray(ZL_IS), ST.array(OM.ingotOrDust(aMaterial, tAlloy.getCommonDivider() * U)), null, null, null, null, 0, 0, tMeltingPoints.size() > 1 ? Math.max(tMeltingPoints.get(tMeltingPoints.size() - 2), aMaterial.mMeltingPoint) : aMaterial.mMeltingPoint);
                    if (tAddSpecial)
                        RM.CrucibleAlloying.addFakeRecipe(F, tSpecial.toArray(ZL_IS), ST.array(OM.ingotOrDust(aMaterial, tAlloy.getCommonDivider() * U)), null, null, null, null, 0, 0, tMeltingPoints.size() > 1 ? Math.max(tMeltingPoints.get(tMeltingPoints.size() - 2), aMaterial.mMeltingPoint) : aMaterial.mMeltingPoint);
                }
            }
        }
        for (OreDictMaterial aMaterial : OreDictMaterial.MATERIAL_ARRAY) if (aMaterial != null) {
            Recipe tRecipe = RecipeMapReplicator.getReplicatorRecipe(aMaterial, IL.USB_Stick_3.getWithName(0, "Mat Data: " + aMaterial.getLocal()));
            if (tRecipe != null)
                RM.Replicator.addFakeRecipe(F, tRecipe);
        }
    }
    for (MultiItemRandom tItem : ItemsGT.ALL_MULTI_ITEMS) for (Entry<Short, ArrayList<IBehavior<MultiItem>>> tEntry : tItem.mItemBehaviors.entrySet()) for (IBehavior<MultiItem> tBehavior : tEntry.getValue()) if (tBehavior instanceof Behavior_Turn_Into)
        if (((Behavior_Turn_Into) tBehavior).mTurnInto.exists())
            tItem.mVisibleItems.set(tEntry.getKey(), F);
}
Also used : OreDictMaterial(gregapi.oredict.OreDictMaterial) Behavior_Turn_Into(gregapi.item.multiitem.behaviors.Behavior_Turn_Into) MultiTileEntityRegistry(gregapi.block.multitileentity.MultiTileEntityRegistry) Recipe(gregapi.recipes.Recipe) IItemContainer(gregapi.code.IItemContainer) IOreDictConfigurationComponent(gregapi.oredict.configurations.IOreDictConfigurationComponent) OreDictMaterialStack(gregapi.oredict.OreDictMaterialStack) ArrayListNoNulls(gregapi.code.ArrayListNoNulls) MultiItem(gregapi.item.multiitem.MultiItem) Entry(java.util.Map.Entry) MultiItemRandom(gregapi.item.multiitem.MultiItemRandom) IBehavior(gregapi.item.multiitem.behaviors.IBehavior) Block(net.minecraft.block.Block) ItemStack(net.minecraft.item.ItemStack)

Example 4 with IItemContainer

use of gregapi.code.IItemContainer in project gregtech6 by GregTech6.

the class MultiItemRandomTools method addItems.

@Override
public void addItems() {
    IBehavior<MultiItem> tBehaviour;
    IL.Compound_Bronze.set(addItem(0, "Bronze Compound", "Put in Furnace to smelt it", new OreDictItemData(MT.Bronze, U9), TC.stack(TC.METALLUM, 1)));
    IL.Compound_Brass.set(addItem(1, "Brass Compound", "Put in Furnace to smelt it", new OreDictItemData(MT.Brass, U9), TC.stack(TC.METALLUM, 1)));
    IL.Compound_BismuthBronze.set(addItem(2, "Bismuth Bronze Compound", "Put in Furnace to smelt it", new OreDictItemData(MT.BismuthBronze, U9), TC.stack(TC.METALLUM, 1)));
    RM.add_smelting(IL.Compound_Bronze.get(1), OP.nugget.mat(MT.Bronze, 1), F, F, T);
    RM.add_smelting(IL.Compound_Brass.get(1), OP.nugget.mat(MT.Brass, 1), F, F, T);
    RM.add_smelting(IL.Compound_BismuthBronze.get(1), OP.nugget.mat(MT.BismuthBronze, 1), F, F, T);
    IL.Porcelain_Cup_Raw.set(addItem(899, "Modeled Porcelain Cup", "Put in Furnace to harden", new OreDictItemData(MT.Porcelain, U), TC.stack(TC.TERRA, 2), TC.stack(TC.VACUOS, 1)));
    CR.shapeless(OP.dust.mat(MT.Porcelain, 1), CR.DEF_NCC, new Object[] { last() });
    CR.shaped(IL.Porcelain_Cup_Raw.get(1), CR.DEF_NCC, "kPR", 'P', OP.dust.dat(MT.Porcelain), 'R', OreDictToolNames.rollingpin);
    IL.Ceramic_Ingot_Mold_Raw.set(addItem(900, "Clay Ingot Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Chunk_Mold_Raw.set(addItem(901, "Clay Chunk Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Plate_Mold_Raw.set(addItem(902, "Clay Plate Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Tiny_Plate_Mold_Raw.set(addItem(903, "Clay Tiny Plate Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Bolt_Mold_Raw.set(addItem(904, "Clay Bolt Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Rod_Mold_Raw.set(addItem(905, "Clay Rod Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Long_Rod_Mold_Raw.set(addItem(906, "Clay Long Rod Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Item_Casing_Mold_Raw.set(addItem(907, "Clay Item Casing Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Ring_Mold_Raw.set(addItem(908, "Clay Ring Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Gear_Mold_Raw.set(addItem(909, "Clay Gear Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Small_Gear_Mold_Raw.set(addItem(910, "Clay Small Gear Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Sword_Mold_Raw.set(addItem(911, "Clay Sword Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Pickaxe_Mold_Raw.set(addItem(912, "Clay Pickaxe Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Spade_Mold_Raw.set(addItem(913, "Clay Spade Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Shovel_Mold_Raw.set(addItem(914, "Clay Shovel Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Universal_Spade_Mold_Raw.set(addItem(915, "Clay Universal Spade Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Axe_Mold_Raw.set(addItem(916, "Clay Axe Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Double_Axe_Mold_Raw.set(addItem(917, "Clay Double Axe Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Saw_Mold_Raw.set(addItem(918, "Clay Saw Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Hammer_Mold_Raw.set(addItem(919, "Clay Hammer Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_File_Mold_Raw.set(addItem(920, "Clay File Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Screwdriver_Mold_Raw.set(addItem(921, "Clay Screwdriver Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Chisel_Mold_Raw.set(addItem(922, "Clay Chisel Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Arrow_Mold_Raw.set(addItem(923, "Clay Arrow Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Hoe_Mold_Raw.set(addItem(924, "Clay Hoe Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Sense_Mold_Raw.set(addItem(925, "Clay Sense Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Plow_Mold_Raw.set(addItem(926, "Clay Plow Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Builderwand_Mold_Raw.set(addItem(927, "Clay Builder's Wand Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Nugget_Mold_Raw.set(addItem(928, "Clay Nugget Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Billet_Mold_Raw.set(addItem(929, "Clay Billet Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Tap_Raw.set(addItem(987, "Clay Tap", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 3), TC.stack(TC.TERRA, 2), TC.stack(TC.MOTUS, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 3, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Funnel_Raw.set(addItem(988, "Clay Funnel", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 3), TC.stack(TC.TERRA, 2), TC.stack(TC.MOTUS, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 3, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Crucible_Raw.set(addItem(989, "Clay Crucible", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 7), TC.stack(TC.TERRA, 2), TC.stack(TC.IGNIS, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 7, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Basin_Raw.set(addItem(990, "Clay Basin", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Mold_Raw.set(addItem(991, "Clay Mold", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.GELUM, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Faucet_Raw.set(addItem(992, "Clay Faucet", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 3), TC.stack(TC.TERRA, 2), TC.stack(TC.MOTUS, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 3, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Crossing_Raw.set(addItem(993, "Clay Crossing", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.ITER, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Juicer_Raw.set(addItem(994, "Clay Juicer", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 4), TC.stack(TC.TERRA, 2), TC.stack(TC.LIMUS, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 4, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Bowl_Raw.set(addItem(995, "Clay Bowl", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 5), TC.stack(TC.TERRA, 2), TC.stack(TC.PERMUTATIO, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 5, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Ceramic_Jug_Raw.set(addItem(996, "Clay Jug", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 6), TC.stack(TC.TERRA, 2), TC.stack(TC.VACUOS, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 6, 0), CR.DEF_NCC, new Object[] { last() });
    IL.Measuring_Pot_Raw.set(addItem(997, "Clay Measuring Pot", "Put in Furnace to harden", new OreDictItemData(MT.Clay, U * 4), TC.stack(TC.TERRA, 2), TC.stack(TC.VACUOS, 1)));
    CR.shapeless(ST.make(Items.clay_ball, 4, 0), CR.DEF_NCC, new Object[] { last() });
    CR.shaped(IL.Ceramic_Tap_Raw.get(1), CR.DEF_NCC, "CCR", "kC ", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shaped(IL.Ceramic_Funnel_Raw.get(1), CR.DEF_NCC, "CRC", "kC ", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shaped(IL.Ceramic_Crucible_Raw.get(1), CR.DEF_NCC, "CkC", "CRC", "CCC", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shaped(IL.Ceramic_Basin_Raw.get(1), CR.DEF_NCC, "CkC", "CRC", " C ", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shaped(IL.Ceramic_Mold_Raw.get(1), CR.DEF_NCC, "C C", "CCC", "k R", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shaped(IL.Ceramic_Faucet_Raw.get(1), CR.DEF_NCC, "C C", "kCR", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shaped(IL.Ceramic_Crossing_Raw.get(1), CR.DEF_NCC, "kCR", "CCC", " C ", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shaped(IL.Juicer_Raw.get(1), CR.DEF_NCC, "kCR", "CCC", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shaped(IL.Ceramic_Bowl_Raw.get(1), CR.DEF_NCC, "k R", "C C", "CCC", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shaped(IL.Ceramic_Jug_Raw.get(1), CR.DEF_NCC, "kCR", "C C", "CCC", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shaped(IL.Measuring_Pot_Raw.get(1), CR.DEF_NCC, "CkC", "CCR", 'C', OD.itemClay, 'R', OreDictToolNames.rollingpin);
    CR.shapeless(IL.Ceramic_Ingot_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, IL.BoP_Mud_Brick });
    CR.shapeless(IL.Ceramic_Ingot_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, IL.ERE_Mud_Brick });
    CR.shapeless(IL.Ceramic_Ingot_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.ingot.dat(MT.UNUSED.Mud) });
    CR.shapeless(IL.Ceramic_Ingot_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.ingot.dat(MT.Brick) });
    CR.shapeless(IL.Ceramic_Plate_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OD.paneGlass });
    CR.shapeless(IL.Ceramic_Plate_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OD.plankAnyWood });
    CR.shapeless(IL.Ceramic_Arrow_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OD.itemFlint });
    CR.shapeless(IL.Ceramic_Arrow_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, Items.arrow });
    CR.shapeless(IL.Ceramic_Sword_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, Items.wooden_sword });
    CR.shapeless(IL.Ceramic_Pickaxe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, Items.wooden_pickaxe });
    CR.shapeless(IL.Ceramic_Shovel_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, Items.wooden_shovel });
    CR.shapeless(IL.Ceramic_Axe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, Items.wooden_axe });
    CR.shapeless(IL.Ceramic_Hoe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, Items.wooden_hoe });
    CR.shapeless(IL.Ceramic_Sword_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.SWORD) });
    CR.shapeless(IL.Ceramic_Pickaxe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.PICKAXE) });
    CR.shapeless(IL.Ceramic_Pickaxe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.GEM_PICK) });
    CR.shapeless(IL.Ceramic_Pickaxe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.CONSTRUCTION_PICK) });
    CR.shapeless(IL.Ceramic_Spade_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.SPADE) });
    CR.shapeless(IL.Ceramic_Shovel_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.SHOVEL) });
    CR.shapeless(IL.Ceramic_Universal_Spade_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.UNIVERSALSPADE) });
    CR.shapeless(IL.Ceramic_Axe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.AXE) });
    CR.shapeless(IL.Ceramic_Double_Axe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.DOUBLE_AXE) });
    CR.shapeless(IL.Ceramic_Saw_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.SAW) });
    CR.shapeless(IL.Ceramic_Hammer_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.SOFTHAMMER) });
    CR.shapeless(IL.Ceramic_Hammer_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.HARDHAMMER) });
    CR.shapeless(IL.Ceramic_File_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.FILE) });
    CR.shapeless(IL.Ceramic_Screwdriver_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.SCREWDRIVER) });
    CR.shapeless(IL.Ceramic_Chisel_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.CHISEL) });
    CR.shapeless(IL.Ceramic_Hoe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.HOE) });
    CR.shapeless(IL.Ceramic_Sense_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.SENSE) });
    CR.shapeless(IL.Ceramic_Plow_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.PLOW) });
    CR.shapeless(IL.Ceramic_Builderwand_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, ToolsGT.sMetaTool.make(ToolsGT.BUILDERWAND) });
    for (OreDictMaterial tMat : new OreDictMaterial[] { ANY.WoodPlastic, ANY.Stone, MT.Glass, ANY.Wax, ANY.Iron, ANY.Cu, MT.Sn, MT.Zn, MT.Pb, MT.Bi, MT.Brass, MT.Bronze, MT.BismuthBronze, MT.Au }) {
        CR.shapeless(IL.Ceramic_Ingot_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.ingot.dat(tMat) });
        CR.shapeless(IL.Ceramic_Billet_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.billet.dat(tMat) });
        CR.shapeless(IL.Ceramic_Chunk_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.chunkGt.dat(tMat) });
        CR.shapeless(IL.Ceramic_Nugget_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.nugget.dat(tMat) });
        CR.shapeless(IL.Ceramic_Plate_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.plate.dat(tMat) });
        CR.shapeless(IL.Ceramic_Plate_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.plateGem.dat(tMat) });
        CR.shapeless(IL.Ceramic_Tiny_Plate_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.plateTiny.dat(tMat) });
        CR.shapeless(IL.Ceramic_Tiny_Plate_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.plateGemTiny.dat(tMat) });
        CR.shapeless(IL.Ceramic_Bolt_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.bolt.dat(tMat) });
        CR.shapeless(IL.Ceramic_Rod_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.stick.dat(tMat) });
        CR.shapeless(IL.Ceramic_Long_Rod_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.stick.dat(tMat), OP.stick.dat(tMat) });
        CR.shapeless(IL.Ceramic_Long_Rod_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.stickLong.dat(tMat) });
        CR.shapeless(IL.Ceramic_Item_Casing_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.casingSmall.dat(tMat) });
        CR.shapeless(IL.Ceramic_Ring_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.ring.dat(tMat) });
        CR.shapeless(IL.Ceramic_Gear_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.gearGt.dat(tMat) });
        CR.shapeless(IL.Ceramic_Small_Gear_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.gearGtSmall.dat(tMat) });
        CR.shapeless(IL.Ceramic_Sword_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadSword.dat(tMat) });
        CR.shapeless(IL.Ceramic_Sword_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawSword.dat(tMat) });
        CR.shapeless(IL.Ceramic_Pickaxe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadPickaxe.dat(tMat) });
        CR.shapeless(IL.Ceramic_Pickaxe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawPickaxe.dat(tMat) });
        CR.shapeless(IL.Ceramic_Spade_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadSpade.dat(tMat) });
        CR.shapeless(IL.Ceramic_Spade_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawSpade.dat(tMat) });
        CR.shapeless(IL.Ceramic_Shovel_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadShovel.dat(tMat) });
        CR.shapeless(IL.Ceramic_Shovel_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawShovel.dat(tMat) });
        CR.shapeless(IL.Ceramic_Universal_Spade_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadUniversalSpade.dat(tMat) });
        CR.shapeless(IL.Ceramic_Universal_Spade_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawUniversalSpade.dat(tMat) });
        CR.shapeless(IL.Ceramic_Axe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadAxe.dat(tMat) });
        CR.shapeless(IL.Ceramic_Axe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawAxe.dat(tMat) });
        CR.shapeless(IL.Ceramic_Double_Axe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadAxe.dat(tMat), OP.toolHeadAxe.dat(tMat) });
        CR.shapeless(IL.Ceramic_Double_Axe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawAxe.dat(tMat), OP.toolHeadRawAxe.dat(tMat) });
        CR.shapeless(IL.Ceramic_Double_Axe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadAxeDouble.dat(tMat) });
        CR.shapeless(IL.Ceramic_Double_Axe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawAxeDouble.dat(tMat) });
        CR.shapeless(IL.Ceramic_Saw_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadSaw.dat(tMat) });
        CR.shapeless(IL.Ceramic_Saw_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawSaw.dat(tMat) });
        CR.shapeless(IL.Ceramic_Hammer_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadHammer.dat(tMat) });
        CR.shapeless(IL.Ceramic_File_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadFile.dat(tMat) });
        CR.shapeless(IL.Ceramic_Screwdriver_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadScrewdriver.dat(tMat) });
        CR.shapeless(IL.Ceramic_Chisel_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadChisel.dat(tMat) });
        CR.shapeless(IL.Ceramic_Chisel_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawChisel.dat(tMat) });
        CR.shapeless(IL.Ceramic_Arrow_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadArrow.dat(tMat) });
        CR.shapeless(IL.Ceramic_Arrow_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawArrow.dat(tMat) });
        CR.shapeless(IL.Ceramic_Hoe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadHoe.dat(tMat) });
        CR.shapeless(IL.Ceramic_Hoe_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawHoe.dat(tMat) });
        CR.shapeless(IL.Ceramic_Sense_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadSense.dat(tMat) });
        CR.shapeless(IL.Ceramic_Sense_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawSense.dat(tMat) });
        CR.shapeless(IL.Ceramic_Plow_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadPlow.dat(tMat) });
        CR.shapeless(IL.Ceramic_Plow_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadRawPlow.dat(tMat) });
        CR.shapeless(IL.Ceramic_Builderwand_Mold_Raw.get(1), CR.DEF_NCC, new Object[] { IL.Ceramic_Mold_Raw, OP.toolHeadBuilderwand.dat(tMat) });
    }
    IL.Food_Can_Empty.set(addItem(998, "Empty Food Can", "Used for canning Food", new OreDictItemData(MT.TinAlloy, OP.plateCurved.mAmount), TC.stack(TC.VACUOS, 1), TC.stack(TC.FABRICO, 1)));
    IL.Spray_Empty.set(addItem(999, "Empty Spray Can", "Used for making Sprays", new OreDictItemData(MT.Sn, OP.plateCurved.mAmount, MT.Redstone, OP.dust.mAmount), TC.stack(TC.VACUOS, 1), TC.stack(TC.MOTUS, 1)));
    RM.RollBender.addRecipe1(T, 16, 64, OP.plateCurved.mat(MT.TinAlloy, 1), IL.Food_Can_Empty.get(1));
    // TODO RA.addAssemblerRecipe(OP.dust.mat(MT.Redstone, 1), OP.cell.mat(MT.Empty, 1), IL.Spray_Empty.get(1), 800, 1);
    CR.shaped(IL.Food_Can_Empty.get(1), CR.DEF_NCC, "fh", "oP", 'P', OP.plateCurved.dat(MT.TinAlloy));
    CR.shaped(IL.Spray_Empty.get(1), CR.DEF_NCC, "Rf", "Cs", 'R', OD.itemRedstone, 'C', OP.plateCurved.dat(MT.Sn));
    for (byte i = 0; i < 16; i++) {
        IL.SPRAY_CAN_DYES[i].set(addItem(1000 + 2 * i, "Spray Paint (" + DYE_NAMES[i] + ")", "Full", TC.stack(TC.SENSUS, 4)));
        IL.SPRAY_CAN_DYES_USED[i].set(addItem(mLastID + 1, "Spray Paint (" + DYE_NAMES[i] + ")", "Used", TC.stack(TC.SENSUS, 3), TD.Creative.HIDDEN));
        tBehaviour = new Behavior_Spray_Color(IL.Spray_Empty.get(1), IL.SPRAY_CAN_DYES_USED[i].get(1), IL.SPRAY_CAN_DYES[i].get(1), 512, i);
        addItemBehavior(mLastID, tBehaviour);
        addItemBehavior(mLastID - 1, tBehaviour);
        RM.Canner.addRecipe1(T, 16, 256, IL.Spray_Empty.get(1), FL.mul(DYE_FLUIDS_CHEMICAL[i], 16), NF, IL.SPRAY_CAN_DYES[i].get(1));
        ItemsGT.addNEIRedirects(IL.SPRAY_CAN_DYES_USED[i].get(1), IL.SPRAY_CAN_DYES[i].get(1));
        RM.Other.addFakeRecipe(F, ST.array(IL.SPRAY_CAN_DYES[i].get(1), IL.SPRAY_CAN_DYES_USED[i].get(1), ST.make(Blocks.wool, 1, 0), ST.make(Blocks.glass_pane, 1, 0), ST.make(Blocks.glass, 1, 0), ST.make(Blocks.hardened_clay, 1, 0)), ST.array(NI, NI, ST.make(Blocks.wool, 1, 15 - i), ST.make(Blocks.stained_glass_pane, 1, 15 - i), ST.make(Blocks.stained_glass, 1, 15 - i), ST.make(Blocks.stained_hardened_clay, 1, 15 - i)), null, ZL_LONG, ZL_FS, ZL_FS, 0, 0, 0);
        IL.SPRAY_CAN_FOAM[i].set(addItem(1100 + 2 * i, "C-Foam Spray (" + DYE_NAMES[i] + ")", "Full", TC.stack(TC.TERRA, 2), TC.stack(TC.FABRICO, 2)));
        IL.SPRAY_CAN_FOAM_USED[i].set(addItem(mLastID + 1, "C-Foam Spray (" + DYE_NAMES[i] + ")", "Used", TC.stack(TC.TERRA, 1), TC.stack(TC.FABRICO, 1), TD.Creative.HIDDEN));
        tBehaviour = new Behavior_Spray_Foam(IL.Spray_Empty.get(1), IL.SPRAY_CAN_FOAM_USED[i].get(1), IL.SPRAY_CAN_FOAM[i].get(1), 256, i, F);
        addItemBehavior(mLastID, tBehaviour);
        addItemBehavior(mLastID - 1, tBehaviour);
        RM.Canner.addRecipe1(T, 16, 256, IL.Spray_Empty.get(1), FL.mul(DYED_C_FOAMS[i], 256), NF, IL.SPRAY_CAN_FOAM[i].get(1));
        ItemsGT.addNEIRedirects(IL.SPRAY_CAN_FOAM_USED[i].get(1), IL.SPRAY_CAN_FOAM[i].get(1), ST.make(BlocksGT.CFoamFresh, 1, i), ST.make(BlocksGT.CFoam, 1, i));
        RM.Other.addFakeRecipe(F, ST.array(IL.SPRAY_CAN_FOAM[i].get(1), IL.SPRAY_CAN_FOAM_USED[i].get(1)), ST.array(ST.make(BlocksGT.CFoamFresh, 1, i), ST.make(BlocksGT.CFoam, 1, i)), null, ZL_LONG, ZL_FS, ZL_FS, 0, 0, 0);
        IL.SPRAY_CAN_FOAM_OWNED[i].set(addItem(1132 + 2 * i, "Advanced C-Foam Spray (" + DYE_NAMES[i] + ")", "Full (C-Foam only breakable by Owner once dry)", TC.stack(TC.TERRA, 2), TC.stack(TC.FABRICO, 2), TC.stack(TC.SPIRITUS, 2)));
        IL.SPRAY_CAN_FOAM_OWNED_USED[i].set(addItem(mLastID + 1, "Advanced C-Foam Spray (" + DYE_NAMES[i] + ")", "Used (C-Foam only breakable by Owner once dry)", TC.stack(TC.TERRA, 1), TC.stack(TC.FABRICO, 1), TC.stack(TC.SPIRITUS, 1), TD.Creative.HIDDEN));
        tBehaviour = new Behavior_Spray_Foam(IL.Spray_Empty.get(1), IL.SPRAY_CAN_FOAM_OWNED_USED[i].get(1), IL.SPRAY_CAN_FOAM_OWNED[i].get(1), 256, i, T);
        addItemBehavior(mLastID, tBehaviour);
        addItemBehavior(mLastID - 1, tBehaviour);
        RM.Canner.addRecipe1(T, 16, 256, IL.Spray_Empty.get(1), FL.mul(DYED_C_FOAMS_OWNED[i], 256), NF, IL.SPRAY_CAN_FOAM_OWNED[i].get(1));
        ItemsGT.addNEIRedirects(IL.SPRAY_CAN_FOAM_OWNED_USED[i].get(1), IL.SPRAY_CAN_FOAM_OWNED[i].get(1));
        RM.Other.addFakeRecipe(F, ST.array(IL.SPRAY_CAN_FOAM_OWNED[i].get(1), IL.SPRAY_CAN_FOAM_OWNED_USED[i].get(1)), ST.array(ST.make(BlocksGT.CFoamFresh, 1, i, "Player-Owned C-Foam"), ST.make(BlocksGT.CFoam, 1, i, "Player-Owned C-Foam")), null, ZL_LONG, ZL_FS, ZL_FS, 0, 0, 0);
    }
    IL.Spray_Color_Remover.set(addItem(1096, "Paint Removal Spray", "Full", TC.stack(TC.SENSUS, 2), TC.stack(TC.PERDITIO, 2)));
    IL.Spray_Color_Remover_Used.set(addItem(1097, "Paint Removal Spray", "Used", TC.stack(TC.SENSUS, 1), TC.stack(TC.PERDITIO, 1), TD.Creative.HIDDEN));
    tBehaviour = new Behavior_Spray_Color_Remover(IL.Spray_Empty.get(1), IL.Spray_Color_Remover_Used.get(1), IL.Spray_Color_Remover.get(1), 256);
    addItemBehavior(1096, tBehaviour);
    addItemBehavior(1097, tBehaviour);
    RM.Canner.addRecipe1(T, 16, 256, IL.Spray_Empty.get(1), MT.Cl.fluid(16 * U, T), NF, IL.Spray_Color_Remover.get(1));
    ItemsGT.addNEIRedirects(IL.Spray_Color_Remover_Used.get(1), IL.Spray_Color_Remover.get(1));
    IL.Spray_Foam_Remover.set(addItem(1196, "C-Foam Removal Spray", "Full", TC.stack(TC.TERRA, 2), TC.stack(TC.PERDITIO, 2)));
    IL.Spray_Foam_Remover_Used.set(addItem(1197, "C-Foam Removal Spray", "Used", TC.stack(TC.TERRA, 1), TC.stack(TC.PERDITIO, 1), TD.Creative.HIDDEN));
    tBehaviour = new Behavior_Spray_Foam_Remover(IL.Spray_Empty.get(1), IL.Spray_Foam_Remover_Used.get(1), IL.Spray_Foam_Remover.get(1), 256);
    addItemBehavior(1196, tBehaviour);
    addItemBehavior(1197, tBehaviour);
    RM.Canner.addRecipe1(T, 16, 256, IL.Spray_Empty.get(1), MT.H2SO4.fluid(16 * U, T), NF, IL.Spray_Foam_Remover.get(1));
    RM.Canner.addRecipe1(T, 16, 256, IL.Spray_Empty.get(1), MT.HNO3.fluid(16 * U, T), NF, IL.Spray_Foam_Remover.get(1));
    ItemsGT.addNEIRedirects(IL.Spray_Foam_Remover_Used.get(1), IL.Spray_Foam_Remover.get(1));
    IL.Spray_Foam_Hardener.set(addItem(1198, "Hardening Spray", "Full", TC.stack(TC.TERRA, 2), TC.stack(TC.TUTAMEN, 2)));
    IL.Spray_Foam_Hardener_Used.set(addItem(1199, "Hardening Spray", "Used", TC.stack(TC.TERRA, 1), TC.stack(TC.TUTAMEN, 1), TD.Creative.HIDDEN));
    tBehaviour = new Behavior_Spray_Foam_Hardener(IL.Spray_Empty.get(1), IL.Spray_Foam_Hardener_Used.get(1), IL.Spray_Foam_Hardener.get(1), 256);
    addItemBehavior(1198, tBehaviour);
    addItemBehavior(1199, tBehaviour);
    RM.Canner.addRecipe2(T, 16, 256, ST.make(Blocks.sand, 7, W), IL.Spray_Empty.get(1), IL.Spray_Foam_Hardener.get(1));
    for (OreDictMaterial tMat : ANY.SiO2.mToThis) for (ItemStack tDust : ST.array(OP.dust.mat(tMat, 63), OP.blockDust.mat(tMat, 7))) if (ST.valid(tDust))
        RM.Canner.addRecipe2(T, 16, 256, tDust, IL.Spray_Empty.get(1), IL.Spray_Foam_Hardener.get(1));
    ItemsGT.addNEIRedirects(IL.Spray_Foam_Hardener_Used.get(1), IL.Spray_Foam_Hardener.get(1));
    IL.Spray_Extinguisher.set(addItem(1998, "Fire Extinguisher (CO2)", "Full", TC.stack(TC.PERDITIO, 2), TC.stack(TC.IGNIS, 2)));
    IL.Spray_Extinguisher_Used.set(addItem(1999, "Fire Extinguisher (CO2)", "Used", TC.stack(TC.PERDITIO, 1), TC.stack(TC.IGNIS, 1), TD.Creative.HIDDEN));
    tBehaviour = new Behavior_Spray_Extinguisher(IL.Spray_Empty.get(1), IL.Spray_Extinguisher_Used.get(1), IL.Spray_Extinguisher.get(1), 256);
    addItemBehavior(1998, tBehaviour);
    addItemBehavior(1999, tBehaviour);
    RM.Canner.addRecipe1(T, 16, 256, IL.Spray_Empty.get(1), MT.CO2.fluid(16 * U, T), NF, IL.Spray_Extinguisher.get(1));
    ItemsGT.addNEIRedirects(IL.Spray_Extinguisher_Used.get(1), IL.Spray_Extinguisher.get(1));
    OreDictMaterial[] tBucketMaterials = new OreDictMaterial[] { ANY.Cu, MT.Sn, MT.Zn, MT.Pb, MT.Bi, MT.Brass, MT.Bronze, MT.BismuthBronze, MT.Au };
    for (int i = 0; i < 9; i++) {
        OreDictItemData tData = new OreDictItemData(ANY.Wood, U * 3, OM.stack(tBucketMaterials[i], U * 1));
        ItemStack tBucket = addItem(2000 + i * 100, "Wooden Bucket", "Empty", TC.stack(TC.ARBOR, 2), TC.stack(TC.VACUOS, 2), Behavior_Bucket_Simple.INSTANCE, tData);
        CR.shaped(tBucket, CR.DEF_NCC, "WPW", " Wh", 'P', OP.plate.dat(tBucketMaterials[i]), 'W', OD.plankAnyWood);
        ItemsGT.addNEIRedirects(tBucket, addItem(mLastID + 1, "Wooden Bucket", "Water", TC.stack(TC.ARBOR, 2), TC.stack(TC.AQUA, 2), new Behavior_Bucket_Simple(ST.make(Items.water_bucket, 1, 0)), tData.copy(), FL.Water.make(1000), FL.DistW.make(1000), FL.River_Water.make(1000), FL.Mineralwater.make(1000), FL.Mineralsoda.make(1000), FL.Soda.make(1000), FL.Water_Hot.make(1000), FL.Water_Boiling.make(1000), FL.Water_Geothermal.make(1000), OD.container1000water), addItem(mLastID + 1, "Wooden Bucket", "Milk (you cannot drink out of Buckets!)", TC.stack(TC.ARBOR, 2), TC.stack(TC.SANO, 2), new Behavior_Bucket_Simple(ST.make(Items.milk_bucket, 1, 0)), tData.copy(), FL.Milk.make(1000), FL.MilkGrC.make(1000), OD.container1000milk), addItem(mLastID + 1, "Wooden Bucket", "Latex", TC.stack(TC.ARBOR, 2), TC.stack(TC.LIMUS, 2), Behavior_Bucket_Simple.INSTANCE, tData.copy(), FL.Latex.make(1000), FL.make("molten.latex", 1000), OD.container1000latex), addItem(mLastID + 1, "Wooden Bucket", "Creosote Oil", TC.stack(TC.ARBOR, 2), TC.stack(TC.IGNIS, 2), new Behavior_Bucket_Simple(IL.RC_Creosote_Bucket.get(1)), tData.copy(), FL.Oil_Creosote.make(1000), OD.container1000creosote), addItem(mLastID + 1, "Wooden Bucket", "Sea Water (you cannot place this!)", TC.stack(TC.ARBOR, 2), TC.stack(TC.TEMPESTAS, 2), new Behavior_Switch_Metadata(2000 + i * 100, F, F), tData.copy(), FL.Ocean.make(1000), FL.OceanGrC.make(1000), FL.Tropics_Water.make(1000)), addItem(mLastID + 1, "Wooden Bucket", "Rubber Tree Sap", TC.stack(TC.ARBOR, 2), TC.stack(TC.LIMUS, 2), Behavior_Bucket_Simple.INSTANCE, tData.copy(), FL.Resin_Rubber.make(1000), OD.container1000rubbertreesap), addItem(mLastID + 1, "Wooden Bucket", "Spruce Tree Resin", TC.stack(TC.ARBOR, 3), TC.stack(TC.LIMUS, 1), Behavior_Bucket_Simple.INSTANCE, tData.copy(), FL.Resin_Spruce.make(1000), OD.container1000spruceresin), addItem(mLastID + 1, "Wooden Bucket", "Honey", TC.stack(TC.ARBOR, 3), TC.stack(TC.BESTIA, 1), new Behavior_Bucket_Simple(ST.make(MD.ERE, "bucketHoney", 1, 0, IL.FR_Honey_Bucket)), tData.copy(), FL.Honey.make(1000), FL.HoneyGrC.make(1000), FL.HoneyBoP.make(1000), OD.container1000honey), addItem(mLastID + 1, "Wooden Bucket", "Dirty Water (you cannot place this!)", TC.stack(TC.ARBOR, 2), TC.stack(TC.AQUA, 1), TC.stack(TC.VENENUM, 1), new Behavior_Switch_Metadata(2000 + i * 100, F, F), tData.copy(), FL.Dirty_Water.make(1000)), addItem(mLastID + 1, "Wooden Bucket", "Lubricant", TC.stack(TC.ARBOR, 2), TC.stack(TC.LIMUS, 2), Behavior_Bucket_Simple.INSTANCE, tData.copy(), FL.LubRoCant.make(1000), FL.Lubricant.make(1000), OD.container1000lubricant), addItem(mLastID + 1, "Wooden Bucket", "Milk (you cannot drink out of Buckets!)", TC.stack(TC.ARBOR, 2), TC.stack(TC.VENENUM, 2), Behavior_Bucket_Simple.INSTANCE, tData.copy(), FL.Milk_Spoiled.make(1000)), addItem(mLastID + 1, "Wooden Bucket", "Maple Sap", TC.stack(TC.ARBOR, 2), TC.stack(TC.FAMES, 2), Behavior_Bucket_Simple.INSTANCE, tData.copy(), FL.Sap_Maple.make(1000), OD.container1000maplesap), addItem(mLastID + 1, "Wooden Bucket", "Rainbow Sap", TC.stack(TC.ARBOR, 2), TC.stack(TC.AURAM, 2), Behavior_Bucket_Simple.INSTANCE, tData.copy(), FL.Sap_Rainbow.make(1000), OD.container1000rainbowsap), addItem(mLastID + 1, "Wooden Bucket", "Soy Milk", TC.stack(TC.ARBOR, 2), TC.stack(TC.HERBA, 2), Behavior_Bucket_Simple.INSTANCE, tData.copy(), FL.MilkSoy.make(1000), OD.container1000soymilk), addItem(mLastID + 1, "Wooden Bucket", "Glue", TC.stack(TC.ARBOR, 2), TC.stack(TC.LIMUS, 2), Behavior_Bucket_Simple.INSTANCE, tData.copy(), FL.Glue.make(1000), OD.container1000glue), addItem(mLastID + 1, "Wooden Bucket", "Spectral Dew", TC.stack(TC.ARBOR, 2), TC.stack(TC.SPIRITUS, 2), new Behavior_Bucket_Simple(IL.NeLi_Bucket_Spectral_Dew.get(1)), tData.copy(), FL.SpDew.make(1000), OD.container1000water), addItem(mLastID + 1, "Wooden Bucket", "Seed Oil", TC.stack(TC.ARBOR, 3), TC.stack(TC.GRANUM, 1), new Behavior_Bucket_Simple(IL.FR_SeedOil_Bucket.get(1)), tData.copy(), FL.Oil_Seed.make(1000), FL.Oil_Lin.make(1000), FL.Oil_Hemp.make(1000), FL.Oil_Olive.make(1000), FL.Oil_Sunflower.make(1000), FL.Oil_Nut.make(1000), OD.container1000seedoil));
    }
    IL.Wooden_Bucket_Copper.set(this, 2000);
    IL.Wooden_Bucket_Tin.set(this, 2100);
    IL.Wooden_Bucket_Zinc.set(this, 2200);
    IL.Wooden_Bucket_Lead.set(this, 2300);
    IL.Wooden_Bucket_Bismuth.set(this, 2400);
    IL.Wooden_Bucket_Brass.set(this, 2500);
    IL.Wooden_Bucket_Bronze.set(this, 2600);
    IL.Wooden_Bucket_BismuthBronze.set(this, 2700);
    IL.Wooden_Bucket_Gold.set(this, 2800);
    IL.Tool_Matches.set(addItem(5000, "Match", "", new Behavior_Lighter(9000), TC.stack(TC.IGNIS, 1), TC.stack(TC.VACUOS, 1), OD.craftingFirestarter));
    for (OreDictMaterial tWood : ANY.Wood.mToThis) {
        RM.Assembler.addRecipe2(T, 16, 16, OP.bolt.mat(tWood, 1), OP.dustSmall.mat(MT.P, 1), IL.Tool_Matches.get(1));
        RM.Assembler.addRecipe2(T, 16, 64, OP.bolt.mat(tWood, 4), OP.dust.mat(MT.P, 1), IL.Tool_Matches.get(4));
        for (OreDictMaterial tPhosphorus : ANY.Phosphorus.mToThis) {
            RM.Assembler.addRecipe2(T, 16, 16, OP.bolt.mat(tWood, 1), OP.dustSmall.mat(tPhosphorus, 1), IL.Tool_Matches.get(1));
            RM.Assembler.addRecipe2(T, 16, 64, OP.bolt.mat(tWood, 4), OP.dust.mat(tPhosphorus, 1), IL.Tool_Matches.get(4));
        }
    }
    CR.shaped(IL.Tool_Matches.get(1), CR.DEF, "P", "S", 'P', OP.dustSmall.dat(MT.P), 'S', OP.bolt.dat(ANY.Wood));
    CR.shaped(IL.Tool_Matches.get(1), CR.DEF, "P", "S", 'P', OP.dustSmall.dat(ANY.Phosphorus), 'S', OP.bolt.dat(ANY.Wood));
    CR.shaped(IL.Tool_Matches.get(4), CR.DEF, " S ", "SPS", " S ", 'P', OP.dust.dat(MT.P), 'S', OP.bolt.dat(ANY.Wood));
    CR.shaped(IL.Tool_Matches.get(4), CR.DEF, " S ", "SPS", " S ", 'P', OP.dust.dat(ANY.Phosphorus), 'S', OP.bolt.dat(ANY.Wood));
    IL.Tool_MatchBox_Used.set(addItem(5002, "Match Box", "This is not a Car", TC.stack(TC.IGNIS, 2), TC.stack(TC.POTENTIA, 1), OD.craftingFirestarter, TD.Creative.HIDDEN));
    IL.Tool_MatchBox_Full.set(addItem(5003, "Match Box (Full)", "This is not a Car", TC.stack(TC.IGNIS, 1), TC.stack(TC.POTENTIA, 2), OD.craftingFirestarter));
    tBehaviour = new Behavior_Lighter(null, IL.Tool_MatchBox_Used.get(1), IL.Tool_MatchBox_Full.get(1), 64, 9000);
    addItemBehavior(5002, tBehaviour);
    addItemBehavior(5003, tBehaviour);
    ItemsGT.addNEIRedirects(IL.Tool_Matches.get(1), IL.Tool_MatchBox_Used.get(1), IL.Tool_MatchBox_Full.get(1));
    RM.Boxinator.addRecipe2(T, 16, 64, IL.Tool_Matches.get(64), OP.plateDouble.mat(MT.Paper, 1), IL.Tool_MatchBox_Full.get(1));
    RM.Unboxinator.addRecipe1(T, 16, 32, IL.Tool_MatchBox_Full.get(1), IL.Tool_Matches.get(64), OP.scrapGt.mat(MT.Paper, 16));
    IL.Tool_Lighter_Invar_Empty.set(addItem(5004, "Lighter (Empty)", "Requires Canning Machine to be filled", new OreDictItemData(MT.Invar, OP.plateCurved.mAmount * 2), TC.stack(TC.IGNIS, 1), TC.stack(TC.VACUOS, 1)));
    IL.Tool_Lighter_Invar_Used.set(addItem(5005, "Lighter", "", new OreDictItemData(MT.Invar, OP.plateCurved.mAmount * 2), TC.stack(TC.IGNIS, 2), TC.stack(TC.POTENTIA, 1), OD.craftingFirestarter, TD.Creative.HIDDEN));
    IL.Tool_Lighter_Invar_Full.set(addItem(5006, "Lighter (Full)", "", new OreDictItemData(MT.Invar, OP.plateCurved.mAmount * 2), TC.stack(TC.IGNIS, 1), TC.stack(TC.POTENTIA, 2), OD.craftingFirestarter));
    tBehaviour = new Behavior_Lighter(IL.Tool_Lighter_Invar_Empty.get(1), IL.Tool_Lighter_Invar_Used.get(1), IL.Tool_Lighter_Invar_Full.get(1), 100, 10000);
    addItemBehavior(5005, tBehaviour);
    addItemBehavior(5006, tBehaviour);
    RM.Canner.addRecipe1(T, 16, 16, IL.Tool_Lighter_Invar_Empty.get(1), FL.Butane.make(100), NF, IL.Tool_Lighter_Invar_Full.get(1));
    ItemsGT.addNEIRedirects(IL.Tool_Lighter_Invar_Empty.get(1), IL.Tool_Lighter_Invar_Used.get(1), IL.Tool_Lighter_Invar_Full.get(1));
    IL.Tool_Lighter_Platinum_Empty.set(addItem(5007, "Shiny Lighter (Empty)", "Requires Canning Machine to be filled", new OreDictItemData(MT.Pt, OP.plateCurved.mAmount * 2), TC.stack(TC.IGNIS, 1), TC.stack(TC.NEBRISUM, 1), TC.stack(TC.VACUOS, 1)));
    IL.Tool_Lighter_Platinum_Used.set(addItem(5008, "Shiny Lighter", "A known Master of Pranks is engraved on it", new OreDictItemData(MT.Pt, OP.plateCurved.mAmount * 2), TC.stack(TC.IGNIS, 2), TC.stack(TC.NEBRISUM, 1), TC.stack(TC.POTENTIA, 1), OD.craftingFirestarter, TD.Creative.HIDDEN));
    IL.Tool_Lighter_Platinum_Full.set(addItem(5009, "Shiny Lighter (Full)", "A known Master of Pranks is engraved on it", new OreDictItemData(MT.Pt, OP.plateCurved.mAmount * 2), TC.stack(TC.IGNIS, 1), TC.stack(TC.NEBRISUM, 1), TC.stack(TC.POTENTIA, 2), OD.craftingFirestarter));
    tBehaviour = new Behavior_Lighter(IL.Tool_Lighter_Platinum_Empty.get(1), IL.Tool_Lighter_Platinum_Used.get(1), IL.Tool_Lighter_Platinum_Full.get(1), 1000, 10000);
    addItemBehavior(5008, tBehaviour);
    addItemBehavior(5009, tBehaviour);
    RM.Canner.addRecipe1(T, 16, 64, IL.Tool_Lighter_Platinum_Empty.get(1), FL.Butane.make(1000), NF, IL.Tool_Lighter_Platinum_Full.get(1));
    ItemsGT.addNEIRedirects(IL.Tool_Lighter_Platinum_Empty.get(1), IL.Tool_Lighter_Platinum_Used.get(1), IL.Tool_Lighter_Platinum_Full.get(1));
    IL.Tool_Lighter_Plastic_Empty.set(addItem(5010, "Plastic Lighter (Empty)", "Requires Canning Machine to be filled", new OreDictItemData(MT.Plastic, OP.plateCurved.mAmount * 2, ANY.Fe, OP.screw.mAmount), TC.stack(TC.IGNIS, 1), TC.stack(TC.VACUOS, 1)));
    IL.Tool_Lighter_Plastic_Used.set(addItem(5011, "Plastic Lighter", "", new OreDictItemData(MT.Plastic, OP.plateCurved.mAmount * 2, ANY.Fe, OP.screw.mAmount), TC.stack(TC.IGNIS, 2), TC.stack(TC.POTENTIA, 1), OD.craftingFirestarter, TD.Creative.HIDDEN));
    IL.Tool_Lighter_Plastic_Full.set(addItem(5012, "Plastic Lighter (Full)", "", new OreDictItemData(MT.Plastic, OP.plateCurved.mAmount * 2, ANY.Fe, OP.screw.mAmount), TC.stack(TC.IGNIS, 1), TC.stack(TC.POTENTIA, 2), OD.craftingFirestarter));
    IL.Tool_Lighter_Plastic_Broken.set(addItem(5013, "Plastic Lighter (Broken)", "", new OreDictItemData(MT.Plastic, OP.plateCurved.mAmount * 2, ANY.Fe, OP.screw.mAmount), TC.stack(TC.IGNIS, 1), TC.stack(TC.PERDITIO, 1), TD.Creative.HIDDEN));
    tBehaviour = new Behavior_Lighter(IL.Tool_Lighter_Plastic_Broken.get(1), IL.Tool_Lighter_Plastic_Used.get(1), IL.Tool_Lighter_Plastic_Full.get(1), 100, 9000);
    addItemBehavior(5011, tBehaviour);
    addItemBehavior(5012, tBehaviour);
    CR.shaped(IL.Tool_Lighter_Plastic_Empty.get(1), CR.DEF_NCC, "IF", "dP", "xP", 'F', OD.itemFlint, 'P', OP.plateCurved.dat(MT.Plastic), 'I', OP.screw.dat(ANY.Iron));
    RM.Canner.addRecipe1(T, 16, 16, IL.Tool_Lighter_Plastic_Empty.get(1), FL.Butane.make(100), NF, IL.Tool_Lighter_Plastic_Full.get(1));
    ItemsGT.addNEIRedirects(IL.Tool_Lighter_Plastic_Empty.get(1), IL.Tool_Lighter_Plastic_Used.get(1), IL.Tool_Lighter_Plastic_Full.get(1), IL.Tool_Lighter_Plastic_Broken.get(1));
    IL.Tool_Fire_Starter.set(addItem(5014, "Fire Starter", "(Made with Dry Grass)", new OreDictItemData(ANY.Wood, U), new Behavior_Lighter(5000), TC.stack(TC.IGNIS, 1), TC.stack(TC.ARBOR, 1), TC.stack(TC.HERBA, 1), OD.craftingFirestarter));
    CR.shaped(IL.Tool_Fire_Starter.get(1), CR.DEF_NCC_MIR, "S ", "GS", 'S', OP.stick.dat(ANY.Wood), 'G', OD.itemGrassDry);
    IL.Tool_Fire_Starter_Bark.set(addItem(5015, "Fire Starter", "(Made with Dry Tree Bark)", new OreDictItemData(ANY.Wood, U), new Behavior_Lighter(5500), TC.stack(TC.IGNIS, 1), TC.stack(TC.ARBOR, 2), OD.craftingFirestarter));
    CR.shaped(IL.Tool_Fire_Starter_Bark.get(1), CR.DEF_NCC_MIR, "S ", "GS", 'S', OP.stick.dat(ANY.Wood), 'G', OD.itemBarkDry);
    IL.Pellet_Wood.set(addItem(5999, "Wood Pellet", "", new OreDictItemData(ANY.Wood, U), TICKS_PER_SMELT, TC.stack(TC.POTENTIA, 1)));
    RM.Mixer.addRecipe1(T, 16, 16, OM.dust(MT.LiveRoot, U2), FL.Glue.make(125), NF, IL.Pellet_Wood.get(1));
    RM.Mixer.addRecipe1(T, 16, 32, OM.dust(MT.LiveRoot), FL.Glue.make(250), NF, IL.Pellet_Wood.get(2));
    RM.Mixer.addRecipe1(T, 16, 16, OM.dust(MT.Livingwood, U2), FL.Glue.make(125), NF, IL.Pellet_Wood.get(1));
    RM.Mixer.addRecipe1(T, 16, 32, OM.dust(MT.Livingwood), FL.Glue.make(250), NF, IL.Pellet_Wood.get(2));
    RM.Mixer.addRecipe1(T, 16, 16, OM.dust(MT.Greatwood, U2), FL.Glue.make(125), NF, IL.Pellet_Wood.get(1));
    RM.Mixer.addRecipe1(T, 16, 32, OM.dust(MT.Greatwood), FL.Glue.make(250), NF, IL.Pellet_Wood.get(2));
    RM.Mixer.addRecipe1(T, 16, 16, OM.dust(MT.Dreamwood, U4), FL.Glue.make(125), NF, IL.Pellet_Wood.get(1));
    RM.Mixer.addRecipe1(T, 16, 64, OM.dust(MT.Dreamwood), FL.Glue.make(500), NF, IL.Pellet_Wood.get(4));
    RM.Mixer.addRecipe1(T, 16, 16, OM.dust(MT.Shimmerwood, U4), FL.Glue.make(125), NF, IL.Pellet_Wood.get(1));
    RM.Mixer.addRecipe1(T, 16, 64, OM.dust(MT.Shimmerwood), FL.Glue.make(500), NF, IL.Pellet_Wood.get(4));
    RM.Mixer.addRecipe1(T, 16, 16, OM.dust(MT.Silverwood, U4), FL.Glue.make(125), NF, IL.Pellet_Wood.get(1));
    RM.Mixer.addRecipe1(T, 16, 64, OM.dust(MT.Silverwood), FL.Glue.make(500), NF, IL.Pellet_Wood.get(4));
    for (OreDictMaterial tWood : ANY.Wood.mToThis) RM.Mixer.addRecipe1(T, 16, 16, OM.dust(tWood), FL.Glue.make(125), NF, IL.Pellet_Wood.get(1));
    RM.Mixer.addRecipe1(T, 16, 16, OM.dust(MT.Bark), FL.Glue.make(125), NF, IL.Pellet_Wood.get(1));
    RM.Compressor.addRecipe1(T, 16, 16, IL.Pellet_Wood.get(2), ST.make(BlocksGT.Planks, 1, 8));
    RM.CokeOven.addRecipe1(T, 0, 900, IL.Pellet_Wood.get(1), NF, FL.Oil_Creosote.make(25), chunkGt.mat(MT.Charcoal, 1));
    IL.Module_Stone_Generator.set(addItem(6000, "Stone Generator Module", "Generates Stone for Recipes, also known as a Cobble Generator", TC.stack(TC.MACHINA, 1), TC.stack(TC.FABRICO, 1), TC.stack(TC.IGNIS, 1), TC.stack(TC.TERRA, 1), TC.stack(TC.AQUA, 1)));
    IL.Module_Basalt_Generator.set(addItem(6001, "Basalt Generator Module", "Generates Basalt for Recipes", TC.stack(TC.MACHINA, 1), TC.stack(TC.FABRICO, 1), TC.stack(TC.IGNIS, 1), TC.stack(TC.TERRA, 1), TC.stack(TC.AQUA, 1)));
    IL.Module_Blackstone_Generator.set(addItem(6002, "Blackstone Generator Module", "Generates Blackstone for Recipes", TC.stack(TC.MACHINA, 1), TC.stack(TC.FABRICO, 1), TC.stack(TC.IGNIS, 1), TC.stack(TC.TERRA, 1), TC.stack(TC.AQUA, 1)));
    CR.shaped(IL.Module_Stone_Generator.get(1), CR.DEF_REV_NCC, "CPC", "LMW", "COC", 'M', OP.casingMachine.dat(MT.SteelGalvanized), 'O', IL.Shape_Extruder_Block, 'C', OD_CIRCUITS[4], 'P', OD.craftingPiston, 'L', OD.container1000lava, 'W', OD.container1000water);
    CR.shaped(IL.Module_Basalt_Generator.get(1), CR.DEF_REV_NCC, "S", "M", "I", 'M', IL.Module_Stone_Generator, 'S', OD.soulsand, 'I', Blocks.packed_ice);
    CR.shaped(IL.Module_Blackstone_Generator.get(1), CR.DEF_REV_NCC, "S", "M", "O", 'M', IL.Module_Stone_Generator, 'S', OD.soulsand, 'O', OD.obsidian);
    IL.Paper_Printed_Pages.set(addItem(7002, "Printed Pages", "", Behavior_PrintedPages.INSTANCE, new OreDictItemData(MT.Paper, U * 3), TC.stack(TC.COGNITIO, 3)));
    IL.Paper_Printed_Pages_Many.set(addItem(7003, "Many Printed Pages", "", Behavior_PrintedPages.INSTANCE, new OreDictItemData(MT.Paper, U * 6), TC.stack(TC.COGNITIO, 6)));
    BooksGT.BOOK_REGISTER.put(IL.Paper_Printed_Pages, (byte) 26);
    BooksGT.BOOK_REGISTER.put(IL.Paper_Printed_Pages_Many, (byte) 26);
    IL.Paper_Blueprint_Empty.set(addItem(7010, "Empty Blueprint", "Place in Blueprint Slot and Shiftclick it, to assign Recipe", new OreDictItemData(MT.Paper, U), TC.stack(TC.COGNITIO, 1)));
    IL.Paper_Blueprint_Used.set(addItem(7011, "Blueprint", "Blueprint containing a Crafting Recipe", new OreDictItemData(MT.Paper, U), TC.stack(TC.COGNITIO, 2), "gt:autocrafterblueprintitem"));
    for (FluidStack tDye : DYE_FLUIDS[DYE_INDEX_Blue]) RM.Bath.addRecipe1(T, 0, 16, ST.make(Items.paper, 1, W), tDye, NF, IL.Paper_Blueprint_Empty.get(1));
    BooksGT.BOOK_REGISTER.put(IL.Paper_Blueprint_Empty, (byte) 25);
    BooksGT.BOOK_REGISTER.put(IL.Paper_Blueprint_Used, (byte) 28);
    ItemsGT.addNEIRedirects(IL.Paper_Blueprint_Empty.get(1), IL.Paper_Blueprint_Used.get(1));
    for (int i = 0; i < 16; i++) addItem(i + 7030, DYE_NAMES[i] + " Canvas", "Can be used together with the Obscurator", "gt:canvas", new CoverTextureCanvas(BlockTextureDefault.get("machines/covers/canvas", DYES[i])), new OreDictItemData(MT.Paper, U), TC.stack(TC.PANNUS, 1));
    for (FluidStack tDye : DYE_FLUIDS[DYE_INDEX_White]) RM.Bath.addRecipe1(T, 0, 16, ST.make(Items.paper, 1, W), tDye, NF, make(7030 + DYE_INDEX_White));
    for (int i = 0; i < 16; i++) if (i != DYE_INDEX_White)
        for (FluidStack tDye : DYE_FLUIDS[i]) RM.Bath.addRecipe1(T, 0, 16, make(7030 + DYE_INDEX_White), tDye, NF, make(7030 + i));
    for (int i = 0; i < 16; i++) BooksGT.BOOK_REGISTER.put(this, 7030 + i, (byte) 27);
    IL.Paper_Magic_Research_0.set(addItem(7990, "Magic Research Paper (Introduction)", "", new OreDictItemData(MT.Paper, U), TC.TERRA.get(8), TC.AQUA.get(8), TC.AER.get(8), TC.IGNIS.get(8), TC.PERDITIO.get(8), TC.ORDO.get(8)));
    IL.Paper_Magic_Research_1.set(addItem(7991, "Magic Research Paper (Page 1 / 8)", "", new OreDictItemData(MT.Paper, U), TC.LUX.get(8), TC.MOTUS.get(8), TC.VACUOS.get(8), TC.POTENTIA.get(8), TC.VITREUS.get(8), TC.VICTUS.get(8)));
    IL.Paper_Magic_Research_2.set(addItem(7992, "Magic Research Paper (Page 2 / 8)", "", new OreDictItemData(MT.Paper, U), TC.VOLATUS.get(8), TC.ITER.get(8), TC.MORTUUS.get(8), TC.BESTIA.get(8), TC.TENEBRAE.get(8), TC.PRAECANTIO.get(8)));
    IL.Paper_Magic_Research_3.set(addItem(7993, "Magic Research Paper (Page 3 / 8)", "", new OreDictItemData(MT.Paper, U), TC.ALIENIS.get(8), TC.EXAMINIS.get(8), TC.SPIRITUS.get(8), TC.VITIUM.get(8), TC.METALLUM.get(8), TC.GELUM.get(8)));
    IL.Paper_Magic_Research_4.set(addItem(7994, "Magic Research Paper (Page 4 / 8)", "", new OreDictItemData(MT.Paper, U), TC.COGNITIO.get(8), TC.SENSUS.get(8), TC.HERBA.get(8), TC.SANO.get(8), TC.LIMUS.get(8), TC.TEMPESTAS.get(8)));
    IL.Paper_Magic_Research_5.set(addItem(7995, "Magic Research Paper (Page 5 / 8)", "", new OreDictItemData(MT.Paper, U), TC.HUMANUS.get(8), TC.VINCULUM.get(8), TC.ARBOR.get(8), TC.FAMES.get(8), TC.CORPUS.get(8), TC.AURAM.get(8)));
    IL.Paper_Magic_Research_6.set(addItem(7996, "Magic Research Paper (Page 6 / 8)", "", new OreDictItemData(MT.Paper, U), TC.PERFODIO.get(8), TC.INSTRUMENTUM.get(8), TC.MESSIS.get(8), TC.LUCRUM.get(8), TC.VENENUM.get(8), TC.PERMUTATIO.get(8)));
    IL.Paper_Magic_Research_7.set(addItem(7997, "Magic Research Paper (Page 7 / 8)", "", new OreDictItemData(MT.Paper, U), TC.TELUM.get(8), TC.TUTAMEN.get(8), TC.PANNUS.get(8), TC.FABRICO.get(8), TC.METO.get(8), TC.MACHINA.get(8)));
    IL.Paper_Magic_Research_8.set(addItem(7998, "Magic Research Paper (Page 8 / 8)", "", new OreDictItemData(MT.Paper, U), TC.ELECTRUM.get(8), TC.RADIO.get(8), TC.MAGNETO.get(8), TC.NEBRISUM.get(8), TC.STRONTIO.get(8), TC.REFLEXIO.get(8)));
    for (int i = 0; i < IL.MAGIC_RESEARCH_PAPERS.length; i++) {
        BooksGT.BOOK_REGISTER.put(IL.MAGIC_RESEARCH_PAPERS[i], (byte) 18);
        if (IL.TC_Knowledge_Fragment.exists()) {
            RM.generify(IL.MAGIC_RESEARCH_PAPERS[i].get(1), IL.TC_Knowledge_Fragment.get(Math.max(1, i)));
            CR.shapeless(IL.TC_Knowledge_Fragment.get(Math.max(1, i)), CR.DEF, new Object[] { IL.MAGIC_RESEARCH_PAPERS[i] });
        }
    }
    IL.Robot_Tip_Wrench.set(addItem(8000, "Robot Arm Wrench Tip", "Infinitely usable inside an Autocrafter", OreDictToolNames.wrench, "gt:autocrafterinfinite", TC.stack(TC.INSTRUMENTUM, 4)));
    IL.Robot_Tip_Screwdriver.set(addItem(8001, "Robot Arm Screwdriver Tip", "Infinitely usable inside an Autocrafter", OreDictToolNames.screwdriver, "gt:autocrafterinfinite", TC.stack(TC.INSTRUMENTUM, 4)));
    IL.Robot_Tip_Saw.set(addItem(8002, "Robot Arm Saw Tip", "Infinitely usable inside an Autocrafter", OreDictToolNames.saw, "gt:autocrafterinfinite", TC.stack(TC.INSTRUMENTUM, 4)));
    IL.Robot_Tip_Hammer.set(addItem(8003, "Robot Arm Hammer Tip", "Infinitely usable inside an Autocrafter", OreDictToolNames.hammer, OreDictToolNames.hac_mortar, "gt:autocrafterinfinite", TC.stack(TC.INSTRUMENTUM, 4)));
    IL.Robot_Tip_Cutter.set(addItem(8004, "Robot Arm Cutter Tip", "Infinitely usable inside an Autocrafter", OreDictToolNames.wirecutter, OreDictToolNames.scissors, "gt:autocrafterinfinite", TC.stack(TC.INSTRUMENTUM, 4)));
    IL.Robot_Tip_Chisel.set(addItem(8005, "Robot Arm Chisel Tip", "Infinitely usable inside an Autocrafter", OreDictToolNames.chisel, "gt:autocrafterinfinite", TC.stack(TC.INSTRUMENTUM, 4)));
    IL.Robot_Tip_Rubber.set(addItem(8006, "Robot Arm Rubber Hammer Tip", "Infinitely usable inside an Autocrafter", OreDictToolNames.softhammer, "gt:autocrafterinfinite", TC.stack(TC.INSTRUMENTUM, 4)));
    IL.Robot_Tip_Blade.set(addItem(8007, "Robot Arm Blade Tip", "Infinitely usable inside an Autocrafter", OreDictToolNames.sword, OreDictToolNames.blade, OreDictToolNames.hac_cuttingboard, "gt:autocrafterinfinite", TC.stack(TC.INSTRUMENTUM, 4)));
    IL.Robot_Tip_Drill.set(addItem(8008, "Robot Arm Drill Tip", "Infinitely usable inside an Autocrafter", OreDictToolNames.drill, OreDictToolNames.handdrill, "gt:autocrafterinfinite", TC.stack(TC.INSTRUMENTUM, 4)));
    IL.Robot_Tip_File.set(addItem(8009, "Robot Arm File Tip", "Infinitely usable inside an Autocrafter", OreDictToolNames.file, "gt:autocrafterinfinite", TC.stack(TC.INSTRUMENTUM, 4)));
    CR.shaped(IL.Robot_Tip_Wrench.get(1), CR.DEF_REV, "wPh", "CMC", " X ", 'P', OP.plateCurved.dat(MT.SteelGalvanized), 'C', OD_CIRCUITS[3], 'M', IL.MOTORS[3], 'X', OP.toolHeadWrench.dat(MT.Cr));
    CR.shaped(IL.Robot_Tip_Screwdriver.get(1), CR.DEF_REV, "wPh", "CMC", " X ", 'P', OP.plateCurved.dat(MT.SteelGalvanized), 'C', OD_CIRCUITS[3], 'M', IL.MOTORS[3], 'X', OP.toolHeadScrewdriver.dat(MT.StainlessSteel));
    CR.shaped(IL.Robot_Tip_Saw.get(1), CR.DEF_REV, "wPh", "CMC", "DXd", 'P', OP.plateCurved.dat(MT.SteelGalvanized), 'C', OD_CIRCUITS[3], 'M', IL.MOTORS[3], 'X', OP.toolHeadBuzzSaw.dat(MT.CobaltBrass), 'D', OP.dust.dat(ANY.Diamond));
    CR.shaped(IL.Robot_Tip_Hammer.get(1), CR.DEF_REV, "wPh", "CMC", " X ", 'P', OP.plateCurved.dat(MT.SteelGalvanized), 'C', OD_CIRCUITS[3], 'M', IL.PISTONS[3], 'X', OP.toolHeadHammer.dat(MT.TungstenCarbide));
    CR.shaped(IL.Robot_Tip_Cutter.get(1), CR.DEF_REV, "wPh", "CMC", "XfX", 'P', OP.plateCurved.dat(MT.SteelGalvanized), 'C', OD_CIRCUITS[3], 'M', IL.MOTORS[3], 'X', OP.plate.dat(MT.StainlessSteel));
    CR.shaped(IL.Robot_Tip_Chisel.get(1), CR.DEF_REV, "wPh", "CMC", " X ", 'P', OP.plateCurved.dat(MT.SteelGalvanized), 'C', OD_CIRCUITS[3], 'M', IL.PISTONS[3], 'X', OP.toolHeadChisel.dat(MT.TungstenSteel));
    CR.shaped(IL.Robot_Tip_Rubber.get(1), CR.DEF_REV, "wPh", "CMC", " X ", 'P', OP.plateCurved.dat(MT.SteelGalvanized), 'C', OD_CIRCUITS[3], 'M', IL.PISTONS[3], 'X', OP.toolHeadHammer.dat(MT.Rubber));
    CR.shaped(IL.Robot_Tip_Blade.get(1), CR.DEF_REV, "wPh", "CMC", " X ", 'P', OP.plateCurved.dat(MT.SteelGalvanized), 'C', OD_CIRCUITS[3], 'M', IL.PISTONS[3], 'X', OP.toolHeadSword.dat(MT.Bronze));
    CR.shaped(IL.Robot_Tip_Drill.get(1), CR.DEF_REV, "wPh", "CMC", "fX ", 'P', OP.plateCurved.dat(MT.SteelGalvanized), 'C', OD_CIRCUITS[3], 'M', IL.MOTORS[3], 'X', OP.stick.dat(ANY.Steel));
    CR.shaped(IL.Robot_Tip_File.get(1), CR.DEF_REV, "wPh", "CMC", " X ", 'P', OP.plateCurved.dat(MT.SteelGalvanized), 'C', OD_CIRCUITS[3], 'M', IL.CONVEYERS[3], 'X', OP.dust.dat(ANY.Diamond));
    IL.Tool_Remote_Activator.set(addItem(9000, "Remote Activator", "", Behavior_Remote.INSTANCE, TC.stack(TC.MOTUS, 1), TC.stack(TC.PERMUTATIO, 1)));
    IL.Tool_Cheat.set(addItem(9001, "Debug Scanner", "", Behavior_Cropnalyzer.INSTANCE, ItemsGT.DEBUG_ITEMS, ItemsGT.ILLEGAL_DROPS, GarbageGT.BLACKLIST, new Behavior_Scanner(Integer.MAX_VALUE), EnergyStatDebug.INSTANCE, TC.stack(TC.SENSUS, 10), TC.stack(TC.INSTRUMENTUM, 10)));
    IL.Tool_Scanner.set(addItem(9002, "Portable Scanner", "", Behavior_Cropnalyzer.INSTANCE, new Behavior_Scanner(2), EnergyStat.makeTool(TD.Energy.EU, V[3] * 8000, V[3], 64, next()), TC.stack(TC.SENSUS, 10), TC.stack(TC.INSTRUMENTUM, 10)));
    IL.Tool_Cropnalyzer.set(addItem(9003, "Portable Cropnalyzer", "", Behavior_Cropnalyzer.INSTANCE, EnergyStat.makeTool(TD.Energy.EU, V[2] * 8000, V[2], 64, next()), TC.stack(TC.SENSUS, 5), TC.stack(TC.INSTRUMENTUM, 5), TC.stack(TC.HERBA, 5)));
    IL.Tool_Worldgen_Debugger.set(addItem(9999, "Worldgen Debug Wand", "", Behavior_Worldgen_Debugger.INSTANCE, ItemsGT.DEBUG_ITEMS, ItemsGT.ILLEGAL_DROPS, GarbageGT.BLACKLIST, TC.stack(TC.TERRA, 10), TC.stack(TC.PRAECANTIO, 10), TC.stack(TC.INSTRUMENTUM, 10)));
    CR.shaped(IL.Tool_Remote_Activator.get(1), CR.DEF_REV, "TPE", "BCd", "xPT", 'P', OP.plate.dat(MT.Cr), 'T', OP.screw.dat(MT.Cr), 'C', OD_CIRCUITS[4], 'E', IL.EMITTERS[4], 'B', OD.button);
    BooksGT.BOOK_REGISTER.put(IL.Tool_Remote_Activator, (byte) 1);
    // Moved to the Battery Section of the MTE Loader.
    // CR.shaped(IL.Tool_Scanner               .get(1), CR.DEF_REV, "EXR", "CPU", "BXB", 'B', IL.Battery_Alkaline_HV, 'X', OP.plate.dat(MT.Cr), 'U', OD_USB_STICKS[3], 'C', OD_USB_CABLES[3], 'E', IL.EMITTERS[4], 'R', IL.SENSORS[4], 'P', IL.Processor_Crystal_Sapphire);
    // CR.shaped(IL.Tool_Cropnalyzer           .get(1), CR.DEF_REV, "EXR", "CPU", "BXB", 'B', IL.Battery_Alkaline_MV, 'X', OP.plate.dat(MT.Al), 'U', OD_USB_STICKS[1], 'C', OD_USB_CABLES[1], 'E', IL.EMITTERS[2], 'R', IL.SENSORS[2], 'P', OD_CIRCUITS[6]);
    IL.Thermometer_Quicksilver.set(addItem(10000, "Quicksilver Thermometer", "", new Behavior_Tool(TOOL_thermometer), TC.stack(TC.VENENUM, 1), TC.stack(TC.VITREUS, 1)));
    IL.Geiger_Counter_Empty.set(addItem(10001, "Geiger Counter (Empty)", "Fill with proper inert Gas", TC.stack(TC.SENSUS, 1), TC.stack(TC.RADIO, 1)));
    IL.Geiger_Counter.set(addItem(10002, "Geiger Counter", "", new Behavior_Tool(TOOL_geigercounter), TC.stack(TC.SENSUS, 5), TC.stack(TC.RADIO, 5)));
    RM.Canner.addRecipe1(T, 16, 64, IL.Geiger_Counter_Empty.get(1), FL.Helium.make(1000), NF, IL.Geiger_Counter.get(1));
    RM.Canner.addRecipe1(T, 16, 64, IL.Geiger_Counter_Empty.get(1), FL.Neon.make(1000), NF, IL.Geiger_Counter.get(1));
    RM.Canner.addRecipe1(T, 16, 64, IL.Geiger_Counter_Empty.get(1), FL.Argon.make(1000), NF, IL.Geiger_Counter.get(1));
    CR.shaped(IL.Thermometer_Quicksilver.get(1), CR.DEF_REV, " GD", "GQG", "PG ", 'P', OP.plate.dat(ANY.Cu), 'G', OP.plate.dat(MT.Glass), 'D', DYE_OREDICTS[DYE_INDEX_Red], 'Q', OD.itemQuicksilver);
    CR.shaped(IL.Geiger_Counter_Empty.get(1), CR.DEF_REV, "TUT", "PCP", "TdT", 'U', OP.capcellcon.dat(MT.Al), 'P', OP.plate.dat(MT.Al), 'T', OP.screw.dat(MT.Al), 'C', OD_CIRCUITS[1]);
    OM.data(IL.Geiger_Counter.get(1), OM.data(IL.Geiger_Counter_Empty.get(1)));
    IL.Compass_North.set(addItem(11000, "Compass (NORTH)", "Points to Zed Negative", OD.itemCompass, new Behavior_Switch_Metadata(11001, T, T), OM.data(ST.make(Items.compass, 1, 0)), TC.stack(TC.METALLUM, 2), TC.stack(TC.MAGNETO, 2)));
    CR.shapeless(ST.make(Items.compass, 1, 0), CR.DEF, new Object[] { last() });
    IL.Compass_Face.set(addItem(11001, "Compass (FACE)", "Points into the direction you look", OD.itemCompass, new Behavior_Switch_Metadata(11002, T, T), OM.data(ST.make(Items.compass, 1, 0)), TD.Creative.HIDDEN, TC.stack(TC.METALLUM, 2), TC.stack(TC.MAGNETO, 1), TC.stack(TC.COGNITIO, 1)));
    CR.shapeless(ST.make(Items.compass, 1, 0), CR.DEF, new Object[] { last() });
    IL.Compass_Spawn.set(addItem(11002, "Compass (SPAWN)", "Points to the World Spawn like a normal Compass", OD.itemCompass, new Behavior_Switch_Metadata(11003, T, T), OM.data(ST.make(Items.compass, 1, 0)), TD.Creative.HIDDEN, TC.stack(TC.METALLUM, 2), TC.stack(TC.MAGNETO, 1), TC.stack(TC.HUMANUS, 1)));
    CR.shapeless(ST.make(Items.compass, 1, 0), CR.DEF, new Object[] { last() });
    IL.Compass_Center.set(addItem(11003, "Compass (CENTER)", "Points towards the middle of the World", OD.itemCompass, new Behavior_Switch_Metadata(11004, T, T), OM.data(ST.make(Items.compass, 1, 0)), TD.Creative.HIDDEN, TC.stack(TC.METALLUM, 2), TC.stack(TC.MAGNETO, 1), TC.stack(TC.TERRA, 1)));
    CR.shapeless(ST.make(Items.compass, 1, 0), CR.DEF, new Object[] { last() });
    IL.Compass_Death.set(addItem(11004, "Compass (DEATH)", "Points to your last Death, if you did not Rage Quit", OD.itemCompass, new Behavior_Switch_Metadata(11000, T, T), OM.data(ST.make(Items.compass, 1, 0)), TD.Creative.HIDDEN, TC.stack(TC.METALLUM, 2), TC.stack(TC.MAGNETO, 1), TC.stack(TC.MORTUUS, 1)));
    CR.shapeless(ST.make(Items.compass, 1, 0), CR.DEF, new Object[] { last() });
    ItemsGT.addNEIRedirects(IL.Compass_North.get(1), IL.Compass_Face.get(1), IL.Compass_Spawn.get(1), IL.Compass_Center.get(1), IL.Compass_Death.get(1));
    CR.shapeless(IL.Compass_North.get(1), CR.DEF, new Object[] { Items.compass });
    IL.Tape.set(addItem(12000, "Tape", "Full Roll", TC.stack(TC.PANNUS, 1), TC.stack(TC.LIMUS, 1)));
    IL.Tape_Used.set(addItem(12001, "Tape", "Used Roll", TC.stack(TC.PANNUS, 1), TC.stack(TC.LIMUS, 1)));
    CR.shaped(IL.Tape.get(1), CR.DEF, "PPP", " G ", 'P', OD.paperEmpty, 'G', OD.itemGlue);
    CR.shapeless(IL.Tape.get(1), CR.DEF, new Object[] { IL.Tape_Used, IL.Tape_Used, IL.Tape_Used, IL.Tape_Used });
    tBehaviour = new Behavior_Duct_Tape(null, IL.Tape_Used.get(1), IL.Tape.get(1), 0, 10000);
    ItemsGT.addNEIRedirects(IL.Tape.get(1), IL.Tape_Used.get(1));
    BooksGT.BOOK_REGISTER.put(IL.Tape, (byte) 57);
    BooksGT.BOOK_REGISTER.put(IL.Tape_Used, (byte) 57);
    addItemBehavior(12000, tBehaviour);
    addItemBehavior(12001, tBehaviour);
    IL.Duct_Tape.set(addItem(12002, "Duct Tape", "Full Roll", TC.stack(TC.FABRICO, 1), TC.stack(TC.LIMUS, 1), OD.craftingDuctTape));
    IL.Duct_Tape_Used.set(addItem(12003, "Duct Tape", "Used Roll", TC.stack(TC.FABRICO, 1), TC.stack(TC.LIMUS, 1)));
    CR.shaped(IL.Duct_Tape.get(1), CR.DEF, "PPP", " G ", 'P', OP.foil.dat(MT.Plastic), 'G', OD.itemGlue);
    CR.shapeless(IL.Duct_Tape.get(1), CR.DEF, new Object[] { IL.Duct_Tape_Used, IL.Duct_Tape_Used, IL.Duct_Tape_Used, IL.Duct_Tape_Used });
    tBehaviour = new Behavior_Duct_Tape(null, IL.Duct_Tape_Used.get(1), IL.Duct_Tape.get(1), 1, 100000);
    ItemsGT.addNEIRedirects(IL.Duct_Tape.get(1), IL.Duct_Tape_Used.get(1));
    BooksGT.BOOK_REGISTER.put(IL.Duct_Tape, (byte) 58);
    BooksGT.BOOK_REGISTER.put(IL.Duct_Tape_Used, (byte) 58);
    addItemBehavior(12002, tBehaviour);
    addItemBehavior(12003, tBehaviour);
    IL.Brain_Tape.set(addItem(12008, "BrainTech Aerospace Advanced Reinforced Duct Tape FAL-84", "Full Roll", TC.stack(TC.TUTAMEN, 1), TC.stack(TC.LIMUS, 1), OD.craftingDuctTape));
    IL.Brain_Tape_Used.set(addItem(12009, "BrainTech Aerospace Advanced Reinforced Duct Tape FAL-84", "Used Roll", TC.stack(TC.TUTAMEN, 1), TC.stack(TC.LIMUS, 1), OD.craftingDuctTape));
    CR.shaped(IL.Brain_Tape.get(1), CR.DEF, "PPP", " G ", 'P', OP.foil.dat(ANY.W), 'G', OD.itemGlue);
    CR.shapeless(IL.Brain_Tape.get(1), CR.DEF, new Object[] { IL.Brain_Tape_Used, IL.Brain_Tape_Used, IL.Brain_Tape_Used, IL.Brain_Tape_Used });
    tBehaviour = new Behavior_Duct_Tape(null, IL.Brain_Tape_Used.get(1), IL.Brain_Tape.get(1), 2, 10000000);
    ItemsGT.addNEIRedirects(IL.Brain_Tape.get(1), IL.Brain_Tape_Used.get(1));
    BooksGT.BOOK_REGISTER.put(IL.Brain_Tape, (byte) 59);
    BooksGT.BOOK_REGISTER.put(IL.Brain_Tape_Used, (byte) 59);
    addItemBehavior(12008, tBehaviour);
    addItemBehavior(12009, tBehaviour);
    IL.Key_Iron.set(addItem(30000, "Iron Key", "", OD.itemKey, new OreDictItemData(ANY.Iron, U4), Behavior_Key.INSTANCE, TC.stack(TC.MACHINA, 1)));
    CR.shaped(IL.Key_Iron.get(3), CR.DEF_NCC, "fPx", 'P', OP.plate.dat(ANY.Iron));
    IL.Key_Gold.set(addItem(30001, "Gold Key", "", OD.itemKey, new OreDictItemData(MT.Au, U4), Behavior_Key.INSTANCE, TC.stack(TC.MACHINA, 1)));
    CR.shaped(IL.Key_Gold.get(3), CR.DEF_NCC, "fPx", 'P', OP.plate.dat(MT.Au));
    IL.Key_Copper.set(addItem(30002, "Copper Key", "", OD.itemKey, new OreDictItemData(ANY.Cu, U4), Behavior_Key.INSTANCE, TC.stack(TC.MACHINA, 1)));
    CR.shaped(IL.Key_Copper.get(3), CR.DEF_NCC, "fPx", 'P', OP.plate.dat(ANY.Cu));
    IL.Key_Tin.set(addItem(30003, "Tin Key", "", OD.itemKey, new OreDictItemData(MT.Sn, U4), Behavior_Key.INSTANCE, TC.stack(TC.MACHINA, 1)));
    CR.shaped(IL.Key_Tin.get(3), CR.DEF_NCC, "fPx", 'P', OP.plate.dat(MT.Sn));
    IL.Key_Bronze.set(addItem(30004, "Bronze Key", "", OD.itemKey, new OreDictItemData(MT.Bronze, U4), Behavior_Key.INSTANCE, TC.stack(TC.MACHINA, 1)));
    CR.shaped(IL.Key_Bronze.get(3), CR.DEF_NCC, "fPx", 'P', OP.plate.dat(MT.Bronze));
    IL.Key_Brass.set(addItem(30005, "Brass Key", "", OD.itemKey, new OreDictItemData(MT.Brass, U4), Behavior_Key.INSTANCE, TC.stack(TC.MACHINA, 1)));
    CR.shaped(IL.Key_Brass.get(3), CR.DEF_NCC, "fPx", 'P', OP.plate.dat(MT.Brass));
    IL.Key_Silver.set(addItem(30006, "Silver Key", "", OD.itemKey, new OreDictItemData(MT.Ag, U4), Behavior_Key.INSTANCE, TC.stack(TC.MACHINA, 1)));
    CR.shaped(IL.Key_Silver.get(3), CR.DEF_NCC, "fPx", 'P', OP.plate.dat(MT.Ag));
    IL.Key_Platinum.set(addItem(30007, "Platinum Key", "", OD.itemKey, new OreDictItemData(MT.Pt, U4), Behavior_Key.INSTANCE, TC.stack(TC.MACHINA, 1)));
    CR.shaped(IL.Key_Platinum.get(3), CR.DEF_NCC, "fPx", 'P', OP.plate.dat(MT.Pt));
    IL.Key_Lead.set(addItem(30008, "Lead Key", "", OD.itemKey, new OreDictItemData(MT.Pb, U4), Behavior_Key.INSTANCE, TC.stack(TC.MACHINA, 1)));
    CR.shaped(IL.Key_Lead.get(3), CR.DEF_NCC, "fPx", 'P', OP.plate.dat(MT.Pb));
    IL.Key_Plastic.set(addItem(30009, "Plastic Key", "", OD.itemKey, new OreDictItemData(MT.Plastic, U4), Behavior_Key.INSTANCE, TC.stack(TC.MACHINA, 1)));
    CR.shaped(IL.Key_Plastic.get(3), CR.DEF_NCC, "fPx", 'P', OP.plate.dat(MT.Plastic));
    // In order to be able to hide Keys inside Bookshelves
    for (IItemContainer tContainer : IL.KEYS) BooksGT.BOOK_REGISTER.put(tContainer, (byte) 1);
}
Also used : OreDictMaterial(gregapi.oredict.OreDictMaterial) Behavior_Bucket_Simple(gregapi.item.multiitem.behaviors.Behavior_Bucket_Simple) OreDictItemData(gregapi.oredict.OreDictItemData) FluidStack(net.minecraftforge.fluids.FluidStack) IItemContainer(gregapi.code.IItemContainer) CoverTextureCanvas(gregapi.cover.covers.CoverTextureCanvas) MultiItem(gregapi.item.multiitem.MultiItem) Behavior_Tool(gregapi.item.multiitem.behaviors.Behavior_Tool) ItemStack(net.minecraft.item.ItemStack) Behavior_Switch_Metadata(gregapi.item.multiitem.behaviors.Behavior_Switch_Metadata)

Aggregations

IItemContainer (gregapi.code.IItemContainer)4 ItemStack (net.minecraft.item.ItemStack)4 OreDictItemData (gregapi.oredict.OreDictItemData)3 ArrayListNoNulls (gregapi.code.ArrayListNoNulls)2 MultiItem (gregapi.item.multiitem.MultiItem)2 IBehavior (gregapi.item.multiitem.behaviors.IBehavior)2 OreDictMaterial (gregapi.oredict.OreDictMaterial)2 Block (net.minecraft.block.Block)2 FluidStack (net.minecraftforge.fluids.FluidStack)2 MultiTileEntityRegistry (gregapi.block.multitileentity.MultiTileEntityRegistry)1 ItemStackSet (gregapi.code.ItemStackSet)1 TagData (gregapi.code.TagData)1 ICover (gregapi.cover.ICover)1 CoverTextureCanvas (gregapi.cover.covers.CoverTextureCanvas)1 TC_AspectStack (gregapi.data.TC.TC_AspectStack)1 IItemEnergy (gregapi.item.IItemEnergy)1 MultiItemRandom (gregapi.item.multiitem.MultiItemRandom)1 Behavior_Bucket_Simple (gregapi.item.multiitem.behaviors.Behavior_Bucket_Simple)1 Behavior_Switch_Metadata (gregapi.item.multiitem.behaviors.Behavior_Switch_Metadata)1 Behavior_Tool (gregapi.item.multiitem.behaviors.Behavior_Tool)1